1 package org
.argeo
.gis
.ui
;
3 import java
.util
.ArrayList
;
4 import java
.util
.Collections
;
5 import java
.util
.HashMap
;
6 import java
.util
.HashSet
;
11 import javax
.jcr
.Node
;
12 import javax
.jcr
.NodeIterator
;
13 import javax
.jcr
.RepositoryException
;
15 import org
.argeo
.ArgeoException
;
16 import org
.argeo
.geotools
.jcr
.GeoJcrMapper
;
17 import org
.argeo
.jcr
.CollectionNodeIterator
;
18 import org
.argeo
.jcr
.gis
.GisTypes
;
19 import org
.eclipse
.swt
.widgets
.Composite
;
20 import org
.geotools
.data
.FeatureSource
;
21 import org
.opengis
.feature
.simple
.SimpleFeature
;
22 import org
.opengis
.feature
.simple
.SimpleFeatureType
;
25 * Logic of a map viewer which is independent from a particular map display
28 public abstract class AbstractMapViewer
implements MapViewer
{
29 private final Node context
;
30 private final GeoJcrMapper geoJcrMapper
;
32 private Composite control
;
33 private Map
<String
, Set
<String
>> selected
= new HashMap
<String
, Set
<String
>>();
35 private Set
<MapViewerListener
> listeners
= Collections
36 .synchronizedSet(new HashSet
<MapViewerListener
>());
38 protected abstract void addFeatureSource(String path
,
39 FeatureSource
<SimpleFeatureType
, SimpleFeature
> featureSource
);
41 public AbstractMapViewer(Node context
, GeoJcrMapper geoJcrMapper
) {
43 this.context
= context
;
44 this.geoJcrMapper
= geoJcrMapper
;
47 public void addLayer(Node layer
) {
49 if (layer
.isNodeType(GisTypes
.GIS_FEATURE_SOURCE
)) {
50 addFeatureSource(layer
.getPath(),
51 geoJcrMapper
.getFeatureSource(layer
));
53 } catch (Exception e
) {
54 throw new ArgeoException("Cannot add layer " + layer
, e
);
59 public NodeIterator
getSelectedFeatures() {
61 List
<Node
> nodes
= new ArrayList
<Node
>();
62 for (String layerId
: selected
.keySet()) {
63 Set
<String
> featureIds
= selected
.get(layerId
);
64 Node featureSource
= context
.getSession().getNode(layerId
);
65 for (String featureId
: featureIds
) {
66 Node featureNode
= geoJcrMapper
.getFeatureNode(
67 featureSource
, featureId
);
68 nodes
.add(featureNode
);
71 return new CollectionNodeIterator(nodes
);
72 } catch (RepositoryException e
) {
73 throw new ArgeoException("Cannot get selected features from "
78 public void addMapViewerListener(MapViewerListener listener
) {
79 listeners
.add(listener
);
82 public void removeMapViewerListener(MapViewerListener listener
) {
83 listeners
.remove(listener
);
86 protected Node
getContext() {
90 protected Map
<String
, Set
<String
>> getSelected() {
94 protected Set
<MapViewerListener
> getListeners() {
98 protected void setControl(Composite control
) {
99 this.control
= control
;
102 public Composite
getControl() {