Revision 8842 org.gvsig.raster/branches/org.gvsig.raster.2.4/org.gvsig.wmts/org.gvsig.wmts.provider/src/main/java/org/gvsig/wmts/provider/WMTSImage.java

View differences:

WMTSImage.java
34 34
import org.gvsig.raster.lib.buffer.api.exceptions.BandException;
35 35
import org.gvsig.raster.lib.buffer.api.exceptions.BufferException;
36 36
import org.gvsig.raster.wmts.ogc.WMTSStatus;
37
import org.gvsig.raster.wmts.ogc.struct.WMTSServiceProvider;
38 37
import org.gvsig.raster.wmts.ogc.struct.WMTSTileMatrix;
39 38
import org.gvsig.tools.ToolsLocator;
40 39
import org.gvsig.tools.dispose.Disposable;
......
71 70
     */
72 71
    public WMTSImage(TileStruct tileStruct, Map<Integer, WMTSTileMatrix> tileMatrixPerZoomLevel, WMTSRasterProvider provider) {
73 72
        this.tileStruct = tileStruct;
73
        DisposeUtils.bind((Disposable) this.tileStruct);
74 74
        this.provider = provider;
75 75
        this.projection = provider.getProjection();
76 76
        this.tile = null;
......
100 100
        if (this.tile != null && this.tile.getKey().equalsIgnoreCase(keyTile)) {
101 101

  
102 102
            // Devolver la banda del buffer del tile
103
            logger.info("Devolviendo la banda " + bandNumber + " del buffer del tile " + tile.getKey());
103
//            logger.info("Devolviendo la banda " + bandNumber + " del buffer del tile " + tile.getKey());
104 104
            buffer = tile.getBuffer();
105 105
            Band band = buffer.getBand(bandNumber);
106
            ToolsLocator.getDisposableManager().bind(band);
107 106
            return band;
108 107
        } else {
108
            if(this.tile != null) {
109
                DisposeUtils.dispose(this.tile);
110
            }
109 111
            this.tile = null;
110 112
            // Cargar un tile nuevo
111 113
            Band band = null;
......
117 119
                buffer = tile.getBuffer();
118 120

  
119 121
                band = buffer.getBand(bandNumber);
120
                ToolsLocator.getDisposableManager().bind(band);
121 122
                return band;
122 123
            } catch (DataException | BufferException | CreateGeometryException | BandException e) {
123 124
                logger.warn("Can't fetch tile: zoomLevel = " + zoomLevel + ", tileRow = " + structRow
......
163 164
            }
164 165
        }
165 166

  
166
        Buffer affectedBuffer =
167
            bufferManager.createBuffer((lastAffectedRow-firstAffectedRow+1) * tileMatrix.getTileHeight(), (lastAffectedColumn-firstAffectedColumn+1)
168
                * tileMatrix.getTileWidth(), bandDataTypes, null, this.projection, affectedEnvelope);
169 167

  
168
        Buffer affectedBuffer = null;
170 169
        try {
171 170

  
171
            affectedBuffer =
172
                bufferManager.createBuffer((lastAffectedRow - firstAffectedRow + 1) * tileMatrix.getTileHeight(),
173
                    (lastAffectedColumn - firstAffectedColumn + 1) * tileMatrix.getTileWidth(), bandDataTypes, null,
174
                    this.projection, affectedEnvelope);
172 175
            int targetTileRow = 0;
173 176
            int sourceRow = 0;
174
              for (int row=firstAffectedRow; row<=lastAffectedRow; row++) {
177
            for (int row = firstAffectedRow; row <= lastAffectedRow; row++) {
175 178
                int targetTileColumn = 0;
176 179
                int sourceColumn = 0;
177 180
                sourceRow = targetTileRow * tileMatrix.getTileHeight();
178
                  for (int column=firstAffectedColumn; column<=lastAffectedColumn; column++) {
181
                for (int column = firstAffectedColumn; column <= lastAffectedColumn; column++) {
179 182
                    sourceColumn = targetTileColumn * tileMatrix.getTileWidth();
180 183

  
181 184
                    String keyTile = composeKeyForRecentTiles(tileMatrixIdentifier, zoomLevel, row, column);
......
204 207
                        }
205 208
                        DownloadedTile downloadedTile = new DownloadedTile(sourceTileBuffer, keyTile);
206 209
                        recentAccededWMTSTiles.put(keyTile, downloadedTile);
210
                        DisposeUtils.dispose(sourceTileBuffer);
207 211

  
208 212
                    } else {
209 213
                        sourceTileBuffer = tile.getBuffer();
......
220 224
                }
221 225
                targetTileRow++;
222 226
            }
227
            Buffer clipped = null;
228
            try {
229
                clipped = affectedBuffer.clip(envelope);
223 230

  
224
            DownloadedTile downloadedTile = new DownloadedTile(affectedBuffer.clip(envelope), key);
225
            return downloadedTile;
231
                DownloadedTile downloadedTile = new DownloadedTile(clipped, key);
232
                return downloadedTile;
233
            } finally {
234
                DisposeUtils.disposeQuietly(clipped);
235
            }
226 236
        } finally {
227
            DisposeUtils.dispose(affectedBuffer);
237
            DisposeUtils.disposeQuietly(affectedBuffer);
228 238
        }
229 239

  
230 240
    }
......
338 348
        String key;
339 349

  
340 350
        public DownloadedTile(org.gvsig.raster.lib.buffer.api.Buffer buffer, String key) {
341
            logger
342
                .info("CONSTRUCTOR hashCode = " + this.hashCode() + " className = " + this.getClass().getSimpleName());
351
//            logger
352
//                .info("CONSTRUCTOR hashCode = " + this.hashCode() + " className = " + this.getClass().getSimpleName());
343 353
            ToolsLocator.getDisposableManager().bind(buffer);
344 354
            this.buffer = buffer;
345 355
            this.key = key;
......
362 372
        @Override
363 373
        protected void finalize() throws Throwable {
364 374
            super.finalize();
365
            logger.info("CLEANED key " + this.key + " hashCode = " + this.hashCode());
375
//            logger.info("CLEANED key " + this.key + " hashCode = " + this.hashCode());
366 376
        }
367 377

  
368 378
        @Override
......
379 389
        }
380 390
        DisposeUtils.dispose((Disposable) tileStruct);
381 391
        tileStruct = null;
392
        for (Iterator<DownloadedTile> iterator = recentAccededWMTSTiles.values().iterator(); iterator.hasNext();) {
393
            DownloadedTile tile = (DownloadedTile) iterator.next();
394
            DisposeUtils.dispose(tile);
395
            iterator.remove();
396
        }
397
        recentAccededWMTSTiles = null;
382 398
    }
383 399

  
384 400
    protected void removeOlderTile() {

Also available in: Unified diff