package com.revolsys.swing.map.layer.arcgisrest; import java.awt.image.BufferedImage; import com.revolsys.record.io.format.esri.rest.map.MapService; import com.revolsys.swing.map.layer.MapTile; public class ArcGisRestServerTileCacheMapTile extends MapTile { private final ArcGisRestServerTileCacheLayer layer; private final MapService mapService; private final int tileX; private final int tileY; private final int zoomLevel; public ArcGisRestServerTileCacheMapTile(final ArcGisRestServerTileCacheLayer layer, final MapService mapService, final int zoomLevel, final double resolution, final int tileX, final int tileY) { super(mapService.getBoundingBox(zoomLevel, tileX, tileY), mapService.getTileInfo().getCols(), mapService.getTileInfo().getRows(), resolution); this.layer = layer; this.mapService = mapService; this.zoomLevel = zoomLevel; this.tileX = tileX; this.tileY = tileY; } @Override public boolean equals(final Object obj) { if (obj instanceof ArcGisRestServerTileCacheMapTile) { final ArcGisRestServerTileCacheMapTile tile = (ArcGisRestServerTileCacheMapTile)obj; if (tile.getMapService() == getMapService()) { if (tile.getZoomLevel() == getZoomLevel()) { if (tile.getTileX() == getTileX()) { if (tile.getTileY() == getTileY()) { return true; } } } } } return false; } public MapService getMapService() { return this.mapService; } public int getTileX() { return this.tileX; } public int getTileY() { return this.tileY; } public int getZoomLevel() { return this.zoomLevel; } @Override public int hashCode() { return this.zoomLevel << 24 & this.tileX << 16 & this.tileY << 8; } @Override protected BufferedImage loadBuffferedImage() { try { return this.mapService.getTileImage(this.zoomLevel, this.tileX, this.tileY); } catch (final Throwable t) { this.layer.setError(t); return null; } } @Override public String toString() { return this.mapService.getMapName() + " " + this.zoomLevel + "/" + this.tileX + "/" + this.tileY; } }