1 package org
.argeo
.app
.ui
.people
;
3 import org
.argeo
.api
.acr
.Content
;
4 import org
.argeo
.api
.acr
.ContentSession
;
5 import org
.argeo
.api
.acr
.ldap
.LdapAcrUtils
;
6 import org
.argeo
.api
.acr
.ldap
.LdapAttr
;
7 import org
.argeo
.api
.acr
.ldap
.LdapObj
;
8 import org
.argeo
.api
.acr
.spi
.ProvidedContent
;
9 import org
.argeo
.api
.cms
.directory
.CmsGroup
;
10 import org
.argeo
.api
.cms
.directory
.CmsUser
;
11 import org
.argeo
.api
.cms
.directory
.CmsUserManager
;
12 import org
.argeo
.api
.cms
.directory
.HierarchyUnit
;
13 import org
.argeo
.app
.ui
.SuiteUiUtils
;
14 import org
.argeo
.app
.ux
.SuiteIcon
;
15 import org
.argeo
.app
.ux
.SuiteMsg
;
16 import org
.argeo
.cms
.CurrentUser
;
17 import org
.argeo
.cms
.acr
.ContentUtils
;
18 import org
.argeo
.cms
.auth
.CmsRole
;
19 import org
.argeo
.cms
.swt
.CmsSwtTheme
;
20 import org
.argeo
.cms
.swt
.CmsSwtUtils
;
21 import org
.argeo
.cms
.swt
.Selected
;
22 import org
.argeo
.cms
.swt
.acr
.SwtSection
;
23 import org
.argeo
.cms
.swt
.acr
.SwtUiProvider
;
24 import org
.argeo
.cms
.swt
.widgets
.SwtTableView
;
25 import org
.argeo
.cms
.ux
.widgets
.AbstractTabularPart
;
26 import org
.argeo
.cms
.ux
.widgets
.CmsDialog
;
27 import org
.argeo
.cms
.ux
.widgets
.TabularPart
;
28 import org
.eclipse
.swt
.SWT
;
29 import org
.eclipse
.swt
.layout
.GridData
;
30 import org
.eclipse
.swt
.layout
.GridLayout
;
31 import org
.eclipse
.swt
.widgets
.Composite
;
32 import org
.eclipse
.swt
.widgets
.Control
;
33 import org
.eclipse
.swt
.widgets
.ToolBar
;
34 import org
.eclipse
.swt
.widgets
.ToolItem
;
35 import org
.osgi
.service
.useradmin
.Role
;
37 public class GroupUiProvider
implements SwtUiProvider
{
38 private CmsUserManager cmsUserManager
;
41 public Control
createUiPart(Composite parent
, Content context
) {
42 CmsSwtTheme theme
= CmsSwtUtils
.getCmsTheme(parent
);
44 Content hierarchyUnitContent
= context
.getParent().getParent();
45 HierarchyUnit hierarchyUnit
= hierarchyUnitContent
.adapt(HierarchyUnit
.class);
47 ContentSession contentSession
= ((ProvidedContent
) context
).getSession();
49 TabularPart
<Content
, Content
> membersPart
= new AbstractTabularPart
<Content
, Content
>() {
53 public int getItemCount() {
54 roles
= context
.adapt(CmsGroup
.class).getMembers();
59 public Content
getData(int row
) {
60 Role role
= roles
[row
];
61 Content content
= ContentUtils
.roleToContent(cmsUserManager
, contentSession
, role
);
66 membersPart
.addColumn(new UserColumn());
69 SwtSection area
= new SwtSection(parent
, 0, context
);
70 area
.setLayoutData(CmsSwtUtils
.fillAll());
71 area
.setLayout(new GridLayout());
74 // TODO localise at content level
75 String title
= (context
.hasContentClass(LdapObj
.organization
) ? SuiteMsg
.org
.lead() : SuiteMsg
.group
.lead())
76 + " " + LdapAcrUtils
.getLocalized(context
, LdapAttr
.cn
.qName(), CurrentUser
.locale()) + " ("
77 + hierarchyUnit
.getHierarchyUnitLabel(CurrentUser
.locale()) + ")";
78 SuiteUiUtils
.addFormLabel(area
, title
);
81 ToolBar toolBar
= new ToolBar(area
, SWT
.NONE
);
82 toolBar
.setLayoutData(new GridData(SWT
.END
, SWT
.FILL
, true, false));
84 ToolItem deleteItem
= new ToolItem(toolBar
, SWT
.FLAT
);
85 deleteItem
.setEnabled(false);
86 deleteItem
.setImage(theme
.getSmallIcon(SuiteIcon
.delete
));
88 ToolItem addItem
= new ToolItem(toolBar
, SWT
.FLAT
);
89 addItem
.setImage(theme
.getSmallIcon(SuiteIcon
.add
));
90 addItem
.setEnabled(CurrentUser
.implies(CmsRole
.groupAdmin
, hierarchyUnit
.getBase()));
93 SwtTableView
<Content
, Content
> membersView
= new SwtTableView
<>(area
, SWT
.BORDER
, membersPart
);
94 membersView
.setLayoutData(CmsSwtUtils
.fillAll());
95 membersView
.refresh();
98 membersPart
.onSelected((model
) -> {
99 deleteItem
.setEnabled(CurrentUser
.implies(CmsRole
.groupAdmin
, hierarchyUnit
.getBase()));
100 deleteItem
.setData(model
);
103 addItem
.addSelectionListener((Selected
) (e
) -> {
104 ChooseUserDialog chooseUserDialog
= new ChooseUserDialog(parent
.getDisplay().getActiveShell(),
105 SuiteMsg
.chooseAMember
.lead(), contentSession
, cmsUserManager
, hierarchyUnit
);
106 if (chooseUserDialog
.open() == CmsDialog
.OK
) {
107 Content chosen
= chooseUserDialog
.getSelected();
108 cmsUserManager
.addMember(context
.adapt(CmsGroup
.class), chosen
.adapt(CmsUser
.class));
109 membersPart
.refresh();
113 deleteItem
.addSelectionListener((Selected
) (e
) -> {
114 if (deleteItem
.getData() != null) {
115 Content chosen
= (Content
) deleteItem
.getData();
116 cmsUserManager
.removeMember(context
.adapt(CmsGroup
.class), chosen
.adapt(CmsUser
.class));
117 membersPart
.refresh();
125 public void setCmsUserManager(CmsUserManager cmsUserManager
) {
126 this.cmsUserManager
= cmsUserManager
;