]> git.argeo.org Git - lgpl/argeo-commons.git/blob - security/plugins/org.argeo.security.ui/src/main/java/org/argeo/security/ui/views/RolesView.java
Move to security
[lgpl/argeo-commons.git] / security / plugins / org.argeo.security.ui / src / main / java / org / argeo / security / ui / views / RolesView.java
1 package org.argeo.security.ui.views;
2
3 import java.util.ArrayList;
4
5 import org.argeo.ArgeoException;
6 import org.argeo.security.ArgeoSecurityService;
7 import org.argeo.security.ArgeoUser;
8 import org.argeo.security.ui.SecurityUiPlugin;
9 import org.argeo.security.ui.commands.AddRole;
10 import org.argeo.security.ui.commands.OpenArgeoUserEditor;
11 import org.eclipse.core.commands.Command;
12 import org.eclipse.core.commands.IParameter;
13 import org.eclipse.core.commands.Parameterization;
14 import org.eclipse.core.commands.ParameterizedCommand;
15 import org.eclipse.jface.viewers.DoubleClickEvent;
16 import org.eclipse.jface.viewers.IDoubleClickListener;
17 import org.eclipse.jface.viewers.IStructuredContentProvider;
18 import org.eclipse.jface.viewers.IStructuredSelection;
19 import org.eclipse.jface.viewers.ITableLabelProvider;
20 import org.eclipse.jface.viewers.LabelProvider;
21 import org.eclipse.jface.viewers.TableViewer;
22 import org.eclipse.jface.viewers.Viewer;
23 import org.eclipse.swt.SWT;
24 import org.eclipse.swt.graphics.Image;
25 import org.eclipse.swt.layout.GridData;
26 import org.eclipse.swt.layout.GridLayout;
27 import org.eclipse.swt.widgets.Composite;
28 import org.eclipse.swt.widgets.Event;
29 import org.eclipse.swt.widgets.Listener;
30 import org.eclipse.swt.widgets.Table;
31 import org.eclipse.swt.widgets.Text;
32 import org.eclipse.ui.IWorkbench;
33 import org.eclipse.ui.IWorkbenchWindow;
34 import org.eclipse.ui.commands.ICommandService;
35 import org.eclipse.ui.handlers.IHandlerService;
36 import org.eclipse.ui.part.ViewPart;
37
38 /** List all roles. */
39 public class RolesView extends ViewPart {
40 public final static String ID = "org.argeo.security.ui.rolesView";
41
42 private Text newRole;
43
44 private TableViewer viewer;
45 private ArgeoSecurityService securityService;
46
47 private String addNewRoleText = "<add new role here>";
48
49 @Override
50 public void createPartControl(Composite parent) {
51 parent.setLayout(new GridLayout(1, false));
52
53 // new role text field
54 newRole = new Text(parent, SWT.BORDER);
55 newRole.setText(addNewRoleText);
56 newRole.setLayoutData(new GridData(SWT.FILL, SWT.FILL, true, false));
57 // default action is add role
58 newRole.addListener(SWT.DefaultSelection, new Listener() {
59 public void handleEvent(Event evt) {
60 IWorkbench iw = SecurityUiPlugin.getDefault().getWorkbench();
61 IHandlerService handlerService = (IHandlerService) iw
62 .getService(IHandlerService.class);
63 try {
64 handlerService.executeCommand(AddRole.COMMAND_ID, evt);
65 } catch (Exception e) {
66 throw new ArgeoException("Cannot execute add role command",
67 e);
68 }
69 }
70 });
71 // select all on focus
72 newRole.addListener(SWT.FocusIn, new Listener() {
73 public void handleEvent(Event e) {
74 newRole.selectAll();
75 }
76 });
77
78 // roles table
79 Table table = new Table(parent, SWT.V_SCROLL | SWT.BORDER);
80 table.setLayoutData(new GridData(SWT.FILL, SWT.FILL, true, true));
81 table.setLinesVisible(false);
82 table.setHeaderVisible(false);
83 viewer = new TableViewer(table);
84 viewer.setContentProvider(new RolesContentProvider());
85 viewer.setLabelProvider(new UsersLabelProvider());
86 viewer.setInput(getViewSite());
87 viewer.addDoubleClickListener(new ViewDoubleClickListener());
88 }
89
90 @Override
91 public void setFocus() {
92 viewer.getTable().setFocus();
93 }
94
95 public void setSecurityService(ArgeoSecurityService securityService) {
96 this.securityService = securityService;
97 }
98
99 public String getAddNewRoleText() {
100 return addNewRoleText;
101 }
102
103 private class RolesContentProvider implements IStructuredContentProvider {
104
105 public Object[] getElements(Object inputElement) {
106 return securityService.listEditableRoles().toArray();
107 }
108
109 public void dispose() {
110 }
111
112 public void inputChanged(Viewer viewer, Object oldInput, Object newInput) {
113 }
114
115 }
116
117 private class UsersLabelProvider extends LabelProvider implements
118 ITableLabelProvider {
119 public String getColumnText(Object element, int columnIndex) {
120 return element.toString();
121 }
122
123 public Image getColumnImage(Object element, int columnIndex) {
124 return null;
125 }
126
127 }
128
129 class ViewDoubleClickListener implements IDoubleClickListener {
130 public void doubleClick(DoubleClickEvent evt) {
131 Object obj = ((IStructuredSelection) evt.getSelection())
132 .getFirstElement();
133
134 if (obj instanceof ArgeoUser) {
135 ArgeoUser argeoUser = (ArgeoUser) obj;
136
137 IWorkbench iw = SecurityUiPlugin.getDefault().getWorkbench();
138 IHandlerService handlerService = (IHandlerService) iw
139 .getService(IHandlerService.class);
140 try {
141 String commandId = OpenArgeoUserEditor.COMMAND_ID;
142 String paramName = OpenArgeoUserEditor.PARAM_USERNAME;
143
144 // TODO: factorize this
145 // execute related command
146 IWorkbenchWindow window = iw.getActiveWorkbenchWindow();
147 ICommandService cmdService = (ICommandService) window
148 .getService(ICommandService.class);
149 Command cmd = cmdService.getCommand(commandId);
150 ArrayList<Parameterization> parameters = new ArrayList<Parameterization>();
151 IParameter iparam = cmd.getParameter(paramName);
152 Parameterization param = new Parameterization(iparam,
153 argeoUser.getUsername());
154 parameters.add(param);
155 ParameterizedCommand pc = new ParameterizedCommand(cmd,
156 parameters.toArray(new Parameterization[parameters
157 .size()]));
158 handlerService = (IHandlerService) window
159 .getService(IHandlerService.class);
160 handlerService.executeCommand(pc, null);
161 } catch (Exception e) {
162 throw new ArgeoException("Cannot open editor", e);
163 }
164
165 }
166 }
167 }
168
169 public String getNewRole() {
170 return newRole.getText();
171 }
172
173 public void refresh() {
174 viewer.refresh();
175 newRole.setText(addNewRoleText);
176 }
177 }