1 package org
.argeo
.cms
.users
;
4 import javax
.jcr
.RepositoryException
;
5 import javax
.jcr
.Session
;
6 import javax
.jcr
.security
.AccessControlManager
;
7 import javax
.jcr
.security
.Privilege
;
9 import org
.argeo
.ArgeoException
;
10 import org
.argeo
.cms
.CmsUiProvider
;
11 import org
.argeo
.cms
.CmsUtils
;
12 import org
.argeo
.cms
.maintenance
.NonAdminPage
;
13 import org
.argeo
.eclipse
.ui
.dialogs
.UserCreationWizard
;
14 import org
.argeo
.eclipse
.ui
.parts
.UsersTable
;
15 import org
.argeo
.jcr
.JcrUtils
;
16 import org
.argeo
.security
.UserAdminService
;
17 import org
.argeo
.security
.jcr
.JcrSecurityModel
;
18 import org
.eclipse
.jface
.viewers
.ISelectionChangedListener
;
19 import org
.eclipse
.jface
.viewers
.IStructuredSelection
;
20 import org
.eclipse
.jface
.viewers
.SelectionChangedEvent
;
21 import org
.eclipse
.jface
.viewers
.TableViewer
;
22 import org
.eclipse
.jface
.wizard
.WizardDialog
;
23 import org
.eclipse
.swt
.SWT
;
24 import org
.eclipse
.swt
.events
.DisposeEvent
;
25 import org
.eclipse
.swt
.events
.DisposeListener
;
26 import org
.eclipse
.swt
.events
.SelectionEvent
;
27 import org
.eclipse
.swt
.events
.SelectionListener
;
28 import org
.eclipse
.swt
.layout
.GridLayout
;
29 import org
.eclipse
.swt
.widgets
.Button
;
30 import org
.eclipse
.swt
.widgets
.Composite
;
31 import org
.eclipse
.swt
.widgets
.Control
;
34 * Simple page to manage users of a given repository. We still rely on Argeo
35 * model; with user stored in the main workspace
37 public class Users
implements CmsUiProvider
{
39 // Enable user CRUD // INJECTED
40 private UserAdminService userAdminService
;
41 private JcrSecurityModel jcrSecurityModel
;
42 private String userWkspName
;
45 NonAdminPage nap
= new NonAdminPage();
46 UserPage userPage
= new UserPage();
48 // Manage authorization
50 public Control
createUi(Composite parent
, Node context
)
51 throws RepositoryException
{
52 if (isAdmin(context
)) {
53 Session session
= context
.getSession().getRepository()
55 return createMainLayout(parent
, session
);
57 nap
.createUi(parent
, context
);
62 // Left: User Table - Right User Details Edition
63 private Control
createMainLayout(Composite parent
, final Session session
)
64 throws RepositoryException
{
66 Composite layoutCmp
= new Composite(parent
, SWT
.NO_FOCUS
);
67 layoutCmp
.setLayoutData(CmsUtils
.fillAll());
69 .setLayout(CmsUtils
.noSpaceGridLayout(new GridLayout(2, true)));
71 Composite left
= new Composite(layoutCmp
, SWT
.NO_FOCUS
);
72 left
.setLayoutData(CmsUtils
.fillAll());
73 UsersTable table
= createUsersTable(left
, session
);
75 final Composite right
= new Composite(layoutCmp
, SWT
.NO_FOCUS
);
76 right
.setLayoutData(CmsUtils
.fillAll());
77 // Composite innerPage = createUserPage(right);
78 // final UserViewerOld userViewer = new UserViewerOld(innerPage);
80 final TableViewer viewer
= table
.getTableViewer();
81 viewer
.addSelectionChangedListener(new ISelectionChangedListener() {
84 public void selectionChanged(SelectionChangedEvent event
) {
85 IStructuredSelection selection
= (IStructuredSelection
) viewer
87 if (selection
.isEmpty()) {
88 // Should we clean the right column?
91 Node context
= (Node
) selection
.getFirstElement();
93 CmsUtils
.clear(right
);
94 userPage
.createUi(right
, context
);
96 right
.getParent().layout();
97 } catch (RepositoryException e
) {
99 throw new ArgeoException("unable to create "
100 + "editor for user " + context
, e
);
108 private UsersTable
createUsersTable(Composite parent
, final Session session
)
109 throws RepositoryException
{
110 parent
.setLayout(CmsUtils
.noSpaceGridLayout());
112 // Add user CRUD buttons
113 Composite buttonCmp
= new Composite(parent
, SWT
.NO_FOCUS
);
114 buttonCmp
.setLayoutData(CmsUtils
.fillWidth());
115 buttonCmp
.setLayout(new GridLayout(2, false));
117 final Button deleteBtn
= new Button(buttonCmp
, SWT
.PUSH
);
118 deleteBtn
.setText("Delete selected");
120 final Button addBtn
= new Button(buttonCmp
, SWT
.PUSH
);
121 addBtn
.setText("Create");
122 addBtn
.addSelectionListener(new SelectionListener() {
123 private static final long serialVersionUID
= 9214984636836267786L;
126 public void widgetSelected(SelectionEvent e
) {
127 UserCreationWizard newUserWizard
= new UserCreationWizard(
128 session
, userAdminService
, jcrSecurityModel
);
129 WizardDialog dialog
= new WizardDialog(addBtn
.getShell(),
132 // TODO refresh list if user has been created
136 public void widgetDefaultSelected(SelectionEvent e
) {
140 // Create the composite that displays the list and a filter
141 UsersTable userTableCmp
= new UsersTable(parent
, SWT
.NO_FOCUS
, session
);
142 userTableCmp
.populate(true, false);
143 userTableCmp
.setLayoutData(CmsUtils
.fillAll());
144 userTableCmp
.addDisposeListener(new DisposeListener() {
145 private static final long serialVersionUID
= -8854052549807709846L;
148 public void widgetDisposed(DisposeEvent event
) {
149 JcrUtils
.logoutQuietly(session
);
154 // userTableCmp.getTableViewer().addDoubleClickListener(
155 // new ViewDoubleClickListener());
156 // getViewSite().setSelectionProvider(userTableCmp.getTableViewer());
158 // Add listener to refresh the list when something changes
159 // userStructureListener = new JcrUserListener(getSite().getShell()
161 // JcrUtils.addListener(session, userStructureListener, Event.NODE_ADDED
162 // | Event.NODE_REMOVED, ArgeoJcrConstants.PEOPLE_BASE_PATH, null);
163 // userPropertiesListener = new JcrUserListener(getSite().getShell()
165 // JcrUtils.addListener(session, userStructureListener,
166 // Event.PROPERTY_CHANGED | Event.PROPERTY_ADDED
167 // | Event.PROPERTY_REMOVED,
168 // ArgeoJcrConstants.PEOPLE_BASE_PATH,
169 // ArgeoTypes.ARGEO_USER_PROFILE);
174 // protected Composite createUserPage(Composite parent) {
175 // parent.setLayout(CmsUtils.noSpaceGridLayout());
176 // ScrolledPage scrolled = new ScrolledPage(parent, SWT.NONE);
177 // scrolled.setLayoutData(CmsUtils.fillAll());
178 // scrolled.setLayout(CmsUtils.noSpaceGridLayout());
179 // // TODO manage style
180 // // CmsUtils.style(scrolled, "maintenance_user_form");
182 // Composite page = new Composite(scrolled, SWT.NONE);
183 // page.setLayout(CmsUtils.noSpaceGridLayout());
184 // page.setBackgroundMode(SWT.INHERIT_NONE);
189 private boolean isAdmin(Node node
) throws RepositoryException
{
190 // FIXME clean this once new user management policy has been
192 AccessControlManager acm
= node
.getSession().getAccessControlManager();
193 Privilege
[] privs
= new Privilege
[1];
194 privs
[0] = acm
.privilegeFromName(Privilege
.JCR_ALL
);
195 return acm
.hasPrivileges("/", privs
);
199 // public void dispose() {
200 // JcrUtils.removeListenerQuietly(session, userStructureListener);
201 // JcrUtils.removeListenerQuietly(session, userPropertiesListener);
202 // JcrUtils.logoutQuietly(session);
206 // // public void setSession(Session session) {
207 // // this.session = session;
210 // public void refresh() {
211 // this.getSite().getShell().getDisplay().asyncExec(new Runnable() {
213 // public void run() {
214 // userTableCmp.refresh();
219 // private class JcrUserListener implements EventListener {
220 // private final Display display;
222 // public JcrUserListener(Display display) {
224 // this.display = display;
228 // public void onEvent(EventIterator events) {
229 // display.asyncExec(new Runnable() {
231 // public void run() {
232 // userTableCmp.refresh();
238 // class ViewDoubleClickListener implements IDoubleClickListener {
239 // public void doubleClick(DoubleClickEvent evt) {
240 // if (evt.getSelection().isEmpty())
243 // Object obj = ((IStructuredSelection) evt.getSelection())
244 // .getFirstElement();
245 // if (obj instanceof Node) {
247 // String username = ((Node) obj).getProperty(ARGEO_USER_ID)
249 // String commandId = OpenArgeoUserEditor.COMMAND_ID;
250 // String paramName = OpenArgeoUserEditor.PARAM_USERNAME;
251 // CommandUtils.callCommand(commandId, paramName, username);
252 // } catch (RepositoryException e) {
253 // throw new ArgeoException("Cannot open user editor", e);
258 /* DEPENDENCY INJECTION */
259 public void setWorkspaceName(String workspaceName
) {
260 this.userWkspName
= workspaceName
;
263 public void setUserAdminService(UserAdminService userAdminService
) {
264 this.userAdminService
= userAdminService
;
265 userPage
.setUserAdminService(userAdminService
);
268 public void setJcrSecurityModel(JcrSecurityModel jcrSecurityModel
) {
269 this.jcrSecurityModel
= jcrSecurityModel
;
270 userPage
.setJcrSecurityModel(jcrSecurityModel
);