]> git.argeo.org Git - gpl/argeo-suite.git/blob - openlayers/OverviewMap.java
Prepare next development cycle
[gpl/argeo-suite.git] / openlayers / OverviewMap.java
1 package org.argeo.app.ui.openlayers;
2
3 import java.util.List;
4
5 import javax.jcr.Node;
6 import javax.jcr.RepositoryException;
7 import javax.jcr.Session;
8 import javax.jcr.observation.Event;
9 import javax.jcr.observation.EventIterator;
10 import javax.jcr.observation.EventListener;
11 import javax.jcr.query.Query;
12
13 import org.argeo.api.acr.Content;
14 import org.argeo.api.cms.CmsConstants;
15 import org.argeo.app.api.EntityType;
16 import org.argeo.cms.jcr.acr.JcrContentProvider;
17 import org.argeo.cms.swt.CmsSwtUtils;
18 import org.argeo.cms.ui.CmsUiProvider;
19 import org.argeo.jcr.JcrException;
20 import org.argeo.jcr.JcrUtils;
21 import org.eclipse.swt.SWT;
22 import org.eclipse.swt.layout.GridLayout;
23 import org.eclipse.swt.widgets.Composite;
24 import org.eclipse.swt.widgets.Control;
25
26 /** Displays an overview map. */
27 public class OverviewMap implements CmsUiProvider {
28 private JcrContentProvider jcrContentProvider;
29
30 @Override
31 public Control createUiPart(Composite parent, Content context) {
32 parent.setLayout(new GridLayout());
33 Session session = jcrContentProvider.getJcrSession(context, CmsConstants.SYS_WORKSPACE);
34
35 try {
36 refreshUi(parent, session);
37 String[] nodeTypes = { EntityType.geopoint.get() };
38 session.getWorkspace().getObservationManager().addEventListener(new EventListener() {
39
40 @Override
41 public void onEvent(EventIterator events) {
42 if (!parent.isDisposed())
43 parent.getDisplay().asyncExec(() -> {
44 try {
45 refreshUi(parent, session);
46 } catch (RepositoryException e) {
47 throw new JcrException(e);
48 }
49 });
50 }
51 }, Event.PROPERTY_CHANGED | Event.NODE_ADDED | Event.NODE_REMOVED | Event.PROPERTY_ADDED, "/", true, null,
52 nodeTypes, false);
53 } catch (RepositoryException e) {
54 throw new JcrException("Cannot add JCR observer", e);
55 }
56
57 return parent;
58 }
59
60 protected void refreshUi(Composite parent, Session session) throws RepositoryException {
61 CmsSwtUtils.clear(parent);
62 Query query = session.getWorkspace().getQueryManager()
63 .createQuery("SELECT * FROM [" + EntityType.geopoint.get() + "]", Query.JCR_SQL2);
64 List<Node> geoPoints = JcrUtils.nodeIteratorToList(query.execute().getNodes());
65 OpenLayersMap map = new OpenLayersMap(parent, SWT.NONE, getClass().getResource("map-osm.html"));
66 map.setLayoutData(CmsSwtUtils.fillAll());
67
68 // apafMap.setZoom(7);
69 // apafMap.setCenter(-2.472, 8.010);
70 map.addPoints(geoPoints);
71 }
72
73 public void setJcrContentProvider(JcrContentProvider jcrContentProvider) {
74 this.jcrContentProvider = jcrContentProvider;
75 }
76
77 }