]> git.argeo.org Git - lgpl/argeo-commons.git/blob - gis/plugins/org.argeo.gis.ui/src/main/java/org/argeo/gis/ui/views/DataStoresView.java
7bb008d6f47690d44d13e5347144e57facc3dd81
[lgpl/argeo-commons.git] / gis / plugins / org.argeo.gis.ui / src / main / java / org / argeo / gis / ui / views / DataStoresView.java
1 package org.argeo.gis.ui.views;
2
3 import java.util.ArrayList;
4 import java.util.Iterator;
5 import java.util.List;
6
7 import org.argeo.eclipse.ui.AbstractTreeContentProvider;
8 import org.argeo.gis.ui.data.DataStoreNode;
9 import org.argeo.gis.ui.data.FeatureNode;
10 import org.argeo.gis.ui.editors.DefaultMapEditor;
11 import org.eclipse.jface.viewers.DoubleClickEvent;
12 import org.eclipse.jface.viewers.IDoubleClickListener;
13 import org.eclipse.jface.viewers.IStructuredSelection;
14 import org.eclipse.jface.viewers.LabelProvider;
15 import org.eclipse.jface.viewers.TreeViewer;
16 import org.eclipse.swt.SWT;
17 import org.eclipse.swt.widgets.Composite;
18 import org.eclipse.ui.IEditorPart;
19 import org.eclipse.ui.part.ViewPart;
20 import org.geotools.data.DataStore;
21 import org.geotools.data.FeatureSource;
22 import org.opengis.feature.simple.SimpleFeature;
23 import org.opengis.feature.simple.SimpleFeatureType;
24
25 public class DataStoresView extends ViewPart implements IDoubleClickListener {
26 public final static String ID = "org.argeo.gis.ui.dataStoresView";
27
28 private TreeViewer viewer;
29
30 private List<DataStore> dataStores;
31
32 @Override
33 public void createPartControl(Composite parent) {
34 viewer = new TreeViewer(parent, SWT.MULTI | SWT.H_SCROLL | SWT.V_SCROLL);
35 viewer.setContentProvider(new DataStoreContentProvider());
36 viewer.setLabelProvider(new DataStoreLabelProvider());
37 viewer.setInput(getViewSite());
38 viewer.addDoubleClickListener(this);
39 }
40
41 public void doubleClick(DoubleClickEvent event) {
42 if (!event.getSelection().isEmpty()) {
43 Iterator<?> it = ((IStructuredSelection) event.getSelection())
44 .iterator();
45 while (it.hasNext()) {
46 Object obj = it.next();
47 if (obj instanceof FeatureNode) {
48 FeatureNode featureNode = (FeatureNode) obj;
49 FeatureSource<SimpleFeatureType, SimpleFeature> featureSource = featureNode
50 .getFeatureSource();
51 IEditorPart ed = getSite().getWorkbenchWindow().getActivePage().getActiveEditor();
52 if(ed instanceof DefaultMapEditor){
53 ((DefaultMapEditor)ed).addLayer(featureSource);
54 }
55 }
56 }
57 }
58
59 }
60
61 @Override
62 public void setFocus() {
63 viewer.getTree().setFocus();
64 }
65
66 public void refresh() {
67 viewer.refresh();
68 }
69
70 public void setDataStores(List<DataStore> dataStores) {
71 this.dataStores = dataStores;
72 }
73
74 private class DataStoreContentProvider extends AbstractTreeContentProvider {
75
76 public Object[] getElements(Object inputElement) {
77 List<DataStoreNode> dataStoreNodes = new ArrayList<DataStoreNode>();
78 // it is better to deal with OSGi reference using and iterator
79 Iterator<DataStore> it = dataStores.iterator();
80 while (it.hasNext())
81 dataStoreNodes.add(new DataStoreNode(it.next()));
82 return dataStoreNodes.toArray();
83 }
84
85 }
86
87 private class DataStoreLabelProvider extends LabelProvider {
88
89 @Override
90 public String getText(Object element) {
91 return super.getText(element);
92 }
93
94 }
95 }