Revision 6345

View differences:

org.gvsig.raster/branches/org.gvsig.raster.2.4/org.gvsig.raster/org.gvsig.raster.gdal/org.gvsig.raster.gdal.provider/src/main/java/org/gvsig/raster/gdal/provider/AbstractRasterGdalStoreProvider.java
101 101
    protected Dataset gdalDataSet;
102 102
    protected Driver gdalDriver;
103 103

  
104
    private List<PageManager> pageManagers;
105

  
106
    private int[] bandDataTypes;
107

  
108
    private NoData[] bandNoDatas;
109

  
104 110
    /**
105 111
     * Dataset from gdal containing the raster data
106 112
     * @return Dataset
......
203 209

  
204 210
    @Override
205 211
    public Buffer createBuffer(RasterQuery rasterQuery) throws BufferException {
206
        int bandCount=gdalDataSet.getRasterCount();
212

  
207 213
        BufferManager bufferManager=BufferLocator.getBufferManager();
208
        int[] bandDataTypes=new int[bandCount];
209
        NoData[] bandNoData=new NoData[bandCount];
210
        List<PageManager> pageManagers=new ArrayList<PageManager>();
211

  
212
        for (int i=0;i<bandCount;i++){
213
            //Gdal bands begin count in 1
214
            int gdalBandNumber=i+1;
215
            org.gdal.gdal.Band gdalBand=gdalDataSet.GetRasterBand(gdalBandNumber);
216

  
217
            bandDataTypes[i]=getRasterBufTypeFromGdalType(gdalBand.getDataType());
218
            Double noData=getNoData(gdalBand);
219
            if (noData!=null){
220
                bandNoData[i]=bufferManager.createNoData(noData, noData);
221
            }else{
222
                bandNoData[i]=null;
223
            }
224
            //Paginated
225
            pageManagers.add(new RasterGdalBandPageManager(gdalDataSet, gdalBandNumber));
226
            //Tiled
227
//            pageManagers.add(new RasterGdalBandTileManager(gdalDataSet, gdalBandNumber, 256, 256));
228
        }
229

  
230 214
        Buffer buffer =
231 215
            bufferManager.createBuffer(gdalDataSet.getRasterYSize(), gdalDataSet.getRasterXSize(),
232
                bandDataTypes, bandNoData, projection, envelope, pageManagers);
216
                bandDataTypes, this.bandNoDatas, this.projection, envelope, this.pageManagers);
233 217

  
234 218
        return buffer;
235 219
    }
......
267 251
            return;
268 252
        }
269 253
        openEver();
270
    }
254
        //Create the page managers
255
        BufferManager bufferManager=BufferLocator.getBufferManager();
271 256

  
272
    protected void openEver() throws OpenException {
273
        //This method must be overwritten by subclasses than can open a raster
274
        throw new UnsupportedOperationException("This provider can't open the raster");
257
        int bandCount=gdalDataSet.getRasterCount();
258
        bandDataTypes = new int[bandCount];
259
        bandNoDatas = new NoData[bandCount];
260

  
261
        pageManagers = new ArrayList<PageManager>();
262

  
263
        for (int i=0;i<bandCount;i++){
264
            //Gdal bands begin count in 1
265
            int gdalBandNumber=i+1;
266
            org.gdal.gdal.Band gdalBand=gdalDataSet.GetRasterBand(gdalBandNumber);
267

  
268
            bandDataTypes[i]=getRasterBufTypeFromGdalType(gdalBand.getDataType());
269
            Double noData=getNoData(gdalBand);
270
            if (noData!=null){
271
                bandNoDatas[i]=bufferManager.createNoData(noData, noData);
272
            }else{
273
                bandNoDatas[i]=null;
274
            }
275
            //Paginated
276
            pageManagers.add(new RasterGdalBandPageManager(gdalDataSet, gdalBandNumber));
277
            //Tiled
278
//            pageManagers.add(new RasterGdalBandTileManager(gdalDataSet, gdalBandNumber, 256, 256));
279
        }
280

  
281

  
275 282
    }
276 283

  
284
    protected abstract void openEver() throws OpenException;
285

  
277 286
    protected Envelope createEnvelope(double[] geotransform){
278 287

  
279 288
        double leftMostX        = geotransform[0];/* top left x */
......
311 320

  
312 321
    @Override
313 322
    public void close() throws CloseException {
323
        this.gdalDataSet.delete();
314 324
        this.gdalDataSet = null;
315 325
    }
316 326

  
......
349 359
     */
350 360
    protected void doDispose() throws BaseException {
351 361
        super.doDispose();
362
        if(gdalDataSet!=null){
363
            gdalDataSet.delete();
364
            gdalDataSet=null;
365
        }
352 366
        resource.removeConsumer(this);
353 367
    }
354 368

  

Also available in: Unified diff