]> git.argeo.org Git - lgpl/argeo-commons.git/blobdiff - gis/plugins/org.argeo.gis.ui/src/main/java/org/argeo/gis/ui/views/FeatureSourcesView.java
Improve JCR and GIS
[lgpl/argeo-commons.git] / gis / plugins / org.argeo.gis.ui / src / main / java / org / argeo / gis / ui / views / FeatureSourcesView.java
diff --git a/gis/plugins/org.argeo.gis.ui/src/main/java/org/argeo/gis/ui/views/FeatureSourcesView.java b/gis/plugins/org.argeo.gis.ui/src/main/java/org/argeo/gis/ui/views/FeatureSourcesView.java
new file mode 100644 (file)
index 0000000..76ea5dd
--- /dev/null
@@ -0,0 +1,99 @@
+package org.argeo.gis.ui.views;
+
+import javax.jcr.Node;
+import javax.jcr.RepositoryException;
+import javax.jcr.Session;
+
+import org.argeo.ArgeoException;
+import org.argeo.eclipse.ui.jcr.SimpleNodeContentProvider;
+import org.argeo.geotools.jcr.GeoJcrMapper;
+import org.argeo.gis.ui.editors.DefaultMapEditor;
+import org.argeo.jcr.gis.GisTypes;
+import org.eclipse.jface.viewers.DoubleClickEvent;
+import org.eclipse.jface.viewers.IDoubleClickListener;
+import org.eclipse.jface.viewers.IStructuredSelection;
+import org.eclipse.jface.viewers.LabelProvider;
+import org.eclipse.jface.viewers.TreeViewer;
+import org.eclipse.swt.SWT;
+import org.eclipse.swt.widgets.Composite;
+import org.eclipse.ui.IEditorPart;
+import org.eclipse.ui.part.ViewPart;
+import org.geotools.data.FeatureSource;
+import org.opengis.feature.simple.SimpleFeature;
+import org.opengis.feature.simple.SimpleFeatureType;
+
+public class FeatureSourcesView extends ViewPart implements
+               IDoubleClickListener {
+       public final static String ID = "org.argeo.gis.ui.featureSourcesView";
+
+       private String dataStoresBasePath = "/gis/dataStores";
+
+       private Session session;
+
+       private TreeViewer viewer;
+
+       private GeoJcrMapper geoJcrMapper;
+
+       @Override
+       public void createPartControl(Composite parent) {
+               viewer = new TreeViewer(parent, SWT.MULTI | SWT.H_SCROLL | SWT.V_SCROLL);
+               String[] basePaths = { dataStoresBasePath };
+               viewer.setContentProvider(new SimpleNodeContentProvider(session,
+                               basePaths));
+               viewer.setLabelProvider(new MapsLabelProvider());
+               viewer.setInput(getViewSite());
+               viewer.addDoubleClickListener(this);
+       }
+
+       public void doubleClick(DoubleClickEvent event) {
+               if (!event.getSelection().isEmpty()) {
+                       Object obj = ((IStructuredSelection) event.getSelection())
+                                       .getFirstElement();
+                       if (obj instanceof Node) {
+                               Node node = (Node) obj;
+                               try {
+                                       if (!node.getPrimaryNodeType().isNodeType(
+                                                       GisTypes.GIS_FEATURE_SOURCE))
+                                               return;
+                               } catch (RepositoryException e) {
+                                       throw new ArgeoException("Cannot check type of " + node, e);
+                               }
+                               FeatureSource<SimpleFeatureType, SimpleFeature> featureSource = geoJcrMapper
+                                               .getFeatureSource(node);
+                               IEditorPart ed = getSite().getWorkbenchWindow().getActivePage()
+                                               .getActiveEditor();
+                               if (ed instanceof DefaultMapEditor) {
+                                       ((DefaultMapEditor) ed).addLayer(featureSource);
+                               }
+                       }
+
+               }
+
+       }
+
+       public void setGeoJcrMapper(GeoJcrMapper geoJcrMapper) {
+               this.geoJcrMapper = geoJcrMapper;
+       }
+
+       @Override
+       public void setFocus() {
+               viewer.getTree().setFocus();
+       }
+
+       public void refresh() {
+               viewer.refresh();
+       }
+
+       public void setSession(Session session) {
+               this.session = session;
+       }
+
+       private class MapsLabelProvider extends LabelProvider {
+
+               @Override
+               public String getText(Object element) {
+                       return super.getText(element);
+               }
+
+       }
+}