package com.revolsys.swing.map.overlay;
import java.awt.image.BufferedImage;
import com.revolsys.geometry.model.BoundingBox;
import com.revolsys.logging.Logs;
import com.revolsys.raster.GeoreferencedImage;
import com.revolsys.swing.map.ImageViewport;
import com.revolsys.swing.map.layer.Layer;
import com.revolsys.swing.map.layer.LayerRenderer;
import com.revolsys.swing.map.layer.Project;
import com.revolsys.swing.parallel.AbstractSwingWorker;
import com.revolsys.util.Cancellable;
public class LayerRendererOverlaySwingWorker extends AbstractSwingWorker<Void, Void>
implements Cancellable {
private final LayerRendererOverlay overlay;
private final GeoreferencedImage referencedImage;
public LayerRendererOverlaySwingWorker(final LayerRendererOverlay layerRendererOverlay,
final GeoreferencedImage image) {
this.overlay = layerRendererOverlay;
this.referencedImage = image;
}
public GeoreferencedImage getReferencedImage() {
return this.referencedImage;
}
@Override
protected Void handleBackground() {
try {
final Layer layer = this.overlay.getLayer();
if (layer != null) {
final Project project = this.overlay.getProject();
final int imageWidth = this.referencedImage.getImageWidth();
final int imageHeight = this.referencedImage.getImageHeight();
if (imageWidth > 0 && imageHeight > 0 && project != null) {
final BoundingBox boundingBox = this.referencedImage.getBoundingBox();
try (
final ImageViewport viewport = new ImageViewport(project, imageWidth, imageHeight,
boundingBox)) {
if (layer != null && layer.isExists() && layer.isVisible()) {
final LayerRenderer<Layer> renderer = layer.getRenderer();
if (renderer != null) {
renderer.render(viewport, this);
}
}
if (!isCancelled()) {
final BufferedImage image = viewport.getImage();
this.referencedImage.setRenderedImage(image);
}
}
}
}
return null;
} catch (final Throwable t) {
if (!isCancelled()) {
Logs.error(this, "Unable to paint", t);
}
return null;
}
}
@Override
protected void handleDone(final Void result) {
this.overlay.setImage(this);
}
@Override
public String toString() {
return "Render layers";
}
}