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
.RepositoryException
;
20 import javax
.jcr
.Session
;
21 import javax
.jcr
.observation
.Event
;
22 import javax
.jcr
.observation
.EventIterator
;
23 import javax
.jcr
.observation
.EventListener
;
25 import org
.argeo
.ArgeoException
;
26 import org
.argeo
.eclipse
.ui
.utils
.CommandUtils
;
27 import org
.argeo
.jcr
.ArgeoJcrConstants
;
28 import org
.argeo
.jcr
.ArgeoNames
;
29 import org
.argeo
.jcr
.ArgeoTypes
;
30 import org
.argeo
.jcr
.JcrUtils
;
31 import org
.argeo
.security
.ui
.admin
.SecurityAdminPlugin
;
32 import org
.argeo
.security
.ui
.admin
.UserTableComposite
;
33 import org
.argeo
.security
.ui
.admin
.commands
.OpenArgeoUserEditor
;
34 import org
.eclipse
.jface
.viewers
.DoubleClickEvent
;
35 import org
.eclipse
.jface
.viewers
.IDoubleClickListener
;
36 import org
.eclipse
.jface
.viewers
.IStructuredSelection
;
37 import org
.eclipse
.swt
.SWT
;
38 import org
.eclipse
.swt
.layout
.FillLayout
;
39 import org
.eclipse
.swt
.widgets
.Composite
;
40 import org
.eclipse
.swt
.widgets
.Display
;
41 import org
.eclipse
.ui
.part
.ViewPart
;
43 /** List all users with filter. */
44 public class UsersView
extends ViewPart
implements ArgeoNames
{
45 public final static String ID
= SecurityAdminPlugin
.PLUGIN_ID
48 private UserTableComposite userTableCmp
;
49 private Session session
;
50 private JcrUserListener userStructureListener
;
51 private JcrUserListener userPropertiesListener
;
54 public void createPartControl(Composite parent
) {
55 parent
.setLayout(new FillLayout());
57 // Create the composite that displays the list and a filter
58 userTableCmp
= new UserTableComposite(parent
, SWT
.NO_FOCUS
, session
);
59 userTableCmp
.populate(true, false);
62 userTableCmp
.getTableViewer().addDoubleClickListener(
63 new ViewDoubleClickListener());
64 getViewSite().setSelectionProvider(userTableCmp
.getTableViewer());
66 // Add listener to refresh the list when something changes
67 userStructureListener
= new JcrUserListener(getSite().getShell()
69 JcrUtils
.addListener(session
, userStructureListener
, Event
.NODE_ADDED
70 | Event
.NODE_REMOVED
, ArgeoJcrConstants
.PEOPLE_BASE_PATH
, null);
71 userPropertiesListener
= new JcrUserListener(getSite().getShell()
73 JcrUtils
.addListener(session
, userStructureListener
,
74 Event
.PROPERTY_CHANGED
| Event
.PROPERTY_ADDED
75 | Event
.PROPERTY_REMOVED
,
76 ArgeoJcrConstants
.PEOPLE_BASE_PATH
,
77 ArgeoTypes
.ARGEO_USER_PROFILE
);
81 public void setFocus() {
82 userTableCmp
.setFocus();
86 public void dispose() {
87 JcrUtils
.removeListenerQuietly(session
, userStructureListener
);
88 JcrUtils
.removeListenerQuietly(session
, userPropertiesListener
);
92 public void setSession(Session session
) {
93 this.session
= session
;
96 public void refresh() {
97 this.getSite().getShell().getDisplay().asyncExec(new Runnable() {
100 userTableCmp
.refresh();
105 private class JcrUserListener
implements EventListener
{
106 private final Display display
;
108 public JcrUserListener(Display display
) {
110 this.display
= display
;
114 public void onEvent(EventIterator events
) {
115 display
.asyncExec(new Runnable() {
118 userTableCmp
.refresh();
124 class ViewDoubleClickListener
implements IDoubleClickListener
{
125 public void doubleClick(DoubleClickEvent evt
) {
126 if (evt
.getSelection().isEmpty())
129 Object obj
= ((IStructuredSelection
) evt
.getSelection())
131 if (obj
instanceof Node
) {
133 String username
= ((Node
) obj
).getProperty(ARGEO_USER_ID
)
135 String commandId
= OpenArgeoUserEditor
.COMMAND_ID
;
136 String paramName
= OpenArgeoUserEditor
.PARAM_USERNAME
;
137 CommandUtils
.callCommand(commandId
, paramName
, username
);
138 } catch (RepositoryException e
) {
139 throw new ArgeoException("Cannot open user editor", e
);