Map<String, Tile> tilesInRange = tileset.getTilesFromViewportScale(bnds, scaleFactor);
// look up the preference for caching tiles on-disk or in
// memory and use the proper tilerange for that.
TileRange range = null;
String value = CatalogPlugin.getDefault().getPreferenceStore()
.getString(PreferenceConstants.P_WMSCTILE_CACHING);
if (value.equals(WMSCTileCaching.ONDISK.toString())) {
range = new TileRangeOnDisk(server, tileset, bnds, tilesInRange,
requestTileWorkQueue, writeTileWorkQueue);
} else {
range = new TileRangeInMemory(server, tileset, bnds, tilesInRange,
requestTileWorkQueue);
}
// create an empty raster symbolizer for rendering
RasterSymbolizer style = styleBuilder.createRasterSymbolizer();
// setup how much each tile is worth for the monitor work %
int tileCount = range.getTileCount();
int tileWorth = (tileCount / 100) * tileCount;
int thisid = 0;
if (testing) {
staticid++;
thisid = staticid;
}
// first render any tiles that are ready and render non-ready tiles with blank images
Map<String, Tile> tiles = range.getTiles();
Set<String> notRenderedTiles = new HashSet<String>();
Set<String> renderedTiles = new HashSet<String>();
for( String key : tiles.keySet() ) {
if (monitor.isCanceled()) {
setState(CANCELLED);
if (testing) {
System.out.println("monitor CANCELED!!!: " + thisid); //$NON-NLS-1$
}
return;
}
Tile tile = tiles.get(key);
if (tile != null && tile.getBufferedImage() != null
&& tile.getTileState() != WMSTile.INERROR) {
renderTile(graphics, tile, tileset.getCoordinateReferenceSystem(), style);
renderedTiles.add(key);
monitor.worked(tileWorth); // inc the monitor work by 1 tile
} else {
// set the tile blank (removing any previous content) and add it
// to be drawn later
renderBlankTile(graphics, tile, tileset.getCoordinateReferenceSystem());
notRenderedTiles.add(key);
}
}
setState(RENDERING);
// if the tilerange is not already completed, then load
// the missing tiles
if (!notRenderedTiles.isEmpty()) {
if (monitor.isCanceled()) {
setState(CANCELLED);
if (testing) {
System.out.println("monitor CANCELED!!!: " + thisid); //$NON-NLS-1$
}
return;
}
// set the listener on the tile range
range.addListener(listener);
// load the missing tiles by sending requests for them
range.loadTiles(monitor);
// block until all the missing tiles have come through (and draw them
// as they are added to the blocking queue
while( !notRenderedTiles.isEmpty() ) {
// check that the rendering is not canceled