X-Git-Url: http://git.argeo.org/?p=gpl%2Fargeo-suite.git;a=blobdiff_plain;f=environment%2Forg.argeo.geo.ui%2Fsrc%2Forg%2Fargeo%2Fsupport%2Fopenlayers%2FOverviewMap.java;fp=environment%2Forg.argeo.geo.ui%2Fsrc%2Forg%2Fargeo%2Fsupport%2Fopenlayers%2FOverviewMap.java;h=33e888f7e5d740d4e253ce2d423de2006c8f04a1;hp=0000000000000000000000000000000000000000;hb=321efa1b363a1cd5f9fd714cd4945778fa55c0e9;hpb=d0515f4d4549e59e787803708027ec85057c5a5a diff --git a/environment/org.argeo.geo.ui/src/org/argeo/support/openlayers/OverviewMap.java b/environment/org.argeo.geo.ui/src/org/argeo/support/openlayers/OverviewMap.java new file mode 100644 index 0000000..33e888f --- /dev/null +++ b/environment/org.argeo.geo.ui/src/org/argeo/support/openlayers/OverviewMap.java @@ -0,0 +1,72 @@ +package org.argeo.support.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.api.NodeConstants; +import org.argeo.cms.auth.CurrentUser; +import org.argeo.cms.ui.CmsUiProvider; +import org.argeo.cms.ui.CmsView; +import org.argeo.cms.ui.util.CmsUiUtils; +import org.argeo.entity.EntityType; +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 { + CmsUiUtils.clear(parent); + boolean coworker = CmsView.getCmsView(parent).doAs(() -> CurrentUser.isInRole(NodeConstants.ROLE_USER_ADMIN)); + Query query = context.getSession().getWorkspace().getQueryManager() + .createQuery("SELECT * FROM [" + EntityType.local.get() + "] WHERE [entity:type]='" + + EntityType.geopoint.get() + "'", + Query.JCR_SQL2); + List geoPoints = JcrUtils.nodeIteratorToList(query.execute().getNodes()); + OpenLayersMap apafMap = new OpenLayersMap(parent, SWT.NONE, getClass().getResource("map-osm.html")); + apafMap.setLayoutData(CmsUiUtils.fillAll()); + + // apafMap.setZoom(7); + // apafMap.setCenter(-2.472, 8.010); + apafMap.addPoints(geoPoints); + } +}