-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.cms.ui.CmsUiProvider;
-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);
- Query query = context.getSession().getWorkspace().getQueryManager()
- .createQuery("SELECT * FROM [" + EntityType.geopoint.get() + "]", Query.JCR_SQL2);
- List<Node> geoPoints = JcrUtils.nodeIteratorToList(query.execute().getNodes());
- OpenLayersMap map = new OpenLayersMap(parent, SWT.NONE, getClass().getResource("map-osm.html"));
- map.setLayoutData(CmsUiUtils.fillAll());
-
- // apafMap.setZoom(7);
- // apafMap.setCenter(-2.472, 8.010);
- map.addPoints(geoPoints);
- }
-}