From: Mathieu Baudier Date: Sun, 18 Sep 2022 09:59:00 +0000 (+0200) Subject: Work on people UI X-Git-Tag: v2.3.8~43 X-Git-Url: https://git.argeo.org/?p=gpl%2Fargeo-suite.git;a=commitdiff_plain;h=446d637e8e7c48edce93f11de493fdf22171eb3e Work on people UI --- diff --git a/org.argeo.app.ui/OSGI-INF/groupUiProvider.xml b/org.argeo.app.ui/OSGI-INF/groupUiProvider.xml new file mode 100644 index 0000000..8e1ef05 --- /dev/null +++ b/org.argeo.app.ui/OSGI-INF/groupUiProvider.xml @@ -0,0 +1,9 @@ + + + + + + + + + diff --git a/org.argeo.app.ui/OSGI-INF/hierarchyUnitUiProvider.xml b/org.argeo.app.ui/OSGI-INF/hierarchyUnitUiProvider.xml new file mode 100644 index 0000000..7e93eb5 --- /dev/null +++ b/org.argeo.app.ui/OSGI-INF/hierarchyUnitUiProvider.xml @@ -0,0 +1,9 @@ + + + + + + + + + diff --git a/org.argeo.app.ui/OSGI-INF/personUiProvider.xml b/org.argeo.app.ui/OSGI-INF/personUiProvider.xml index 4bcfef1..d5a6862 100644 --- a/org.argeo.app.ui/OSGI-INF/personUiProvider.xml +++ b/org.argeo.app.ui/OSGI-INF/personUiProvider.xml @@ -2,7 +2,7 @@ - + diff --git a/org.argeo.app.ui/bnd.bnd b/org.argeo.app.ui/bnd.bnd index f70f51a..4a74f2d 100644 --- a/org.argeo.app.ui/bnd.bnd +++ b/org.argeo.app.ui/bnd.bnd @@ -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 index 0000000..d3c2fb3 --- /dev/null +++ b/org.argeo.app.ui/config/groupUiProvider.properties @@ -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 index 0000000..b67b2c8 --- /dev/null +++ b/org.argeo.app.ui/config/hierarchyUnitUiProvider.properties @@ -0,0 +1,3 @@ +service.pid=argeo.people.ui.hierarchyUnitUiProvider + +entity.type=ldap:organizationalUnit \ No newline at end of file diff --git a/org.argeo.app.ui/config/peopleLayer.properties b/org.argeo.app.ui/config/peopleLayer.properties index 0f1c9ce..3c649af 100644 --- a/org.argeo.app.ui/config/peopleLayer.properties +++ b/org.argeo.app.ui/config/peopleLayer.properties @@ -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 diff --git a/org.argeo.app.ui/config/personUiProvider.properties b/org.argeo.app.ui/config/personUiProvider.properties index 249b453..27963d1 100644 --- a/org.argeo.app.ui/config/personUiProvider.properties +++ b/org.argeo.app.ui/config/personUiProvider.properties @@ -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 diff --git a/org.argeo.app.ui/src/org/argeo/app/ui/SuiteApp.java b/org.argeo.app.ui/src/org/argeo/app/ui/SuiteApp.java index 1e71179..271010d 100644 --- a/org.argeo.app.ui/src/org/argeo/app/ui/SuiteApp.java +++ b/org.argeo.app.ui/src/org/argeo/app/ui/SuiteApp.java @@ -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> uiProvidersByPid = Collections.synchronizedMap(new HashMap<>()); private Map> uiProvidersByType = Collections.synchronizedMap(new HashMap<>()); private Map> 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); } }); } diff --git a/org.argeo.app.ui/src/org/argeo/app/ui/library/ContentEntryArea.java b/org.argeo.app.ui/src/org/argeo/app/ui/library/ContentEntryArea.java index d1a349f..e5b474b 100644 --- a/org.argeo.app.ui/src/org/argeo/app/ui/library/ContentEntryArea.java +++ b/org.argeo.app.ui/src/org/argeo/app/ui/library/ContentEntryArea.java @@ -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 view = new SwtHierarchicalPart<>(parent, 0, contentPart); + SwtTreeView 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 index 0000000..6b5eccd --- /dev/null +++ b/org.argeo.app.ui/src/org/argeo/app/ui/people/GroupUiProvider.java @@ -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 index 0000000..9738be8 --- /dev/null +++ b/org.argeo.app.ui/src/org/argeo/app/ui/people/HierarchyUnitUiProvider.java @@ -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; + } + +} diff --git a/org.argeo.app.ui/src/org/argeo/app/ui/people/PeopleEntryArea.java b/org.argeo.app.ui/src/org/argeo/app/ui/people/PeopleEntryArea.java index ab06bca..eb39e06 100644 --- a/org.argeo.app.ui/src/org/argeo/app/ui/people/PeopleEntryArea.java +++ b/org.argeo.app.ui/src/org/argeo/app/ui/people/PeopleEntryArea.java @@ -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 directoriesView = new SwtHierarchicalPart<>(sashForm, SWT.NONE, - hierarchyPart); + SwtTreeView directoriesView = new SwtTreeView<>(sashForm, SWT.NONE, hierarchyPart); DefaultTabularPart usersPart = new DefaultTabularPart<>() { @@ -178,7 +185,7 @@ public class PeopleEntryArea implements SwtUiProvider, CmsUiProvider { }); usersPart.addColumn((Column) (role) -> role.attr(LdapAttrs.mail.qName())); - SwtTabularPart usersView = new SwtTabularPart<>(sashForm, SWT.NONE, usersPart); + SwtTableView 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))); } }); diff --git a/org.argeo.app.ui/src/org/argeo/app/ui/people/PersonUiProvider.java b/org.argeo.app.ui/src/org/argeo/app/ui/people/PersonUiProvider.java index 9a0b5b7..d1dfd78 100644 --- a/org.argeo.app.ui/src/org/argeo/app/ui/people/PersonUiProvider.java +++ b/org.argeo.app.ui/src/org/argeo/app/ui/people/PersonUiProvider.java @@ -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;