]> git.argeo.org Git - lgpl/argeo-commons.git/blob - org.argeo.security.ui.admin/src/org/argeo/security/ui/admin/views/UsersView.java
- Start factorizing LDIF and LDAP
[lgpl/argeo-commons.git] / org.argeo.security.ui.admin / src / org / argeo / security / ui / admin / views / UsersView.java
1 /*
2 * Copyright (C) 2007-2012 Argeo GmbH
3 *
4 * Licensed under the Apache License, Version 2.0 (the "License");
5 * you may not use this file except in compliance with the License.
6 * You may obtain a copy of the License at
7 *
8 * http://www.apache.org/licenses/LICENSE-2.0
9 *
10 * Unless required by applicable law or agreed to in writing, software
11 * distributed under the License is distributed on an "AS IS" BASIS,
12 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13 * See the License for the specific language governing permissions and
14 * limitations under the License.
15 */
16 package org.argeo.security.ui.admin.views;
17
18 import javax.jcr.Node;
19 import javax.jcr.Repository;
20 import javax.jcr.RepositoryException;
21 import javax.jcr.Session;
22 import javax.jcr.observation.Event;
23 import javax.jcr.observation.EventIterator;
24 import javax.jcr.observation.EventListener;
25
26 import org.argeo.ArgeoException;
27 import org.argeo.eclipse.ui.parts.UsersTable;
28 import org.argeo.eclipse.ui.workbench.CommandUtils;
29 import org.argeo.jcr.ArgeoJcrConstants;
30 import org.argeo.jcr.ArgeoNames;
31 import org.argeo.jcr.ArgeoTypes;
32 import org.argeo.jcr.JcrUtils;
33 import org.argeo.security.ui.admin.SecurityAdminPlugin;
34 import org.argeo.security.ui.admin.commands.OpenArgeoUserEditor;
35 import org.eclipse.jface.viewers.DoubleClickEvent;
36 import org.eclipse.jface.viewers.IDoubleClickListener;
37 import org.eclipse.jface.viewers.IStructuredSelection;
38 import org.eclipse.swt.SWT;
39 import org.eclipse.swt.layout.FillLayout;
40 import org.eclipse.swt.widgets.Composite;
41 import org.eclipse.swt.widgets.Display;
42 import org.eclipse.ui.part.ViewPart;
43
44 /** List all users with filter. */
45 public class UsersView extends ViewPart implements ArgeoNames {
46 public final static String ID = SecurityAdminPlugin.PLUGIN_ID
47 + ".adminUsersView";
48
49 /* DEPENDENCY INJECTION */
50 private Session session;
51
52 private UsersTable userTableCmp;
53 private JcrUserListener userStructureListener;
54 private JcrUserListener userPropertiesListener;
55
56 @Override
57 public void createPartControl(Composite parent) {
58 parent.setLayout(new FillLayout());
59
60 // Create the composite that displays the list and a filter
61 userTableCmp = new UsersTable(parent, SWT.NO_FOCUS, session);
62 userTableCmp.populate(true, false);
63
64 // Configure
65 userTableCmp.getTableViewer().addDoubleClickListener(
66 new ViewDoubleClickListener());
67 getViewSite().setSelectionProvider(userTableCmp.getTableViewer());
68
69 // Add listener to refresh the list when something changes
70 userStructureListener = new JcrUserListener(getSite().getShell()
71 .getDisplay());
72 JcrUtils.addListener(session, userStructureListener, Event.NODE_ADDED
73 | Event.NODE_REMOVED, ArgeoJcrConstants.PEOPLE_BASE_PATH, null);
74 userPropertiesListener = new JcrUserListener(getSite().getShell()
75 .getDisplay());
76 JcrUtils.addListener(session, userStructureListener,
77 Event.PROPERTY_CHANGED | Event.PROPERTY_ADDED
78 | Event.PROPERTY_REMOVED,
79 ArgeoJcrConstants.PEOPLE_BASE_PATH,
80 ArgeoTypes.ARGEO_USER_PROFILE);
81 }
82
83 @Override
84 public void setFocus() {
85 userTableCmp.setFocus();
86 }
87
88 @Override
89 public void dispose() {
90 JcrUtils.removeListenerQuietly(session, userStructureListener);
91 JcrUtils.removeListenerQuietly(session, userPropertiesListener);
92 JcrUtils.logoutQuietly(session);
93 super.dispose();
94 }
95
96 // public void setSession(Session session) {
97 // this.session = session;
98 // }
99
100 public void refresh() {
101 this.getSite().getShell().getDisplay().asyncExec(new Runnable() {
102 @Override
103 public void run() {
104 userTableCmp.refresh();
105 }
106 });
107 }
108
109 private class JcrUserListener implements EventListener {
110 private final Display display;
111
112 public JcrUserListener(Display display) {
113 super();
114 this.display = display;
115 }
116
117 @Override
118 public void onEvent(EventIterator events) {
119 display.asyncExec(new Runnable() {
120 @Override
121 public void run() {
122 userTableCmp.refresh();
123 }
124 });
125 }
126 }
127
128 class ViewDoubleClickListener implements IDoubleClickListener {
129 public void doubleClick(DoubleClickEvent evt) {
130 if (evt.getSelection().isEmpty())
131 return;
132
133 Object obj = ((IStructuredSelection) evt.getSelection())
134 .getFirstElement();
135 if (obj instanceof Node) {
136 try {
137 String username = ((Node) obj).getProperty(ARGEO_USER_ID)
138 .getString();
139 String commandId = OpenArgeoUserEditor.COMMAND_ID;
140 String paramName = OpenArgeoUserEditor.PARAM_USERNAME;
141 CommandUtils.callCommand(commandId, paramName, username);
142 } catch (RepositoryException e) {
143 throw new ArgeoException("Cannot open user editor", e);
144 }
145 }
146 }
147 }
148
149 /* DEPENDENCY INJECTION */
150 public void setRepository(Repository repository) {
151 try {
152 session = repository.login();
153 } catch (RepositoryException re) {
154 throw new ArgeoException("Unable to initialise local session", re);
155 }
156 }
157
158 }