package com.revolsys.swing.map.layer.record;
import java.util.List;
import com.revolsys.geometry.model.BoundingBox;
import com.revolsys.io.PathName;
import com.revolsys.record.query.Query;
import com.revolsys.swing.map.layer.AbstractLayer;
import com.revolsys.swing.parallel.AbstractSwingWorker;
public class LoadingWorker extends AbstractSwingWorker<List<LayerRecord>, Void> {
private final RecordStoreLayer layer;
private final BoundingBox viewportBoundingBox;
public LoadingWorker(final RecordStoreLayer layer, final BoundingBox viewportBoundingBox) {
this.layer = layer;
this.viewportBoundingBox = viewportBoundingBox;
}
public AbstractLayer getLayer() {
return this.layer;
}
public BoundingBox getViewportBoundingBox() {
return this.viewportBoundingBox;
}
@Override
protected List<LayerRecord> handleBackground() {
try {
final Query query = this.layer.newBoundingBoxQuery(this.viewportBoundingBox);
// TODO cancellable
final List<LayerRecord> records = this.layer.getRecords(query);
this.layer.setIndexRecords(this.viewportBoundingBox, records);
return records;
} catch (final Exception e) {
if (this.layer.isDeleted()) {
return null;
} else {
throw e;
}
}
}
@Override
protected void handleCancelled() {
this.layer.cancelLoading(this.viewportBoundingBox);
}
@Override
protected void handleDone(final List<LayerRecord> records) {
}
@Override
protected void handleException(final Throwable exception) {
super.handleException(exception);
this.layer.cancelLoading(this.viewportBoundingBox);
}
@Override
public String toString() {
final PathName typePath = this.layer.getPathName();
return "Load " + typePath;
}
}