]> git.argeo.org Git - lgpl/argeo-commons.git/blob - security/plugins/org.argeo.security.ui.admin/src/main/java/org/argeo/security/ui/admin/views/UsersView.java
Fix a trivial null pointer exception while working on user management for connect...
[lgpl/argeo-commons.git] / security / plugins / org.argeo.security.ui.admin / src / main / java / 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.RepositoryException;
20 import javax.jcr.Session;
21 import javax.jcr.observation.Event;
22 import javax.jcr.observation.EventIterator;
23 import javax.jcr.observation.EventListener;
24
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;
42
43 /** List all users with filter. */
44 public class UsersView extends ViewPart implements ArgeoNames {
45 public final static String ID = SecurityAdminPlugin.PLUGIN_ID
46 + ".adminUsersView";
47
48 private UserTableComposite userTableCmp;
49 private Session session;
50 private JcrUserListener userStructureListener;
51 private JcrUserListener userPropertiesListener;
52
53 @Override
54 public void createPartControl(Composite parent) {
55 parent.setLayout(new FillLayout());
56
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);
60
61 // Configure
62 userTableCmp.getTableViewer().addDoubleClickListener(
63 new ViewDoubleClickListener());
64 getViewSite().setSelectionProvider(userTableCmp.getTableViewer());
65
66 // Add listener to refresh the list when something changes
67 userStructureListener = new JcrUserListener(getSite().getShell()
68 .getDisplay());
69 JcrUtils.addListener(session, userStructureListener, Event.NODE_ADDED
70 | Event.NODE_REMOVED, ArgeoJcrConstants.PEOPLE_BASE_PATH, null);
71 userPropertiesListener = new JcrUserListener(getSite().getShell()
72 .getDisplay());
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);
78 }
79
80 @Override
81 public void setFocus() {
82 userTableCmp.setFocus();
83 }
84
85 @Override
86 public void dispose() {
87 JcrUtils.removeListenerQuietly(session, userStructureListener);
88 JcrUtils.removeListenerQuietly(session, userPropertiesListener);
89 super.dispose();
90 }
91
92 public void setSession(Session session) {
93 this.session = session;
94 }
95
96 public void refresh() {
97 this.getSite().getShell().getDisplay().asyncExec(new Runnable() {
98 @Override
99 public void run() {
100 userTableCmp.refresh();
101 }
102 });
103 }
104
105 private class JcrUserListener implements EventListener {
106 private final Display display;
107
108 public JcrUserListener(Display display) {
109 super();
110 this.display = display;
111 }
112
113 @Override
114 public void onEvent(EventIterator events) {
115 display.asyncExec(new Runnable() {
116 @Override
117 public void run() {
118 userTableCmp.refresh();
119 }
120 });
121 }
122 }
123
124 class ViewDoubleClickListener implements IDoubleClickListener {
125 public void doubleClick(DoubleClickEvent evt) {
126 if (evt.getSelection().isEmpty())
127 return;
128
129 Object obj = ((IStructuredSelection) evt.getSelection())
130 .getFirstElement();
131 if (obj instanceof Node) {
132 try {
133 String username = ((Node) obj).getProperty(ARGEO_USER_ID)
134 .getString();
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);
140 }
141 }
142 }
143 }
144 }