X-Git-Url: http://git.argeo.org/?a=blobdiff_plain;ds=sidebyside;f=swt%2Forg.argeo.app.ui%2Fsrc%2Forg%2Fargeo%2Fapp%2Fui%2Fpeople%2FGroupUiProvider.java;h=0731e0ef97f11b56509b1c690eaa133a8a2c76b5;hb=1fac2689d2c064f870a9f7f0f014f4dc7cc499d0;hp=8cf24f00c0e7851cd0160be65ef751b96b2e5a4f;hpb=bb0d8f19da5caff8bad3986e17cdff4cb5dcd236;p=gpl%2Fargeo-suite.git diff --git a/swt/org.argeo.app.ui/src/org/argeo/app/ui/people/GroupUiProvider.java b/swt/org.argeo.app.ui/src/org/argeo/app/ui/people/GroupUiProvider.java index 8cf24f0..0731e0e 100644 --- a/swt/org.argeo.app.ui/src/org/argeo/app/ui/people/GroupUiProvider.java +++ b/swt/org.argeo.app.ui/src/org/argeo/app/ui/people/GroupUiProvider.java @@ -2,17 +2,20 @@ 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; -import org.argeo.app.ui.SuiteMsg; -import org.argeo.app.ui.SuiteUiUtils; +import org.argeo.app.swt.ux.SuiteSwtUtils; +import org.argeo.app.ux.SuiteIcon; +import org.argeo.app.ux.SuiteMsg; 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 membersPart = new AbstractTabularPart() { - Role[] roles = context.adapt(CmsGroup.class).getMembers(); + Role[] roles; @Override public int getItemCount() { + roles = context.adapt(CmsGroup.class).getMembers(); return roles.length; } @@ -68,14 +72,10 @@ 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()) + ")"; - SuiteUiUtils.addFormLabel(area, title); + String title = (context.hasContentClass(LdapObj.organization) ? SuiteMsg.org.lead() : SuiteMsg.group.lead()) + + " " + LdapAcrUtils.getLocalized(context, LdapAttr.cn.qName(), CurrentUser.locale()) + " (" + + hierarchyUnit.getHierarchyUnitLabel(CurrentUser.locale()) + ")"; + SuiteSwtUtils.addFormLabel(area, title); // toolbar ToolBar toolBar = new ToolBar(area, SWT.NONE); @@ -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 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 membersView = new SwtTableView<>(area, SWT.BORDER, membersPart); - membersView.setLayoutData(CmsSwtUtils.fillAll()); - membersView.refresh(); return membersView; }