Clarify Suite UX
authorMathieu Baudier <mbaudier@argeo.org>
Sun, 30 Oct 2022 05:09:40 +0000 (06:09 +0100)
committerMathieu Baudier <mbaudier@argeo.org>
Sun, 30 Oct 2022 05:09:40 +0000 (06:09 +0100)
12 files changed:
swt/org.argeo.app.ui/src/org/argeo/app/ui/RecentItems.java
swt/org.argeo.app.ui/src/org/argeo/app/ui/SuiteApp.java
swt/org.argeo.app.ui/src/org/argeo/app/ui/SuiteEvent.java [deleted file]
swt/org.argeo.app.ui/src/org/argeo/app/ui/SuiteUi.java
swt/org.argeo.app.ui/src/org/argeo/app/ui/SuiteUiUtils.java
swt/org.argeo.app.ui/src/org/argeo/app/ui/SuiteUxEvent.java [new file with mode: 0644]
swt/org.argeo.app.ui/src/org/argeo/app/ui/library/ContentEntryArea.java
swt/org.argeo.app.ui/src/org/argeo/app/ui/library/DocumentsFolderUiProvider.java
swt/org.argeo.app.ui/src/org/argeo/app/ui/library/DocumentsTreeUiProvider.java
swt/org.argeo.app.ui/src/org/argeo/app/ui/library/JcrContentEntryArea.java
swt/org.argeo.app.ui/src/org/argeo/app/ui/openlayers/OpenLayersMap.java
swt/org.argeo.app.ui/src/org/argeo/app/ui/people/PeopleEntryArea.java

index 53bcdfe9355573cc18098ff04d9147419589d515..03927d42d77fd282bb97135f6aec3ca02b8ea2e4 100644 (file)
@@ -105,8 +105,8 @@ public class RecentItems implements CmsUiProvider {
                        public void doubleClick(DoubleClickEvent event) {
                                Node node = (Node) entityViewer.getViewer().getStructuredSelection().getFirstElement();
                                if (node != null)
                        public void doubleClick(DoubleClickEvent event) {
                                Node node = (Node) entityViewer.getViewer().getStructuredSelection().getFirstElement();
                                if (node != null)
-                                       CmsSwtUtils.getCmsView(parent).sendEvent(SuiteEvent.openNewPart.topic(),
-                                                       SuiteEvent.eventProperties(node));
+                                       CmsSwtUtils.getCmsView(parent).sendEvent(SuiteUxEvent.openNewPart.topic(),
+                                                       SuiteUxEvent.eventProperties(node));
 
                        }
                });
 
                        }
                });
@@ -114,8 +114,8 @@ public class RecentItems implements CmsUiProvider {
                        public void selectionChanged(SelectionChangedEvent event) {
                                Node node = (Node) entityViewer.getViewer().getStructuredSelection().getFirstElement();
                                if (node != null) {
                        public void selectionChanged(SelectionChangedEvent event) {
                                Node node = (Node) entityViewer.getViewer().getStructuredSelection().getFirstElement();
                                if (node != null) {
-                                       CmsSwtUtils.getCmsView(parent).sendEvent(SuiteEvent.refreshPart.topic(),
-                                                       SuiteEvent.eventProperties(node));
+                                       CmsSwtUtils.getCmsView(parent).sendEvent(SuiteUxEvent.refreshPart.topic(),
+                                                       SuiteUxEvent.eventProperties(node));
                                        deleteItem.setEnabled(true);
                                } else {
                                        deleteItem.setEnabled(false);
                                        deleteItem.setEnabled(true);
                                } else {
                                        deleteItem.setEnabled(false);
index a8b9b2e26901c966a4ead4d6b8b4b3ed026516ba..12dceb88c786bf853c9ab5eabb48cb53ec0ba0a0 100644 (file)
@@ -99,7 +99,7 @@ public class SuiteApp extends AbstractCmsApp implements CmsEventSubscriber {
 //     private Repository repository;
 
        public void init(Map<String, Object> properties) {
 //     private Repository repository;
 
        public void init(Map<String, Object> properties) {
-               for (SuiteEvent event : SuiteEvent.values()) {
+               for (SuiteUxEvent event : SuiteUxEvent.values()) {
                        getCmsContext().getCmsEventBus().addEventSubscriber(event.topic(), this);
                }
 
                        getCmsContext().getCmsEventBus().addEventSubscriber(event.topic(), this);
                }
 
@@ -222,31 +222,17 @@ public class SuiteApp extends AbstractCmsApp implements CmsEventSubscriber {
                                if (LOGIN.equals(state))
                                        state = null;
                                if (ui.isLoginScreen()) {
                                if (LOGIN.equals(state))
                                        state = null;
                                if (ui.isLoginScreen()) {
-//                                     if (state == null)
-//                                             state = ui.getPostLoginState();
                                        ui.setLoginScreen(false);
                                        ui.setLoginScreen(false);
-//                                     ui.setPostLoginState(null);
                                }
                                CmsSession cmsSession = cmsView.getCmsSession();
                                }
                                CmsSession cmsSession = cmsView.getCmsSession();
-                               if (ui.getUserDirNode() == null) {
+                               if (ui.getUserDir() == null) {
                                        // FIXME NPE on CMSSession when logging in from anonymous
                                        if (cmsSession == null || cmsView.isAnonymous()) {
                                                assert publicBasePath != null;
                                                Content userDir = contentSession
                                                                .get(ContentUtils.SLASH + CmsConstants.SYS_WORKSPACE + publicBasePath);
                                                ui.setUserDir(userDir);
                                        // FIXME NPE on CMSSession when logging in from anonymous
                                        if (cmsSession == null || cmsView.isAnonymous()) {
                                                assert publicBasePath != null;
                                                Content userDir = contentSession
                                                                .get(ContentUtils.SLASH + CmsConstants.SYS_WORKSPACE + publicBasePath);
                                                ui.setUserDir(userDir);
-//                                             ui.initSessions(getRepository(), publicBasePath);
                                        } else {
                                        } 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);
-//                                             }
                                                Content userDir = contentSession.getSessionRunDir();
                                                ui.setUserDir(userDir);
                                        }
                                                Content userDir = contentSession.getSessionRunDir();
                                                ui.setUserDir(userDir);
                                        }
@@ -254,7 +240,7 @@ public class SuiteApp extends AbstractCmsApp implements CmsEventSubscriber {
                                initLocale(cmsSession);
                                context = stateToNode(ui, state);
                                if (context == null)
                                initLocale(cmsSession);
                                context = stateToNode(ui, state);
                                if (context == null)
-                                       context = ui.getUserDirNode();
+                                       context = ui.getUserDir();
 
                                if (headerUiProvider != null)
                                        refreshPart(headerUiProvider, ui.getHeader(), context);
 
                                if (headerUiProvider != null)
                                        refreshPart(headerUiProvider, ui.getHeader(), context);
@@ -343,9 +329,6 @@ public class SuiteApp extends AbstractCmsApp implements CmsEventSubscriber {
                                        }
                                }
 
                                        }
                                }
 
-//                     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");
                                }
@@ -362,7 +345,6 @@ public class SuiteApp extends AbstractCmsApp implements CmsEventSubscriber {
                        }
 
                } else {
                        }
 
                } else {
-
                        List<QName> objectClasses = content.getContentClasses();
                        Set<String> types = new TreeSet<>();
                        for (QName cc : objectClasses) {
                        List<QName> objectClasses = content.getContentClasses();
                        Set<String> types = new TreeSet<>();
                        for (QName cc : objectClasses) {
@@ -377,8 +359,6 @@ public class SuiteApp extends AbstractCmsApp implements CmsEventSubscriber {
                        if (!byType.containsKey(type))
                                throw new IllegalArgumentException("No component found for " + content + " with type " + type);
                        return byType.get(type).get();
                        if (!byType.containsKey(type))
                                throw new IllegalArgumentException("No component found for " + content + " with type " + type);
                        return byType.get(type).get();
-                       // throw new UnsupportedOperationException("Content " +
-                       // content.getClass().getName() + " is not supported.");
                }
        }
 
                }
        }
 
@@ -423,15 +403,14 @@ public class SuiteApp extends AbstractCmsApp implements CmsEventSubscriber {
                                }
                                Map<String, Object> properties = new HashMap<>();
                                String layerId = HOME_STATE.equals(state) ? defaultLayerPid : state;
                                }
                                Map<String, Object> properties = new HashMap<>();
                                String layerId = HOME_STATE.equals(state) ? defaultLayerPid : state;
-                               properties.put(SuiteEvent.LAYER, layerId);
-                               properties.put(SuiteEvent.NODE_PATH, HOME_STATE);
-                               ui.getCmsView().sendEvent(SuiteEvent.switchLayer.topic(), properties);
+                               properties.put(SuiteUxEvent.LAYER, layerId);
+                               properties.put(SuiteUxEvent.CONTENT_PATH, HOME_STATE);
+                               ui.getCmsView().sendEvent(SuiteUxEvent.switchLayer.topic(), properties);
                        }
                        return;
                }
                SuiteUi suiteUi = (SuiteUi) cmsUi;
                if (suiteUi.isLoginScreen()) {
                        }
                        return;
                }
                SuiteUi suiteUi = (SuiteUi) cmsUi;
                if (suiteUi.isLoginScreen()) {
-//                     suiteUi.setPostLoginState(state);
                        return;
                }
 
                        return;
                }
 
@@ -439,8 +418,8 @@ public class SuiteApp extends AbstractCmsApp implements CmsEventSubscriber {
                if (node == null) {
                        suiteUi.getCmsView().navigateTo(HOME_STATE);
                } else {
                if (node == null) {
                        suiteUi.getCmsView().navigateTo(HOME_STATE);
                } else {
-                       suiteUi.getCmsView().sendEvent(SuiteEvent.switchLayer.topic(), SuiteEvent.eventProperties(node));
-                       suiteUi.getCmsView().sendEvent(SuiteEvent.refreshPart.topic(), SuiteEvent.eventProperties(node));
+                       suiteUi.getCmsView().sendEvent(SuiteUxEvent.switchLayer.topic(), SuiteUxEvent.eventProperties(node));
+                       suiteUi.getCmsView().sendEvent(SuiteUxEvent.refreshPart.topic(), SuiteUxEvent.eventProperties(node));
                }
        }
 
                }
        }
 
@@ -456,35 +435,10 @@ public class SuiteApp extends AbstractCmsApp implements CmsEventSubscriber {
                        return null;
 
                String path = state;
                        return null;
 
                String path = state;
-//             String path = state.substring(1);
-//             String workspace;
-//             if (path.equals("")) {
-//                     workspace = null;
-//                     path = "/";
-//             } else {
-//                     int index = path.indexOf('/');
-//                     if (index == 0) {
-//                             log.error("Cannot interpret " + state);
-////                           cmsView.navigateTo("~");
-//                             return null;
-//                     } else if (index > 0) {
-//                             workspace = path.substring(0, index);
-//                             path = path.substring(index);
-//                     } else {// index<0, assuming root node
-//                             workspace = path;
-//                             path = "/";
-//                     }
-//             }
 
                ProvidedSession contentSession = (ProvidedSession) CmsUxUtils.getContentSession(contentRepository,
                                suiteUi.getCmsView());
                return contentSession.get(path);
 
                ProvidedSession contentSession = (ProvidedSession) CmsUxUtils.getContentSession(contentRepository,
                                suiteUi.getCmsView());
                return contentSession.get(path);
-//             Session session = jcrContentProvider.getJcrSession(contentSession, workspace);
-////           Session session = suiteUi.getSession(workspace);
-//             if (session == null)
-//                     return null;
-//             Node node = Jcr.getNode(session, path);
-//             return node;
        }
 
        /*
        }
 
        /*
@@ -504,9 +458,7 @@ public class SuiteApp extends AbstractCmsApp implements CmsEventSubscriber {
                                if (ui.getTitle() != null)
                                        appTitle = ui.getTitle().lead() + " - ";
 
                                if (ui.getTitle() != null)
                                        appTitle = ui.getTitle().lead() + " - ";
 
-//                     String currentLayerId = ui.getCurrentLayerId();
-//                     SuiteLayer currentLayer = currentLayerId != null ? layersByPid.get(currentLayerId).get() : null;
-                               if (SuiteUiUtils.isTopic(topic, SuiteEvent.refreshPart)) {
+                               if (SuiteUiUtils.isTopic(topic, SuiteUxEvent.refreshPart)) {
                                        Content node = getNode(ui, event);
                                        if (node == null)
                                                return;
                                        Content node = getNode(ui, event);
                                        if (node == null)
                                                return;
@@ -515,7 +467,7 @@ public class SuiteApp extends AbstractCmsApp implements CmsEventSubscriber {
                                        ui.switchToLayer(layer, node);
                                        layer.view(uiProvider, ui.getCurrentWorkArea(), node);
                                        ui.getCmsView().stateChanged(nodeToState(node), appTitle + CmsUxUtils.getTitle(node));
                                        ui.switchToLayer(layer, node);
                                        layer.view(uiProvider, ui.getCurrentWorkArea(), node);
                                        ui.getCmsView().stateChanged(nodeToState(node), appTitle + CmsUxUtils.getTitle(node));
-                               } else if (SuiteUiUtils.isTopic(topic, SuiteEvent.openNewPart)) {
+                               } else if (SuiteUiUtils.isTopic(topic, SuiteUxEvent.openNewPart)) {
                                        Content node = getNode(ui, event);
                                        if (node == null)
                                                return;
                                        Content node = getNode(ui, event);
                                        if (node == null)
                                                return;
@@ -524,28 +476,27 @@ public class SuiteApp extends AbstractCmsApp implements CmsEventSubscriber {
                                        ui.switchToLayer(layer, node);
                                        layer.open(uiProvider, ui.getCurrentWorkArea(), node);
                                        ui.getCmsView().stateChanged(nodeToState(node), appTitle + CmsUxUtils.getTitle(node));
                                        ui.switchToLayer(layer, node);
                                        layer.open(uiProvider, ui.getCurrentWorkArea(), node);
                                        ui.getCmsView().stateChanged(nodeToState(node), appTitle + CmsUxUtils.getTitle(node));
-                               } else if (SuiteUiUtils.isTopic(topic, SuiteEvent.switchLayer)) {
-                                       String layerId = get(event, SuiteEvent.LAYER);
+                               } else if (SuiteUiUtils.isTopic(topic, SuiteUxEvent.switchLayer)) {
+                                       String layerId = get(event, SuiteUxEvent.LAYER);
                                        if (layerId != null) {
                                        if (layerId != null) {
-//                                     ui.switchToLayer(layerId, ui.getUserDir());
                                                SuiteLayer suiteLayer = findLayer(layerId);
                                                if (suiteLayer == null)
                                                        throw new IllegalArgumentException("No layer '" + layerId + "' available.");
                                                Localized layerTitle = suiteLayer.getTitle();
                                                // FIXME make sure we don't rebuild the work area twice
                                                SuiteLayer suiteLayer = findLayer(layerId);
                                                if (suiteLayer == null)
                                                        throw new IllegalArgumentException("No layer '" + layerId + "' available.");
                                                Localized layerTitle = suiteLayer.getTitle();
                                                // FIXME make sure we don't rebuild the work area twice
-                                               Composite workArea = ui.switchToLayer(layerId, ui.getUserDirNode());
+                                               Composite workArea = ui.switchToLayer(layerId, ui.getUserDir());
                                                String title = null;
                                                if (layerTitle != null)
                                                        title = layerTitle.lead();
                                                Content nodeFromState = getNode(ui, event);
                                                String title = null;
                                                if (layerTitle != null)
                                                        title = layerTitle.lead();
                                                Content nodeFromState = getNode(ui, event);
-                                               if (nodeFromState != null && nodeFromState.getPath().equals(ui.getUserDirNode().getPath())) {
+                                               if (nodeFromState != null && nodeFromState.getPath().equals(ui.getUserDir().getPath())) {
                                                        // default layer view is forced
                                                        String state = defaultLayerPid.equals(layerId) ? "~" : layerId;
                                                        ui.getCmsView().stateChanged(state, appTitle + title);
                                                        suiteLayer.view(null, workArea, nodeFromState);
                                                } else {
                                                        Content layerCurrentContext = suiteLayer.getCurrentContext(workArea);
                                                        // default layer view is forced
                                                        String state = defaultLayerPid.equals(layerId) ? "~" : layerId;
                                                        ui.getCmsView().stateChanged(state, appTitle + title);
                                                        suiteLayer.view(null, workArea, nodeFromState);
                                                } else {
                                                        Content layerCurrentContext = suiteLayer.getCurrentContext(workArea);
-                                                       if (layerCurrentContext != null) {
+                                                       if (layerCurrentContext != null && !layerCurrentContext.equals(ui.getUserDir())) {
                                                                // layer was already showing a context so we set the state to it
                                                                ui.getCmsView().stateChanged(nodeToState(layerCurrentContext),
                                                                                appTitle + CmsUxUtils.getTitle(layerCurrentContext));
                                                                // layer was already showing a context so we set the state to it
                                                                ui.getCmsView().stateChanged(nodeToState(layerCurrentContext),
                                                                                appTitle + CmsUxUtils.getTitle(layerCurrentContext));
@@ -573,46 +524,20 @@ public class SuiteApp extends AbstractCmsApp implements CmsEventSubscriber {
                ProvidedSession contentSession = (ProvidedSession) CmsUxUtils.getContentSession(contentRepository,
                                ui.getCmsView());
 
                ProvidedSession contentSession = (ProvidedSession) CmsUxUtils.getContentSession(contentRepository,
                                ui.getCmsView());
 
-               String path = get(event, SuiteEvent.CONTENT_PATH);
+               String path = get(event, SuiteUxEvent.CONTENT_PATH);
 
 
-//             String nodePath = get(event, SuiteEvent.NODE_PATH);
                if (path != null && path.equals(HOME_STATE))
                        return ui.getUserDir();
                if (path != null && path.equals(HOME_STATE))
                        return ui.getUserDir();
-//             String workspace = get(event, SuiteEvent.WORKSPACE);
-
-//             Session session = jcrContentProvider.getJcrSession(contentSession, workspace);
-////           Session session = ui.getSession(workspace);
                Content node;
                if (path == null) {
                        // look for a user
                Content node;
                if (path == null) {
                        // look for a user
-                       String username = get(event, SuiteEvent.USERNAME);
+                       String username = get(event, SuiteUxEvent.USERNAME);
                        if (username == null)
                                return null;
                        User user = cmsUserManager.getUser(username);
                        if (user == null)
                                return null;
                        node = ContentUtils.roleToContent(cmsUserManager, contentSession, user);
                        if (username == null)
                                return null;
                        User user = cmsUserManager.getUser(username);
                        if (user == null)
                                return null;
                        node = ContentUtils.roleToContent(cmsUserManager, contentSession, user);
-//                     LdapName userDn;
-//                     try {
-//                             userDn = new LdapName(user.getName());
-//                     } catch (InvalidNameException e) {
-//                             throw new IllegalArgumentException("Badly formatted username", e);
-//                     }
-//                     String userNodePath = SuiteUtils.getUserNodePath(userDn);
-                       // FIXME deal with home path
-//                     return null;
-//                     if (Jcr.itemExists(session, userNodePath))
-//                             node = Jcr.getNode(session, userNodePath);
-//                     else {
-//                             Session adminSession = null;
-//                             try {
-//                                     adminSession = CmsJcrUtils.openDataAdminSession(getRepository(), workspace);
-//                                     SuiteUtils.getOrCreateUserNode(adminSession, userDn);
-//                             } finally {
-//                                     Jcr.logout(adminSession);
-//                             }
-//                             node = Jcr.getNode(session, userNodePath);
-//                     }
                } else {
                        node = contentSession.get(path);
                }
                } else {
                        node = contentSession.get(path);
                }
@@ -627,7 +552,6 @@ public class SuiteApp extends AbstractCmsApp implements CmsEventSubscriber {
                Object value = eventProperties.get(key);
                if (value == null)
                        return null;
                Object value = eventProperties.get(key);
                if (value == null)
                        return null;
-//                     throw new IllegalArgumentException("Property " + key + " must be set");
                return value.toString();
 
        }
                return value.toString();
 
        }
@@ -670,32 +594,6 @@ public class SuiteApp extends AbstractCmsApp implements CmsEventSubscriber {
                }
        }
 
                }
        }
 
-//     public void addLayer(SuiteLayer layer, Map<String, Object> properties) {
-//             if (!properties.containsKey(Constants.SERVICE_PID))
-//                     throw new IllegalArgumentException("A layer must have an ID");
-//             String pid = (String) properties.get(Constants.SERVICE_PID);
-//             List<String> types = properties.containsKey(EntityConstants.TYPE)
-//                             ? LangUtils.toStringList(properties.get(EntityConstants.TYPE))
-//                             : new ArrayList<>();
-//             if (types.isEmpty()) {
-//                     RankedObject.putIfHigherRank(layersByPid, pid, layer, properties);
-//             } else {
-//                     if (layersByPid.containsKey(pid)) {
-//                             RankedObject<SuiteLayer> current = layersByPid.get(pid);
-//                             List<String> currentTypes = current.getProperties().containsKey(EntityConstants.TYPE)
-//                                             ? LangUtils.toStringList(current.getProperties().get(EntityConstants.TYPE))
-//                                             : new ArrayList<>();
-//                             if (!types.containsAll(currentTypes)) {
-//                                     throw new IllegalArgumentException("Higher-ranked layer " + pid + " contains only types " + types
-//                                                     + ", while it must override all " + currentTypes);
-//                             }
-//                     }
-//                     RankedObject.putIfHigherRank(layersByPid, pid, layer, properties);
-//                     for (String type : types)
-//                             RankedObject.putIfHigherRank(layersByType, type, layer, properties);
-//             }
-//     }
-
        public void addLayer(SuiteLayer layer, Map<String, Object> properties) {
                if (properties.containsKey(Constants.SERVICE_PID)) {
                        String pid = (String) properties.get(Constants.SERVICE_PID);
        public void addLayer(SuiteLayer layer, Map<String, Object> properties) {
                if (properties.containsKey(Constants.SERVICE_PID)) {
                        String pid = (String) properties.get(Constants.SERVICE_PID);
@@ -733,14 +631,6 @@ public class SuiteApp extends AbstractCmsApp implements CmsEventSubscriber {
                this.cmsUserManager = cmsUserManager;
        }
 
                this.cmsUserManager = cmsUserManager;
        }
 
-//     protected Repository getRepository() {
-//             return repository;
-//     }
-//
-//     public void setRepository(Repository repository) {
-//             this.repository = repository;
-//     }
-
        protected ContentRepository getContentRepository() {
                return contentRepository;
        }
        protected ContentRepository getContentRepository() {
                return contentRepository;
        }
@@ -748,9 +638,4 @@ public class SuiteApp extends AbstractCmsApp implements CmsEventSubscriber {
        public void setContentRepository(ContentRepository contentRepository) {
                this.contentRepository = contentRepository;
        }
        public void setContentRepository(ContentRepository contentRepository) {
                this.contentRepository = contentRepository;
        }
-
-//     public void setJcrContentProvider(JcrContentProvider jcrContentProvider) {
-//             this.jcrContentProvider = jcrContentProvider;
-//     }
-
 }
 }
diff --git a/swt/org.argeo.app.ui/src/org/argeo/app/ui/SuiteEvent.java b/swt/org.argeo.app.ui/src/org/argeo/app/ui/SuiteEvent.java
deleted file mode 100644 (file)
index b408232..0000000
+++ /dev/null
@@ -1,54 +0,0 @@
-package org.argeo.app.ui;
-
-import java.util.HashMap;
-import java.util.Map;
-
-import javax.jcr.Node;
-
-import org.argeo.api.acr.Content;
-import org.argeo.api.cms.CmsEvent;
-import org.argeo.jcr.Jcr;
-import org.osgi.service.useradmin.User;
-
-/** Events specific to Argeo Suite. */
-public enum SuiteEvent implements CmsEvent {
-       openNewPart, refreshPart, switchLayer;
-
-       public final static String LAYER = "layer";
-       public final static String USERNAME = "username";
-
-       // ACR
-       public final static String CONTENT_PATH = "contentPath";
-
-       // JCR
-       @Deprecated
-       public final static String NODE_PATH = "path";
-       @Deprecated
-       public final static String WORKSPACE = "workspace";
-
-       public String getTopicBase() {
-               return "argeo.suite.ui";
-       }
-
-       public static Map<String, Object> eventProperties(Content content) {
-               Map<String, Object> properties = new HashMap<>();
-               properties.put(CONTENT_PATH, content.getPath());
-               return properties;
-       }
-
-       @Deprecated
-       public static Map<String, Object> eventProperties(Node node) {
-               Map<String, Object> properties = new HashMap<>();
-               String contentPath = '/' + Jcr.getWorkspaceName(node) + Jcr.getPath(node);
-               properties.put(CONTENT_PATH, contentPath);
-//             properties.put(NODE_PATH, Jcr.getPath(node));
-//             properties.put(WORKSPACE, Jcr.getWorkspaceName(node));
-               return properties;
-       }
-
-       public static Map<String, Object> eventProperties(User user) {
-               Map<String, Object> properties = new HashMap<>();
-               properties.put(USERNAME, user.getName());
-               return properties;
-       }
-}
index 02ff38e73a2b969759b493466609bc04c24d6e8b..c332929e153842802a567a948299beb82dbb8701 100644 (file)
@@ -12,7 +12,7 @@ import org.eclipse.swt.SWT;
 import org.eclipse.swt.layout.FormLayout;
 import org.eclipse.swt.widgets.Composite;
 
 import org.eclipse.swt.layout.FormLayout;
 import org.eclipse.swt.widgets.Composite;
 
-/** The view for the default ergonomics of Argeo Suite. */
+/** The view for the default UX of Argeo Suite. */
 class SuiteUi extends CmsSwtUi {
        private static final long serialVersionUID = 6207018859086689108L;
        private final static CmsLog log = CmsLog.getLog(SuiteUi.class);
 class SuiteUi extends CmsSwtUi {
        private static final long serialVersionUID = 6207018859086689108L;
        private final static CmsLog log = CmsLog.getLog(SuiteUi.class);
@@ -25,8 +25,6 @@ class SuiteUi extends CmsSwtUi {
        private Composite sidePane;
        private Composite dynamicArea;
 
        private Composite sidePane;
        private Composite dynamicArea;
 
-//     private Session sysSession;
-//     private Session homeSession;
        private Content userDir;
 
        private Map<String, SuiteLayer> layers = new HashMap<>();
        private Content userDir;
 
        private Map<String, SuiteLayer> layers = new HashMap<>();
@@ -34,7 +32,6 @@ class SuiteUi extends CmsSwtUi {
        private String currentLayerId = null;
 
        private boolean loginScreen = false;
        private String currentLayerId = null;
 
        private boolean loginScreen = false;
-//     private String postLoginState;
 
        public SuiteUi(Composite parent, int style) {
                super(parent, style);
 
        public SuiteUi(Composite parent, int style) {
                super(parent, style);
@@ -116,13 +113,12 @@ class SuiteUi extends CmsSwtUi {
                }
                if (context == null) {
                        if (!getCmsView().isAnonymous())
                }
                if (context == null) {
                        if (!getCmsView().isAnonymous())
-                               context = getUserDirNode();
+                               context = getUserDir();
                }
                Composite toShow = getLayer(layerId, context);
                if (toShow != null) {
                        currentLayerId = layerId;
                        if (!isDisposed()) {
                }
                Composite toShow = getLayer(layerId, context);
                if (toShow != null) {
                        currentLayerId = layerId;
                        if (!isDisposed()) {
-//                             getDisplay().syncExec(() -> {
                                if (!toShow.isDisposed()) {
                                        toShow.moveAbove(null);
                                } else {
                                if (!toShow.isDisposed()) {
                                        toShow.moveAbove(null);
                                } else {
@@ -131,7 +127,6 @@ class SuiteUi extends CmsSwtUi {
                                        toShow.moveAbove(null);
                                }
                                dynamicArea.layout(true, true);
                                        toShow.moveAbove(null);
                                }
                                dynamicArea.layout(true, true);
-//                             });
                        }
                        return toShow;
                } else {
                        }
                        return toShow;
                } else {
@@ -174,8 +169,6 @@ class SuiteUi extends CmsSwtUi {
 
        synchronized void logout() {
                userDir = null;
 
        synchronized void logout() {
                userDir = null;
-//             Jcr.logout(sysSession);
-//             Jcr.logout(homeSession);
                currentLayerId = null;
                workAreas.clear();
        }
                currentLayerId = null;
                workAreas.clear();
        }
@@ -204,27 +197,6 @@ class SuiteUi extends CmsSwtUi {
                return belowHeader;
        }
 
                return belowHeader;
        }
 
-//     Session getSysSession() {
-//             return sysSession;
-//     }
-//
-//     synchronized void initSessions(Repository repository, String userDirPath) throws RepositoryException {
-//             this.sysSession = repository.login();
-//             this.homeSession = repository.login(CmsConstants.HOME_WORKSPACE);
-//             userDir = sysSession.getNode(userDirPath);
-//             addDisposeListener((e) -> {
-//                     Jcr.logout(sysSession);
-//                     Jcr.logout(homeSession);
-//             });
-//     }
-
-       @Deprecated
-       Content getUserDirNode() {
-               if (userDir == null)
-                       return null;
-               return userDir;
-       }
-
        Content getUserDir() {
                return userDir;
        }
        Content getUserDir() {
                return userDir;
        }
@@ -233,21 +205,6 @@ class SuiteUi extends CmsSwtUi {
                this.userDir = userDir;
        }
 
                this.userDir = userDir;
        }
 
-//     Session getSysSession() {
-//             return sysSession;
-//     }
-
-//     Session getSession(String workspaceName) {
-//             if (workspaceName == null)
-//                     return sysSession;
-//             if (CmsConstants.SYS_WORKSPACE.equals(workspaceName))
-//                     return sysSession;
-//             else if (CmsConstants.HOME_WORKSPACE.equals(workspaceName))
-//                     return homeSession;
-//             else
-//                     throw new IllegalArgumentException("Unknown workspace " + workspaceName);
-//     }
-
        public Localized getTitle() {
                return title;
        }
        public Localized getTitle() {
                return title;
        }
@@ -263,13 +220,4 @@ class SuiteUi extends CmsSwtUi {
        public void setLoginScreen(boolean loginScreen) {
                this.loginScreen = loginScreen;
        }
        public void setLoginScreen(boolean loginScreen) {
                this.loginScreen = loginScreen;
        }
-
-//     public String getPostLoginState() {
-//             return postLoginState;
-//     }
-//
-//     public void setPostLoginState(String postLoginState) {
-//             this.postLoginState = postLoginState;
-//     }
-
 }
 }
index 7cda3f89299a5e634a55bd5a4de453fb9ee78cbf..2ba43145cbe245d1b29f524ddea4eccc2c238584 100644 (file)
@@ -419,7 +419,7 @@ public class SuiteUiUtils {
                        lbl.setText(txt);
                        lbl.setLayoutData(new GridData(SWT.CENTER, SWT.TOP, true, false));
                }
                        lbl.setText(txt);
                        lbl.setLayoutData(new GridData(SWT.CENTER, SWT.TOP, true, false));
                }
-               CmsSwtUtils.sendEventOnSelect(button, SuiteEvent.switchLayer.topic(), SuiteEvent.LAYER, layer);
+               CmsSwtUtils.sendEventOnSelect(button, SuiteUxEvent.switchLayer.topic(), SuiteUxEvent.LAYER, layer);
                return button;
        }
 
                return button;
        }
 
diff --git a/swt/org.argeo.app.ui/src/org/argeo/app/ui/SuiteUxEvent.java b/swt/org.argeo.app.ui/src/org/argeo/app/ui/SuiteUxEvent.java
new file mode 100644 (file)
index 0000000..00aaddc
--- /dev/null
@@ -0,0 +1,46 @@
+package org.argeo.app.ui;
+
+import java.util.HashMap;
+import java.util.Map;
+
+import javax.jcr.Node;
+
+import org.argeo.api.acr.Content;
+import org.argeo.api.cms.CmsEvent;
+import org.argeo.jcr.Jcr;
+import org.osgi.service.useradmin.User;
+
+/** Events specific to Argeo Suite UX. */
+public enum SuiteUxEvent implements CmsEvent {
+       openNewPart, refreshPart, switchLayer;
+
+       public final static String LAYER = "layer";
+       public final static String USERNAME = "username";
+
+       // ACR
+       public final static String CONTENT_PATH = "contentPath";
+
+       public String getTopicBase() {
+               return "argeo.suite.ui";
+       }
+
+       public static Map<String, Object> eventProperties(Content content) {
+               Map<String, Object> properties = new HashMap<>();
+               properties.put(CONTENT_PATH, content.getPath());
+               return properties;
+       }
+
+       @Deprecated
+       public static Map<String, Object> eventProperties(Node node) {
+               Map<String, Object> properties = new HashMap<>();
+               String contentPath = '/' + Jcr.getWorkspaceName(node) + Jcr.getPath(node);
+               properties.put(CONTENT_PATH, contentPath);
+               return properties;
+       }
+
+       public static Map<String, Object> eventProperties(User user) {
+               Map<String, Object> properties = new HashMap<>();
+               properties.put(USERNAME, user.getName());
+               return properties;
+       }
+}
index e5b474bc178e192fd489225999d2a4ba3defebcc..b34c605dc3e79059bc7fd16f008ba492bd468bbb 100644 (file)
@@ -5,7 +5,7 @@ import org.argeo.api.acr.spi.ProvidedContent;
 import org.argeo.api.cms.CmsLog;
 import org.argeo.api.cms.ux.CmsView;
 import org.argeo.app.api.EntityType;
 import org.argeo.api.cms.CmsLog;
 import org.argeo.api.cms.ux.CmsView;
 import org.argeo.app.api.EntityType;
-import org.argeo.app.ui.SuiteEvent;
+import org.argeo.app.ui.SuiteUxEvent;
 import org.argeo.cms.swt.CmsSwtUtils;
 import org.argeo.cms.swt.acr.SwtUiProvider;
 import org.argeo.cms.swt.widgets.SwtTreeView;
 import org.argeo.cms.swt.CmsSwtUtils;
 import org.argeo.cms.swt.acr.SwtUiProvider;
 import org.argeo.cms.swt.widgets.SwtTreeView;
@@ -46,7 +46,7 @@ public class ContentEntryArea implements SwtUiProvider {
                contentPart.onSelected((o) -> {
                        Content c = (Content) o;
                        log.debug(c.getPath());
                contentPart.onSelected((o) -> {
                        Content c = (Content) o;
                        log.debug(c.getPath());
-                       cmsView.sendEvent(SuiteEvent.refreshPart.topic(), SuiteEvent.eventProperties(c));
+                       cmsView.sendEvent(SuiteUxEvent.refreshPart.topic(), SuiteUxEvent.eventProperties(c));
                });
                return view;
        }
                });
                return view;
        }
index 614e87740cb986a1bf319746fa3494a956157169..657a851df2a46f5edea0ba933e8edb32ed96cd20 100644 (file)
@@ -7,7 +7,7 @@ import javax.jcr.Node;
 import javax.jcr.RepositoryException;
 
 import org.argeo.api.cms.ux.CmsView;
 import javax.jcr.RepositoryException;
 
 import org.argeo.api.cms.ux.CmsView;
-import org.argeo.app.ui.SuiteEvent;
+import org.argeo.app.ui.SuiteUxEvent;
 import org.argeo.cms.fs.CmsFsUtils;
 import org.argeo.cms.swt.CmsSwtUtils;
 import org.argeo.cms.ui.CmsUiProvider;
 import org.argeo.cms.fs.CmsFsUtils;
 import org.argeo.cms.swt.CmsSwtUtils;
 import org.argeo.cms.ui.CmsUiProvider;
@@ -29,7 +29,7 @@ public class DocumentsFolderUiProvider implements CmsUiProvider {
                        protected void externalNavigateTo(Path path) {
                                Node folderNode = cmsView.doAs(() -> CmsFsUtils.getNode(Jcr.getSession(context).getRepository(), path));
                                parent.addDisposeListener((e1) -> Jcr.logout(folderNode));
                        protected void externalNavigateTo(Path path) {
                                Node folderNode = cmsView.doAs(() -> CmsFsUtils.getNode(Jcr.getSession(context).getRepository(), path));
                                parent.addDisposeListener((e1) -> Jcr.logout(folderNode));
-                               cmsView.sendEvent(SuiteEvent.openNewPart.topic(), SuiteEvent.eventProperties(folderNode));
+                               cmsView.sendEvent(SuiteUxEvent.openNewPart.topic(), SuiteUxEvent.eventProperties(folderNode));
                        }
                };
                dfc.setLayoutData(CmsSwtUtils.fillAll());
                        }
                };
                dfc.setLayoutData(CmsSwtUtils.fillAll());
index 10ce4a358d2e8f86a7eb652b90b1bdaa7c232d5f..6c0bdfc452833c70fe85c6e770a5a6fc0bfcefaa 100644 (file)
@@ -8,7 +8,7 @@ import javax.jcr.Node;
 import javax.jcr.Repository;
 import javax.jcr.RepositoryException;
 
 import javax.jcr.Repository;
 import javax.jcr.RepositoryException;
 
-import org.argeo.app.ui.SuiteEvent;
+import org.argeo.app.ui.SuiteUxEvent;
 import org.argeo.api.cms.CmsConstants;
 import org.argeo.api.cms.ux.CmsView;
 import org.argeo.cms.fs.CmsFsUtils;
 import org.argeo.api.cms.CmsConstants;
 import org.argeo.api.cms.ux.CmsView;
 import org.argeo.cms.fs.CmsFsUtils;
@@ -46,7 +46,7 @@ public class DocumentsTreeUiProvider implements CmsUiProvider {
                                if (Files.isDirectory(newSelected)) {
                                        Node folderNode = cmsView.doAs(() -> CmsFsUtils.getNode(repository, newSelected));
                                        parent.addDisposeListener((e1) -> Jcr.logout(folderNode));
                                if (Files.isDirectory(newSelected)) {
                                        Node folderNode = cmsView.doAs(() -> CmsFsUtils.getNode(repository, newSelected));
                                        parent.addDisposeListener((e1) -> Jcr.logout(folderNode));
-                                       cmsView.sendEvent(SuiteEvent.refreshPart.topic(), SuiteEvent.eventProperties(folderNode));
+                                       cmsView.sendEvent(SuiteUxEvent.refreshPart.topic(), SuiteUxEvent.eventProperties(folderNode));
                                }
                        }
                });
                                }
                        }
                });
@@ -59,7 +59,7 @@ public class DocumentsTreeUiProvider implements CmsUiProvider {
                                if (Files.isDirectory(newSelected)) {
                                        Node folderNode = cmsView.doAs(() -> CmsFsUtils.getNode(repository, newSelected));
                                        parent.addDisposeListener((e1) -> Jcr.logout(folderNode));
                                if (Files.isDirectory(newSelected)) {
                                        Node folderNode = cmsView.doAs(() -> CmsFsUtils.getNode(repository, newSelected));
                                        parent.addDisposeListener((e1) -> Jcr.logout(folderNode));
-                                       cmsView.sendEvent(SuiteEvent.openNewPart.topic(), SuiteEvent.eventProperties(folderNode));
+                                       cmsView.sendEvent(SuiteUxEvent.openNewPart.topic(), SuiteUxEvent.eventProperties(folderNode));
                                }
                        }
                });
                                }
                        }
                });
index d86eef283b72aa8d139d396fe19a43f1466a9d6a..0fbb5cb6aaab1a2926783475dcd99ea78fc2e478 100644 (file)
@@ -13,7 +13,7 @@ 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.api.acr.Content;
 import org.argeo.api.cms.CmsConstants;
 import org.argeo.app.api.EntityType;
-import org.argeo.app.ui.SuiteEvent;
+import org.argeo.app.ui.SuiteUxEvent;
 import org.argeo.app.ui.SuiteIcon;
 import org.argeo.app.ui.widgets.TreeOrSearchArea;
 import org.argeo.cms.jcr.acr.JcrContentProvider;
 import org.argeo.app.ui.SuiteIcon;
 import org.argeo.app.ui.widgets.TreeOrSearchArea;
 import org.argeo.cms.jcr.acr.JcrContentProvider;
@@ -85,8 +85,8 @@ public class JcrContentEntryArea implements CmsUiProvider {
                        public void doubleClick(DoubleClickEvent event) {
                                Node user = (Node) ui.getTreeViewer().getStructuredSelection().getFirstElement();
                                if (user != null) {
                        public void doubleClick(DoubleClickEvent event) {
                                Node user = (Node) ui.getTreeViewer().getStructuredSelection().getFirstElement();
                                if (user != null) {
-                                       CmsSwtUtils.getCmsView(parent).sendEvent(SuiteEvent.openNewPart.topic(),
-                                                       SuiteEvent.eventProperties(user));
+                                       CmsSwtUtils.getCmsView(parent).sendEvent(SuiteUxEvent.openNewPart.topic(),
+                                                       SuiteUxEvent.eventProperties(user));
                                }
 
                        }
                                }
 
                        }
@@ -95,8 +95,8 @@ public class JcrContentEntryArea implements CmsUiProvider {
                        public void selectionChanged(SelectionChangedEvent event) {
                                Node user = (Node) ui.getTreeViewer().getStructuredSelection().getFirstElement();
                                if (user != null) {
                        public void selectionChanged(SelectionChangedEvent event) {
                                Node user = (Node) ui.getTreeViewer().getStructuredSelection().getFirstElement();
                                if (user != null) {
-                                       CmsSwtUtils.getCmsView(parent).sendEvent(SuiteEvent.refreshPart.topic(),
-                                                       SuiteEvent.eventProperties(user));
+                                       CmsSwtUtils.getCmsView(parent).sendEvent(SuiteUxEvent.refreshPart.topic(),
+                                                       SuiteUxEvent.eventProperties(user));
                                }
                        }
                });
                                }
                        }
                });
index 28a84b059d542bb3fcc4dc199a0586351ac78d45..97c0e7c6cef0e32db37b63d1170183e6e2f328e6 100644 (file)
@@ -15,7 +15,7 @@ import javax.jcr.RepositoryException;
 import org.apache.commons.io.IOUtils;
 import org.argeo.app.api.EntityNames;
 import org.argeo.app.api.EntityType;
 import org.apache.commons.io.IOUtils;
 import org.argeo.app.api.EntityNames;
 import org.argeo.app.api.EntityType;
-import org.argeo.app.ui.SuiteEvent;
+import org.argeo.app.ui.SuiteUxEvent;
 import org.argeo.api.cms.CmsLog;
 import org.argeo.api.cms.ux.CmsView;
 import org.argeo.api.cms.CmsConstants;
 import org.argeo.api.cms.CmsLog;
 import org.argeo.api.cms.ux.CmsView;
 import org.argeo.api.cms.CmsConstants;
@@ -275,8 +275,8 @@ public class OpenLayersMap extends Composite {
                        Map<String, Object> properties = new HashMap<>();
 //                     properties.put(SuiteEvent.NODE_PATH, path);
 //                     properties.put(SuiteEvent.WORKSPACE, CmsConstants.SYS_WORKSPACE);
                        Map<String, Object> properties = new HashMap<>();
 //                     properties.put(SuiteEvent.NODE_PATH, path);
 //                     properties.put(SuiteEvent.WORKSPACE, CmsConstants.SYS_WORKSPACE);
-                       properties.put(SuiteEvent.CONTENT_PATH, '/' + CmsConstants.SYS_WORKSPACE + path);
-                       cmsView.sendEvent(SuiteEvent.refreshPart.topic(), properties);
+                       properties.put(SuiteUxEvent.CONTENT_PATH, '/' + CmsConstants.SYS_WORKSPACE + path);
+                       cmsView.sendEvent(SuiteUxEvent.refreshPart.topic(), properties);
                        return null;
                }
        }
                        return null;
                }
        }
index 0329c335b9406422af77eb970f793745ef16c08c..339ea25dcc6f8807009f3601da3fa32928a15caf 100644 (file)
@@ -11,7 +11,7 @@ import org.argeo.api.acr.ContentRepository;
 import org.argeo.api.acr.ContentSession;
 import org.argeo.api.cms.ux.CmsIcon;
 import org.argeo.api.cms.ux.CmsView;
 import org.argeo.api.acr.ContentSession;
 import org.argeo.api.cms.ux.CmsIcon;
 import org.argeo.api.cms.ux.CmsView;
-import org.argeo.app.ui.SuiteEvent;
+import org.argeo.app.ui.SuiteUxEvent;
 import org.argeo.app.ui.SuiteIcon;
 import org.argeo.cms.CmsUserManager;
 import org.argeo.cms.acr.ContentUtils;
 import org.argeo.app.ui.SuiteIcon;
 import org.argeo.cms.CmsUserManager;
 import org.argeo.cms.acr.ContentUtils;
@@ -219,15 +219,15 @@ public class PeopleEntryArea implements SwtUiProvider, CmsUiProvider {
                        if (o instanceof HierarchyUnit) {
                                HierarchyUnit hierarchyUnit = (HierarchyUnit) o;
                                usersPart.setInput(hierarchyUnit);
                        if (o instanceof HierarchyUnit) {
                                HierarchyUnit hierarchyUnit = (HierarchyUnit) o;
                                usersPart.setInput(hierarchyUnit);
-                               cmsView.sendEvent(SuiteEvent.refreshPart.topic(),
-                                               SuiteEvent.eventProperties(ContentUtils.hierarchyUnitToContent(contentSession, hierarchyUnit)));
+                               cmsView.sendEvent(SuiteUxEvent.refreshPart.topic(),
+                                               SuiteUxEvent.eventProperties(ContentUtils.hierarchyUnitToContent(contentSession, hierarchyUnit)));
                        }
                });
 
                usersPart.onSelected((o) -> {
                        Content user = (Content) o;
                        if (user != null) {
                        }
                });
 
                usersPart.onSelected((o) -> {
                        Content user = (Content) o;
                        if (user != null) {
-                               cmsView.sendEvent(SuiteEvent.refreshPart.topic(), SuiteEvent.eventProperties(user));
+                               cmsView.sendEvent(SuiteUxEvent.refreshPart.topic(), SuiteUxEvent.eventProperties(user));
                                deleteItem.setEnabled(true);
                        } else {
                                deleteItem.setEnabled(false);
                                deleteItem.setEnabled(true);
                        } else {
                                deleteItem.setEnabled(false);
@@ -237,7 +237,7 @@ public class PeopleEntryArea implements SwtUiProvider, CmsUiProvider {
                usersPart.onAction((o) -> {
                        Content user = (Content) o;
                        if (user != null) {
                usersPart.onAction((o) -> {
                        Content user = (Content) o;
                        if (user != null) {
-                               cmsView.sendEvent(SuiteEvent.openNewPart.topic(), SuiteEvent.eventProperties(user));
+                               cmsView.sendEvent(SuiteUxEvent.openNewPart.topic(), SuiteUxEvent.eventProperties(user));
                        }
                });
 
                        }
                });