Work on people UI
authorMathieu Baudier <mbaudier@argeo.org>
Sun, 18 Sep 2022 09:59:00 +0000 (11:59 +0200)
committerMathieu Baudier <mbaudier@argeo.org>
Sun, 18 Sep 2022 09:59:00 +0000 (11:59 +0200)
14 files changed:
org.argeo.app.ui/OSGI-INF/groupUiProvider.xml [new file with mode: 0644]
org.argeo.app.ui/OSGI-INF/hierarchyUnitUiProvider.xml [new file with mode: 0644]
org.argeo.app.ui/OSGI-INF/personUiProvider.xml
org.argeo.app.ui/bnd.bnd
org.argeo.app.ui/config/groupUiProvider.properties [new file with mode: 0644]
org.argeo.app.ui/config/hierarchyUnitUiProvider.properties [new file with mode: 0644]
org.argeo.app.ui/config/peopleLayer.properties
org.argeo.app.ui/config/personUiProvider.properties
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/people/GroupUiProvider.java [new file with mode: 0644]
org.argeo.app.ui/src/org/argeo/app/ui/people/HierarchyUnitUiProvider.java [new file with mode: 0644]
org.argeo.app.ui/src/org/argeo/app/ui/people/PeopleEntryArea.java
org.argeo.app.ui/src/org/argeo/app/ui/people/PersonUiProvider.java

diff --git a/org.argeo.app.ui/OSGI-INF/groupUiProvider.xml b/org.argeo.app.ui/OSGI-INF/groupUiProvider.xml
new file mode 100644 (file)
index 0000000..8e1ef05
--- /dev/null
@@ -0,0 +1,9 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<scr:component xmlns:scr="http://www.osgi.org/xmlns/scr/v1.1.0">
+   <implementation class="org.argeo.app.ui.people.GroupUiProvider"/>
+   <service>
+      <provide interface="org.argeo.cms.swt.acr.SwtUiProvider"/>
+   </service>
+   <properties entry="config/groupUiProvider.properties"/>
+   <reference bind="setCmsUserManager" cardinality="1..1" interface="org.argeo.cms.CmsUserManager" name="CmsUserManager" policy="static"/>
+</scr:component>
diff --git a/org.argeo.app.ui/OSGI-INF/hierarchyUnitUiProvider.xml b/org.argeo.app.ui/OSGI-INF/hierarchyUnitUiProvider.xml
new file mode 100644 (file)
index 0000000..7e93eb5
--- /dev/null
@@ -0,0 +1,9 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<scr:component xmlns:scr="http://www.osgi.org/xmlns/scr/v1.1.0">
+   <implementation class="org.argeo.app.ui.people.HierarchyUnitUiProvider"/>
+   <service>
+      <provide interface="org.argeo.cms.swt.acr.SwtUiProvider"/>
+   </service>
+   <properties entry="config/hierarchyUnitUiProvider.properties"/>
+   <reference bind="setCmsUserManager" cardinality="1..1" interface="org.argeo.cms.CmsUserManager" name="CmsUserManager" policy="static"/>
+</scr:component>
index 4bcfef157eb605a6a53db03d404ae5b175842894..d5a6862f32eeab82de273d583ae80662b85060dd 100644 (file)
@@ -2,7 +2,7 @@
 <scr:component xmlns:scr="http://www.osgi.org/xmlns/scr/v1.1.0" activate="init">
    <implementation class="org.argeo.app.ui.people.PersonUiProvider"/>
    <service>
-      <provide interface="org.argeo.cms.ui.CmsUiProvider"/>
+      <provide interface="org.argeo.cms.swt.acr.SwtUiProvider"/>
    </service>
    <properties entry="config/personUiProvider.properties"/>
    <property name="availableRoles" type="String">
index f70f51aaa8197765f1d582f55ce9471589527458..4a74f2d830a6bd076dd24bd5829354b56fdc75f3 100644 (file)
@@ -14,6 +14,8 @@ OSGI-INF/dashboardLayer.xml,\
 OSGI-INF/peopleEntryArea.xml,\
 OSGI-INF/peopleLayer.xml,\
 OSGI-INF/personUiProvider.xml,\
+OSGI-INF/groupUiProvider.xml,\
+OSGI-INF/hierarchyUnitUiProvider.xml,\
 OSGI-INF/contentEntryArea.xml,\
 OSGI-INF/contentLayer.xml,\
 OSGI-INF/documentsFolder.xml,\
diff --git a/org.argeo.app.ui/config/groupUiProvider.properties b/org.argeo.app.ui/config/groupUiProvider.properties
new file mode 100644 (file)
index 0000000..d3c2fb3
--- /dev/null
@@ -0,0 +1,3 @@
+service.pid=argeo.people.ui.groupUiProvider
+
+entity.type=ldap:groupOfNames
\ No newline at end of file
diff --git a/org.argeo.app.ui/config/hierarchyUnitUiProvider.properties b/org.argeo.app.ui/config/hierarchyUnitUiProvider.properties
new file mode 100644 (file)
index 0000000..b67b2c8
--- /dev/null
@@ -0,0 +1,3 @@
+service.pid=argeo.people.ui.hierarchyUnitUiProvider
+
+entity.type=ldap:organizationalUnit
\ No newline at end of file
index 0f1c9cee8dba234a1ba1c6bbcf390975d0a0094f..3c649affdd77bd6ae4d794f21a433c21013c4b8c 100644 (file)
@@ -4,4 +4,4 @@ icon=people
 weights=3000,7000
 title=%people
 
-entity.type=ldap:inetOrgPerson,ldap:groupOfNames
\ No newline at end of file
+entity.type=ldap:inetOrgPerson,ldap:groupOfNames,ldap:organizationalUnit
\ No newline at end of file
index 249b453a9d3a4cf48dd50a1e096c7c246c73ac1c..27963d1dfa18d83a0c9ef195561a291b4cd8af0c 100644 (file)
@@ -1,3 +1,3 @@
 service.pid=argeo.people.ui.personUiProvider
 
-entity.type=ldap:inetOrgPerson,ldap:groupOfNames
\ No newline at end of file
+entity.type=ldap:inetOrgPerson,ldap:posixAccount
\ No newline at end of file
index 1e71179d4f5f288f6a29384253490fc873cb3285..271010dbd32c226fd3efc996b8aacc0b75714bbb 100644 (file)
@@ -80,6 +80,7 @@ public class SuiteApp extends AbstractCmsApp implements CmsEventSubscriber {
        @Deprecated
        private String defaultThemeId = "org.argeo.app.theme.default";
 
+       // TODO use QName as key for byType
        private Map<String, RankedObject<SwtUiProvider>> uiProvidersByPid = Collections.synchronizedMap(new HashMap<>());
        private Map<String, RankedObject<SwtUiProvider>> uiProvidersByType = Collections.synchronizedMap(new HashMap<>());
        private Map<String, RankedObject<SuiteLayer>> layersByPid = Collections.synchronizedSortedMap(new TreeMap<>());
@@ -362,8 +363,9 @@ public class SuiteApp extends AbstractCmsApp implements CmsEventSubscriber {
                                if (byType.containsKey(type))
                                        types.add(type);
                        }
-                       if (types.size() == 0)
+                       if (types.size() == 0) {
                                throw new IllegalArgumentException("No type found for " + content + " (" + objectClasses + ")");
+                       }
                        String type = types.iterator().next();
                        if (!byType.containsKey(type))
                                throw new IllegalArgumentException("No component found for " + content + " with type " + type);
@@ -549,8 +551,8 @@ public class SuiteApp extends AbstractCmsApp implements CmsEventSubscriber {
                                        }
                                }
                        } catch (Exception e) {
-                               log.error("Cannot handle event " + event, e);
-//                     CmsView.getCmsView(ui).exception(e);
+                               CmsFeedback.show("Cannot handle event " + event, e);
+//                             log.error("Cannot handle event " + event, e);
                        }
                });
        }
index d1a349fb9b61e93d0d0328739fe5ec664e0a8c9b..e5b474bc178e192fd489225999d2a4ba3defebcc 100644 (file)
@@ -8,7 +8,7 @@ import org.argeo.app.api.EntityType;
 import org.argeo.app.ui.SuiteEvent;
 import org.argeo.cms.swt.CmsSwtUtils;
 import org.argeo.cms.swt.acr.SwtUiProvider;
-import org.argeo.cms.swt.widgets.SwtHierarchicalPart;
+import org.argeo.cms.swt.widgets.SwtTreeView;
 import org.argeo.cms.ux.acr.ContentHierarchicalPart;
 import org.eclipse.swt.layout.GridLayout;
 import org.eclipse.swt.widgets.Composite;
@@ -39,7 +39,7 @@ public class ContentEntryArea implements SwtUiProvider {
                };
                contentPart.setInput(rootContent);
 
-               SwtHierarchicalPart<Content> view = new SwtHierarchicalPart<>(parent, 0, contentPart);
+               SwtTreeView<Content> view = new SwtTreeView<>(parent, 0, contentPart);
                view.setLayoutData(CmsSwtUtils.fillAll());
 
                contentPart.setInput(rootContent);
diff --git a/org.argeo.app.ui/src/org/argeo/app/ui/people/GroupUiProvider.java b/org.argeo.app.ui/src/org/argeo/app/ui/people/GroupUiProvider.java
new file mode 100644 (file)
index 0000000..6b5eccd
--- /dev/null
@@ -0,0 +1,23 @@
+package org.argeo.app.ui.people;
+
+import org.argeo.api.acr.Content;
+import org.argeo.cms.CmsUserManager;
+import org.argeo.cms.swt.acr.SwtUiProvider;
+import org.eclipse.swt.widgets.Composite;
+import org.eclipse.swt.widgets.Control;
+import org.eclipse.swt.widgets.Label;
+
+public class GroupUiProvider implements SwtUiProvider {
+       private CmsUserManager cmsUserManager;
+
+       @Override
+       public Control createUiPart(Composite parent, Content context) {
+               new Label(parent, 0).setText("Group " + context);
+               return null;
+       }
+
+       public void setCmsUserManager(CmsUserManager cmsUserManager) {
+               this.cmsUserManager = cmsUserManager;
+       }
+
+}
diff --git a/org.argeo.app.ui/src/org/argeo/app/ui/people/HierarchyUnitUiProvider.java b/org.argeo.app.ui/src/org/argeo/app/ui/people/HierarchyUnitUiProvider.java
new file mode 100644 (file)
index 0000000..9738be8
--- /dev/null
@@ -0,0 +1,23 @@
+package org.argeo.app.ui.people;
+
+import org.argeo.api.acr.Content;
+import org.argeo.cms.CmsUserManager;
+import org.argeo.cms.swt.acr.SwtUiProvider;
+import org.eclipse.swt.widgets.Composite;
+import org.eclipse.swt.widgets.Control;
+import org.eclipse.swt.widgets.Label;
+
+public class HierarchyUnitUiProvider implements SwtUiProvider {
+       private CmsUserManager cmsUserManager;
+
+       @Override
+       public Control createUiPart(Composite parent, Content context) {
+               new Label(parent,0).setText("Hierarchy unit "+context);
+               return null;
+       }
+
+       public void setCmsUserManager(CmsUserManager cmsUserManager) {
+               this.cmsUserManager = cmsUserManager;
+       }
+
+}
index ab06bcaa1ea9118a7b0f387b9e57eb8f5ebd182f..eb39e062c29a439628f788951ae92d8b1fafa5b3 100644 (file)
@@ -25,8 +25,8 @@ import org.argeo.cms.swt.CmsSwtTheme;
 import org.argeo.cms.swt.CmsSwtUtils;
 import org.argeo.cms.swt.Selected;
 import org.argeo.cms.swt.acr.SwtUiProvider;
-import org.argeo.cms.swt.widgets.SwtHierarchicalPart;
-import org.argeo.cms.swt.widgets.SwtTabularPart;
+import org.argeo.cms.swt.widgets.SwtTableView;
+import org.argeo.cms.swt.widgets.SwtTreeView;
 import org.argeo.cms.ui.CmsUiProvider;
 import org.argeo.cms.ux.widgets.AbstractHierarchicalPart;
 import org.argeo.cms.ux.widgets.Column;
@@ -97,7 +97,10 @@ public class PeopleEntryArea implements SwtUiProvider, CmsUiProvider {
                                                                || CurrentUser.implies(CmsRole.userAdmin,
                                                                                IpaUtils.IPA_ACCOUNTS_RDN + "," + directory.getBase())) // IPA
                                                {
-                                                       visible.add(directory);
+                                                       // we do not show the base level
+                                                       for (HierarchyUnit hu : directory.getDirectHierarchyUnits(true)) {
+                                                               visible.add(hu);
+                                                       }
                                                }
 
                                        }
@@ -110,9 +113,13 @@ public class PeopleEntryArea implements SwtUiProvider, CmsUiProvider {
                                return model.getHierarchyUnitName();
                        }
 
+                       @Override
+                       public CmsIcon getIcon(HierarchyUnit model) {
+                               return SuiteIcon.group;
+                       }
+
                };
-               SwtHierarchicalPart<HierarchyUnit> directoriesView = new SwtHierarchicalPart<>(sashForm, SWT.NONE,
-                               hierarchyPart);
+               SwtTreeView<HierarchyUnit> directoriesView = new SwtTreeView<>(sashForm, SWT.NONE, hierarchyPart);
 
                DefaultTabularPart<HierarchyUnit, Content> usersPart = new DefaultTabularPart<>() {
 
@@ -178,7 +185,7 @@ public class PeopleEntryArea implements SwtUiProvider, CmsUiProvider {
                });
                usersPart.addColumn((Column<Content>) (role) -> role.attr(LdapAttrs.mail.qName()));
 
-               SwtTabularPart<HierarchyUnit, Content> usersView = new SwtTabularPart<>(sashForm, SWT.NONE, usersPart);
+               SwtTableView<HierarchyUnit, Content> usersView = new SwtTableView<>(sashForm, SWT.NONE, usersPart);
 
                // toolbar
                Composite bottom = new Composite(parent, SWT.NONE);
@@ -198,7 +205,10 @@ public class PeopleEntryArea implements SwtUiProvider, CmsUiProvider {
                // CONTROLLER
                hierarchyPart.onSelected((o) -> {
                        if (o instanceof HierarchyUnit) {
-                               usersPart.setInput((HierarchyUnit) o);
+                               HierarchyUnit hierarchyUnit = (HierarchyUnit) o;
+                               usersPart.setInput(hierarchyUnit);
+                               cmsView.sendEvent(SuiteEvent.refreshPart.topic(),
+                                               SuiteEvent.eventProperties(ContentUtils.hierarchyUnitToContent(contentSession, hierarchyUnit)));
                        }
                });
 
index 9a0b5b7e628e6ac59e9299539255d5f3f3fcc116..d1dfd7861ff7ad85fd35d981c24dfdf99876a55f 100644 (file)
@@ -12,8 +12,8 @@ import org.argeo.cms.CmsUserManager;
 import org.argeo.cms.Localized;
 import org.argeo.cms.swt.CmsSwtUtils;
 import org.argeo.cms.swt.acr.SwtSection;
+import org.argeo.cms.swt.acr.SwtUiProvider;
 import org.argeo.cms.swt.widgets.EditableText;
-import org.argeo.cms.ui.CmsUiProvider;
 import org.argeo.util.naming.LdapAttrs;
 import org.argeo.util.naming.LdapObjs;
 import org.eclipse.swt.SWT;
@@ -30,7 +30,7 @@ import org.eclipse.swt.widgets.Text;
 import org.osgi.service.useradmin.User;
 
 /** Edit a suite user. */
-public class PersonUiProvider implements CmsUiProvider {
+public class PersonUiProvider implements SwtUiProvider {
        private String[] availableRoles;
        private CmsUserManager cmsUserManager;