Suite user administration.
[gpl/argeo-suite.git] / org.argeo.suite.ui / src / org / argeo / suite / ui / SuiteApp.java
index 7bb9991e0bd90d398c3250eaa7453487dfe0d27c..62e1a700a768356b444c35a42932c3cc5dcfc052 100644 (file)
@@ -18,16 +18,18 @@ import javax.jcr.nodetype.NodeType;
 import org.apache.commons.logging.Log;
 import org.apache.commons.logging.LogFactory;
 import org.argeo.api.NodeUtils;
+import org.argeo.cms.CmsUserManager;
 import org.argeo.cms.ui.AbstractCmsApp;
 import org.argeo.cms.ui.CmsTheme;
 import org.argeo.cms.ui.CmsUiProvider;
 import org.argeo.cms.ui.CmsView;
+import org.argeo.cms.ui.MvcProvider;
 import org.argeo.cms.ui.dialogs.CmsFeedback;
 import org.argeo.cms.ui.util.CmsEvent;
 import org.argeo.cms.ui.util.CmsUiUtils;
 import org.argeo.entity.EntityConstants;
 import org.argeo.entity.EntityNames;
-import org.argeo.entity.EntityTypes;
+import org.argeo.entity.EntityType;
 import org.argeo.jcr.Jcr;
 import org.argeo.jcr.JcrUtils;
 import org.argeo.suite.RankedObject;
@@ -54,9 +56,13 @@ public class SuiteApp extends AbstractCmsApp implements EventHandler {
        private final static String DEFAULT_THEME_ID = "org.argeo.suite.theme.default";
 
        private Map<String, RankedObject<CmsUiProvider>> uiProvidersByPid = Collections.synchronizedMap(new HashMap<>());
+//     private Map<String, RankedObject<MvcProvider<?, ?, ?>>> mvcProvidersByPid = Collections
+//                     .synchronizedMap(new HashMap<>());
        private Map<String, RankedObject<CmsUiProvider>> uiProvidersByType = Collections.synchronizedMap(new HashMap<>());
        private Map<String, RankedObject<SuiteLayer>> layers = Collections.synchronizedSortedMap(new TreeMap<>());
 
+       private CmsUserManager cmsUserManager;
+
        // TODO make more optimal or via CmsSession/CmsView
        private Map<String, SuiteUi> managedUis = new HashMap<>();
 
@@ -180,12 +186,19 @@ public class SuiteApp extends AbstractCmsApp implements EventHandler {
                                if (uiProvidersByType.containsKey(typeName)) {
                                        types.add(typeName);
                                }
+                               for (NodeType mixin : nodeType.getDeclaredSupertypes()) {
+                                       if (uiProvidersByType.containsKey(mixin.getName())) {
+                                               types.add(mixin.getName());
+                                       }
+                               }
                        }
                        // entity type
-                       if (context.isNodeType(EntityTypes.ENTITY_ENTITY)) {
-                               String typeName =context.getProperty(EntityNames.ENTITY_TYPE).getString();
-                               if (uiProvidersByType.containsKey(typeName)) {
-                                       types.add(typeName);
+                       if (context.isNodeType(EntityType.entity.get())) {
+                               if (context.hasProperty(EntityNames.ENTITY_TYPE)) {
+                                       String typeName = context.getProperty(EntityNames.ENTITY_TYPE).getString();
+                                       if (uiProvidersByType.containsKey(typeName)) {
+                                               types.add(typeName);
+                                       }
                                }
                        }
 
@@ -320,6 +333,25 @@ public class SuiteApp extends AbstractCmsApp implements EventHandler {
 
        }
 
+//     public void addMvcProvider(MvcProvider<?, ?, ?> uiProvider, Map<String, Object> properties) {
+//             if (properties.containsKey(Constants.SERVICE_PID)) {
+//                     String pid = (String) properties.get(Constants.SERVICE_PID);
+//                     RankedObject.putIfHigherRank(mvcProvidersByPid, pid, uiProvider, properties);
+//             }
+//     }
+//
+//     public void removeMvcProvider(MvcProvider<?, ?, ?> uiProvider, Map<String, Object> properties) {
+//             if (properties.containsKey(Constants.SERVICE_PID)) {
+//                     String pid = (String) properties.get(Constants.SERVICE_PID);
+//                     if (mvcProvidersByPid.containsKey(pid)) {
+//                             if (mvcProvidersByPid.get(pid).equals(new RankedObject<MvcProvider<?, ?, ?>>(uiProvider, properties))) {
+//                                     mvcProvidersByPid.remove(pid);
+//                             }
+//                     }
+//             }
+//
+//     }
+
        public void addLayer(SuiteLayer layer, Map<String, Object> properties) {
                if (properties.containsKey(Constants.SERVICE_PID)) {
                        String pid = (String) properties.get(Constants.SERVICE_PID);
@@ -338,6 +370,10 @@ public class SuiteApp extends AbstractCmsApp implements EventHandler {
                }
        }
 
+       public void setCmsUserManager(CmsUserManager cmsUserManager) {
+               this.cmsUserManager = cmsUserManager;
+       }
+
        @Override
        public void handleEvent(Event event) {