]> git.argeo.org Git - gpl/argeo-suite.git/blob - GroupUiProvider.java
0731e0ef97f11b56509b1c690eaa133a8a2c76b5
[gpl/argeo-suite.git] / GroupUiProvider.java
1 package org.argeo.app.ui.people;
2
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.swt.ux.SuiteSwtUtils;
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;
36
37 public class GroupUiProvider implements SwtUiProvider {
38 private CmsUserManager cmsUserManager;
39
40 @Override
41 public Control createUiPart(Composite parent, Content context) {
42 CmsSwtTheme theme = CmsSwtUtils.getCmsTheme(parent);
43
44 Content hierarchyUnitContent = context.getParent().getParent();
45 HierarchyUnit hierarchyUnit = hierarchyUnitContent.adapt(HierarchyUnit.class);
46
47 ContentSession contentSession = ((ProvidedContent) context).getSession();
48
49 TabularPart<Content, Content> membersPart = new AbstractTabularPart<Content, Content>() {
50 Role[] roles;
51
52 @Override
53 public int getItemCount() {
54 roles = context.adapt(CmsGroup.class).getMembers();
55 return roles.length;
56 }
57
58 @Override
59 public Content getData(int row) {
60 Role role = roles[row];
61 Content content = ContentUtils.roleToContent(cmsUserManager, contentSession, role);
62 return content;
63 }
64
65 };
66 membersPart.addColumn(new UserColumn());
67
68 // VIEW
69 SwtSection area = new SwtSection(parent, 0, context);
70 area.setLayoutData(CmsSwtUtils.fillAll());
71 area.setLayout(new GridLayout());
72
73 // title
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 SuiteSwtUtils.addFormLabel(area, title);
79
80 // toolbar
81 ToolBar toolBar = new ToolBar(area, SWT.NONE);
82 toolBar.setLayoutData(new GridData(SWT.END, SWT.FILL, true, false));
83
84 ToolItem deleteItem = new ToolItem(toolBar, SWT.FLAT);
85 deleteItem.setEnabled(false);
86 deleteItem.setImage(theme.getSmallIcon(SuiteIcon.delete));
87
88 ToolItem addItem = new ToolItem(toolBar, SWT.FLAT);
89 addItem.setImage(theme.getSmallIcon(SuiteIcon.add));
90 addItem.setEnabled(CurrentUser.implies(CmsRole.groupAdmin, hierarchyUnit.getBase()));
91
92 // members view
93 SwtTableView<Content, Content> membersView = new SwtTableView<>(area, SWT.BORDER, membersPart);
94 membersView.setLayoutData(CmsSwtUtils.fillAll());
95 membersView.refresh();
96
97 // CONTROLLER
98 membersPart.onSelected((model) -> {
99 deleteItem.setEnabled(CurrentUser.implies(CmsRole.groupAdmin, hierarchyUnit.getBase()));
100 deleteItem.setData(model);
101 });
102
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();
110 }
111 });
112
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();
118 }
119 });
120
121 return membersView;
122
123 }
124
125 public void setCmsUserManager(CmsUserManager cmsUserManager) {
126 this.cmsUserManager = cmsUserManager;
127 }
128
129 }