2 * Copyright (C) 2007-2012 Argeo GmbH
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
8 * http://www.apache.org/licenses/LICENSE-2.0
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.
16 package org
.argeo
.security
.ui
.admin
.views
;
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
;
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
;
44 /** List all users with filter. */
45 public class UsersView
extends ViewPart
implements ArgeoNames
{
46 public final static String ID
= SecurityAdminPlugin
.PLUGIN_ID
49 /* DEPENDENCY INJECTION */
50 private Session session
;
52 private UsersTable userTableCmp
;
53 private JcrUserListener userStructureListener
;
54 private JcrUserListener userPropertiesListener
;
57 public void createPartControl(Composite parent
) {
58 parent
.setLayout(new FillLayout());
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);
65 userTableCmp
.getTableViewer().addDoubleClickListener(
66 new ViewDoubleClickListener());
67 getViewSite().setSelectionProvider(userTableCmp
.getTableViewer());
69 // Add listener to refresh the list when something changes
70 userStructureListener
= new JcrUserListener(getSite().getShell()
72 JcrUtils
.addListener(session
, userStructureListener
, Event
.NODE_ADDED
73 | Event
.NODE_REMOVED
, ArgeoJcrConstants
.PEOPLE_BASE_PATH
, null);
74 userPropertiesListener
= new JcrUserListener(getSite().getShell()
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
);
84 public void setFocus() {
85 userTableCmp
.setFocus();
89 public void dispose() {
90 JcrUtils
.removeListenerQuietly(session
, userStructureListener
);
91 JcrUtils
.removeListenerQuietly(session
, userPropertiesListener
);
92 JcrUtils
.logoutQuietly(session
);
96 // public void setSession(Session session) {
97 // this.session = session;
100 public void refresh() {
101 this.getSite().getShell().getDisplay().asyncExec(new Runnable() {
104 userTableCmp
.refresh();
109 private class JcrUserListener
implements EventListener
{
110 private final Display display
;
112 public JcrUserListener(Display display
) {
114 this.display
= display
;
118 public void onEvent(EventIterator events
) {
119 display
.asyncExec(new Runnable() {
122 userTableCmp
.refresh();
128 class ViewDoubleClickListener
implements IDoubleClickListener
{
129 public void doubleClick(DoubleClickEvent evt
) {
130 if (evt
.getSelection().isEmpty())
133 Object obj
= ((IStructuredSelection
) evt
.getSelection())
135 if (obj
instanceof Node
) {
137 String username
= ((Node
) obj
).getProperty(ARGEO_USER_ID
)
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
);
149 /* DEPENDENCY INJECTION */
150 public void setRepository(Repository repository
) {
152 session
= repository
.login();
153 } catch (RepositoryException re
) {
154 throw new ArgeoException("Unable to initialise local session", re
);