]> git.argeo.org Git - gpl/argeo-suite.git/blob - swt/org.argeo.app.ui/src/org/argeo/app/ui/people/PeopleEntryArea.java
e2339919bec00a17f3c7eee8e3b0e6612ddc8777
[gpl/argeo-suite.git] / swt / org.argeo.app.ui / src / org / argeo / app / ui / people / PeopleEntryArea.java
1 package org.argeo.app.ui.people;
2
3 import javax.jcr.Node;
4 import javax.jcr.RepositoryException;
5
6 import org.argeo.api.acr.Content;
7 import org.argeo.api.acr.ContentRepository;
8 import org.argeo.api.acr.ContentSession;
9 import org.argeo.api.acr.ldap.LdapAttr;
10 import org.argeo.api.cms.directory.CmsUserManager;
11 import org.argeo.api.cms.directory.HierarchyUnit;
12 import org.argeo.api.cms.ux.CmsView;
13 import org.argeo.app.ui.SuiteIcon;
14 import org.argeo.app.ui.SuiteMsg;
15 import org.argeo.app.ui.SuiteUxEvent;
16 import org.argeo.cms.acr.ContentUtils;
17 import org.argeo.cms.jcr.acr.JcrContent;
18 import org.argeo.cms.swt.CmsSwtTheme;
19 import org.argeo.cms.swt.CmsSwtUtils;
20 import org.argeo.cms.swt.Selected;
21 import org.argeo.cms.swt.acr.SwtUiProvider;
22 import org.argeo.cms.swt.widgets.SwtGuidedFormDialog;
23 import org.argeo.cms.swt.widgets.SwtTableView;
24 import org.argeo.cms.swt.widgets.SwtTreeView;
25 import org.argeo.cms.ui.CmsUiProvider;
26 import org.argeo.cms.ux.widgets.CmsDialog;
27 import org.argeo.cms.ux.widgets.Column;
28 import org.argeo.cms.ux.widgets.GuidedForm;
29 import org.eclipse.swt.SWT;
30 import org.eclipse.swt.custom.SashForm;
31 import org.eclipse.swt.graphics.Point;
32 import org.eclipse.swt.graphics.Rectangle;
33 import org.eclipse.swt.layout.GridData;
34 import org.eclipse.swt.layout.GridLayout;
35 import org.eclipse.swt.widgets.Composite;
36 import org.eclipse.swt.widgets.Control;
37 import org.eclipse.swt.widgets.Display;
38 import org.eclipse.swt.widgets.Menu;
39 import org.eclipse.swt.widgets.MenuItem;
40 import org.eclipse.swt.widgets.ToolBar;
41 import org.eclipse.swt.widgets.ToolItem;
42
43 /** Entry to the admin area. */
44 public class PeopleEntryArea implements SwtUiProvider, CmsUiProvider {
45
46 private CmsUserManager cmsUserManager;
47
48 private ContentRepository contentRepository;
49
50 @Override
51 public Control createUiPart(Composite parent, Content context) {
52 CmsSwtTheme theme = CmsSwtUtils.getCmsTheme(parent);
53 CmsView cmsView = CmsSwtUtils.getCmsView(parent);
54 parent.setLayout(new GridLayout());
55
56 ContentSession contentSession = contentRepository.get();
57 SashForm sashForm = new SashForm(parent, SWT.VERTICAL);
58 CmsSwtUtils.fill(sashForm);
59
60 // VIEW
61 HierarchyUnitPart hierarchyPart = new HierarchyUnitPart(contentSession, cmsUserManager);
62 SwtTreeView<HierarchyUnit> directoriesView = new SwtTreeView<>(sashForm, SWT.BORDER, hierarchyPart);
63
64 UsersPart usersPart = new UsersPart(contentSession, cmsUserManager);
65 usersPart.addColumn(new Column<Content>() {
66
67 @Override
68 public String getText(Content role) {
69 return role.attr(LdapAttr.mail);
70 }
71
72 @Override
73 public int getWidth() {
74 return 300;
75 }
76 });
77 // toolbar
78 Composite bottom = new Composite(sashForm, SWT.NONE);
79 bottom.setLayoutData(CmsSwtUtils.fillWidth());
80 bottom.setLayout(CmsSwtUtils.noSpaceGridLayout());
81 ToolBar bottomToolBar = new ToolBar(bottom, SWT.NONE);
82 bottomToolBar.setLayoutData(new GridData(SWT.END, SWT.FILL, true, false));
83
84 ToolItem deleteItem = new ToolItem(bottomToolBar, SWT.FLAT);
85 deleteItem.setEnabled(false);
86 deleteItem.setImage(theme.getSmallIcon(SuiteIcon.delete));
87
88 Menu menu = new Menu(Display.getCurrent().getActiveShell(), SWT.POP_UP);
89 // TODO display add user only if hierarchy unit is a POSIX group
90 // hierarchyUnit.hasContentClass(LdapObjs.posixGroup.qName())
91 MenuItem addUserItem = new MenuItem(menu, SWT.PUSH);
92 addUserItem.setImage(theme.getSmallIcon(SuiteIcon.user));
93 addUserItem.setText(SuiteMsg.user.lead());
94 addUserItem.addSelectionListener((Selected) (e) -> {
95 HierarchyUnit hierarchyUnit = usersPart.getInput();
96 Content huContent = ContentUtils.hierarchyUnitToContent(contentSession, hierarchyUnit);
97 GuidedForm wizard = new NewUserForm(cmsUserManager, huContent);
98 SwtGuidedFormDialog dialog = new SwtGuidedFormDialog(parent.getShell(), wizard);
99 if (dialog.open() == CmsDialog.OK) {
100 // TODO create
101 }
102 });
103
104 MenuItem addOrgItem = new MenuItem(menu, SWT.PUSH);
105 addOrgItem.setImage(theme.getSmallIcon(SuiteIcon.organisation));
106 addOrgItem.setText(SuiteMsg.org.lead());
107 addOrgItem.addSelectionListener((Selected) (e) -> {
108 HierarchyUnit hierarchyUnit = usersPart.getInput();
109 Content huContent = ContentUtils.hierarchyUnitToContent(contentSession, hierarchyUnit);
110 GuidedForm wizard = new NewOrgForm(cmsUserManager, huContent);
111 SwtGuidedFormDialog dialog = new SwtGuidedFormDialog(parent.getShell(), wizard);
112 if (dialog.open() == CmsDialog.OK) {
113 // TODO create
114 }
115 });
116
117 ToolItem addItem = new ToolItem(bottomToolBar, SWT.PUSH);
118 addItem.setEnabled(false);
119 addItem.setImage(theme.getSmallIcon(SuiteIcon.add));
120
121 sashForm.setWeights(new int[] { 30, 70 });
122
123 SwtTableView<?, ?> usersView = new SwtTableView<>(bottom, SWT.BORDER, usersPart);
124 usersView.setLayoutData(new GridData(SWT.FILL, SWT.FILL, true, true));
125
126 // CONTROLLER
127 hierarchyPart.onSelected((o) -> {
128 if (o instanceof HierarchyUnit) {
129 HierarchyUnit hierarchyUnit = (HierarchyUnit) o;
130 usersPart.setInput(hierarchyUnit);
131 addItem.setEnabled(true);
132 // cmsView.sendEvent(SuiteUxEvent.refreshPart.topic(), SuiteUxEvent
133 // .eventProperties(ContentUtils.hierarchyUnitToContent(contentSession, hierarchyUnit)));
134 }
135 });
136
137 usersPart.onSelected((o) -> {
138 Content user = (Content) o;
139 if (user != null) {
140 cmsView.sendEvent(SuiteUxEvent.refreshPart.topic(), SuiteUxEvent.eventProperties(user));
141 deleteItem.setEnabled(true);
142 } else {
143 deleteItem.setEnabled(false);
144 }
145 });
146
147 usersPart.onAction((o) -> {
148 Content user = (Content) o;
149 if (user != null) {
150 cmsView.sendEvent(SuiteUxEvent.openNewPart.topic(), SuiteUxEvent.eventProperties(user));
151 }
152 });
153
154 addItem.addSelectionListener((Selected) (e) -> {
155 // if (e.detail == SWT.ARROW) {
156 Rectangle rect = addItem.getBounds();
157 Point pt = new Point(rect.x, rect.y + rect.height);
158 pt = bottomToolBar.toDisplay(pt);
159 menu.setLocation(pt.x, pt.y);
160 menu.setVisible(true);
161 // }
162 });
163
164 directoriesView.refresh();
165 // usersView.refresh();
166
167 return sashForm;
168 }
169
170 public void setCmsUserManager(CmsUserManager cmsUserManager) {
171 this.cmsUserManager = cmsUserManager;
172 }
173
174 @Override
175 public Control createUi(Composite parent, Node context) throws RepositoryException {
176 return createUiPart(parent, JcrContent.nodeToContent(context));
177 }
178
179 public void setContentRepository(ContentRepository contentRepository) {
180 this.contentRepository = contentRepository;
181 }
182
183 }