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.JcrImages; import org.argeo.eclipse.ui.jcr.SimpleNodeContentProvider; import org.argeo.gis.ui.editors.DefaultMapEditor; import org.argeo.gis.ui.editors.MapFormPage; import org.argeo.jcr.gis.GisTypes; import org.eclipse.jface.viewers.ColumnLabelProvider; import org.eclipse.jface.viewers.DoubleClickEvent; import org.eclipse.jface.viewers.IDoubleClickListener; import org.eclipse.jface.viewers.IStructuredSelection; import org.eclipse.jface.viewers.TreeViewer; import org.eclipse.swt.SWT; import org.eclipse.swt.graphics.Image; import org.eclipse.swt.widgets.Composite; import org.eclipse.ui.IEditorPart; import org.eclipse.ui.forms.editor.FormEditor; import org.eclipse.ui.forms.editor.IFormPage; import org.eclipse.ui.part.ViewPart; public class FeatureSourcesView extends ViewPart implements IDoubleClickListener { private String dataStoresBasePath = "/gis/dataStores"; private Session session; private TreeViewer viewer; @Override public void createPartControl(Composite parent) { viewer = new TreeViewer(parent, SWT.MULTI | SWT.H_SCROLL | SWT.V_SCROLL); String[] basePaths = { dataStoresBasePath }; SimpleNodeContentProvider sncp = new SimpleNodeContentProvider(session, basePaths); sncp.setMkdirs(true); viewer.setContentProvider(sncp); 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.isNodeType(GisTypes.GIS_FEATURE_SOURCE)) return; } catch (RepositoryException e) { throw new ArgeoException("Cannot check type of " + node, e); } IEditorPart ed = getSite().getWorkbenchWindow().getActivePage() .getActiveEditor(); if (ed instanceof DefaultMapEditor) { ((DefaultMapEditor) ed).getMapViewer().addLayer(node, null); } else if (ed instanceof FormEditor) { IFormPage activePage = ((FormEditor) ed) .getActivePageInstance(); if (activePage instanceof MapFormPage) { ((MapFormPage) activePage).getMapViewer().addLayer( node, null); } } } } } @Override public void setFocus() { viewer.getTree().setFocus(); } public void refresh() { viewer.refresh(); } public void setSession(Session session) { this.session = session; } private class MapsLabelProvider extends ColumnLabelProvider { @Override public String getText(Object element) { try { if (element instanceof Node) { Node node = (Node) element; return node.getName(); } } catch (RepositoryException e) { throw new ArgeoException("Cannot get text", e); } return super.getText(element); } @Override public Image getImage(Object element) { try { if (element instanceof Node) { Node node = (Node) element; if (node.isNodeType(GisTypes.GIS_FEATURE_SOURCE)) return JcrImages.BINARY; else if (node.isNodeType(GisTypes.GIS_DATA_STORE)) return JcrImages.NODE; return JcrImages.FOLDER; } } catch (RepositoryException e) { throw new ArgeoException("Cannot get text", e); } return super.getImage(element); } } }