1 package org
.argeo
.security
.ui
.admin
.views
;
3 import java
.util
.ArrayList
;
7 import javax
.jcr
.NodeIterator
;
8 import javax
.jcr
.RepositoryException
;
9 import javax
.jcr
.Session
;
10 import javax
.jcr
.observation
.EventIterator
;
11 import javax
.jcr
.observation
.EventListener
;
12 import javax
.jcr
.query
.Query
;
14 import org
.argeo
.ArgeoException
;
15 import org
.argeo
.eclipse
.ui
.dialogs
.Error
;
16 import org
.argeo
.jcr
.ArgeoNames
;
17 import org
.argeo
.jcr
.ArgeoTypes
;
18 import org
.argeo
.security
.ArgeoUser
;
19 import org
.argeo
.security
.ui
.admin
.SecurityAdminPlugin
;
20 import org
.argeo
.security
.ui
.admin
.commands
.OpenArgeoUserEditor
;
21 import org
.argeo
.security
.ui
.admin
.editors
.ArgeoUserEditor
;
22 import org
.argeo
.security
.ui
.admin
.editors
.ArgeoUserEditorInput
;
23 import org
.eclipse
.core
.commands
.Command
;
24 import org
.eclipse
.core
.commands
.IParameter
;
25 import org
.eclipse
.core
.commands
.Parameterization
;
26 import org
.eclipse
.core
.commands
.ParameterizedCommand
;
27 import org
.eclipse
.jface
.viewers
.DoubleClickEvent
;
28 import org
.eclipse
.jface
.viewers
.IDoubleClickListener
;
29 import org
.eclipse
.jface
.viewers
.IStructuredContentProvider
;
30 import org
.eclipse
.jface
.viewers
.IStructuredSelection
;
31 import org
.eclipse
.jface
.viewers
.ITableLabelProvider
;
32 import org
.eclipse
.jface
.viewers
.LabelProvider
;
33 import org
.eclipse
.jface
.viewers
.TableViewer
;
34 import org
.eclipse
.jface
.viewers
.Viewer
;
35 import org
.eclipse
.swt
.SWT
;
36 import org
.eclipse
.swt
.graphics
.Image
;
37 import org
.eclipse
.swt
.widgets
.Composite
;
38 import org
.eclipse
.swt
.widgets
.Table
;
39 import org
.eclipse
.swt
.widgets
.TableColumn
;
40 import org
.eclipse
.ui
.IWorkbench
;
41 import org
.eclipse
.ui
.IWorkbenchWindow
;
42 import org
.eclipse
.ui
.PartInitException
;
43 import org
.eclipse
.ui
.commands
.ICommandService
;
44 import org
.eclipse
.ui
.handlers
.IHandlerService
;
45 import org
.eclipse
.ui
.part
.ViewPart
;
47 /** List all users. */
48 public class UsersView
extends ViewPart
implements ArgeoNames
, ArgeoTypes
,
50 public final static String ID
= "org.argeo.security.ui.admin.adminUsersView";
52 private TableViewer viewer
;
53 private Session session
;
56 public void createPartControl(Composite parent
) {
57 viewer
= new TableViewer(createTable(parent
));
58 viewer
.setContentProvider(new UsersContentProvider());
59 viewer
.setLabelProvider(new UsersLabelProvider());
60 viewer
.addDoubleClickListener(new ViewDoubleClickListener());
61 viewer
.setInput(getViewSite());
64 protected Table
createTable(Composite parent
) {
65 Table table
= new Table(parent
, SWT
.MULTI
| SWT
.H_SCROLL
| SWT
.V_SCROLL
);
66 table
.setLinesVisible(true);
67 table
.setHeaderVisible(true);
68 TableColumn column
= new TableColumn(table
, SWT
.LEFT
, 0);
69 column
.setText("User");
71 column
= new TableColumn(table
, SWT
.LEFT
, 1);
72 column
.setText("First Name");
74 column
= new TableColumn(table
, SWT
.LEFT
, 2);
75 column
.setText("Last Name");
77 column
= new TableColumn(table
, SWT
.LEFT
, 3);
78 column
.setText("E-mail");
84 public void setFocus() {
85 viewer
.getTable().setFocus();
88 public void setSession(Session session
) {
89 this.session
= session
;
92 public void refresh() {
97 public void onEvent(EventIterator events
) {
101 private class UsersContentProvider
implements IStructuredContentProvider
{
103 public Object
[] getElements(Object inputElement
) {
105 Query query
= session
109 "select [" + ARGEO_PROFILE
+ "] from ["
110 + ARGEO_USER_HOME
+ "]", Query
.JCR_SQL2
);
111 NodeIterator nit
= query
.execute().getNodes();
112 List
<Node
> userProfiles
= new ArrayList
<Node
>();
113 while (nit
.hasNext()) {
114 userProfiles
.add(nit
.nextNode());
116 return userProfiles
.toArray();
117 } catch (RepositoryException e
) {
118 throw new ArgeoException("Cannot list users", e
);
120 // return userAdminService.listUsers().toArray();
123 public void dispose() {
126 public void inputChanged(Viewer viewer
, Object oldInput
, Object newInput
) {
131 private class UsersLabelProvider
extends LabelProvider
implements
132 ITableLabelProvider
{
133 public String
getColumnText(Object element
, int columnIndex
) {
135 Node userHome
= (Node
) element
;
136 switch (columnIndex
) {
138 String userName
= userHome
.getProperty(ARGEO_USER_ID
)
140 if (userName
.equals(session
.getUserID()))
141 return "[" + userName
+ "]";
145 return userHome
.getNode(ARGEO_PROFILE
)
146 .getProperty(ARGEO_FIRST_NAME
).getString();
148 return userHome
.getNode(ARGEO_PROFILE
)
149 .getProperty(ARGEO_LAST_NAME
).getString();
151 return userHome
.getNode(ARGEO_PROFILE
)
152 .getProperty(ARGEO_PRIMARY_EMAIL
).getString();
154 throw new ArgeoException("Unmanaged column " + columnIndex
);
156 } catch (RepositoryException e
) {
157 throw new ArgeoException("Cannot get text", e
);
160 // String currentUsername = CurrentUser.getUsername();
161 // String currentUsername = "";
162 // ArgeoUser user = (ArgeoUser) element;
163 // SimpleUserNature simpleNature = SimpleUserNature
164 // .findSimpleUserNature(user, simpleNatureType);
165 // switch (columnIndex) {
167 // String userName = user.getUsername();
168 // if (userName.equals(currentUsername))
169 // userName = userName + "*";
172 // return simpleNature.getFirstName();
174 // return simpleNature.getLastName();
176 // return simpleNature.getEmail();
178 // throw new ArgeoException("Unmanaged column " + columnIndex);
182 public Image
getColumnImage(Object element
, int columnIndex
) {
183 // TODO Auto-generated method stub
189 class ViewDoubleClickListener
implements IDoubleClickListener
{
190 public void doubleClick(DoubleClickEvent evt
) {
191 if (evt
.getSelection().isEmpty())
194 Object obj
= ((IStructuredSelection
) evt
.getSelection())
196 if (obj
instanceof Node
) {
198 IWorkbench iw
= SecurityAdminPlugin
.getDefault()
200 iw
.getActiveWorkbenchWindow()
202 .openEditor(new ArgeoUserEditorInput((Node
) obj
),
204 } catch (PartInitException e
) {
205 Error
.show("Cannot open user editor for " + obj
, e
);
207 } else if (obj
instanceof ArgeoUser
) {
208 ArgeoUser argeoUser
= (ArgeoUser
) obj
;
210 IWorkbench iw
= SecurityAdminPlugin
.getDefault().getWorkbench();
211 IHandlerService handlerService
= (IHandlerService
) iw
212 .getService(IHandlerService
.class);
214 String commandId
= OpenArgeoUserEditor
.COMMAND_ID
;
215 String paramName
= OpenArgeoUserEditor
.PARAM_USERNAME
;
217 // TODO: factorize this
218 // execute related command
219 IWorkbenchWindow window
= iw
.getActiveWorkbenchWindow();
220 ICommandService cmdService
= (ICommandService
) window
221 .getService(ICommandService
.class);
222 Command cmd
= cmdService
.getCommand(commandId
);
223 ArrayList
<Parameterization
> parameters
= new ArrayList
<Parameterization
>();
224 IParameter iparam
= cmd
.getParameter(paramName
);
225 Parameterization param
= new Parameterization(iparam
,
226 argeoUser
.getUsername());
227 parameters
.add(param
);
228 ParameterizedCommand pc
= new ParameterizedCommand(cmd
,
229 parameters
.toArray(new Parameterization
[parameters
231 handlerService
= (IHandlerService
) window
232 .getService(IHandlerService
.class);
233 handlerService
.executeCommand(pc
, null);
234 } catch (Exception e
) {
235 throw new ArgeoException("Cannot open editor", e
);