Fix Javadoc issue
[gpl/argeo-suite.git] / org.argeo.app.ui / src / org / argeo / app / ui / people / PeopleEntryArea.java
index 9ab179c6e700defb44836c7bbe4761fe4d826fbf..789698bcf21f4904a5217244478be393cf432a86 100644 (file)
@@ -13,31 +13,31 @@ 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.SuiteIcon;
-import org.argeo.app.ui.dialogs.NewUserWizard;
 import org.argeo.cms.CmsUserManager;
 import org.argeo.cms.acr.ContentUtils;
 import org.argeo.cms.auth.CmsRole;
 import org.argeo.cms.auth.CurrentUser;
 import org.argeo.cms.auth.UserAdminUtils;
 import org.argeo.cms.jcr.acr.JcrContent;
-import org.argeo.cms.jface.dialog.CmsWizardDialog;
 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.SwtGuidedFormDialog;
+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;
 import org.argeo.cms.ux.widgets.DefaultTabularPart;
+import org.argeo.cms.ux.widgets.GuidedForm;
 import org.argeo.cms.ux.widgets.HierarchicalPart;
 import org.argeo.osgi.useradmin.UserDirectory;
 import org.argeo.util.directory.HierarchyUnit;
+import org.argeo.util.directory.ldap.IpaUtils;
 import org.argeo.util.naming.LdapAttrs;
 import org.argeo.util.naming.LdapObjs;
 import org.eclipse.jface.window.Window;
-import org.eclipse.jface.wizard.Wizard;
 import org.eclipse.swt.SWT;
 import org.eclipse.swt.custom.SashForm;
 import org.eclipse.swt.layout.GridData;
@@ -84,14 +84,27 @@ public class PeopleEntryArea implements SwtUiProvider, CmsUiProvider {
                                List<HierarchyUnit> visible = new ArrayList<>();
                                if (parent != null) {
                                        for (HierarchyUnit hu : parent.getDirectHierarchyUnits(true)) {
-                                               if (CurrentUser.implies(CmsRole.userAdmin, hu.getContext())) {
-                                                       visible.add(hu);
-                                               }
+                                               // if parent was visible, it is visible
+                                               // TODO restrict more?
+
+//                                             if (CurrentUser.implies(CmsRole.userAdmin, hu.getBase()) //
+//                                             ) // IPA
+//                                             {
+                                               visible.add(hu);
+//                                             }
                                        }
                                } else {
                                        for (UserDirectory directory : cmsUserManager.getUserDirectories()) {
-                                               if (CurrentUser.implies(CmsRole.userAdmin, directory.getContext())) {
-                                                       visible.add(directory);
+                                               if (CurrentUser.implies(CmsRole.userAdmin, directory.getBase()) //
+                                                               || CurrentUser.implies(CmsRole.userAdmin,
+                                                                               IpaUtils.IPA_ACCOUNTS_RDN + "," + directory.getBase())) // IPA
+                                               {
+                                                       // TODO show base level
+                                               }
+                                               for (HierarchyUnit hu : directory.getDirectHierarchyUnits(true)) {
+                                                       if (CurrentUser.implies(CmsRole.userAdmin, hu.getBase())) {
+                                                               visible.add(hu);
+                                                       }
                                                }
 
                                        }
@@ -101,12 +114,22 @@ public class PeopleEntryArea implements SwtUiProvider, CmsUiProvider {
 
                        @Override
                        public String getText(HierarchyUnit model) {
-                               return model.getHierarchyUnitName();
+                               return model.getHierarchyUnitLabel(CurrentUser.locale());
+                       }
+
+                       @Override
+                       public CmsIcon getIcon(HierarchyUnit model) {
+                               Content content = ContentUtils.hierarchyUnitToContent(contentSession, model);
+                               if (content.hasContentClass(LdapObjs.organization.qName()))
+                                       return SuiteIcon.organisation;
+                               else if (content.hasContentClass(LdapObjs.posixGroup.qName()))
+                                       return SuiteIcon.users;
+                               else
+                                       return SuiteIcon.addressBook;
                        }
 
                };
-               SwtHierarchicalPart<HierarchyUnit> directoriesView = new SwtHierarchicalPart<>(sashForm, SWT.NONE,
-                               hierarchyPart);
+               SwtTreeView<HierarchyUnit> directoriesView = new SwtTreeView<>(sashForm, SWT.NONE, hierarchyPart);
 
                DefaultTabularPart<HierarchyUnit, Content> usersPart = new DefaultTabularPart<>() {
 
@@ -114,13 +137,24 @@ public class PeopleEntryArea implements SwtUiProvider, CmsUiProvider {
                        protected List<Content> asList(HierarchyUnit hu) {
                                List<Content> roles = new ArrayList<>();
                                UserDirectory ud = (UserDirectory) hu.getDirectory();
-                               for (HierarchyUnit directChild : hu.getDirectHierarchyUnits(false)) {
-                                       if (!directChild.isFunctional()) {
-                                               for (Role r : ud.getHierarchyUnitRoles(directChild, null, false)) {
-                                                       Content content = ContentUtils.roleToContent(cmsUserManager, contentSession, r);
-                                                       // if (r instanceof Person || r instanceof Organization)
-                                                       if (content.hasContentClass(LdapObjs.inetOrgPerson.qName(), LdapObjs.organization.qName()))
-                                                               roles.add(content);
+                               if (ud.getRealm().isPresent()) {
+                                       for (Role r : ud.getHierarchyUnitRoles(ud, null, true)) {
+                                               Content content = ContentUtils.roleToContent(cmsUserManager, contentSession, r);
+                                               // if (r instanceof Person || r instanceof Organization)
+                                               if (content.hasContentClass(LdapObjs.inetOrgPerson.qName(), LdapObjs.organization.qName()))
+                                                       roles.add(content);
+                                       }
+
+                               } else {
+                                       for (HierarchyUnit directChild : hu.getDirectHierarchyUnits(false)) {
+                                               if (!directChild.isFunctional()) {
+                                                       for (Role r : ud.getHierarchyUnitRoles(directChild, null, false)) {
+                                                               Content content = ContentUtils.roleToContent(cmsUserManager, contentSession, r);
+                                                               // if (r instanceof Person || r instanceof Organization)
+                                                               if (content.hasContentClass(LdapObjs.inetOrgPerson.qName(),
+                                                                               LdapObjs.organization.qName()))
+                                                                       roles.add(content);
+                                                       }
                                                }
                                        }
                                }
@@ -143,10 +177,12 @@ public class PeopleEntryArea implements SwtUiProvider, CmsUiProvider {
 
                        @Override
                        public CmsIcon getIcon(Content role) {
-                               if (role.isContentClass(LdapObjs.inetOrgPerson.qName()))
+                               if (role.hasContentClass(LdapObjs.posixAccount.qName()))
+                                       return SuiteIcon.user;
+                               else if (role.isContentClass(LdapObjs.inetOrgPerson.qName()))
                                        return SuiteIcon.person;
                                else if (role.isContentClass(LdapObjs.organization.qName()))
-                                       return SuiteIcon.organisation;
+                                       return SuiteIcon.organisationContact;
                                else if (role.isContentClass(LdapObjs.groupOfNames.qName()))
                                        return SuiteIcon.group;
                                else
@@ -161,7 +197,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);
@@ -181,7 +217,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)));
                        }
                });
 
@@ -203,9 +242,10 @@ public class PeopleEntryArea implements SwtUiProvider, CmsUiProvider {
                });
 
                addItem.addSelectionListener((Selected) (e) -> {
-                       // SuiteUtils.getOrCreateUserNode(adminSession, userDn);
-                       Wizard wizard = new NewUserWizard(null);
-                       CmsWizardDialog dialog = new CmsWizardDialog(parent.getShell(), wizard);
+                       HierarchyUnit hierarchyUnit = usersPart.getInput();
+                       Content huContent = ContentUtils.hierarchyUnitToContent(contentSession, hierarchyUnit);
+                       GuidedForm wizard = new NewUserForm(cmsUserManager, huContent);
+                       SwtGuidedFormDialog dialog = new SwtGuidedFormDialog(parent.getShell(), wizard);
                        // WizardDialog dialog = new WizardDialog(shell, wizard);
                        if (dialog.open() == Window.OK) {
                                // TODO create