Improve localisation
[gpl/argeo-suite.git] / swt / org.argeo.app.ui / src / org / argeo / app / ui / people / GroupUiProvider.java
index 8cf24f00c0e7851cd0160be65ef751b96b2e5a4f..f0de1ca59d356e9b4c5f4453a87a15ee7e2d6367 100644 (file)
@@ -2,10 +2,12 @@ package org.argeo.app.ui.people;
 
 import org.argeo.api.acr.Content;
 import org.argeo.api.acr.ContentSession;
+import org.argeo.api.acr.ldap.LdapAcrUtils;
 import org.argeo.api.acr.ldap.LdapAttr;
 import org.argeo.api.acr.ldap.LdapObj;
 import org.argeo.api.acr.spi.ProvidedContent;
 import org.argeo.api.cms.directory.CmsGroup;
+import org.argeo.api.cms.directory.CmsUser;
 import org.argeo.api.cms.directory.CmsUserManager;
 import org.argeo.api.cms.directory.HierarchyUnit;
 import org.argeo.app.ui.SuiteIcon;
@@ -13,6 +15,7 @@ import org.argeo.app.ui.SuiteMsg;
 import org.argeo.app.ui.SuiteUiUtils;
 import org.argeo.cms.CurrentUser;
 import org.argeo.cms.acr.ContentUtils;
+import org.argeo.cms.auth.CmsRole;
 import org.argeo.cms.swt.CmsSwtTheme;
 import org.argeo.cms.swt.CmsSwtUtils;
 import org.argeo.cms.swt.Selected;
@@ -44,10 +47,11 @@ public class GroupUiProvider implements SwtUiProvider {
                ContentSession contentSession = ((ProvidedContent) context).getSession();
 
                TabularPart<Content, Content> membersPart = new AbstractTabularPart<Content, Content>() {
-                       Role[] roles = context.adapt(CmsGroup.class).getMembers();
+                       Role[] roles;
 
                        @Override
                        public int getItemCount() {
+                               roles = context.adapt(CmsGroup.class).getMembers();
                                return roles.length;
                        }
 
@@ -68,13 +72,9 @@ public class GroupUiProvider implements SwtUiProvider {
 
                // title
                // TODO localise at content level
-               String title;
-               if (context.hasContentClass(LdapObj.organization))
-                       title = SuiteMsg.org.lead() + " " + context.attr(LdapAttr.cn) + " ("
-                                       + hierarchyUnit.getHierarchyUnitLabel(CurrentUser.locale()) + ")";
-               else
-                       title = SuiteMsg.group.lead() + " " + context.attr(LdapAttr.cn) + " ("
-                                       + hierarchyUnit.getHierarchyUnitLabel(CurrentUser.locale()) + ")";
+               String title = (context.hasContentClass(LdapObj.organization) ? SuiteMsg.org.lead() : SuiteMsg.group.lead())
+                               + " " + LdapAcrUtils.getLocalized(context, LdapAttr.cn.qName(), CurrentUser.locale()) + " ("
+                               + hierarchyUnit.getHierarchyUnitLabel(CurrentUser.locale()) + ")";
                SuiteUiUtils.addFormLabel(area, title);
 
                // toolbar
@@ -87,19 +87,37 @@ public class GroupUiProvider implements SwtUiProvider {
 
                ToolItem addItem = new ToolItem(toolBar, SWT.FLAT);
                addItem.setImage(theme.getSmallIcon(SuiteIcon.add));
+               addItem.setEnabled(CurrentUser.implies(CmsRole.groupAdmin, hierarchyUnit.getBase()));
+
+               // members view
+               SwtTableView<Content, Content> membersView = new SwtTableView<>(area, SWT.BORDER, membersPart);
+               membersView.setLayoutData(CmsSwtUtils.fillAll());
+               membersView.refresh();
+
+               // CONTROLLER
+               membersPart.onSelected((model) -> {
+                       deleteItem.setEnabled(CurrentUser.implies(CmsRole.groupAdmin, hierarchyUnit.getBase()));
+                       deleteItem.setData(model);
+               });
+
                addItem.addSelectionListener((Selected) (e) -> {
                        ChooseUserDialog chooseUserDialog = new ChooseUserDialog(parent.getDisplay().getActiveShell(),
                                        SuiteMsg.chooseAMember.lead(), contentSession, cmsUserManager, hierarchyUnit);
                        if (chooseUserDialog.open() == CmsDialog.OK) {
                                Content chosen = chooseUserDialog.getSelected();
-                               // TODO add
+                               cmsUserManager.addMember(context.adapt(CmsGroup.class), chosen.adapt(CmsUser.class));
+                               membersPart.refresh();
+                       }
+               });
+
+               deleteItem.addSelectionListener((Selected) (e) -> {
+                       if (deleteItem.getData() != null) {
+                               Content chosen = (Content) deleteItem.getData();
+                               cmsUserManager.removeMember(context.adapt(CmsGroup.class), chosen.adapt(CmsUser.class));
+                               membersPart.refresh();
                        }
                });
 
-               // members view
-               SwtTableView<Content, Content> membersView = new SwtTableView<>(area, SWT.BORDER, membersPart);
-               membersView.setLayoutData(CmsSwtUtils.fillAll());
-               membersView.refresh();
                return membersView;
 
        }