]> git.argeo.org Git - gpl/argeo-suite.git/blob - org.argeo.app.ui/src/org/argeo/app/ui/people/UsersEntryArea.java
Refactor to use ACR instead of JCR.
[gpl/argeo-suite.git] / org.argeo.app.ui / src / org / argeo / app / ui / people / UsersEntryArea.java
1 package org.argeo.app.ui.people;
2
3 import java.util.ArrayList;
4 import java.util.List;
5
6 import javax.jcr.Node;
7 import javax.jcr.RepositoryException;
8
9 import org.argeo.api.acr.Content;
10 import org.argeo.api.cms.CmsTheme;
11 import org.argeo.api.cms.CmsView;
12 import org.argeo.app.ui.SuiteEvent;
13 import org.argeo.app.ui.SuiteIcon;
14 import org.argeo.app.ui.dialogs.NewUserWizard;
15 import org.argeo.cms.CmsUserManager;
16 import org.argeo.cms.jcr.acr.JcrContent;
17 import org.argeo.cms.swt.CmsSwtUtils;
18 import org.argeo.cms.swt.Selected;
19 import org.argeo.cms.swt.acr.SwtUiProvider;
20 import org.argeo.cms.swt.dialogs.CmsWizardDialog;
21 import org.argeo.cms.swt.widgets.SwtHierarchicalPart;
22 import org.argeo.cms.swt.widgets.SwtTabularPart;
23 import org.argeo.cms.ui.CmsUiProvider;
24 import org.argeo.cms.ux.widgets.HierarchicalPart;
25 import org.argeo.cms.ux.widgets.TabularPart;
26 import org.argeo.osgi.useradmin.HierarchyUnit;
27 import org.argeo.osgi.useradmin.UserDirectory;
28 import org.eclipse.jface.window.Window;
29 import org.eclipse.jface.wizard.Wizard;
30 import org.eclipse.swt.SWT;
31 import org.eclipse.swt.custom.SashForm;
32 import org.eclipse.swt.layout.GridData;
33 import org.eclipse.swt.layout.GridLayout;
34 import org.eclipse.swt.widgets.Composite;
35 import org.eclipse.swt.widgets.Control;
36 import org.eclipse.swt.widgets.TableItem;
37 import org.eclipse.swt.widgets.ToolBar;
38 import org.eclipse.swt.widgets.ToolItem;
39 import org.eclipse.swt.widgets.TreeItem;
40 import org.osgi.service.useradmin.Role;
41 import org.osgi.service.useradmin.User;
42
43 /** Entry to the admin area. */
44 public class UsersEntryArea implements SwtUiProvider, CmsUiProvider {
45
46 private CmsUserManager cmsUserManager;
47
48 @Override
49 public Control createUiPart(Composite parent, Content context) {
50 CmsTheme theme = CmsSwtUtils.getCmsTheme(parent);
51 CmsView cmsView = CmsSwtUtils.getCmsView(parent);
52 parent.setLayout(new GridLayout());
53
54 SashForm sashForm = new SashForm(parent, SWT.VERTICAL);
55 CmsSwtUtils.fill(sashForm);
56
57 // MODEL
58 List<UserDirectory> directories = new ArrayList<>(cmsUserManager.getUserDirectories());
59 // List<User> orgs = cmsUserManager.listGroups(null, true, false);
60
61 // VIEW
62 HierarchicalPart directoriesView = new SwtHierarchicalPart(sashForm, SWT.NONE) {
63
64 @Override
65 protected void refreshRootItem(TreeItem item) {
66 int index = getTree().indexOf(item);
67 UserDirectory directory = (UserDirectory) directories.get(index);
68 item.setData(directory);
69 item.setText(directory.getBasePath());
70
71 item.setItemCount(directory.getHierarchyChildCount());
72 }
73
74 @Override
75 protected void refreshItem(TreeItem parentItem, TreeItem item) {
76 int index = getTree().indexOf(item);
77 HierarchyUnit parent = (HierarchyUnit) parentItem.getData();
78 HierarchyUnit child = parent.getHierarchyChild(index);
79 item.setData(child);
80 item.setText(child.getHierarchyUnitName());
81 item.setItemCount(child.getHierarchyChildCount());
82 }
83
84 @Override
85 protected int getRootItemCount() {
86 return directories.size();
87 }
88
89 };
90
91 TabularPart usersView = new SwtTabularPart(sashForm, SWT.NONE) {
92 List<? extends Role> roles;
93
94 @Override
95 protected void refreshItem(TableItem item) {
96 int index = getTable().indexOf(item);
97 User role = (User) roles.get(index);
98 item.setData(role);
99 item.setText(role.getName());
100 }
101
102 @Override
103 protected int getItemCount() {
104 HierarchyUnit hu = (HierarchyUnit) getInput();
105 if (hu == null)
106 return 0;
107 roles = hu.getRoles(null, false);
108 return roles.size();
109 }
110
111 };
112
113 Composite bottom = new Composite(parent, SWT.NONE);
114 bottom.setLayoutData(CmsSwtUtils.fillWidth());
115 bottom.setLayout(CmsSwtUtils.noSpaceGridLayout());
116 ToolBar bottomToolBar = new ToolBar(bottom, SWT.NONE);
117 bottomToolBar.setLayoutData(new GridData(SWT.END, SWT.FILL, true, false));
118 ToolItem deleteItem = new ToolItem(bottomToolBar, SWT.FLAT);
119 deleteItem.setEnabled(false);
120 // CmsUiUtils.style(deleteItem, SuiteStyle.recentItems);
121 deleteItem.setImage(SuiteIcon.delete.getSmallIcon(theme));
122 ToolItem addItem = new ToolItem(bottomToolBar, SWT.FLAT);
123 addItem.setImage(SuiteIcon.add.getSmallIcon(theme));
124
125 // CONTROLLER
126 directoriesView.onSelected((o) -> {
127 HierarchyUnit hu = (HierarchyUnit) o;
128 usersView.setInput(hu);
129 });
130
131 usersView.onSelected((o) -> {
132 User user = (User) o;
133 if (user != null) {
134 cmsView.sendEvent(SuiteEvent.refreshPart.topic(), SuiteEvent.eventProperties(user));
135 deleteItem.setEnabled(true);
136 } else {
137 deleteItem.setEnabled(false);
138 }
139 });
140
141 usersView.onAction((o) -> {
142 User user = (User) o;
143 if (user != null) {
144 cmsView.sendEvent(SuiteEvent.openNewPart.topic(), SuiteEvent.eventProperties(user));
145 }
146 });
147
148 addItem.addSelectionListener((Selected) (e) -> {
149 // SuiteUtils.getOrCreateUserNode(adminSession, userDn);
150 Wizard wizard = new NewUserWizard(null);
151 CmsWizardDialog dialog = new CmsWizardDialog(parent.getShell(), wizard);
152 // WizardDialog dialog = new WizardDialog(shell, wizard);
153 if (dialog.open() == Window.OK) {
154 // TODO create
155 }
156 });
157
158 directoriesView.refresh();
159 usersView.refresh();
160
161 return sashForm;
162 }
163
164 // private String getUserProperty(Object element, String key) {
165 // Object value = ((User) element).getProperties().get(key);
166 // return value != null ? value.toString() : null;
167 // }
168
169 public void setCmsUserManager(CmsUserManager cmsUserManager) {
170 this.cmsUserManager = cmsUserManager;
171 }
172
173 @Override
174 public Control createUi(Composite parent, Node context) throws RepositoryException {
175 return createUiPart(parent, JcrContent.nodeToContent(context));
176 }
177
178 }