X-Git-Url: https://git.argeo.org/?p=gpl%2Fargeo-suite.git;a=blobdiff_plain;f=org.argeo.app.ui%2Fsrc%2Forg%2Fargeo%2Fapp%2Fui%2Fopenlayers%2FOverviewMap.java;fp=org.argeo.app.ui%2Fsrc%2Forg%2Fargeo%2Fapp%2Fui%2Fopenlayers%2FOverviewMap.java;h=dbb3119ae2bc4d680bad1e9e79c777243cd5dfd1;hp=0000000000000000000000000000000000000000;hb=6e56ffa34cb02ab04d028423aea342e3dfed4358;hpb=c285180bece610b2c2921d44fe14b6dde2123efa diff --git a/org.argeo.app.ui/src/org/argeo/app/ui/openlayers/OverviewMap.java b/org.argeo.app.ui/src/org/argeo/app/ui/openlayers/OverviewMap.java new file mode 100644 index 0000000..dbb3119 --- /dev/null +++ b/org.argeo.app.ui/src/org/argeo/app/ui/openlayers/OverviewMap.java @@ -0,0 +1,66 @@ +package org.argeo.app.ui.openlayers; + +import java.util.List; + +import javax.jcr.Node; +import javax.jcr.RepositoryException; +import javax.jcr.observation.Event; +import javax.jcr.observation.EventIterator; +import javax.jcr.observation.EventListener; +import javax.jcr.query.Query; + +import org.argeo.app.api.EntityType; +import org.argeo.cms.swt.CmsSwtUtils; +import org.argeo.cms.ui.CmsUiProvider; +import org.argeo.jcr.JcrException; +import org.argeo.jcr.JcrUtils; +import org.eclipse.swt.SWT; +import org.eclipse.swt.layout.GridLayout; +import org.eclipse.swt.widgets.Composite; +import org.eclipse.swt.widgets.Control; + +/** Displays an overview map. */ +public class OverviewMap implements CmsUiProvider { + + @Override + public Control createUi(Composite parent, Node context) throws RepositoryException { + parent.setLayout(new GridLayout()); + refreshUi(parent, context); + + try { + String[] nodeTypes = { EntityType.geopoint.get() }; + context.getSession().getWorkspace().getObservationManager().addEventListener(new EventListener() { + + @Override + public void onEvent(EventIterator events) { + if (!parent.isDisposed()) + parent.getDisplay().asyncExec(() -> { + try { + refreshUi(parent, context); + } catch (RepositoryException e) { + throw new JcrException(e); + } + }); + } + }, Event.PROPERTY_CHANGED | Event.NODE_ADDED | Event.NODE_REMOVED | Event.PROPERTY_ADDED, "/", true, null, + nodeTypes, false); + } catch (RepositoryException e) { + throw new IllegalStateException("Cannot add JCR observer", e); + } + + return parent; + } + + protected void refreshUi(Composite parent, Node context) throws RepositoryException { + CmsSwtUtils.clear(parent); + Query query = context.getSession().getWorkspace().getQueryManager() + .createQuery("SELECT * FROM [" + EntityType.geopoint.get() + "]", Query.JCR_SQL2); + List geoPoints = JcrUtils.nodeIteratorToList(query.execute().getNodes()); + OpenLayersMap map = new OpenLayersMap(parent, SWT.NONE, getClass().getResource("map-osm.html")); + map.setLayoutData(CmsSwtUtils.fillAll()); + + // apafMap.setZoom(7); + // apafMap.setCenter(-2.472, 8.010); + map.addPoints(geoPoints); + } +}