01: package com.vividsolutions.jump.workbench.ui.plugin.datastore;
02:
03: import com.vividsolutions.jump.I18N;
04: import com.vividsolutions.jump.datastore.AdhocQuery;
05: import com.vividsolutions.jump.feature.FeatureDataset;
06: import com.vividsolutions.jump.io.FeatureInputStream;
07: import com.vividsolutions.jump.task.TaskMonitor;
08: import com.vividsolutions.jump.util.LangUtil;
09: import com.vividsolutions.jump.workbench.datastore.ConnectionManager;
10: import com.vividsolutions.jump.workbench.model.Layer;
11: import com.vividsolutions.jump.workbench.model.Layerable;
12: import com.vividsolutions.jump.workbench.plugin.PlugInContext;
13:
14: public class RunDatastoreQueryPlugIn extends
15: AbstractAddDatastoreLayerPlugIn {
16:
17: protected ConnectionPanel createPanel(PlugInContext context) {
18: return new RunDatastoreQueryPanel(context.getWorkbenchContext());
19: }
20:
21: protected Layerable createLayerable(ConnectionPanel panel,
22: TaskMonitor monitor, PlugInContext context)
23: throws Exception {
24: return createLayer((RunDatastoreQueryPanel) panel, monitor,
25: context);
26: }
27:
28: public String getName() {
29: return I18N
30: .get("jump.workbench.ui.plugin.datastore.RunDatastoreQueryPlugIn.Run-Datastore-Query");
31: }
32:
33: private Layer createLayer(final RunDatastoreQueryPanel panel,
34: TaskMonitor monitor, final PlugInContext context)
35: throws Exception {
36:
37: panel.saveQuery();
38:
39: monitor.allowCancellationRequests();
40: monitor
41: .report(I18N
42: .get("jump.workbench.ui.plugin.datastore.AddDatastoreLayerPlugIn.Creating-layer"));
43:
44: int maxFeatures = ((Integer) LangUtil.ifNull(panel
45: .getMaxFeatures(), new Integer(Integer.MAX_VALUE)))
46: .intValue();
47: FeatureInputStream featureInputStream = ConnectionManager
48: .instance(context.getWorkbenchContext())
49: .getOpenConnection(panel.getConnectionDescriptor())
50: .execute(new AdhocQuery(panel.getQuery()));
51: try {
52: FeatureDataset featureDataset = new FeatureDataset(
53: featureInputStream.getFeatureSchema());
54: int i = 0;
55: while (featureInputStream.hasNext()
56: && featureDataset.size() < maxFeatures
57: && !monitor.isCancelRequested()) {
58: featureDataset.add(featureInputStream.next());
59: monitor
60: .report(
61: ++i,
62: -1,
63: I18N
64: .get("jump.workbench.ui.plugin.datastore.RunDatastoreQueryPlugIn.features"));
65: }
66: return new Layer(panel.getQuery(), context
67: .getLayerManager().generateLayerFillColor(),
68: featureDataset, context.getLayerManager());
69: } finally {
70: featureInputStream.close();
71: }
72: }
73: }
|