Reactivate JCR user node.
[gpl/argeo-suite.git] / swt / org.argeo.app.ui / src / org / argeo / app / ui / SuiteApp.java
index 12dceb88c786bf853c9ab5eabb48cb53ec0ba0a0..3dc5007fc0be274380ee18dd68436a30b62e9bc5 100644 (file)
@@ -25,6 +25,7 @@ import org.argeo.api.cms.CmsConstants;
 import org.argeo.api.cms.CmsEventSubscriber;
 import org.argeo.api.cms.CmsLog;
 import org.argeo.api.cms.CmsSession;
+import org.argeo.api.cms.directory.CmsUserManager;
 import org.argeo.api.cms.ux.CmsTheme;
 import org.argeo.api.cms.ux.CmsUi;
 import org.argeo.api.cms.ux.CmsView;
@@ -32,20 +33,21 @@ import org.argeo.app.api.EntityConstants;
 import org.argeo.app.api.EntityNames;
 import org.argeo.app.api.EntityType;
 import org.argeo.app.api.RankedObject;
+import org.argeo.app.core.SuiteUtils;
 import org.argeo.cms.AbstractCmsApp;
-import org.argeo.cms.CmsUserManager;
 import org.argeo.cms.LocaleUtils;
 import org.argeo.cms.Localized;
 import org.argeo.cms.acr.ContentUtils;
 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.acr.SwtUiProvider;
 import org.argeo.cms.swt.dialogs.CmsFeedback;
+import org.argeo.cms.util.LangUtils;
 import org.argeo.cms.ux.CmsUxUtils;
 import org.argeo.eclipse.ui.specific.UiContext;
 import org.argeo.jcr.JcrException;
-import org.argeo.util.LangUtils;
 import org.eclipse.swt.SWT;
 import org.eclipse.swt.widgets.Composite;
 import org.osgi.framework.Constants;
@@ -93,7 +95,7 @@ public class SuiteApp extends AbstractCmsApp implements CmsEventSubscriber {
 
        // ACR
        private ContentRepository contentRepository;
-//     private JcrContentProvider jcrContentProvider;
+       private JcrContentProvider jcrContentProvider;
 
        // JCR
 //     private Repository repository;
@@ -233,8 +235,15 @@ public class SuiteApp extends AbstractCmsApp implements CmsEventSubscriber {
                                                                .get(ContentUtils.SLASH + CmsConstants.SYS_WORKSPACE + publicBasePath);
                                                ui.setUserDir(userDir);
                                        } else {
-                                               Content userDir = contentSession.getSessionRunDir();
+                                               Node userDirNode = jcrContentProvider.doInAdminSession((adminSession) -> {
+                                                       Node node = SuiteUtils.getOrCreateCmsSessionNode(adminSession, cmsSession);
+                                                       return node;
+                                               });
+                                               Content userDir = contentSession
+                                                               .get(ContentUtils.SLASH + CmsConstants.SYS_WORKSPACE + userDirNode.getPath());
                                                ui.setUserDir(userDir);
+//                                             Content userDir = contentSession.getSessionRunDir();
+//                                             ui.setUserDir(userDir);
                                        }
                                }
                                initLocale(cmsSession);
@@ -459,7 +468,7 @@ public class SuiteApp extends AbstractCmsApp implements CmsEventSubscriber {
                                        appTitle = ui.getTitle().lead() + " - ";
 
                                if (SuiteUiUtils.isTopic(topic, SuiteUxEvent.refreshPart)) {
-                                       Content node = getNode(ui, event);
+                                       Content node = getContentFromEvent(ui, event);
                                        if (node == null)
                                                return;
                                        SwtUiProvider uiProvider = findByType(uiProvidersByType, node);
@@ -468,7 +477,7 @@ public class SuiteApp extends AbstractCmsApp implements CmsEventSubscriber {
                                        layer.view(uiProvider, ui.getCurrentWorkArea(), node);
                                        ui.getCmsView().stateChanged(nodeToState(node), appTitle + CmsUxUtils.getTitle(node));
                                } else if (SuiteUiUtils.isTopic(topic, SuiteUxEvent.openNewPart)) {
-                                       Content node = getNode(ui, event);
+                                       Content node = getContentFromEvent(ui, event);
                                        if (node == null)
                                                return;
                                        SwtUiProvider uiProvider = findByType(uiProvidersByType, node);
@@ -488,7 +497,7 @@ public class SuiteApp extends AbstractCmsApp implements CmsEventSubscriber {
                                                String title = null;
                                                if (layerTitle != null)
                                                        title = layerTitle.lead();
-                                               Content nodeFromState = getNode(ui, event);
+                                               Content nodeFromState = getContentFromEvent(ui, event);
                                                if (nodeFromState != null && nodeFromState.getPath().equals(ui.getUserDir().getPath())) {
                                                        // default layer view is forced
                                                        String state = defaultLayerPid.equals(layerId) ? "~" : layerId;
@@ -506,7 +515,7 @@ public class SuiteApp extends AbstractCmsApp implements CmsEventSubscriber {
                                                        }
                                                }
                                        } else {
-                                               Content node = getNode(ui, event);
+                                               Content node = getContentFromEvent(ui, event);
                                                if (node != null) {
                                                        SuiteLayer layer = findByType(layersByType, node);
                                                        ui.switchToLayer(layer, node);
@@ -520,13 +529,13 @@ public class SuiteApp extends AbstractCmsApp implements CmsEventSubscriber {
                });
        }
 
-       private Content getNode(SuiteUi ui, Map<String, Object> event) {
+       protected Content getContentFromEvent(SuiteUi ui, Map<String, Object> event) {
                ProvidedSession contentSession = (ProvidedSession) CmsUxUtils.getContentSession(contentRepository,
                                ui.getCmsView());
 
                String path = get(event, SuiteUxEvent.CONTENT_PATH);
 
-               if (path != null && path.equals(HOME_STATE))
+               if (path != null && (path.equals(HOME_STATE) || path.equals("")))
                        return ui.getUserDir();
                Content node;
                if (path == null) {
@@ -638,4 +647,9 @@ public class SuiteApp extends AbstractCmsApp implements CmsEventSubscriber {
        public void setContentRepository(ContentRepository contentRepository) {
                this.contentRepository = contentRepository;
        }
+
+       public void setJcrContentProvider(JcrContentProvider jcrContentProvider) {
+               this.jcrContentProvider = jcrContentProvider;
+       }
+
 }