From f090d55a56532e0e6c2cde5760a451e56ef25f1c Mon Sep 17 00:00:00 2001 From: Bruno Sinou Date: Fri, 11 Sep 2015 07:09:28 +0000 Subject: [PATCH] Work on user and group editors. Comment out legacy code that use old userAdminService git-svn-id: https://svn.argeo.org/commons/trunk@8382 4cfe0d0a-d680-48aa-b62c-e0a02a3f76cc --- .../META-INF/spring/commands.xml | 60 +--- .../META-INF/spring/editors.xml | 8 +- .../META-INF/spring/osgi.xml | 4 +- .../META-INF/spring/views.xml | 13 +- org.argeo.security.ui.admin/plugin.xml | 18 +- .../ui/admin/SecurityAdminPerspective.java | 6 +- .../security/ui/admin/commands/AddRole.java | 67 ++-- .../ui/admin/commands/DeleteRole.java | 74 ++-- .../admin/commands/OpenArgeoUserEditor.java | 22 +- .../ui/admin/commands/RefreshUsersList.java | 95 +++--- .../ui/admin/editors/GroupMainPage.java | 78 ++++- .../ui/admin/editors/JcrArgeoUserEditor.java | 282 +++++++-------- .../security/ui/admin/editors/UserEditor.java | 9 +- .../ui/admin/editors/UserMainPage.java | 322 +++++++++++------- .../ui/admin/internal/UserAdminConstants.java | 2 + .../security/ui/admin/views/JcrRolesView.java | 239 ++++++------- .../security/ui/admin/views/JcrUsersView.java | 256 +++++++------- 17 files changed, 792 insertions(+), 763 deletions(-) diff --git a/org.argeo.security.ui.admin/META-INF/spring/commands.xml b/org.argeo.security.ui.admin/META-INF/spring/commands.xml index f7a483f4c..94dff3fc2 100644 --- a/org.argeo.security.ui.admin/META-INF/spring/commands.xml +++ b/org.argeo.security.ui.admin/META-INF/spring/commands.xml @@ -4,48 +4,24 @@ xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd"> - - + - - - - - - - - - - - - - - - - - - - - - + - - - - - - - - - - + diff --git a/org.argeo.security.ui.admin/META-INF/spring/editors.xml b/org.argeo.security.ui.admin/META-INF/spring/editors.xml index ac7441b93..5de9ede20 100644 --- a/org.argeo.security.ui.admin/META-INF/spring/editors.xml +++ b/org.argeo.security.ui.admin/META-INF/spring/editors.xml @@ -14,9 +14,7 @@ - - - - + diff --git a/org.argeo.security.ui.admin/META-INF/spring/osgi.xml b/org.argeo.security.ui.admin/META-INF/spring/osgi.xml index b4c52fc4f..b2154564a 100644 --- a/org.argeo.security.ui.admin/META-INF/spring/osgi.xml +++ b/org.argeo.security.ui.admin/META-INF/spring/osgi.xml @@ -10,8 +10,8 @@ - - + diff --git a/org.argeo.security.ui.admin/META-INF/spring/views.xml b/org.argeo.security.ui.admin/META-INF/spring/views.xml index 86168e0a8..23d29d28b 100644 --- a/org.argeo.security.ui.admin/META-INF/spring/views.xml +++ b/org.argeo.security.ui.admin/META-INF/spring/views.xml @@ -15,12 +15,9 @@ - - - - - - + diff --git a/org.argeo.security.ui.admin/plugin.xml b/org.argeo.security.ui.admin/plugin.xml index c9dacd420..fe52cd0fc 100644 --- a/org.argeo.security.ui.admin/plugin.xml +++ b/org.argeo.security.ui.admin/plugin.xml @@ -29,7 +29,7 @@ - - - + --> + - - + --> - @@ -110,11 +110,11 @@ defaultHandler="org.argeo.eclipse.spring.SpringCommandHandler" id="org.argeo.security.ui.admin.userBatchUpdate" name="User batch update"> - + --> - - + --> toDelete = new ArrayList(); - Iterator it = ((IStructuredSelection) selection).iterator(); - while (it.hasNext()) { - toDelete.add(it.next()); - } - - if (!MessageDialog - .openQuestion( - HandlerUtil.getActiveShell(event), - "Delete Role", - "Are you sure that you want to delete " - + toDelete - + "?\n" - + "This may lead to inconsistencies in the application.")) - return null; - - for (String role : toDelete) { - userAdminService.deleteRole(role); - } - - JcrRolesView view = (JcrRolesView) HandlerUtil - .getActiveWorkbenchWindow(event).getActivePage() - .findView(JcrRolesView.ID); - view.refresh(); return null; } public void setUserAdminService(UserAdminService userAdminService) { this.userAdminService = userAdminService; } -} \ No newline at end of file +} +// ISelection selection = HandlerUtil.getCurrentSelection(event); +// if (selection.isEmpty()) +// return null; +// +// List toDelete = new ArrayList(); +// Iterator it = ((IStructuredSelection) selection).iterator(); +// while (it.hasNext()) { +// toDelete.add(it.next()); +// } +// +// if (!MessageDialog +// .openQuestion( +// HandlerUtil.getActiveShell(event), +// "Delete Role", +// "Are you sure that you want to delete " +// + toDelete +// + "?\n" +// + "This may lead to inconsistencies in the application.")) +// return null; +// +// for (String role : toDelete) { +// userAdminService.deleteRole(role); +// } +// +// JcrRolesView view = (JcrRolesView) HandlerUtil +// .getActiveWorkbenchWindow(event).getActivePage() +// .findView(JcrRolesView.ID); +// view.refresh(); +// return null; +// } +// +// public void setUserAdminService(UserAdminService userAdminService) { +// this.userAdminService = userAdminService; +// } +// } \ No newline at end of file diff --git a/org.argeo.security.ui.admin/src/org/argeo/security/ui/admin/commands/OpenArgeoUserEditor.java b/org.argeo.security.ui.admin/src/org/argeo/security/ui/admin/commands/OpenArgeoUserEditor.java index fe8cefa5f..3dd1a7d62 100644 --- a/org.argeo.security.ui.admin/src/org/argeo/security/ui/admin/commands/OpenArgeoUserEditor.java +++ b/org.argeo.security.ui.admin/src/org/argeo/security/ui/admin/commands/OpenArgeoUserEditor.java @@ -15,13 +15,9 @@ */ package org.argeo.security.ui.admin.commands; -import org.argeo.security.ui.admin.editors.JcrArgeoUserEditor; -import org.argeo.security.ui.admin.editors.ArgeoUserEditorInput; import org.eclipse.core.commands.AbstractHandler; import org.eclipse.core.commands.ExecutionEvent; import org.eclipse.core.commands.ExecutionException; -import org.eclipse.ui.IWorkbenchPage; -import org.eclipse.ui.handlers.HandlerUtil; /** Command handler to set visible or open a Argeo user. */ public class OpenArgeoUserEditor extends AbstractHandler { @@ -29,15 +25,15 @@ public class OpenArgeoUserEditor extends AbstractHandler { public final static String PARAM_USERNAME = "org.argeo.security.ui.admin.username"; public Object execute(ExecutionEvent event) throws ExecutionException { - try { - ArgeoUserEditorInput editorInput = new ArgeoUserEditorInput( - event.getParameter(PARAM_USERNAME)); - IWorkbenchPage activePage = HandlerUtil.getActiveWorkbenchWindow( - event).getActivePage(); - activePage.openEditor(editorInput, JcrArgeoUserEditor.ID); - } catch (Exception e) { - throw new ExecutionException("Cannot open editor", e); - } + // try { + // ArgeoUserEditorInput editorInput = new ArgeoUserEditorInput( + // event.getParameter(PARAM_USERNAME)); + // IWorkbenchPage activePage = HandlerUtil.getActiveWorkbenchWindow( + // event).getActivePage(); + // activePage.openEditor(editorInput, JcrArgeoUserEditor.ID); + // } catch (Exception e) { + // throw new ExecutionException("Cannot open editor", e); + // } return null; } } diff --git a/org.argeo.security.ui.admin/src/org/argeo/security/ui/admin/commands/RefreshUsersList.java b/org.argeo.security.ui.admin/src/org/argeo/security/ui/admin/commands/RefreshUsersList.java index fd98e718f..e6be8d91a 100644 --- a/org.argeo.security.ui.admin/src/org/argeo/security/ui/admin/commands/RefreshUsersList.java +++ b/org.argeo.security.ui.admin/src/org/argeo/security/ui/admin/commands/RefreshUsersList.java @@ -15,26 +15,12 @@ */ package org.argeo.security.ui.admin.commands; -import java.util.Set; - -import javax.jcr.Node; -import javax.jcr.NodeIterator; import javax.jcr.Repository; -import javax.jcr.RepositoryException; -import javax.jcr.Session; -import javax.jcr.query.Query; -import org.argeo.ArgeoException; -import org.argeo.jcr.ArgeoNames; -import org.argeo.jcr.ArgeoTypes; -import org.argeo.jcr.JcrUtils; import org.argeo.security.UserAdminService; -import org.argeo.security.ui.admin.views.JcrUsersView; import org.eclipse.core.commands.AbstractHandler; import org.eclipse.core.commands.ExecutionEvent; import org.eclipse.core.commands.ExecutionException; -import org.eclipse.ui.IWorkbenchPart; -import org.eclipse.ui.handlers.HandlerUtil; /** * Refreshes the main user list, removing nodes which are not referenced by user @@ -45,46 +31,47 @@ public class RefreshUsersList extends AbstractHandler { private Repository repository; public Object execute(ExecutionEvent event) throws ExecutionException { - Set users = userAdminService.listUsers(); - Session session = null; - try { - session = repository.login(); - Query query = session - .getWorkspace() - .getQueryManager() - .createQuery( - "select * from [" + ArgeoTypes.ARGEO_USER_HOME - + "]", Query.JCR_SQL2); - NodeIterator nit = query.execute().getNodes(); - while (nit.hasNext()) { - Node node = nit.nextNode(); - String username = node.getProperty(ArgeoNames.ARGEO_USER_ID) - .getString(); - if (!users.contains(username)) - node.remove(); - } - session.save(); - } catch (RepositoryException e) { - JcrUtils.discardQuietly(session); - throw new ArgeoException("Cannot list users", e); - } finally { - JcrUtils.logoutQuietly(session); - } - userAdminService.synchronize(); - - // FIXME try to refresh views that extend the JcrUsersView and have another - // ID - IWorkbenchPart part = HandlerUtil.getActiveWorkbenchWindow(event) - .getActivePage().getActivePart(); - if (part instanceof JcrUsersView) - ((JcrUsersView) part).refresh(); - - // Try to refresh JcrUsersView if opened - JcrUsersView view = (JcrUsersView) HandlerUtil - .getActiveWorkbenchWindow(event).getActivePage() - .findView(JcrUsersView.ID); - if (view != null) - view.refresh(); + // Set users = userAdminService.listUsers(); + // Session session = null; + // try { + // session = repository.login(); + // Query query = session + // .getWorkspace() + // .getQueryManager() + // .createQuery( + // "select * from [" + ArgeoTypes.ARGEO_USER_HOME + // + "]", Query.JCR_SQL2); + // NodeIterator nit = query.execute().getNodes(); + // while (nit.hasNext()) { + // Node node = nit.nextNode(); + // String username = node.getProperty(ArgeoNames.ARGEO_USER_ID) + // .getString(); + // if (!users.contains(username)) + // node.remove(); + // } + // session.save(); + // } catch (RepositoryException e) { + // JcrUtils.discardQuietly(session); + // throw new ArgeoException("Cannot list users", e); + // } finally { + // JcrUtils.logoutQuietly(session); + // } + // userAdminService.synchronize(); + // + // // FIXME try to refresh views that extend the JcrUsersView and have + // another + // // ID + // IWorkbenchPart part = HandlerUtil.getActiveWorkbenchWindow(event) + // .getActivePage().getActivePart(); + // if (part instanceof JcrUsersView) + // ((JcrUsersView) part).refresh(); + // + // // Try to refresh JcrUsersView if opened + // JcrUsersView view = (JcrUsersView) HandlerUtil + // .getActiveWorkbenchWindow(event).getActivePage() + // .findView(JcrUsersView.ID); + // if (view != null) + // view.refresh(); return null; } diff --git a/org.argeo.security.ui.admin/src/org/argeo/security/ui/admin/editors/GroupMainPage.java b/org.argeo.security.ui.admin/src/org/argeo/security/ui/admin/editors/GroupMainPage.java index 7e880bfc4..f56f1cf67 100644 --- a/org.argeo.security.ui.admin/src/org/argeo/security/ui/admin/editors/GroupMainPage.java +++ b/org.argeo.security.ui.admin/src/org/argeo/security/ui/admin/editors/GroupMainPage.java @@ -33,8 +33,11 @@ import org.argeo.security.ui.admin.internal.UserTableDefaultDClickListener; import org.argeo.security.ui.admin.internal.UserTableViewer; import org.eclipse.jface.viewers.TableViewer; import org.eclipse.swt.SWT; +import org.eclipse.swt.layout.GridData; import org.eclipse.swt.layout.GridLayout; import org.eclipse.swt.widgets.Composite; +import org.eclipse.swt.widgets.Label; +import org.eclipse.swt.widgets.Text; import org.eclipse.ui.forms.AbstractFormPart; import org.eclipse.ui.forms.IManagedForm; import org.eclipse.ui.forms.SectionPart; @@ -53,9 +56,11 @@ public class GroupMainPage extends FormPage implements ArgeoNames { final static String ID = "GroupEditor.mainPage"; private final UserEditor editor; - private UserAdmin userAdmin; + // Local configuration + private final int PRE_TITLE_INDENT = 10; + public GroupMainPage(FormEditor editor, UserAdmin userAdmin) { super(editor, ID, "Main"); this.editor = (UserEditor) editor; @@ -65,25 +70,51 @@ public class GroupMainPage extends FormPage implements ArgeoNames { protected void createFormContent(final IManagedForm mf) { try { ScrolledForm form = mf.getForm(); - form.getBody().getParent().setLayoutData(EclipseUiUtils.fillAll()); - form.setExpandHorizontal(true); - refreshFormTitle(form); - // GridLayout mainLayout = new GridLayout(1, true); - createGeneralPart(form.getBody()); + refreshFormTitle(); + + // Body + Composite body = form.getBody(); + GridLayout mainLayout = new GridLayout(); + body.setLayout(mainLayout); + appendOverviewPart(body); + appendMembersPart(body); } catch (RepositoryException e) { throw new ArgeoException("Cannot create form content", e); } } /** Creates the general section */ - protected void createGeneralPart(Composite parent) + protected void appendOverviewPart(Composite parent) { + FormToolkit tk = getManagedForm().getToolkit(); + Composite body = addSection(tk, parent, "Main information"); + GridLayout layout = new GridLayout(2, false); + body.setLayout(layout); + + Text distinguishedName = createLT(body, "Group Name", + editor.getProperty(UserAdminConstants.KEY_UID)); + distinguishedName.setEnabled(false); + + final Text commonName = createLT(body, "Common Name", + editor.getProperty(UserAdminConstants.KEY_CN)); + commonName.setEnabled(false); + + // create form part (controller) + AbstractFormPart part = new SectionPart((Section) body.getParent()) { + public void commit(boolean onSave) { + super.commit(onSave); + } + }; + getManagedForm().addPart(part); + } + + /** Filtered table with members. Has drag & drop ability */ + protected void appendMembersPart(Composite parent) throws RepositoryException { - parent.setLayout(new GridLayout()); FormToolkit tk = getManagedForm().getToolkit(); Section section = tk.createSection(parent, Section.TITLE_BAR); section.setLayoutData(EclipseUiUtils.fillAll()); - section.setText("Members of " + section.setText("Members of group " + editor.getProperty(UserAdminConstants.KEY_CN)); // Composite body = tk.createComposite(section, SWT.NONE); @@ -161,10 +192,31 @@ public class GroupMainPage extends FormPage implements ArgeoNames { } } - private void refreshFormTitle(ScrolledForm form) throws RepositoryException { - // form.setText(getProperty(Property.JCR_TITLE) - // + (userProfile.getProperty(ARGEO_ENABLED).getBoolean() ? "" - // : " [DISABLED]")); + private void refreshFormTitle() throws RepositoryException { + getManagedForm().getForm().setText( + editor.getProperty(UserAdminConstants.KEY_CN)); + } + + private Composite addSection(FormToolkit tk, Composite parent, String title) { + Section section = tk.createSection(parent, Section.TITLE_BAR); + GridData gd = EclipseUiUtils.fillWidth(); + gd.verticalAlignment = PRE_TITLE_INDENT; + section.setLayoutData(gd); + section.setText(title); + Composite body = tk.createComposite(section, SWT.WRAP); + body.setLayoutData(EclipseUiUtils.fillAll()); + section.setClient(body); + return body; + } + + /** Creates label and text. */ + protected Text createLT(Composite body, String label, String value) { + FormToolkit toolkit = getManagedForm().getToolkit(); + Label lbl = toolkit.createLabel(body, label); + lbl.setLayoutData(new GridData(SWT.RIGHT, SWT.CENTER, false, false)); + Text text = toolkit.createText(body, value, SWT.BORDER); + text.setLayoutData(new GridData(SWT.FILL, SWT.CENTER, true, false)); + return text; } // private class FormPartML implements ModifyListener { diff --git a/org.argeo.security.ui.admin/src/org/argeo/security/ui/admin/editors/JcrArgeoUserEditor.java b/org.argeo.security.ui.admin/src/org/argeo/security/ui/admin/editors/JcrArgeoUserEditor.java index 83d59e63c..e63dfc599 100644 --- a/org.argeo.security.ui.admin/src/org/argeo/security/ui/admin/editors/JcrArgeoUserEditor.java +++ b/org.argeo.security.ui.admin/src/org/argeo/security/ui/admin/editors/JcrArgeoUserEditor.java @@ -15,154 +15,134 @@ */ package org.argeo.security.ui.admin.editors; -import java.util.ArrayList; - -import javax.jcr.Node; -import javax.jcr.Repository; -import javax.jcr.RepositoryException; -import javax.jcr.Session; - -import org.argeo.ArgeoException; -import org.argeo.jcr.JcrUtils; -import org.argeo.jcr.UserJcrUtils; -import org.argeo.security.UserAdminService; -import org.argeo.security.jcr.JcrUserDetails; -import org.argeo.security.ui.admin.SecurityAdminPlugin; -import org.argeo.security.ui.admin.views.JcrUsersView; -import org.eclipse.core.runtime.IProgressMonitor; -import org.eclipse.ui.IEditorInput; -import org.eclipse.ui.IEditorSite; -import org.eclipse.ui.IWorkbench; -import org.eclipse.ui.PartInitException; -import org.eclipse.ui.forms.editor.FormEditor; -import org.springframework.security.core.GrantedAuthority; - -/** Editor for an Argeo user. */ -public class JcrArgeoUserEditor extends FormEditor { - private static final long serialVersionUID = 1933296330339252869L; - - public final static String ID = SecurityAdminPlugin.PLUGIN_ID - + ".adminArgeoUserEditor"; - - /* DEPENDENCY INJECTION */ - private Session session; - private UserAdminService userAdminService; - - // private Node userHome; - private Node userProfile; - private JcrUserDetails userDetails; - - public void init(IEditorSite site, IEditorInput input) - throws PartInitException { - super.init(site, input); - String username = ((ArgeoUserEditorInput) getEditorInput()) - .getUsername(); - userProfile = UserJcrUtils.getUserProfile(session, username); - - if (userAdminService.userExists(username)) { - try { - userDetails = (JcrUserDetails) userAdminService - .loadUserByUsername(username); - } catch (Exception e) { - throw new ArgeoException("Cannot retrieve userDetails for " - + username, e); - } - } else { - try { - userDetails = new JcrUserDetails(session, username, null, - new ArrayList()); - } catch (RepositoryException e) { - throw new ArgeoException("Cannot retrieve disabled JCR profile"); - } - } - - this.setPartProperty("name", username != null ? username : ""); - setPartName(username != null ? username : ""); - } - - protected void addPages() { - try { - addPage(new DefaultUserMainPage(this, userProfile)); - addPage(new UserRolesPage(this, userDetails, userAdminService)); - } catch (Exception e) { - throw new ArgeoException("Cannot add pages", e); - } - } - - @Override - public void doSave(IProgressMonitor monitor) { - // list pages - // TODO: make it more generic - DefaultUserMainPage defaultUserMainPage = (DefaultUserMainPage) findPage(DefaultUserMainPage.ID); - if (defaultUserMainPage.isDirty()) { - defaultUserMainPage.doSave(monitor); - String newPassword = defaultUserMainPage.getNewPassword(); - defaultUserMainPage.resetNewPassword(); - if (newPassword != null) - userDetails = userDetails.cloneWithNewPassword(newPassword); - } - - UserRolesPage userRolesPage = (UserRolesPage) findPage(UserRolesPage.ID); - if (userRolesPage.isDirty()) { - userRolesPage.doSave(monitor); - userDetails = userDetails.cloneWithNewRoles(userRolesPage - .getRoles()); - } - - userAdminService.updateUser(userDetails); - - // if (userAdminService.userExists(user.getUsername())) - // userAdminService.updateUser(user); - // else { - // userAdminService.newUser(user); - // setPartName(user.getUsername()); - // } - firePropertyChange(PROP_DIRTY); - - userRolesPage.setUserDetails(userDetails); - - // FIXME rather use a refresh command. Fails when called by another - // view. - // refresh users view - IWorkbench iw = SecurityAdminPlugin.getDefault().getWorkbench(); - JcrUsersView usersView = (JcrUsersView) iw.getActiveWorkbenchWindow() - .getActivePage().findView(JcrUsersView.ID); - if (usersView != null) - usersView.refresh(); - } - - - - @Override - public void doSaveAs() { - } - - @Override - public boolean isSaveAsAllowed() { - return false; - } - - public void refresh() { - UserRolesPage userRolesPage = (UserRolesPage) findPage(UserRolesPage.ID); - userRolesPage.refresh(); - } - - @Override - public void dispose() { - JcrUtils.logoutQuietly(session); - super.dispose(); - } - - /* DEPENDENCY INJECTION */ - public void setUserAdminService(UserAdminService userAdminService) { - this.userAdminService = userAdminService; - } - - public void setRepository(Repository repository) { - try { - session = repository.login(); - } catch (RepositoryException re) { - throw new ArgeoException("Unable to initialise local session", re); - } - } -} +public class JcrArgeoUserEditor{} +/** Editor for an Argeo user. Legacy. TODO Remove*/ +// public class JcrArgeoUserEditor extends FormEditor { +// private static final long serialVersionUID = 1933296330339252869L; +// +// public final static String ID = SecurityAdminPlugin.PLUGIN_ID +// + ".adminArgeoUserEditor"; +// +// /* DEPENDENCY INJECTION */ +// private Session session; +// private UserAdminService userAdminService; +// +// // private Node userHome; +// private Node userProfile; +// private JcrUserDetails userDetails; +// +// public void init(IEditorSite site, IEditorInput input) +// throws PartInitException { +// super.init(site, input); +// String username = ((ArgeoUserEditorInput) getEditorInput()) +// .getUsername(); +// userProfile = UserJcrUtils.getUserProfile(session, username); +// +// if (userAdminService.userExists(username)) { +// try { +// userDetails = (JcrUserDetails) userAdminService +// .loadUserByUsername(username); +// } catch (Exception e) { +// throw new ArgeoException("Cannot retrieve userDetails for " +// + username, e); +// } +// } else { +// try { +// userDetails = new JcrUserDetails(session, username, null, +// new ArrayList()); +// } catch (RepositoryException e) { +// throw new ArgeoException("Cannot retrieve disabled JCR profile"); +// } +// } +// +// this.setPartProperty("name", username != null ? username : ""); +// setPartName(username != null ? username : ""); +// } +// +// protected void addPages() { +// try { +// addPage(new DefaultUserMainPage(this, userProfile)); +// addPage(new UserRolesPage(this, userDetails, userAdminService)); +// } catch (Exception e) { +// throw new ArgeoException("Cannot add pages", e); +// } +// } +// +// @Override +// public void doSave(IProgressMonitor monitor) { +// // list pages +// // TODO: make it more generic +// DefaultUserMainPage defaultUserMainPage = (DefaultUserMainPage) +// findPage(DefaultUserMainPage.ID); +// if (defaultUserMainPage.isDirty()) { +// defaultUserMainPage.doSave(monitor); +// String newPassword = defaultUserMainPage.getNewPassword(); +// defaultUserMainPage.resetNewPassword(); +// if (newPassword != null) +// userDetails = userDetails.cloneWithNewPassword(newPassword); +// } +// +// UserRolesPage userRolesPage = (UserRolesPage) findPage(UserRolesPage.ID); +// if (userRolesPage.isDirty()) { +// userRolesPage.doSave(monitor); +// userDetails = userDetails.cloneWithNewRoles(userRolesPage +// .getRoles()); +// } +// +// userAdminService.updateUser(userDetails); +// +// // if (userAdminService.userExists(user.getUsername())) +// // userAdminService.updateUser(user); +// // else { +// // userAdminService.newUser(user); +// // setPartName(user.getUsername()); +// // } +// firePropertyChange(PROP_DIRTY); +// +// userRolesPage.setUserDetails(userDetails); +// +// // FIXME rather use a refresh command. Fails when called by another +// // view. +// // refresh users view +// IWorkbench iw = SecurityAdminPlugin.getDefault().getWorkbench(); +// JcrUsersView usersView = (JcrUsersView) iw.getActiveWorkbenchWindow() +// .getActivePage().findView(JcrUsersView.ID); +// if (usersView != null) +// usersView.refresh(); +// } +// +// +// +// @Override +// public void doSaveAs() { +// } +// +// @Override +// public boolean isSaveAsAllowed() { +// return false; +// } +// +// public void refresh() { +// UserRolesPage userRolesPage = (UserRolesPage) findPage(UserRolesPage.ID); +// userRolesPage.refresh(); +// } +// +// @Override +// public void dispose() { +// JcrUtils.logoutQuietly(session); +// super.dispose(); +// } +// +// /* DEPENDENCY INJECTION */ +// public void setUserAdminService(UserAdminService userAdminService) { +// this.userAdminService = userAdminService; +// } +// +// public void setRepository(Repository repository) { +// try { +// session = repository.login(); +// } catch (RepositoryException re) { +// throw new ArgeoException("Unable to initialise local session", re); +// } +// } +// } diff --git a/org.argeo.security.ui.admin/src/org/argeo/security/ui/admin/editors/UserEditor.java b/org.argeo.security.ui.admin/src/org/argeo/security/ui/admin/editors/UserEditor.java index a811f8621..f2f233fe4 100644 --- a/org.argeo.security.ui.admin/src/org/argeo/security/ui/admin/editors/UserEditor.java +++ b/org.argeo.security.ui.admin/src/org/argeo/security/ui/admin/editors/UserEditor.java @@ -16,6 +16,7 @@ package org.argeo.security.ui.admin.editors; import org.argeo.ArgeoException; +import org.argeo.security.ui.admin.SecurityAdminImages; import org.argeo.security.ui.admin.SecurityAdminPlugin; import org.argeo.security.ui.admin.internal.UserAdminConstants; import org.eclipse.core.runtime.IProgressMonitor; @@ -56,6 +57,8 @@ public class UserEditor extends FormEditor implements UserAdminConstants { // firePartPropertyChanged("icon", "icons/user.gif", "icons/users.gif"); // } setPartName(commonName != null ? commonName : "username"); + setTitleImage(user.getType() == Role.GROUP ? SecurityAdminImages.ICON_GROUP + : SecurityAdminImages.ICON_USER); } /** Exposes the user (or group) that is displayed by the current editor */ @@ -63,13 +66,17 @@ public class UserEditor extends FormEditor implements UserAdminConstants { return user; } + void updateEditorTitle(String title) { + setPartName(title); + } + protected void addPages() { try { if (user.getType() == Role.GROUP) addPage(new GroupMainPage(this, userAdmin)); else - addPage(new UserMainPage(this)); + addPage(new UserMainPage(this, userAdmin)); } catch (Exception e) { throw new ArgeoException("Cannot add pages", e); diff --git a/org.argeo.security.ui.admin/src/org/argeo/security/ui/admin/editors/UserMainPage.java b/org.argeo.security.ui.admin/src/org/argeo/security/ui/admin/editors/UserMainPage.java index 745bbff53..d4ca07127 100644 --- a/org.argeo.security.ui.admin/src/org/argeo/security/ui/admin/editors/UserMainPage.java +++ b/org.argeo.security.ui.admin/src/org/argeo/security/ui/admin/editors/UserMainPage.java @@ -15,13 +15,21 @@ */ package org.argeo.security.ui.admin.editors; +import java.util.ArrayList; import java.util.Arrays; - -import javax.jcr.RepositoryException; +import java.util.List; import org.argeo.ArgeoException; +import org.argeo.eclipse.ui.EclipseUiUtils; import org.argeo.jcr.ArgeoNames; +import org.argeo.security.ui.admin.internal.ColumnDefinition; +import org.argeo.security.ui.admin.internal.CommonNameLP; +import org.argeo.security.ui.admin.internal.RoleIconLP; import org.argeo.security.ui.admin.internal.UserAdminConstants; +import org.argeo.security.ui.admin.internal.UserNameLP; +import org.argeo.security.ui.admin.internal.UserTableDefaultDClickListener; +import org.argeo.security.ui.admin.internal.UserTableViewer; +import org.eclipse.jface.viewers.TableViewer; import org.eclipse.swt.SWT; import org.eclipse.swt.events.ModifyEvent; import org.eclipse.swt.events.ModifyListener; @@ -38,6 +46,8 @@ import org.eclipse.ui.forms.editor.FormPage; import org.eclipse.ui.forms.widgets.FormToolkit; import org.eclipse.ui.forms.widgets.ScrolledForm; import org.eclipse.ui.forms.widgets.Section; +import org.osgi.service.useradmin.User; +import org.osgi.service.useradmin.UserAdmin; /** Display/edit the properties common to all users */ public class UserMainPage extends FormPage implements ArgeoNames { @@ -46,148 +56,222 @@ public class UserMainPage extends FormPage implements ArgeoNames { // private final static Log log = LogFactory.getLog(UserMainPage.class); private final UserEditor editor; + private UserAdmin userAdmin; + private char[] newPassword; - public UserMainPage(FormEditor editor) { + // Local configuration + private final int PRE_TITLE_INDENT = 10; + + public UserMainPage(FormEditor editor, UserAdmin userAdmin) { super(editor, ID, "Main"); this.editor = (UserEditor) editor; + this.userAdmin = userAdmin; + } + + public String getNewPassword() { + if (newPassword != null) + return new String(newPassword); + else + return null; + } + + public void resetNewPassword() { + if (newPassword != null) + Arrays.fill(newPassword, 'x'); + newPassword = null; } protected void createFormContent(final IManagedForm mf) { - try { - ScrolledForm form = mf.getForm(); - refreshFormTitle(form); - GridLayout mainLayout = new GridLayout(1, true); - form.getBody().setLayout(mainLayout); - - createGeneralPart(form.getBody()); - // createPassworPart(form.getBody()); - } catch (RepositoryException e) { - throw new ArgeoException("Cannot create form content", e); - } + ScrolledForm form = mf.getForm(); + // Form page main title + form.setText(editor.getProperty(UserAdminConstants.KEY_CN)); + + // Body + Composite body = form.getBody(); + GridLayout mainLayout = new GridLayout(1, true); + body.setLayout(mainLayout); + appendOverviewPart(body); + appendPasswordPart(body); + appendMemberOfPart(body); } /** Creates the general section */ - protected void createGeneralPart(Composite parent) - throws RepositoryException { + protected void appendOverviewPart(Composite parent) { FormToolkit tk = getManagedForm().getToolkit(); - Section section = tk.createSection(parent, Section.TITLE_BAR); - section.setLayoutData(new GridData(SWT.FILL, SWT.FILL, true, false)); - section.setText("General"); - Composite body = tk.createComposite(section, SWT.WRAP); - section.setClient(body); - GridLayout layout = new GridLayout(2, false); - body.setLayoutData(new GridData(SWT.FILL, SWT.FILL, true, false)); - body.setLayout(layout); + Composite body = addSection(tk, parent, "Main information"); + body.setLayout(new GridLayout(2, false)); + + Text distinguishedName = createLT(body, "User Name", + editor.getProperty(UserAdminConstants.KEY_UID)); + distinguishedName.setEnabled(false); final Text commonName = createLT(body, "Common Name", editor.getProperty(UserAdminConstants.KEY_CN)); commonName.setEnabled(false); - // final Text firstName = createLT(body, "First name", - // getProperty(ARGEO_FIRST_NAME)); - // final Text lastName = createLT(body, "Last name", - // getProperty(ARGEO_LAST_NAME)); + final Text firstName = createLT(body, "First name", + editor.getProperty(UserAdminConstants.KEY_FIRSTNAME)); + + final Text lastName = createLT(body, "Last name", + editor.getProperty(UserAdminConstants.KEY_LASTNAME)); + final Text email = createLT(body, "Email", editor.getProperty(UserAdminConstants.KEY_MAIL)); - // final Text description = createLMT(body, "Description", - // getProperty(Property.JCR_DESCRIPTION)); // create form part (controller) - AbstractFormPart part = new SectionPart(section) { + AbstractFormPart part = new SectionPart((Section) body.getParent()) { public void commit(boolean onSave) { + // TODO check changed ? + // TODO Sanity checks + + editor.setProperty(UserAdminConstants.KEY_FIRSTNAME, + firstName.getText()); + editor.setProperty(UserAdminConstants.KEY_LASTNAME, + lastName.getText()); + editor.setProperty(UserAdminConstants.KEY_CN, + commonName.getText()); // TODO check mail validity editor.setProperty(UserAdminConstants.KEY_MAIL, email.getText()); - // userProfile.getSession().getWorkspace().getVersionManager() - // .checkout(userProfile.getPath()); - // userProfile.setProperty(Property.JCR_TITLE, - // commonName.getText()); - // userProfile.setProperty(ARGEO_FIRST_NAME, - // firstName.getText()); - // userProfile - // .setProperty(ARGEO_LAST_NAME, lastName.getText()); - // userProfile.setProperty(ARGEO_PRIMARY_EMAIL, + // Enable common name ? + // editor.setProperty(UserAdminConstants.KEY_CN, // email.getText()); - // userProfile.setProperty(Property.JCR_DESCRIPTION, - // description.getText()); - // userProfile.getSession().save(); - // userProfile.getSession().getWorkspace().getVersionManager() - // .checkin(userProfile.getPath()); super.commit(onSave); } }; - // if (username != null) - // username.addModifyListener(new FormPartML(part)); - // commonName.addModifyListener(new FormPartML(part)); - // firstName.addModifyListener(new FormPartML(part)); - // lastName.addModifyListener(new FormPartML(part)); + ModifyListener cnML = new ModifyListener() { + private static final long serialVersionUID = 4298649222869835486L; + + @Override + public void modifyText(ModifyEvent event) { + String first = firstName.getText(); + String last = lastName.getText(); + String cn = first.trim() + " " + last.trim() + " "; + cn = cn.trim(); + commonName.setText(cn); + getManagedForm().getForm().setText(cn); + editor.updateEditorTitle(cn); + } + }; + firstName.addModifyListener(cnML); + lastName.addModifyListener(cnML); + firstName.addModifyListener(new FormPartML(part)); + lastName.addModifyListener(new FormPartML(part)); email.addModifyListener(new FormPartML(part)); getManagedForm().addPart(part); } - private void refreshFormTitle(ScrolledForm form) throws RepositoryException { - // form.setText(getProperty(Property.JCR_TITLE) - // + (userProfile.getProperty(ARGEO_ENABLED).getBoolean() ? "" - // : " [DISABLED]")); + /** Creates the password section */ + protected void appendPasswordPart(Composite parent) { + FormToolkit tk = getManagedForm().getToolkit(); + Composite body = addSection(tk, parent, "Password"); + + // Section section = tk.createSection(parent, Section.TITLE_BAR); + // section.setLayoutData(EclipseUiUtils.fillWidth()); + // section.setText("Password"); + // Composite body = tk.createComposite(section, SWT.NO_FOCUS); + // section.setClient(body); + // body.setLayoutData(EclipseUiUtils.fillWidth()); + + body.setLayout(new GridLayout(2, false)); + // add widgets (view) + final Text password1 = createLP(body, "New password", ""); + final Text password2 = createLP(body, "Repeat password", ""); + // create form part (controller) + AbstractFormPart part = new SectionPart((Section) body.getParent()) { + + public void commit(boolean onSave) { + if (!password1.getText().equals("") + || !password2.getText().equals("")) { + if (password1.getText().equals(password2.getText())) { + newPassword = password1.getText().toCharArray(); + // TODO real set password + password1.setText(""); + password2.setText(""); + super.commit(onSave); + } else { + password1.setText(""); + password2.setText(""); + throw new ArgeoException("Passwords are not equals"); + } + } + } + + }; + password1.addModifyListener(new FormPartML(part)); + password2.addModifyListener(new FormPartML(part)); + getManagedForm().addPart(part); } - // /** @return the property, or the empty string if not set */ - // protected String getProperty(String name) throws RepositoryException { - // return userProfile.hasProperty(name) ? userProfile.getProperty(name) - // .getString() : ""; - // } + private UserTableViewer userTableViewerCmp; + private TableViewer userViewer; - /** Creates the password section */ - // protected void createPassworPart(Composite parent) { - // FormToolkit tk = getManagedForm().getToolkit(); - // Section section = tk.createSection(parent, Section.TITLE_BAR); - // section.setLayoutData(new GridData(SWT.FILL, SWT.FILL, true, false)); - // section.setText("Password"); - // - // Composite body = tk.createComposite(section, SWT.WRAP); - // section.setClient(body); - // GridLayout layout = new GridLayout(2, false); - // body.setLayoutData(new GridData(SWT.FILL, SWT.FILL, true, false)); - // body.setLayout(layout); - // - // // add widgets (view) - // final Text password1 = createLP(body, "New password", ""); - // final Text password2 = createLP(body, "Repeat password", ""); - // // create form part (controller) - // AbstractFormPart part = new SectionPart(section) { - // - // public void commit(boolean onSave) { - // if (!password1.getText().equals("") - // || !password2.getText().equals("")) { - // if (password1.getText().equals(password2.getText())) { - // newPassword = password1.getText().toCharArray(); - // password1.setText(""); - // password2.setText(""); - // super.commit(onSave); - // } else { - // password1.setText(""); - // password2.setText(""); - // throw new ArgeoException("Passwords are not equals"); - // } - // } - // } - // - // }; - // password1.addModifyListener(new FormPartML(part)); - // password2.addModifyListener(new FormPartML(part)); - // getManagedForm().addPart(part); - // } + public void appendMemberOfPart(Composite parent) { + FormToolkit tk = getManagedForm().getToolkit(); + Composite body = addSection(tk, parent, "Groups"); + body.setLayout(EclipseUiUtils.noSpaceGridLayout()); - /** Creates label and text. */ - protected Text createLT(Composite body, String label, String value) { - FormToolkit toolkit = getManagedForm().getToolkit(); - Label lbl = toolkit.createLabel(body, label); - lbl.setLayoutData(new GridData(SWT.RIGHT, SWT.CENTER, false, false)); - Text text = toolkit.createText(body, value, SWT.BORDER); - text.setLayoutData(new GridData(SWT.FILL, SWT.CENTER, true, false)); - return text; + // Define the displayed columns + List columnDefs = new ArrayList(); + columnDefs.add(new ColumnDefinition(new RoleIconLP(), "", 0, 24)); + columnDefs.add(new ColumnDefinition(new UserNameLP(), + "Distinguished Name", 240)); + columnDefs.add(new ColumnDefinition(new CommonNameLP(), "Common Name", + 150)); + + // Create and configure the table + userTableViewerCmp = new MyUserTableViewer(body, SWT.MULTI + | SWT.H_SCROLL | SWT.V_SCROLL, userAdmin); + + userTableViewerCmp.setColumnDefinitions(columnDefs); + userTableViewerCmp.populate(true, false); + GridData gd = EclipseUiUtils.fillAll(); + gd.heightHint = 300; + userTableViewerCmp.setLayoutData(gd); + + // Links + userViewer = userTableViewerCmp.getTableViewer(); + userViewer.addDoubleClickListener(new UserTableDefaultDClickListener()); + // Really? + userTableViewerCmp.refresh(); + } + + private class MyUserTableViewer extends UserTableViewer { + private static final long serialVersionUID = 8467999509931900367L; + + public MyUserTableViewer(Composite parent, int style, + UserAdmin userAdmin) { + super(parent, style, userAdmin, true); + } + + @Override + protected List listFilteredElements(String filter) { + List users = new ArrayList(); + + // "member of" method? + // Group group = (Group) editor.getDisplayedUser(); + // Role[] roles = group.getMembers(); + // List users = new ArrayList(); + // for (Role role : roles) + // // if (role.getType() == Role.GROUP) + // users.add((User) role); + // return users; + return users; + } + } + + private Composite addSection(FormToolkit tk, Composite parent, String title) { + Section section = tk.createSection(parent, Section.TITLE_BAR); + GridData gd = EclipseUiUtils.fillWidth(); + gd.verticalAlignment = PRE_TITLE_INDENT; + section.setLayoutData(gd); + section.setText(title); + Composite body = tk.createComposite(section, SWT.WRAP); + body.setLayoutData(EclipseUiUtils.fillAll()); + section.setClient(body); + return body; } /** Creates label and multiline text. */ @@ -210,6 +294,16 @@ public class UserMainPage extends FormPage implements ArgeoNames { return text; } + /** Creates label and text. */ + protected Text createLT(Composite body, String label, String value) { + FormToolkit toolkit = getManagedForm().getToolkit(); + Label lbl = toolkit.createLabel(body, label); + lbl.setLayoutData(new GridData(SWT.RIGHT, SWT.CENTER, false, false)); + Text text = toolkit.createText(body, value, SWT.BORDER); + text.setLayoutData(new GridData(SWT.FILL, SWT.CENTER, true, false)); + return text; + } + private class FormPartML implements ModifyListener { private static final long serialVersionUID = 6299808129505381333L; private AbstractFormPart formPart; @@ -221,19 +315,5 @@ public class UserMainPage extends FormPage implements ArgeoNames { public void modifyText(ModifyEvent e) { formPart.markDirty(); } - - } - - public String getNewPassword() { - if (newPassword != null) - return new String(newPassword); - else - return null; - } - - public void resetNewPassword() { - if (newPassword != null) - Arrays.fill(newPassword, 'x'); - newPassword = null; } } \ No newline at end of file diff --git a/org.argeo.security.ui.admin/src/org/argeo/security/ui/admin/internal/UserAdminConstants.java b/org.argeo.security.ui.admin/src/org/argeo/security/ui/admin/internal/UserAdminConstants.java index f5eae0f7c..7ec5984a9 100644 --- a/org.argeo.security.ui.admin/src/org/argeo/security/ui/admin/internal/UserAdminConstants.java +++ b/org.argeo.security.ui.admin/src/org/argeo/security/ui/admin/internal/UserAdminConstants.java @@ -5,6 +5,8 @@ public interface UserAdminConstants { public final static String KEY_UID = "uid"; public final static String KEY_CN = "cn"; + public final static String KEY_FIRSTNAME = "givenname"; + public final static String KEY_LASTNAME = "sn"; public final static String KEY_MAIL = "mail"; } diff --git a/org.argeo.security.ui.admin/src/org/argeo/security/ui/admin/views/JcrRolesView.java b/org.argeo.security.ui.admin/src/org/argeo/security/ui/admin/views/JcrRolesView.java index a87454352..66f7a0335 100644 --- a/org.argeo.security.ui.admin/src/org/argeo/security/ui/admin/views/JcrRolesView.java +++ b/org.argeo.security.ui.admin/src/org/argeo/security/ui/admin/views/JcrRolesView.java @@ -15,133 +15,114 @@ */ package org.argeo.security.ui.admin.views; -import org.argeo.ArgeoException; -import org.argeo.security.UserAdminService; -import org.argeo.security.ui.admin.SecurityAdminPlugin; -import org.argeo.security.ui.admin.commands.AddRole; -import org.eclipse.jface.viewers.IStructuredContentProvider; -import org.eclipse.jface.viewers.ITableLabelProvider; -import org.eclipse.jface.viewers.LabelProvider; -import org.eclipse.jface.viewers.TableViewer; -import org.eclipse.jface.viewers.Viewer; -import org.eclipse.swt.SWT; -import org.eclipse.swt.graphics.Image; -import org.eclipse.swt.layout.GridData; -import org.eclipse.swt.layout.GridLayout; -import org.eclipse.swt.widgets.Composite; -import org.eclipse.swt.widgets.Event; -import org.eclipse.swt.widgets.Listener; -import org.eclipse.swt.widgets.Table; -import org.eclipse.swt.widgets.Text; -import org.eclipse.ui.IWorkbench; -import org.eclipse.ui.handlers.IHandlerService; -import org.eclipse.ui.part.ViewPart; - -/** List all roles. */ -public class JcrRolesView extends ViewPart { - public final static String ID = SecurityAdminPlugin.PLUGIN_ID - + ".jcrRolesView"; - - private Text newRole; - - private TableViewer viewer; - private UserAdminService userAdminService; - - private String addNewRoleText = ""; - - @Override - public void createPartControl(Composite parent) { - parent.setLayout(new GridLayout(1, false)); - - // new role text field - newRole = new Text(parent, SWT.BORDER); - newRole.setText(addNewRoleText); - newRole.setLayoutData(new GridData(SWT.FILL, SWT.FILL, true, false)); - // default action is add role - newRole.addListener(SWT.DefaultSelection, new Listener() { - private static final long serialVersionUID = -2367261849260929505L; - - public void handleEvent(Event evt) { - IWorkbench iw = SecurityAdminPlugin.getDefault().getWorkbench(); - IHandlerService handlerService = (IHandlerService) iw - .getService(IHandlerService.class); - try { - handlerService.executeCommand(AddRole.COMMAND_ID, evt); - } catch (Exception e) { - throw new ArgeoException("Cannot execute add role command", - e); - } - } - }); - // select all on focus - newRole.addListener(SWT.FocusIn, new Listener() { - private static final long serialVersionUID = 2612811281477034356L; - - public void handleEvent(Event e) { - newRole.selectAll(); - } - }); - - // roles table - Table table = new Table(parent, SWT.V_SCROLL | SWT.BORDER); - table.setLayoutData(new GridData(SWT.FILL, SWT.FILL, true, true)); - table.setLinesVisible(false); - table.setHeaderVisible(false); - viewer = new TableViewer(table); - viewer.setContentProvider(new RolesContentProvider()); - viewer.setLabelProvider(new UsersLabelProvider()); - getViewSite().setSelectionProvider(viewer); - viewer.setInput(getViewSite()); - } - - @Override - public void setFocus() { - viewer.getTable().setFocus(); - } - - public void setUserAdminService(UserAdminService userAdminService) { - this.userAdminService = userAdminService; - } - - public String getAddNewRoleText() { - return addNewRoleText; - } - - private class RolesContentProvider implements IStructuredContentProvider { - private static final long serialVersionUID = 7446442682717419289L; - - public Object[] getElements(Object inputElement) { - return userAdminService.listEditableRoles().toArray(); - } - - public void dispose() { - } - - public void inputChanged(Viewer viewer, Object oldInput, Object newInput) { - } - - } - - private class UsersLabelProvider extends LabelProvider implements - ITableLabelProvider { - private static final long serialVersionUID = -1886204791002421430L; - - public String getColumnText(Object element, int columnIndex) { - return element.toString(); - } - - public Image getColumnImage(Object element, int columnIndex) { - return null; - } - - } - - public String getNewRole() { - return newRole.getText(); - } - - public void refresh() { - viewer.refresh(); - newRole.setText(addNewRoleText); - } +public class JcrRolesView { } + +/** List all roles. Legacy. TODO Remove */ +// public class JcrRolesView extends ViewPart { +// public final static String ID = SecurityAdminPlugin.PLUGIN_ID +// + ".jcrRolesView"; +// +// private Text newRole; +// +// private TableViewer viewer; +// private UserAdminService userAdminService; +// +// private String addNewRoleText = ""; +// +// @Override +// public void createPartControl(Composite parent) { +// parent.setLayout(new GridLayout(1, false)); +// +// // new role text field +// newRole = new Text(parent, SWT.BORDER); +// newRole.setText(addNewRoleText); +// newRole.setLayoutData(new GridData(SWT.FILL, SWT.FILL, true, false)); +// // default action is add role +// newRole.addListener(SWT.DefaultSelection, new Listener() { +// private static final long serialVersionUID = -2367261849260929505L; +// +// public void handleEvent(Event evt) { +// IWorkbench iw = SecurityAdminPlugin.getDefault().getWorkbench(); +// IHandlerService handlerService = (IHandlerService) iw +// .getService(IHandlerService.class); +// try { +// handlerService.executeCommand(AddRole.COMMAND_ID, evt); +// } catch (Exception e) { +// throw new ArgeoException("Cannot execute add role command", +// e); +// } +// } +// }); +// // select all on focus +// newRole.addListener(SWT.FocusIn, new Listener() { +// private static final long serialVersionUID = 2612811281477034356L; +// +// public void handleEvent(Event e) { +// newRole.selectAll(); +// } +// }); +// +// // roles table +// Table table = new Table(parent, SWT.V_SCROLL | SWT.BORDER); +// table.setLayoutData(new GridData(SWT.FILL, SWT.FILL, true, true)); +// table.setLinesVisible(false); +// table.setHeaderVisible(false); +// viewer = new TableViewer(table); +// viewer.setContentProvider(new RolesContentProvider()); +// viewer.setLabelProvider(new UsersLabelProvider()); +// getViewSite().setSelectionProvider(viewer); +// viewer.setInput(getViewSite()); +// } +// +// @Override +// public void setFocus() { +// viewer.getTable().setFocus(); +// } +// +// public void setUserAdminService(UserAdminService userAdminService) { +// this.userAdminService = userAdminService; +// } +// +// public String getAddNewRoleText() { +// return addNewRoleText; +// } +// +// private class RolesContentProvider implements IStructuredContentProvider { +// private static final long serialVersionUID = 7446442682717419289L; +// +// public Object[] getElements(Object inputElement) { +// return userAdminService.listEditableRoles().toArray(); +// } +// +// public void dispose() { +// } +// +// public void inputChanged(Viewer viewer, Object oldInput, Object newInput) { +// } +// +// } +// +// private class UsersLabelProvider extends LabelProvider implements +// ITableLabelProvider { +// private static final long serialVersionUID = -1886204791002421430L; +// +// public String getColumnText(Object element, int columnIndex) { +// return element.toString(); +// } +// +// public Image getColumnImage(Object element, int columnIndex) { +// return null; +// } +// +// } +// +// public String getNewRole() { +// return newRole.getText(); +// } +// +// public void refresh() { +// viewer.refresh(); +// newRole.setText(addNewRoleText); +// } +// } diff --git a/org.argeo.security.ui.admin/src/org/argeo/security/ui/admin/views/JcrUsersView.java b/org.argeo.security.ui.admin/src/org/argeo/security/ui/admin/views/JcrUsersView.java index 1c4224d02..dfdd737d2 100644 --- a/org.argeo.security.ui.admin/src/org/argeo/security/ui/admin/views/JcrUsersView.java +++ b/org.argeo.security.ui.admin/src/org/argeo/security/ui/admin/views/JcrUsersView.java @@ -15,143 +15,119 @@ */ package org.argeo.security.ui.admin.views; -import javax.jcr.Node; -import javax.jcr.Repository; -import javax.jcr.RepositoryException; -import javax.jcr.Session; -import javax.jcr.observation.Event; -import javax.jcr.observation.EventIterator; -import javax.jcr.observation.EventListener; - -import org.argeo.ArgeoException; -import org.argeo.eclipse.ui.parts.UsersTable; -import org.argeo.eclipse.ui.workbench.CommandUtils; -import org.argeo.jcr.ArgeoJcrConstants; -import org.argeo.jcr.ArgeoNames; -import org.argeo.jcr.ArgeoTypes; -import org.argeo.jcr.JcrUtils; -import org.argeo.security.ui.admin.SecurityAdminPlugin; -import org.argeo.security.ui.admin.commands.OpenArgeoUserEditor; -import org.eclipse.jface.viewers.DoubleClickEvent; -import org.eclipse.jface.viewers.IDoubleClickListener; -import org.eclipse.jface.viewers.IStructuredSelection; -import org.eclipse.swt.SWT; -import org.eclipse.swt.layout.FillLayout; -import org.eclipse.swt.widgets.Composite; -import org.eclipse.swt.widgets.Display; -import org.eclipse.ui.part.ViewPart; - -/** List all users with filter. */ -public class JcrUsersView extends ViewPart implements ArgeoNames { - public final static String ID = SecurityAdminPlugin.PLUGIN_ID - + ".jcrUsersView"; - - /* DEPENDENCY INJECTION */ - private Session session; - - private UsersTable userTableCmp; - private JcrUserListener userStructureListener; - private JcrUserListener userPropertiesListener; - - @Override - public void createPartControl(Composite parent) { - parent.setLayout(new FillLayout()); - - // Create the composite that displays the list and a filter - userTableCmp = new UsersTable(parent, SWT.NO_FOCUS, session); - userTableCmp.populate(true, false); - - // Configure - userTableCmp.getTableViewer().addDoubleClickListener( - new ViewDoubleClickListener()); - getViewSite().setSelectionProvider(userTableCmp.getTableViewer()); - - // Add listener to refresh the list when something changes - userStructureListener = new JcrUserListener(getSite().getShell() - .getDisplay()); - JcrUtils.addListener(session, userStructureListener, Event.NODE_ADDED - | Event.NODE_REMOVED, ArgeoJcrConstants.PEOPLE_BASE_PATH, null); - userPropertiesListener = new JcrUserListener(getSite().getShell() - .getDisplay()); - JcrUtils.addListener(session, userStructureListener, - Event.PROPERTY_CHANGED | Event.PROPERTY_ADDED - | Event.PROPERTY_REMOVED, - ArgeoJcrConstants.PEOPLE_BASE_PATH, - ArgeoTypes.ARGEO_USER_PROFILE); - } - - @Override - public void setFocus() { - userTableCmp.setFocus(); - } - - @Override - public void dispose() { - JcrUtils.removeListenerQuietly(session, userStructureListener); - JcrUtils.removeListenerQuietly(session, userPropertiesListener); - JcrUtils.logoutQuietly(session); - super.dispose(); - } - - // public void setSession(Session session) { - // this.session = session; - // } - - public void refresh() { - this.getSite().getShell().getDisplay().asyncExec(new Runnable() { - @Override - public void run() { - userTableCmp.refresh(); - } - }); - } - - private class JcrUserListener implements EventListener { - private final Display display; - - public JcrUserListener(Display display) { - super(); - this.display = display; - } - - @Override - public void onEvent(EventIterator events) { - display.asyncExec(new Runnable() { - @Override - public void run() { - userTableCmp.refresh(); - } - }); - } - } - - class ViewDoubleClickListener implements IDoubleClickListener { - public void doubleClick(DoubleClickEvent evt) { - if (evt.getSelection().isEmpty()) - return; - - Object obj = ((IStructuredSelection) evt.getSelection()) - .getFirstElement(); - if (obj instanceof Node) { - try { - String username = ((Node) obj).getProperty(ARGEO_USER_ID) - .getString(); - String commandId = OpenArgeoUserEditor.COMMAND_ID; - String paramName = OpenArgeoUserEditor.PARAM_USERNAME; - CommandUtils.callCommand(commandId, paramName, username); - } catch (RepositoryException e) { - throw new ArgeoException("Cannot open user editor", e); - } - } - } - } - - /* DEPENDENCY INJECTION */ - public void setRepository(Repository repository) { - try { - session = repository.login(); - } catch (RepositoryException re) { - throw new ArgeoException("Unable to initialise local session", re); - } - } -} \ No newline at end of file +public class JcrUsersView { +} +/** List all users with filter. Legacy. TODO Remove */ +// public class JcrUsersView extends ViewPart implements ArgeoNames { +// public final static String ID = SecurityAdminPlugin.PLUGIN_ID +// + ".jcrUsersView"; +// +// /* DEPENDENCY INJECTION */ +// private Session session; +// +// private UsersTable userTableCmp; +// private JcrUserListener userStructureListener; +// private JcrUserListener userPropertiesListener; +// +// @Override +// public void createPartControl(Composite parent) { +// parent.setLayout(new FillLayout()); +// +// // Create the composite that displays the list and a filter +// userTableCmp = new UsersTable(parent, SWT.NO_FOCUS, session); +// userTableCmp.populate(true, false); +// +// // Configure +// userTableCmp.getTableViewer().addDoubleClickListener( +// new ViewDoubleClickListener()); +// getViewSite().setSelectionProvider(userTableCmp.getTableViewer()); +// +// // Add listener to refresh the list when something changes +// userStructureListener = new JcrUserListener(getSite().getShell() +// .getDisplay()); +// JcrUtils.addListener(session, userStructureListener, Event.NODE_ADDED +// | Event.NODE_REMOVED, ArgeoJcrConstants.PEOPLE_BASE_PATH, null); +// userPropertiesListener = new JcrUserListener(getSite().getShell() +// .getDisplay()); +// JcrUtils.addListener(session, userStructureListener, +// Event.PROPERTY_CHANGED | Event.PROPERTY_ADDED +// | Event.PROPERTY_REMOVED, +// ArgeoJcrConstants.PEOPLE_BASE_PATH, +// ArgeoTypes.ARGEO_USER_PROFILE); +// } +// +// @Override +// public void setFocus() { +// userTableCmp.setFocus(); +// } +// +// @Override +// public void dispose() { +// JcrUtils.removeListenerQuietly(session, userStructureListener); +// JcrUtils.removeListenerQuietly(session, userPropertiesListener); +// JcrUtils.logoutQuietly(session); +// super.dispose(); +// } +// +// // public void setSession(Session session) { +// // this.session = session; +// // } +// +// public void refresh() { +// this.getSite().getShell().getDisplay().asyncExec(new Runnable() { +// @Override +// public void run() { +// userTableCmp.refresh(); +// } +// }); +// } +// +// private class JcrUserListener implements EventListener { +// private final Display display; +// +// public JcrUserListener(Display display) { +// super(); +// this.display = display; +// } +// +// @Override +// public void onEvent(EventIterator events) { +// display.asyncExec(new Runnable() { +// @Override +// public void run() { +// userTableCmp.refresh(); +// } +// }); +// } +// } +// +// class ViewDoubleClickListener implements IDoubleClickListener { +// public void doubleClick(DoubleClickEvent evt) { +// if (evt.getSelection().isEmpty()) +// return; +// +// Object obj = ((IStructuredSelection) evt.getSelection()) +// .getFirstElement(); +// if (obj instanceof Node) { +// try { +// String username = ((Node) obj).getProperty(ARGEO_USER_ID) +// .getString(); +// String commandId = OpenArgeoUserEditor.COMMAND_ID; +// String paramName = OpenArgeoUserEditor.PARAM_USERNAME; +// CommandUtils.callCommand(commandId, paramName, username); +// } catch (RepositoryException e) { +// throw new ArgeoException("Cannot open user editor", e); +// } +// } +// } +// } +// +// /* DEPENDENCY INJECTION */ +// public void setRepository(Repository repository) { +// try { +// session = repository.login(); +// } catch (RepositoryException re) { +// throw new ArgeoException("Unable to initialise local session", re); +// } +// } +// } \ No newline at end of file -- 2.39.2