package org.argeo.security.ui.admin.views;
import java.util.ArrayList;
+import java.util.List;
+
+import javax.jcr.Node;
+import javax.jcr.NodeIterator;
+import javax.jcr.RepositoryException;
+import javax.jcr.Session;
+import javax.jcr.observation.EventIterator;
+import javax.jcr.observation.EventListener;
+import javax.jcr.query.Query;
import org.argeo.ArgeoException;
-import org.argeo.security.ArgeoSecurityService;
-import org.argeo.security.ArgeoUser;
-import org.argeo.security.nature.SimpleUserNature;
+import org.argeo.jcr.ArgeoNames;
+import org.argeo.jcr.ArgeoTypes;
import org.argeo.security.ui.admin.SecurityAdminPlugin;
import org.argeo.security.ui.admin.commands.OpenArgeoUserEditor;
import org.eclipse.core.commands.Command;
import org.eclipse.ui.part.ViewPart;
/** List all users. */
-public class UsersView extends ViewPart {
- public final static String ID = "org.argeo.security.ui.usersView";
+public class UsersView extends ViewPart implements ArgeoNames, ArgeoTypes,
+ EventListener {
+ public final static String ID = "org.argeo.security.ui.admin.adminUsersView";
private TableViewer viewer;
- private ArgeoSecurityService securityService;
-
- private String simpleNatureType = null;
+ private Session session;
@Override
public void createPartControl(Composite parent) {
viewer.setContentProvider(new UsersContentProvider());
viewer.setLabelProvider(new UsersLabelProvider());
viewer.addDoubleClickListener(new ViewDoubleClickListener());
+ getViewSite().setSelectionProvider(viewer);
viewer.setInput(getViewSite());
}
viewer.getTable().setFocus();
}
- public void setSecurityService(ArgeoSecurityService securityService) {
- this.securityService = securityService;
+ public void setSession(Session session) {
+ this.session = session;
}
- public void setSimpleNatureType(String simpleNatureType) {
- this.simpleNatureType = simpleNatureType;
+ public void refresh() {
+ viewer.refresh();
}
- public void refresh() {
+ @Override
+ public void onEvent(EventIterator events) {
viewer.refresh();
}
private class UsersContentProvider implements IStructuredContentProvider {
public Object[] getElements(Object inputElement) {
- return securityService.listUsers().toArray();
+ try {
+ Query query = session
+ .getWorkspace()
+ .getQueryManager()
+ .createQuery(
+ "select [" + ARGEO_PROFILE + "] from ["
+ + ARGEO_USER_HOME + "]", Query.JCR_SQL2);
+ NodeIterator nit = query.execute().getNodes();
+ List<Node> userProfiles = new ArrayList<Node>();
+ while (nit.hasNext()) {
+ userProfiles.add(nit.nextNode());
+ }
+ return userProfiles.toArray();
+ } catch (RepositoryException e) {
+ throw new ArgeoException("Cannot list users", e);
+ }
+ // return userAdminService.listUsers().toArray();
}
public void dispose() {
private class UsersLabelProvider extends LabelProvider implements
ITableLabelProvider {
public String getColumnText(Object element, int columnIndex) {
- //String currentUsername = CurrentUser.getUsername();
- String currentUsername = "";
- ArgeoUser user = (ArgeoUser) element;
- SimpleUserNature simpleNature = SimpleUserNature
- .findSimpleUserNature(user, simpleNatureType);
- switch (columnIndex) {
- case 0:
- String userName = user.getUsername();
- if (userName.equals(currentUsername))
- userName = userName + "*";
- return userName;
- case 1:
- return simpleNature.getFirstName();
- case 2:
- return simpleNature.getLastName();
- case 3:
- return simpleNature.getEmail();
- default:
- throw new ArgeoException("Unmanaged column " + columnIndex);
+ try {
+ Node userHome = (Node) element;
+ Node userProfile = userHome.getNode(ARGEO_PROFILE);
+ switch (columnIndex) {
+ case 0:
+ String userName = userHome.getProperty(ARGEO_USER_ID)
+ .getString();
+ if (userName.equals(session.getUserID()))
+ return "[" + userName + "]";
+ else
+ return userName;
+ case 1:
+ return userProfile.hasProperty(ARGEO_FIRST_NAME) ? userProfile
+ .getProperty(ARGEO_FIRST_NAME).getString() : "";
+ case 2:
+ return userProfile.hasProperty(ARGEO_LAST_NAME) ? userProfile
+ .getProperty(ARGEO_LAST_NAME).getString() : "";
+ case 3:
+ return userProfile.hasProperty(ARGEO_PRIMARY_EMAIL) ? userProfile
+ .getProperty(ARGEO_PRIMARY_EMAIL).getString() : "";
+ default:
+ throw new ArgeoException("Unmanaged column " + columnIndex);
+ }
+ } catch (RepositoryException e) {
+ throw new ArgeoException("Cannot get text", e);
}
}
public Image getColumnImage(Object element, int columnIndex) {
- // TODO Auto-generated method stub
return null;
}
class ViewDoubleClickListener implements IDoubleClickListener {
public void doubleClick(DoubleClickEvent evt) {
+ if (evt.getSelection().isEmpty())
+ return;
+
Object obj = ((IStructuredSelection) evt.getSelection())
.getFirstElement();
-
- if (obj instanceof ArgeoUser) {
- ArgeoUser argeoUser = (ArgeoUser) obj;
-
+ if (obj instanceof Node) {
IWorkbench iw = SecurityAdminPlugin.getDefault().getWorkbench();
IHandlerService handlerService = (IHandlerService) iw
.getService(IHandlerService.class);
try {
+ String username = ((Node) obj).getProperty(ARGEO_USER_ID)
+ .getString();
String commandId = OpenArgeoUserEditor.COMMAND_ID;
String paramName = OpenArgeoUserEditor.PARAM_USERNAME;
ArrayList<Parameterization> parameters = new ArrayList<Parameterization>();
IParameter iparam = cmd.getParameter(paramName);
Parameterization param = new Parameterization(iparam,
- argeoUser.getUsername());
+ username);
parameters.add(param);
ParameterizedCommand pc = new ParameterizedCommand(cmd,
parameters.toArray(new Parameterization[parameters