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 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); } } }