]> git.argeo.org Git - lgpl/argeo-commons.git/blob - org.argeo.security.ui.admin/src/org/argeo/security/ui/admin/views/UsersView.java
Plug automatic refresh of the transaction edition commands.
[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 java.util.ArrayList;
19 import java.util.List;
20
21 import org.argeo.ArgeoException;
22 import org.argeo.eclipse.ui.EclipseUiUtils;
23 import org.argeo.jcr.ArgeoNames;
24 import org.argeo.security.ui.admin.SecurityAdminImages;
25 import org.argeo.security.ui.admin.SecurityAdminPlugin;
26 import org.argeo.security.ui.admin.internal.ColumnDefinition;
27 import org.argeo.security.ui.admin.internal.CommonNameLP;
28 import org.argeo.security.ui.admin.internal.MailLP;
29 import org.argeo.security.ui.admin.internal.UiAdminUtils;
30 import org.argeo.security.ui.admin.internal.UserAdminConstants;
31 import org.argeo.security.ui.admin.internal.UserDragListener;
32 import org.argeo.security.ui.admin.internal.UserNameLP;
33 import org.argeo.security.ui.admin.internal.UserTableDefaultDClickListener;
34 import org.argeo.security.ui.admin.internal.UserTableViewer;
35 import org.eclipse.jface.viewers.TableViewer;
36 import org.eclipse.swt.SWT;
37 import org.eclipse.swt.dnd.DND;
38 import org.eclipse.swt.dnd.TextTransfer;
39 import org.eclipse.swt.dnd.Transfer;
40 import org.eclipse.swt.graphics.Image;
41 import org.eclipse.swt.widgets.Composite;
42 import org.eclipse.ui.part.ViewPart;
43 import org.osgi.framework.InvalidSyntaxException;
44 import org.osgi.service.useradmin.Role;
45 import org.osgi.service.useradmin.User;
46 import org.osgi.service.useradmin.UserAdmin;
47
48 /** List all users with filter - based on Ldif userAdmin */
49 public class UsersView extends ViewPart implements ArgeoNames {
50 // private final static Log log = LogFactory.getLog(UsersView.class);
51 public final static String ID = SecurityAdminPlugin.PLUGIN_ID
52 + ".usersView";
53
54 /* DEPENDENCY INJECTION */
55 private UserAdmin userAdmin;
56
57 // UI Objects
58 private UserTableViewer userTableViewerCmp;
59 private TableViewer userViewer;
60 private List<ColumnDefinition> columnDefs = new ArrayList<ColumnDefinition>();
61
62 @Override
63 public void createPartControl(Composite parent) {
64
65 parent.setLayout(EclipseUiUtils.noSpaceGridLayout());
66 // Define the displayed columns
67 columnDefs.add(new ColumnDefinition(new CommonNameLP(), "Common Name",
68 150));
69 columnDefs.add(new ColumnDefinition(new MailLP(), "E-mail", 150));
70 columnDefs.add(new ColumnDefinition(new UserNameLP(),
71 "Distinguished Name", 300));
72
73 // Create and configure the table
74 userTableViewerCmp = new MyUserTableViewer(parent, SWT.MULTI
75 | SWT.H_SCROLL | SWT.V_SCROLL, userAdmin);
76 userTableViewerCmp.setLayoutData(EclipseUiUtils.fillAll());
77
78 userTableViewerCmp.setColumnDefinitions(columnDefs);
79 userTableViewerCmp.populate(true, false);
80
81 // Links
82 userViewer = userTableViewerCmp.getTableViewer();
83 userViewer.addDoubleClickListener(new UserTableDefaultDClickListener());
84 getViewSite().setSelectionProvider(userViewer);
85
86 // Really?
87 userTableViewerCmp.refresh();
88
89 // Drag and drop
90 int operations = DND.DROP_COPY | DND.DROP_MOVE;
91 Transfer[] tt = new Transfer[] { TextTransfer.getInstance() };
92 userViewer.addDragSupport(operations, tt, new UserDragListener(
93 userViewer));
94
95 // FIXME insure the group and person icons are registered before calling
96 // the open editor
97 @SuppressWarnings("unused")
98 Image dummyImg = SecurityAdminImages.ICON_GROUP;
99 dummyImg = SecurityAdminImages.ICON_USER;
100 }
101
102 private class MyUserTableViewer extends UserTableViewer {
103 private static final long serialVersionUID = 8467999509931900367L;
104
105 private final String[] knownProps = { UserAdminConstants.KEY_UID,
106 UserAdminConstants.KEY_DN, UserAdminConstants.KEY_CN,
107 UserAdminConstants.KEY_FIRSTNAME,
108 UserAdminConstants.KEY_LASTNAME, UserAdminConstants.KEY_MAIL };
109
110 public MyUserTableViewer(Composite parent, int style,
111 UserAdmin userAdmin) {
112 super(parent, style, userAdmin);
113 }
114
115 @Override
116 protected List<User> listFilteredElements(String filter) {
117 Role[] roles;
118
119 try {
120 StringBuilder builder = new StringBuilder();
121
122 StringBuilder tmpBuilder = new StringBuilder();
123 if (UiAdminUtils.notNull(filter))
124 for (String prop : knownProps) {
125 tmpBuilder.append("(");
126 tmpBuilder.append(prop);
127 tmpBuilder.append("=*");
128 tmpBuilder.append(filter);
129 tmpBuilder.append("*)");
130 }
131 if (tmpBuilder.length() > 1) {
132 builder.append("(&(objectclass=inetOrgPerson)(|");
133 builder.append(tmpBuilder.toString());
134 builder.append("))");
135 } else
136 builder.append("(objectclass=inetOrgPerson)");
137 roles = userAdmin.getRoles(builder.toString());
138 } catch (InvalidSyntaxException e) {
139 throw new ArgeoException("Unable to get roles with filter: "
140 + filter, e);
141 }
142 List<User> users = new ArrayList<User>();
143 for (Role role : roles)
144 // if (role.getType() == Role.USER && role.getType() !=
145 // Role.GROUP)
146 users.add((User) role);
147 return users;
148 }
149 }
150
151 public void refresh() {
152 userTableViewerCmp.refresh();
153 }
154
155 // Override generic view methods
156 @Override
157 public void dispose() {
158 super.dispose();
159 // try {
160 // if (userTransaction != null
161 // && userTransaction.getStatus() != Status.STATUS_NO_TRANSACTION)
162 // userTransaction.rollback();
163 // } catch (Exception e) {
164 // log.error("Cannot clean transaction", e);
165 // }
166 }
167
168 @Override
169 public void setFocus() {
170 userTableViewerCmp.setFocus();
171 }
172
173 /* DEPENDENCY INJECTION */
174 public void setUserAdmin(UserAdmin userAdmin) {
175 this.userAdmin = userAdmin;
176 }
177 }