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
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