package com.revolsys.swing.map.layer.ogc.wms;
import com.revolsys.geometry.model.BoundingBox;
import com.revolsys.gis.wms.capabilities.WmsLayerDefinition;
import com.revolsys.logging.Logs;
import com.revolsys.raster.GeoreferencedImage;
import com.revolsys.swing.parallel.AbstractSwingWorker;
import com.revolsys.util.Cancellable;
public class OgcWmsImageLayerSwingWorker extends AbstractSwingWorker<GeoreferencedImage, Void> {
private final OgcWmsImageLayerRenderer renderer;
private GeoreferencedImage image;
private final BoundingBox boundingBox;
private final int imageWidth;
private final int imageHeight;
private final Cancellable cancellable;
public OgcWmsImageLayerSwingWorker(final OgcWmsImageLayerRenderer renderer,
final Cancellable cancellable, final BoundingBox boundingBox, final int imageWidth,
final int imageHeight) {
this.renderer = renderer;
this.cancellable = cancellable;
this.boundingBox = boundingBox;
this.imageWidth = imageWidth;
this.imageHeight = imageHeight;
}
public boolean equalsBoundingBox(final BoundingBox boundingBox) {
return this.boundingBox.equals(boundingBox);
}
public BoundingBox getBoundingBox() {
return this.boundingBox;
}
public GeoreferencedImage getReferencedImage() {
return this.image;
}
@Override
protected GeoreferencedImage handleBackground() {
try {
final OgcWmsImageLayer layer = this.renderer.getLayer();
if (layer != null) {
final WmsLayerDefinition wmsLayerDefinition = layer.getWmsLayerDefinition();
if (wmsLayerDefinition != null) {
if (!this.cancellable.isCancelled()) {
return wmsLayerDefinition.getMapImage(this.boundingBox, this.imageWidth,
this.imageHeight);
}
}
}
} catch (final Throwable t) {
if (!isCancelled() && !this.cancellable.isCancelled()) {
Logs.error(this, "Unable to paint", t);
}
}
return null;
}
@Override
protected void handleCancelled() {
this.renderer.setImage(this, null);
}
@Override
protected void handleDone(final GeoreferencedImage image) {
if (!this.cancellable.isCancelled()) {
this.renderer.setImage(this, image);
}
}
@Override
public String toString() {
return "OGC WMS GetMap";
}
}