Keep removing dependency to JCR.
authorMathieu Baudier <mbaudier@argeo.org>
Thu, 16 Jun 2022 10:28:01 +0000 (12:28 +0200)
committerMathieu Baudier <mbaudier@argeo.org>
Thu, 16 Jun 2022 10:28:01 +0000 (12:28 +0200)
13 files changed:
org.argeo.app.core/src/org/argeo/app/core/SuiteUtils.java
org.argeo.app.ui/OSGI-INF/cmsApp.xml
org.argeo.app.ui/OSGI-INF/contentEntryArea.xml
org.argeo.app.ui/OSGI-INF/dashboardLayer.xml
org.argeo.app.ui/OSGI-INF/overviewMap.xml
org.argeo.app.ui/src/org/argeo/app/ui/DefaultDashboard.java
org.argeo.app.ui/src/org/argeo/app/ui/DefaultFooter.java
org.argeo.app.ui/src/org/argeo/app/ui/DefaultHeader.java
org.argeo.app.ui/src/org/argeo/app/ui/DefaultLeadPane.java
org.argeo.app.ui/src/org/argeo/app/ui/DefaultLoginScreen.java
org.argeo.app.ui/src/org/argeo/app/ui/SuiteApp.java
org.argeo.app.ui/src/org/argeo/app/ui/library/ContentEntryArea.java
org.argeo.app.ui/src/org/argeo/app/ui/openlayers/OverviewMap.java

index 0a31b1424e640df0d1aae1b4eaabbc011ba05659..cc0e3bfffc63b858c91ce44d5035f59b84051d43 100644 (file)
@@ -28,7 +28,7 @@ public class SuiteUtils {
                return EntityType.user.basePath() + '/' + uid;
        }
 
-       public static Node getOrCreateUserNode(Session adminSession, LdapName userDn) {
+       private static Node getOrCreateUserNode(Session adminSession, LdapName userDn) {
                try {
                        Node usersBase = adminSession.getNode(EntityType.user.basePath());
                        String uid = userDn.getRdn(userDn.size() - 1).getValue().toString();
index c710661a663fcaaa58d41c132d2cd15289d3c325..1b50064f791d704e565b25dbd6889e2e5eb5bea5 100644 (file)
@@ -8,10 +8,8 @@
    <properties entry="config/cmsApp.properties"/>
    <reference bind="addUiProvider" cardinality="0..n" interface="org.argeo.cms.ui.CmsUiProvider" name="CmsUiProvider" policy="dynamic" unbind="removeUiProvider"/>
    <reference bind="addTheme" cardinality="1..n" interface="org.argeo.api.cms.CmsTheme" name="CmsTheme" policy="dynamic" unbind="removeTheme"/>
-   <reference bind="setRepository" cardinality="1..1" interface="javax.jcr.Repository" name="Repository" policy="dynamic" target="(cn=ego)"/>
    <reference bind="addLayer" cardinality="1..n" interface="org.argeo.app.ui.SuiteLayer" name="SuiteLayer" policy="dynamic" unbind="removeLayer"/>
    <reference bind="setCmsUserManager" cardinality="1..1" interface="org.argeo.cms.CmsUserManager" name="CmsUserManager" policy="static"/>
    <reference bind="setCmsContext" cardinality="1..1" interface="org.argeo.api.cms.CmsContext" name="CmsContext" policy="static"/>
    <reference bind="setContentRepository" cardinality="1..1" interface="org.argeo.api.acr.ContentRepository" name="ContentRepository" policy="static"/>
-   <reference bind="setJcrContentProvider" cardinality="1..1" interface="org.argeo.cms.jcr.acr.JcrContentProvider" name="JcrContentProvider" policy="static"/>
 </scr:component>
index ecc37c75a4e95c8f0b0b5814fab1b2cc40b11b8e..87cadaa2b2aba70b536f0779c3340b7759137c2a 100644 (file)
@@ -5,4 +5,5 @@
       <provide interface="org.argeo.cms.ui.CmsUiProvider"/>
    </service>
    <properties entry="config/contentEntryArea.properties"/>
+   <reference bind="setJcrContentProvider" cardinality="1..1" interface="org.argeo.cms.jcr.acr.JcrContentProvider" name="JcrContentProvider" policy="static"/>
 </scr:component>
index 436a8e6402cdabc5352fa76ab6ef31333882dfd1..7a12d7121d638fc32ee22c527ef4eb76a30af75f 100644 (file)
@@ -5,5 +5,4 @@
       <provide interface="org.argeo.app.ui.SuiteLayer"/>
    </service>
    <properties entry="config/dashboardLayer.properties"/>
-   <reference bind="setEntryArea" cardinality="1..1" interface="org.argeo.cms.ui.CmsUiProvider" name="CmsUiProvider" policy="dynamic" target="(service.pid=argeo.suite.ui.recentItems)"/>
 </scr:component>
index 662cbe8a9cdaaba042859d3cd4927b0a8a87762e..f378f059b4e70178c76bd3e76d33a491f03ab2eb 100644 (file)
@@ -5,4 +5,5 @@
    <service>
       <provide interface="org.argeo.cms.ui.CmsUiProvider"/>
    </service>
+   <reference bind="setJcrContentProvider" cardinality="1..1" interface="org.argeo.cms.jcr.acr.JcrContentProvider" name="JcrContentProvider" policy="static"/>
 </scr:component>
index 50fbed6dfb747fdd1bab2b36ea223329eb21b47e..672b5d331e4e74de9ff52649e6f35e8ff27c2674 100644 (file)
@@ -1,8 +1,6 @@
 package org.argeo.app.ui;
 
-import javax.jcr.Node;
-import javax.jcr.RepositoryException;
-
+import org.argeo.api.acr.Content;
 import org.argeo.api.cms.CmsView;
 import org.argeo.cms.auth.CurrentUser;
 import org.argeo.cms.swt.CmsSwtUtils;
@@ -17,7 +15,7 @@ import org.eclipse.swt.widgets.Label;
 public class DefaultDashboard implements CmsUiProvider {
 
        @Override
-       public Control createUi(Composite parent, Node context) throws RepositoryException {
+       public Control createUiPart(Composite parent, Content context) {
                parent.setLayout(new GridLayout());
                CmsView cmsView = CmsSwtUtils.getCmsView(parent);
                if (cmsView.isAnonymous())
index 62a3a235085b36877cdaf6b626e04fd7aa09dd0e..5e54368c947a773f8b37499b671b3228b0b838fc 100644 (file)
@@ -2,9 +2,7 @@ package org.argeo.app.ui;
 
 import java.util.Map;
 
-import javax.jcr.Node;
-import javax.jcr.RepositoryException;
-
+import org.argeo.api.acr.Content;
 import org.argeo.cms.swt.CmsSwtUtils;
 import org.argeo.cms.ui.CmsUiProvider;
 import org.eclipse.swt.SWT;
@@ -16,7 +14,7 @@ import org.osgi.framework.BundleContext;
 /** Footer of a standard Argeo Suite application. */
 public class DefaultFooter implements CmsUiProvider {
        @Override
-       public Control createUi(Composite parent, Node context) throws RepositoryException {
+       public Control createUiPart(Composite parent, Content context) {
                parent.setLayout(CmsSwtUtils.noSpaceGridLayout());
                Composite content = new Composite(parent, SWT.NONE);
                content.setLayoutData(new GridData(0, 0));
@@ -27,7 +25,7 @@ public class DefaultFooter implements CmsUiProvider {
                return contentControl;
        }
 
-       protected Control createContent(Composite parent, Node context) throws RepositoryException {
+       protected Control createContent(Composite parent, Content context) {
                return parent;
        }
 
index d3044933a08f13a3ae6f045ba54696b10735aa0b..53554dc0f4b84433864555f2706cbeb0e1dd18f2 100644 (file)
@@ -2,9 +2,7 @@ package org.argeo.app.ui;
 
 import java.util.Map;
 
-import javax.jcr.Node;
-import javax.jcr.RepositoryException;
-
+import org.argeo.api.acr.Content;
 import org.argeo.api.cms.CmsTheme;
 import org.argeo.api.cms.CmsView;
 import org.argeo.cms.Localized;
@@ -29,7 +27,7 @@ public class DefaultHeader implements CmsUiProvider {
        private Localized title = null;
 
        @Override
-       public Control createUi(Composite parent, Node context) throws RepositoryException {
+       public Control createUiPart(Composite parent, Content context)  {
                CmsView cmsView = CmsSwtUtils.getCmsView(parent);
                CmsTheme theme = CmsSwtUtils.getCmsTheme(parent);
 
index 5650e9ca59d482da03e972d62d60bb4224fbb8e1..94b3b93bde59e8ad99a185ee37aff9b3d2dadf62 100644 (file)
@@ -9,13 +9,11 @@ import java.util.Map;
 import java.util.Set;
 import java.util.TreeMap;
 
-import javax.jcr.Node;
-import javax.jcr.RepositoryException;
-
+import org.argeo.api.acr.Content;
+import org.argeo.api.cms.CmsLog;
 import org.argeo.api.cms.CmsView;
 import org.argeo.app.api.RankedObject;
 import org.argeo.app.core.SuiteUtils;
-import org.argeo.api.cms.CmsLog;
 import org.argeo.cms.Localized;
 import org.argeo.cms.auth.CurrentUser;
 import org.argeo.cms.swt.CmsSwtUtils;
@@ -45,7 +43,7 @@ public class DefaultLeadPane implements CmsUiProvider {
        private ClassLoader l10nClassLoader;
 
        @Override
-       public Control createUi(Composite parent, Node node) throws RepositoryException {
+       public Control createUiPart(Composite parent, Content node)  {
                CmsView cmsView = CmsSwtUtils.getCmsView(parent);
                parent.setLayout(CmsSwtUtils.noSpaceGridLayout());
                Composite appLayersC = new Composite(parent, SWT.NONE);
index e9b466f3f6d9c5d171f6ee3d790726e3d498bba8..117d644dfc97e4f6bdfd8798f19dd658ed2945b9 100644 (file)
@@ -1,8 +1,6 @@
 package org.argeo.app.ui;
 
-import javax.jcr.Node;
-import javax.jcr.RepositoryException;
-
+import org.argeo.api.acr.Content;
 import org.argeo.api.cms.CmsContext;
 import org.argeo.api.cms.CmsView;
 import org.argeo.cms.auth.CurrentUser;
@@ -20,7 +18,7 @@ public class DefaultLoginScreen implements CmsUiProvider {
        private CmsContext cmsContext;
 
        @Override
-       public Control createUi(Composite parent, Node context) throws RepositoryException {
+       public Control createUiPart(Composite parent, Content context) {
                CmsView cmsView = CmsSwtUtils.getCmsView(parent);
                if (!cmsView.isAnonymous())
                        throw new IllegalStateException(CurrentUser.getUsername() + " is already logged in");
index 9bfec26ba989f5428c13f40689900a8af47c0f70..8bbe7d3aceb15e9f51c17d1eff3d93a4c8f4e657 100644 (file)
@@ -14,16 +14,13 @@ import java.util.TreeMap;
 import java.util.TreeSet;
 
 import javax.jcr.Node;
-import javax.jcr.Repository;
 import javax.jcr.RepositoryException;
-import javax.jcr.Session;
 import javax.jcr.nodetype.NodeType;
 import javax.naming.InvalidNameException;
 import javax.naming.ldap.LdapName;
 
 import org.argeo.api.acr.Content;
 import org.argeo.api.acr.ContentRepository;
-import org.argeo.api.acr.ContentSession;
 import org.argeo.api.acr.spi.ProvidedSession;
 import org.argeo.api.cms.CmsConstants;
 import org.argeo.api.cms.CmsLog;
@@ -42,13 +39,11 @@ import org.argeo.cms.LocaleUtils;
 import org.argeo.cms.Localized;
 import org.argeo.cms.jcr.CmsJcrUtils;
 import org.argeo.cms.jcr.acr.JcrContent;
-import org.argeo.cms.jcr.acr.JcrContentProvider;
 import org.argeo.cms.swt.CmsSwtUtils;
 import org.argeo.cms.swt.dialogs.CmsFeedback;
 import org.argeo.cms.ui.CmsUiProvider;
 import org.argeo.cms.ux.CmsUxUtils;
 import org.argeo.eclipse.ui.specific.UiContext;
-import org.argeo.jcr.Jcr;
 import org.argeo.jcr.JcrException;
 import org.argeo.util.LangUtils;
 import org.eclipse.swt.SWT;
@@ -99,10 +94,10 @@ public class SuiteApp extends AbstractCmsApp implements EventHandler {
 
        // ACR
        private ContentRepository contentRepository;
-       private JcrContentProvider jcrContentProvider;
+//     private JcrContentProvider jcrContentProvider;
 
        // JCR
-       private Repository repository;
+//     private Repository repository;
 
        public void init(Map<String, Object> properties) {
                if (log.isDebugEnabled())
@@ -192,7 +187,7 @@ public class SuiteApp extends AbstractCmsApp implements EventHandler {
                                throw new IllegalStateException("UI name should not be null");
                        CmsView cmsView = CmsSwtUtils.getCmsView(ui);
 
-                       ContentSession contentSession = CmsUxUtils.getContentSession(contentRepository, cmsView);
+                       ProvidedSession contentSession = (ProvidedSession) CmsUxUtils.getContentSession(contentRepository, cmsView);
 
                        CmsUiProvider headerUiProvider = findUiProvider(headerPid);
                        CmsUiProvider footerUiProvider = findUiProvider(footerPid);
@@ -231,16 +226,18 @@ public class SuiteApp extends AbstractCmsApp implements EventHandler {
                                                ui.setUserDir(userDir);
 //                                             ui.initSessions(getRepository(), publicBasePath);
                                        } else {
-                                               Session adminSession = null;
-                                               try {
-                                                       adminSession = CmsJcrUtils.openDataAdminSession(getRepository(), null);
-                                                       Node userDirNode = SuiteUtils.getOrCreateCmsSessionNode(adminSession, cmsSession);
-                                                       Content userDir = contentSession.get(CmsConstants.SYS_WORKSPACE + userDirNode.getPath());
-                                                       ui.setUserDir(userDir);
-//                                                     ui.initSessions(getRepository(), userDirNode.getPath());
-                                               } finally {
-                                                       Jcr.logout(adminSession);
-                                               }
+//                                             Session adminSession = null;
+//                                             try {
+//                                                     adminSession = CmsJcrUtils.openDataAdminSession(getRepository(), null);
+//                                                     Node userDirNode = SuiteUtils.getOrCreateCmsSessionNode(adminSession, cmsSession);
+//                                                     Content userDir = contentSession.get(CmsConstants.SYS_WORKSPACE + userDirNode.getPath());
+//                                                     ui.setUserDir(userDir);
+////                                                   ui.initSessions(getRepository(), userDirNode.getPath());
+//                                             } finally {
+//                                                     Jcr.logout(adminSession);
+//                                             }
+                                               Content userDir = contentSession.getSessionRunDir();
+                                               ui.setUserDir(userDir);
                                        }
                                }
                                initLocale(cmsSession);
@@ -297,63 +294,64 @@ public class SuiteApp extends AbstractCmsApp implements EventHandler {
        private <T> T findByType(Map<String, RankedObject<T>> byType, Content content) {
                if (content == null)
                        throw new IllegalArgumentException("A node should be provided");
-               
-               if(content instanceof JcrContent) {
-               Node context = ((JcrContent)content).getJcrNode();
-               try {
-                       // mixins
-                       Set<String> types = new TreeSet<>();
-                       for (NodeType mixinType : context.getMixinNodeTypes()) {
-                               String mixinTypeName = mixinType.getName();
-                               if (byType.containsKey(mixinTypeName)) {
-                                       types.add(mixinTypeName);
+
+               if (content instanceof JcrContent) {
+                       Node context = ((JcrContent) content).getJcrNode();
+                       try {
+                               // mixins
+                               Set<String> types = new TreeSet<>();
+                               for (NodeType mixinType : context.getMixinNodeTypes()) {
+                                       String mixinTypeName = mixinType.getName();
+                                       if (byType.containsKey(mixinTypeName)) {
+                                               types.add(mixinTypeName);
+                                       }
+                                       for (NodeType superType : mixinType.getDeclaredSupertypes()) {
+                                               if (byType.containsKey(superType.getName())) {
+                                                       types.add(superType.getName());
+                                               }
+                                       }
+                               }
+                               // primary node type
+                               NodeType primaryType = context.getPrimaryNodeType();
+                               String primaryTypeName = primaryType.getName();
+                               if (byType.containsKey(primaryTypeName)) {
+                                       types.add(primaryTypeName);
                                }
-                               for (NodeType superType : mixinType.getDeclaredSupertypes()) {
+                               for (NodeType superType : primaryType.getDeclaredSupertypes()) {
                                        if (byType.containsKey(superType.getName())) {
                                                types.add(superType.getName());
                                        }
                                }
-                       }
-                       // primary node type
-                       NodeType primaryType = context.getPrimaryNodeType();
-                       String primaryTypeName = primaryType.getName();
-                       if (byType.containsKey(primaryTypeName)) {
-                               types.add(primaryTypeName);
-                       }
-                       for (NodeType superType : primaryType.getDeclaredSupertypes()) {
-                               if (byType.containsKey(superType.getName())) {
-                                       types.add(superType.getName());
-                               }
-                       }
-                       // entity type
-                       if (context.isNodeType(EntityType.entity.get())) {
-                               if (context.hasProperty(EntityNames.ENTITY_TYPE)) {
-                                       String entityTypeName = context.getProperty(EntityNames.ENTITY_TYPE).getString();
-                                       if (byType.containsKey(entityTypeName)) {
-                                               types.add(entityTypeName);
+                               // entity type
+                               if (context.isNodeType(EntityType.entity.get())) {
+                                       if (context.hasProperty(EntityNames.ENTITY_TYPE)) {
+                                               String entityTypeName = context.getProperty(EntityNames.ENTITY_TYPE).getString();
+                                               if (byType.containsKey(entityTypeName)) {
+                                                       types.add(entityTypeName);
+                                               }
                                        }
                                }
-                       }
 
 //                     if (context.getPath().equals("/")) {// root node
 //                             types.add("nt:folder");
 //                     }
-                       if (CmsJcrUtils.isUserHome(context) && byType.containsKey("nt:folder")) {// home node
-                               types.add("nt:folder");
+                               if (CmsJcrUtils.isUserHome(context) && byType.containsKey("nt:folder")) {// home node
+                                       types.add("nt:folder");
+                               }
+
+                               if (types.size() == 0)
+                                       throw new IllegalArgumentException(
+                                                       "No type found for " + context + " (" + listTypes(context) + ")");
+                               String type = types.iterator().next();
+                               if (!byType.containsKey(type))
+                                       throw new IllegalArgumentException("No component found for " + context + " with type " + type);
+                               return byType.get(type).get();
+                       } catch (RepositoryException e) {
+                               throw new IllegalStateException(e);
                        }
 
-                       if (types.size() == 0)
-                               throw new IllegalArgumentException("No type found for " + context + " (" + listTypes(context) + ")");
-                       String type = types.iterator().next();
-                       if (!byType.containsKey(type))
-                               throw new IllegalArgumentException("No component found for " + context + " with type " + type);
-                       return byType.get(type).get();
-               } catch (RepositoryException e) {
-                       throw new IllegalStateException(e);
-               }
-               
-               }else {
-                       throw new UnsupportedOperationException("Content "+content.getClass().getName()+" is not supported.");
+               } else {
+                       throw new UnsupportedOperationException("Content " + content.getClass().getName() + " is not supported.");
                }
        }
 
@@ -425,7 +423,7 @@ public class SuiteApp extends AbstractCmsApp implements EventHandler {
                if (state == null || !state.startsWith("/"))
                        return null;
 
-               String path=state;
+               String path = state;
 //             String path = state.substring(1);
 //             String workspace;
 //             if (path.equals("")) {
@@ -542,8 +540,8 @@ public class SuiteApp extends AbstractCmsApp implements EventHandler {
                ProvidedSession contentSession = (ProvidedSession) CmsUxUtils.getContentSession(contentRepository,
                                ui.getCmsView());
 
-               String path = get(event,SuiteEvent.CONTENT_PATH);
-               
+               String path = get(event, SuiteEvent.CONTENT_PATH);
+
 //             String nodePath = get(event, SuiteEvent.NODE_PATH);
                if (path != null && path.equals(HOME_STATE))
                        return ui.getUserDir();
@@ -674,13 +672,13 @@ public class SuiteApp extends AbstractCmsApp implements EventHandler {
                this.cmsUserManager = cmsUserManager;
        }
 
-       protected Repository getRepository() {
-               return repository;
-       }
-
-       public void setRepository(Repository repository) {
-               this.repository = repository;
-       }
+//     protected Repository getRepository() {
+//             return repository;
+//     }
+//
+//     public void setRepository(Repository repository) {
+//             this.repository = repository;
+//     }
 
        protected ContentRepository getContentRepository() {
                return contentRepository;
@@ -690,8 +688,8 @@ public class SuiteApp extends AbstractCmsApp implements EventHandler {
                this.contentRepository = contentRepository;
        }
 
-       public void setJcrContentProvider(JcrContentProvider jcrContentProvider) {
-               this.jcrContentProvider = jcrContentProvider;
-       }
+//     public void setJcrContentProvider(JcrContentProvider jcrContentProvider) {
+//             this.jcrContentProvider = jcrContentProvider;
+//     }
 
 }
index af31ac59c9f0cfff3f4ab610e79ec4b0650f8b08..88316413e664ba158a170f9275948884351a5f68 100644 (file)
@@ -10,11 +10,14 @@ import javax.jcr.Session;
 import javax.jcr.nodetype.NodeType;
 import javax.jcr.query.Query;
 
+import org.argeo.api.acr.Content;
+import org.argeo.api.cms.CmsConstants;
 import org.argeo.api.cms.CmsTheme;
 import org.argeo.app.api.EntityType;
 import org.argeo.app.ui.SuiteEvent;
 import org.argeo.app.ui.SuiteIcon;
 import org.argeo.app.ui.widgets.TreeOrSearchArea;
+import org.argeo.cms.jcr.acr.JcrContentProvider;
 import org.argeo.cms.swt.CmsSwtUtils;
 import org.argeo.cms.ui.CmsUiProvider;
 import org.argeo.jcr.Jcr;
@@ -34,9 +37,10 @@ import org.eclipse.swt.widgets.Composite;
 import org.eclipse.swt.widgets.Control;
 
 public class ContentEntryArea implements CmsUiProvider {
+       private JcrContentProvider jcrContentProvider;
 
        @Override
-       public Control createUi(Composite parent, Node context) throws RepositoryException {
+       public Control createUiPart(Composite parent, Content context) {
                CmsTheme theme = CmsSwtUtils.getCmsTheme(parent);
 
                parent.setLayout(new GridLayout());
@@ -98,7 +102,8 @@ public class ContentEntryArea implements CmsUiProvider {
                });
 
                ui.getTreeViewer().setContentProvider(new SpacesContentProvider());
-               ui.getTreeViewer().setInput(context.getSession());
+               Session session = jcrContentProvider.getJcrSession(context, CmsConstants.SYS_WORKSPACE);
+               ui.getTreeViewer().setInput(session);
                return ui;
        }
 
@@ -107,6 +112,10 @@ public class ContentEntryArea implements CmsUiProvider {
                                || Jcr.isNodeType(node, NodeType.NT_FILE);
        }
 
+       public void setJcrContentProvider(JcrContentProvider jcrContentProvider) {
+               this.jcrContentProvider = jcrContentProvider;
+       }
+
        class Ui extends TreeOrSearchArea {
 
                public Ui(Composite parent, int style) {
index dbb3119ae2bc4d680bad1e9e79c777243cd5dfd1..e4e63b86eb030f889561c2cefe76bb038926bab6 100644 (file)
@@ -4,12 +4,16 @@ import java.util.List;
 
 import javax.jcr.Node;
 import javax.jcr.RepositoryException;
+import javax.jcr.Session;
 import javax.jcr.observation.Event;
 import javax.jcr.observation.EventIterator;
 import javax.jcr.observation.EventListener;
 import javax.jcr.query.Query;
 
+import org.argeo.api.acr.Content;
+import org.argeo.api.cms.CmsConstants;
 import org.argeo.app.api.EntityType;
+import org.argeo.cms.jcr.acr.JcrContentProvider;
 import org.argeo.cms.swt.CmsSwtUtils;
 import org.argeo.cms.ui.CmsUiProvider;
 import org.argeo.jcr.JcrException;
@@ -21,22 +25,24 @@ import org.eclipse.swt.widgets.Control;
 
 /** Displays an overview map. */
 public class OverviewMap implements CmsUiProvider {
+       private JcrContentProvider jcrContentProvider;
 
        @Override
-       public Control createUi(Composite parent, Node context) throws RepositoryException {
+       public Control createUiPart(Composite parent, Content context) {
                parent.setLayout(new GridLayout());
-               refreshUi(parent, context);
+               Session session = jcrContentProvider.getJcrSession(context, CmsConstants.SYS_WORKSPACE);
 
                try {
+                       refreshUi(parent, session);
                        String[] nodeTypes = { EntityType.geopoint.get() };
-                       context.getSession().getWorkspace().getObservationManager().addEventListener(new EventListener() {
+                       session.getWorkspace().getObservationManager().addEventListener(new EventListener() {
 
                                @Override
                                public void onEvent(EventIterator events) {
                                        if (!parent.isDisposed())
                                                parent.getDisplay().asyncExec(() -> {
                                                        try {
-                                                               refreshUi(parent, context);
+                                                               refreshUi(parent, session);
                                                        } catch (RepositoryException e) {
                                                                throw new JcrException(e);
                                                        }
@@ -45,15 +51,15 @@ public class OverviewMap implements CmsUiProvider {
                        }, 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);
+                       throw new JcrException("Cannot add JCR observer", e);
                }
 
                return parent;
        }
 
-       protected void refreshUi(Composite parent, Node context) throws RepositoryException {
+       protected void refreshUi(Composite parent, Session session) throws RepositoryException {
                CmsSwtUtils.clear(parent);
-               Query query = context.getSession().getWorkspace().getQueryManager()
+               Query query = session.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"));
@@ -63,4 +69,9 @@ public class OverviewMap implements CmsUiProvider {
                // apafMap.setCenter(-2.472, 8.010);
                map.addPoints(geoPoints);
        }
+
+       public void setJcrContentProvider(JcrContentProvider jcrContentProvider) {
+               this.jcrContentProvider = jcrContentProvider;
+       }
+
 }