import org.argeo.eclipse.ui.workbench.WorkbenchUiPlugin;
import org.argeo.eclipse.ui.workbench.jcr.internal.model.SingleJcrNodeElem;
import org.argeo.eclipse.ui.workbench.jcr.internal.model.WorkspaceElem;
-import org.argeo.eclipse.ui.workbench.jcr.internal.parts.ChangeRightsWizard;
+import org.argeo.eclipse.ui.workbench.jcr.internal.parts.AddPrivilegeWizard;
import org.eclipse.core.commands.AbstractHandler;
import org.eclipse.core.commands.ExecutionEvent;
import org.eclipse.core.commands.ExecutionException;
return null;
try {
- ChangeRightsWizard wizard = new ChangeRightsWizard(
- jcrParentNode.getSession(), jcrParentNode.getPath(),
- userAdmin);
+ String targetPath = jcrParentNode.getPath();
+ AddPrivilegeWizard wizard = new AddPrivilegeWizard(
+ jcrParentNode.getSession(), targetPath, userAdmin);
WizardDialog dialog = new WizardDialog(
HandlerUtil.getActiveShell(event), wizard);
dialog.open();
return null;
} catch (RepositoryException re) {
- throw new ArgeoException(
- "Unexpected error while creating the new workspace.",
- re);
+ throw new ArgeoException("Unable to retrieve "
+ + "path or JCR session to add privilege on "
+ + jcrParentNode, re);
}
} else {
ErrorFeedback.show("Cannot add privileges");
--- /dev/null
+/*
+ * Copyright (C) 2007-2012 Argeo GmbH
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package org.argeo.eclipse.ui.workbench.jcr.internal.parts;
+
+import java.util.Collections;
+import java.util.HashMap;
+import java.util.Map;
+
+import javax.jcr.RepositoryException;
+import javax.jcr.Session;
+import javax.jcr.security.Privilege;
+
+import org.argeo.ArgeoException;
+import org.argeo.eclipse.ui.EclipseUiUtils;
+import org.argeo.eclipse.ui.workbench.users.PickUpUserDialog;
+import org.argeo.eclipse.ui.workbench.users.internal.UsersUtils;
+import org.argeo.jcr.JcrUtils;
+import org.eclipse.jface.dialogs.MessageDialog;
+import org.eclipse.jface.window.Window;
+import org.eclipse.jface.wizard.Wizard;
+import org.eclipse.jface.wizard.WizardPage;
+import org.eclipse.swt.SWT;
+import org.eclipse.swt.events.FocusEvent;
+import org.eclipse.swt.events.FocusListener;
+import org.eclipse.swt.events.ModifyEvent;
+import org.eclipse.swt.events.ModifyListener;
+import org.eclipse.swt.events.SelectionAdapter;
+import org.eclipse.swt.events.SelectionEvent;
+import org.eclipse.swt.layout.GridData;
+import org.eclipse.swt.layout.GridLayout;
+import org.eclipse.swt.widgets.Combo;
+import org.eclipse.swt.widgets.Composite;
+import org.eclipse.swt.widgets.Label;
+import org.eclipse.swt.widgets.Link;
+import org.eclipse.swt.widgets.Text;
+import org.osgi.service.useradmin.User;
+import org.osgi.service.useradmin.UserAdmin;
+
+/** Add Jcr privileges to the chosen user group on a given node */
+public class AddPrivilegeWizard extends Wizard {
+
+ // Context
+ private UserAdmin userAdmin;
+ private Session currentSession;
+ private String targetPath;
+ // Chosen parameters
+ private User chosenUser;
+ private String jcrPrivilege;
+
+ // UI Object
+ private DefinePrivilegePage page;
+
+ // TODO enable external definition of possible values and corresponding
+ // description
+ protected static final Map<String, String> AUTH_TYPE_LABELS;
+ static {
+ Map<String, String> tmpMap = new HashMap<String, String>();
+ tmpMap.put(Privilege.JCR_READ, "jcr:read");
+ tmpMap.put(Privilege.JCR_WRITE, "jcr:write");
+ tmpMap.put(Privilege.JCR_ALL, "jcr:all");
+ AUTH_TYPE_LABELS = Collections.unmodifiableMap(tmpMap);
+ }
+
+ protected static final Map<String, String> AUTH_TYPE_DESC;
+ static {
+ Map<String, String> tmpMap = new HashMap<String, String>();
+ tmpMap.put(Privilege.JCR_READ,
+ "The privilege to retrieve a node and get its properties and their values.");
+ tmpMap.put(Privilege.JCR_WRITE, "An aggregate privilege that "
+ + "contains: jcr:modifyProperties, jcr:addChildNodes, "
+ + "jcr:removeNode, jcr:removeChildNodes");
+ tmpMap.put(Privilege.JCR_ALL, "An aggregate privilege that "
+ + "contains all JCR predefined privileges, "
+ + "plus all implementation-defined privileges. ");
+ AUTH_TYPE_DESC = Collections.unmodifiableMap(tmpMap);
+ }
+
+ public AddPrivilegeWizard(Session currentSession, String path,
+ UserAdmin userAdmin) {
+ super();
+ this.userAdmin = userAdmin;
+ this.currentSession = currentSession;
+ this.targetPath = path;
+ }
+
+ @Override
+ public void addPages() {
+ try {
+ setWindowTitle("Add privilege on " + targetPath);
+ page = new DefinePrivilegePage(userAdmin, targetPath);
+ addPage(page);
+ } catch (Exception e) {
+ throw new ArgeoException("Cannot add page to wizard ", e);
+ }
+ }
+
+ @Override
+ public boolean performFinish() {
+ if (!canFinish())
+ return false;
+ try {
+ JcrUtils.addPrivilege(currentSession, targetPath,
+ chosenUser.getName(), jcrPrivilege);
+ } catch (RepositoryException re) {
+ throw new ArgeoException("Cannot set " + jcrPrivilege + " for "
+ + chosenUser.getName() + " on " + targetPath, re);
+ }
+ return true;
+ }
+
+ private class DefinePrivilegePage extends WizardPage implements
+ ModifyListener {
+ private static final long serialVersionUID = 8084431378762283920L;
+
+ // Context
+ final private UserAdmin userAdmin;
+
+ public DefinePrivilegePage(UserAdmin userAdmin, String path) {
+ super("Main");
+ this.userAdmin = userAdmin;
+ setTitle("Define the privilege to apply to " + path);
+ setMessage("Please choose a user or a group and relevant JCR Privilege.");
+ }
+
+ public void createControl(Composite parent) {
+ final Composite composite = new Composite(parent, SWT.NONE);
+ composite.setLayout(new GridLayout(3, false));
+
+ // specify subject
+ createBoldLabel(composite, "User or group name");
+ final Label groupNameLbl = new Label(composite, SWT.LEAD);
+ groupNameLbl.setLayoutData(EclipseUiUtils.fillWidth());
+
+ Link pickUpLk = new Link(composite, SWT.LEFT);
+ pickUpLk.setText(" <a>Change</a> ");
+
+ createBoldLabel(composite, "User or group DN");
+ final Text groupNameTxt = new Text(composite, SWT.LEAD | SWT.BORDER);
+ groupNameTxt.setLayoutData(EclipseUiUtils.fillWidth(2));
+
+ pickUpLk.addSelectionListener(new SelectionAdapter() {
+ private static final long serialVersionUID = 1L;
+
+ @Override
+ public void widgetSelected(SelectionEvent e) {
+ PickUpUserDialog dialog = new PickUpUserDialog(
+ getShell(), "Choose a group or a user", userAdmin);
+ if (dialog.open() == Window.OK) {
+ chosenUser = dialog.getSelected();
+ groupNameLbl.setText(UsersUtils
+ .getCommonName(chosenUser));
+ groupNameTxt.setText(chosenUser.getName());
+ }
+ }
+ });
+
+ groupNameTxt.addFocusListener(new FocusListener() {
+ private static final long serialVersionUID = 1965498600105667738L;
+
+ @Override
+ public void focusLost(FocusEvent event) {
+ String dn = groupNameTxt.getText();
+ User newChosen = null;
+ try {
+ newChosen = (User) userAdmin.getRole(dn);
+ } catch (Exception e) {
+ boolean tryAgain = MessageDialog.openQuestion(
+ getShell(), "Unvalid DN",
+ "DN " + dn + " is not valid.\nError message: "
+ + e.getMessage()
+ + "\n\t\tDo you want to try again?");
+ if (tryAgain)
+ groupNameTxt.setFocus();
+ else
+ resetOnFail();
+ }
+
+ if (userAdmin.getRole(dn) == null) {
+ boolean tryAgain = MessageDialog.openQuestion(
+ getShell(), "Unexisting role", "User/group "
+ + dn + " does not exist. "
+ + "Do you want to try again?");
+ if (tryAgain)
+ groupNameTxt.setFocus();
+ else
+ resetOnFail();
+ } else {
+ chosenUser = newChosen;
+ groupNameLbl.setText(UsersUtils
+ .getCommonName(chosenUser));
+ }
+ }
+
+ private void resetOnFail() {
+ String oldDn = chosenUser == null ? "" : chosenUser
+ .getName();
+ groupNameTxt.setText(oldDn);
+ }
+
+ @Override
+ public void focusGained(FocusEvent event) {
+ }
+ });
+
+ // JCR Privileges
+ createBoldLabel(composite, "Privilege type");
+ Combo authorizationCmb = new Combo(composite, SWT.BORDER
+ | SWT.READ_ONLY | SWT.V_SCROLL);
+ authorizationCmb.setItems(AUTH_TYPE_LABELS.values().toArray(
+ new String[0]));
+ authorizationCmb.setLayoutData(EclipseUiUtils.fillWidth(2));
+ createBoldLabel(composite, ""); // empty cell
+ final Label descLbl = new Label(composite, SWT.WRAP);
+ descLbl.setLayoutData(EclipseUiUtils.fillWidth(2));
+
+ authorizationCmb.addSelectionListener(new SelectionAdapter() {
+ private static final long serialVersionUID = 1L;
+
+ @Override
+ public void widgetSelected(SelectionEvent e) {
+ String chosenPrivStr = ((Combo) e.getSource()).getText();
+ if (AUTH_TYPE_LABELS.containsValue(chosenPrivStr)) {
+ loop: for (String key : AUTH_TYPE_LABELS.keySet()) {
+ if (AUTH_TYPE_LABELS.get(key).equals(chosenPrivStr)) {
+ jcrPrivilege = key;
+ break loop;
+ }
+ }
+ }
+
+ if (jcrPrivilege != null) {
+ descLbl.setText(AUTH_TYPE_DESC.get(jcrPrivilege));
+ composite.layout(true, true);
+ }
+ }
+ });
+
+ // Compulsory
+ setControl(composite);
+ }
+
+ public void modifyText(ModifyEvent event) {
+ String message = checkComplete();
+ if (message != null)
+ setMessage(message, WizardPage.ERROR);
+ else {
+ setMessage("Complete", WizardPage.INFORMATION);
+ setPageComplete(true);
+ }
+ }
+
+ /** @return error message or null if complete */
+ protected String checkComplete() {
+ if (chosenUser == null)
+ return "Please choose a relevant group or user";
+ else if (userAdmin.getRole(chosenUser.getName()) == null)
+ return "Please choose a relevant group or user";
+ else if (jcrPrivilege == null)
+ return "Please choose a relevant JCR privilege";
+ return null;
+ }
+ }
+
+ private Label createBoldLabel(Composite parent, String value) {
+ Label label = new Label(parent, SWT.RIGHT);
+ label.setText(" " + value);
+ label.setFont(EclipseUiUtils.getBoldFont(parent));
+ label.setLayoutData(new GridData(SWT.RIGHT, SWT.CENTER, false, false));
+ return label;
+ }
+}
\ No newline at end of file
+++ /dev/null
-/*
- * Copyright (C) 2007-2012 Argeo GmbH
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-package org.argeo.eclipse.ui.workbench.jcr.internal.parts;
-
-import javax.jcr.RepositoryException;
-import javax.jcr.Session;
-import javax.jcr.security.Privilege;
-
-import org.argeo.ArgeoException;
-import org.argeo.eclipse.ui.EclipseUiUtils;
-import org.argeo.eclipse.ui.workbench.users.PickUpGroupDialog;
-import org.argeo.jcr.JcrUtils;
-import org.eclipse.jface.window.Window;
-import org.eclipse.jface.wizard.Wizard;
-import org.eclipse.jface.wizard.WizardPage;
-import org.eclipse.swt.SWT;
-import org.eclipse.swt.events.ModifyEvent;
-import org.eclipse.swt.events.ModifyListener;
-import org.eclipse.swt.events.SelectionAdapter;
-import org.eclipse.swt.events.SelectionEvent;
-import org.eclipse.swt.layout.GridData;
-import org.eclipse.swt.layout.GridLayout;
-import org.eclipse.swt.widgets.Combo;
-import org.eclipse.swt.widgets.Composite;
-import org.eclipse.swt.widgets.Label;
-import org.eclipse.swt.widgets.Link;
-import org.eclipse.swt.widgets.Text;
-import org.osgi.service.useradmin.UserAdmin;
-
-/** Add Jcr privileges to the chosen user group on a given node */
-public class ChangeRightsWizard extends Wizard {
-
- private UserAdmin userAdmin;
- private Session currentSession;
- private String path;
-
- // This page widget
- private DefinePrivilegePage page;
-
- // USABLE SHORTCUTS
- protected final static String[] validAuthType = { Privilege.JCR_READ,
- Privilege.JCR_WRITE, Privilege.JCR_ALL };
-
- public ChangeRightsWizard(Session currentSession, String path,
- UserAdmin userAdmin) {
- super();
- this.userAdmin = userAdmin;
- this.currentSession = currentSession;
- this.path = path;
- }
-
- @Override
- public void addPages() {
- try {
- page = new DefinePrivilegePage(userAdmin, path);
- addPage(page);
- } catch (Exception e) {
- throw new ArgeoException("Cannot add page to wizard ", e);
- }
- }
-
- @Override
- public boolean performFinish() {
- if (!canFinish())
- return false;
- try {
- JcrUtils.addPrivilege(currentSession, path, page.getGroupName(),
- page.getAuthTypeStr());
- } catch (RepositoryException re) {
- throw new ArgeoException(
- "Unexpected error while setting privileges", re);
- }
- return true;
- }
-
- private class DefinePrivilegePage extends WizardPage implements ModifyListener {
- private static final long serialVersionUID = 8084431378762283920L;
-
- // Context
- final private UserAdmin userAdmin;
-
- // This page widget
- private Text groupNameTxt;
- private Combo authorizationCmb;
-
- public DefinePrivilegePage(UserAdmin userAdmin, String path) {
- super("Main");
- this.userAdmin = userAdmin;
- setTitle("Define the privilege to apply to " + path);
- }
-
- public void createControl(Composite parent) {
- // specify subject
- Composite composite = new Composite(parent, SWT.NONE);
- composite.setLayout(new GridLayout(3, false));
- Label lbl = new Label(composite, SWT.LEAD);
- lbl.setText("Group name");
- lbl.setLayoutData(new GridData(SWT.FILL, SWT.CENTER, false, false));
- groupNameTxt = new Text(composite, SWT.LEAD | SWT.BORDER);
- groupNameTxt.setLayoutData(EclipseUiUtils.fillWidth());
- if (groupNameTxt != null)
- groupNameTxt.addModifyListener(this);
-
- Link pickUpLk = new Link(composite, SWT.LEFT);
- pickUpLk.setText(" <a>Pick up</a> ");
- pickUpLk.addSelectionListener(new SelectionAdapter() {
- private static final long serialVersionUID = 1L;
-
- @Override
- public void widgetSelected(SelectionEvent e) {
- PickUpGroupDialog dialog = new PickUpGroupDialog(
- getShell(), "Choose a group", userAdmin);
- if (dialog.open() == Window.OK)
- groupNameTxt.setText(dialog.getSelected());
- }
-
- });
-
- // Choose rigths
- new Label(composite, SWT.NONE)
- .setText("Choose corresponding rights");
- authorizationCmb = new Combo(composite, SWT.BORDER | SWT.V_SCROLL);
- authorizationCmb.setItems(validAuthType);
- authorizationCmb.setLayoutData(EclipseUiUtils.fillWidth(2));
- authorizationCmb.select(0);
-
- // Compulsory
- setControl(composite);
- }
-
- protected String getGroupName() {
- return groupNameTxt.getText();
- }
-
- protected String getAuthTypeStr() {
- return authorizationCmb.getItem(authorizationCmb
- .getSelectionIndex());
- }
-
- public void modifyText(ModifyEvent event) {
- String message = checkComplete();
- if (message != null)
- setMessage(message, WizardPage.ERROR);
- else {
- setMessage("Complete", WizardPage.INFORMATION);
- setPageComplete(true);
- }
- }
-
- /** @return error message or null if complete */
- protected String checkComplete() {
- String groupStr = groupNameTxt.getText();
- if (groupStr == null || "".equals(groupStr))
- return "Please enter the name of the corresponding group.";
- return null;
- }
- }
-}
\ No newline at end of file
+++ /dev/null
-/*
- * Copyright (C) 2007-2012 Argeo GmbH
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-package org.argeo.eclipse.ui.workbench.jcr.internal.parts;
-
-import javax.jcr.security.Privilege;
-
-import org.argeo.eclipse.ui.EclipseUiUtils;
-import org.argeo.eclipse.ui.workbench.users.PickUpGroupDialog;
-import org.eclipse.jface.window.Window;
-import org.eclipse.jface.wizard.WizardPage;
-import org.eclipse.swt.SWT;
-import org.eclipse.swt.events.ModifyEvent;
-import org.eclipse.swt.events.ModifyListener;
-import org.eclipse.swt.events.SelectionAdapter;
-import org.eclipse.swt.events.SelectionEvent;
-import org.eclipse.swt.layout.GridData;
-import org.eclipse.swt.layout.GridLayout;
-import org.eclipse.swt.widgets.Combo;
-import org.eclipse.swt.widgets.Composite;
-import org.eclipse.swt.widgets.Label;
-import org.eclipse.swt.widgets.Link;
-import org.eclipse.swt.widgets.Text;
-import org.osgi.service.useradmin.UserAdmin;
-
-/** Simple wizard page to choose a group and corresponding rights to assign */
-public class ChooseRightsPage extends WizardPage implements ModifyListener {
- private static final long serialVersionUID = 8084431378762283920L;
-
- // Context
- final private UserAdmin userAdmin;
-
- // This page widget
- private Text groupNameTxt;
- private Combo authorizationCmb;
-
- // USABLE SHORTCUTS
- protected final static String[] validAuthType = { Privilege.JCR_READ,
- Privilege.JCR_WRITE, Privilege.JCR_ALL };
-
- public ChooseRightsPage(UserAdmin userAdmin, String path) {
- super("Main");
- this.userAdmin = userAdmin;
- setTitle("Add privilege to " + path);
- }
-
- public void createControl(Composite parent) {
- // specify subject
- Composite composite = new Composite(parent, SWT.NONE);
- composite.setLayout(new GridLayout(3, false));
- Label lbl = new Label(composite, SWT.LEAD);
- lbl.setText("Group name");
- // lbl.setText("Group or user name (no blank, no special chars)");
- lbl.setLayoutData(new GridData(SWT.FILL, SWT.CENTER, false, false));
- groupNameTxt = new Text(composite, SWT.LEAD | SWT.BORDER);
- groupNameTxt.setLayoutData(EclipseUiUtils.fillWidth());
- if (groupNameTxt != null)
- groupNameTxt.addModifyListener(this);
-
- Link pickUpLk = new Link(composite, SWT.LEFT);
- pickUpLk.setText("<a>Pick up</a>");
- pickUpLk.addSelectionListener(new SelectionAdapter() {
- private static final long serialVersionUID = 1L;
-
- @Override
- public void widgetSelected(SelectionEvent e) {
- PickUpGroupDialog dialog = new PickUpGroupDialog(getShell(),
- "Choose a group", userAdmin);
- if (dialog.open() == Window.OK)
- groupNameTxt.setText(dialog.getSelected());
- }
-
- });
-
- // Choose rigths
- new Label(composite, SWT.NONE).setText("Choose corresponding rights");
- authorizationCmb = new Combo(composite, SWT.BORDER | SWT.V_SCROLL);
- authorizationCmb.setItems(validAuthType);
- authorizationCmb.setLayoutData(EclipseUiUtils.fillWidth(2));
- authorizationCmb.select(0);
-
- // Compulsory
- setControl(composite);
- }
-
- protected String getGroupName() {
- return groupNameTxt.getText();
- }
-
- protected String getAuthTypeStr() {
- return authorizationCmb.getItem(authorizationCmb.getSelectionIndex());
- }
-
- public void modifyText(ModifyEvent event) {
- String message = checkComplete();
- if (message != null)
- setMessage(message, WizardPage.ERROR);
- else {
- setMessage("Complete", WizardPage.INFORMATION);
- setPageComplete(true);
- }
- }
-
- /** @return error message or null if complete */
- protected String checkComplete() {
- String groupStr = groupNameTxt.getText();
- if (groupStr == null || "".equals(groupStr))
- return "Please enter the name of the corresponding group.";
- return null;
- }
-}
+++ /dev/null
-package org.argeo.eclipse.ui.workbench.users;
-
-import java.util.List;
-
-import javax.naming.InvalidNameException;
-import javax.naming.ldap.LdapName;
-import javax.naming.ldap.Rdn;
-
-import org.argeo.ArgeoException;
-import org.argeo.eclipse.ui.workbench.users.internal.UsersImages;
-import org.argeo.eclipse.ui.workbench.users.internal.UsersUtils;
-import org.argeo.osgi.useradmin.LdifName;
-import org.eclipse.jface.resource.JFaceResources;
-import org.eclipse.jface.viewers.ColumnLabelProvider;
-import org.eclipse.swt.SWT;
-import org.eclipse.swt.graphics.Font;
-import org.eclipse.swt.graphics.Image;
-import org.eclipse.swt.widgets.Display;
-import org.osgi.service.useradmin.Role;
-import org.osgi.service.useradmin.User;
-
-/** Centralize label providers for the group table */
-class GroupLP extends ColumnLabelProvider {
- private static final long serialVersionUID = -4645930210988368571L;
-
- // TODO this constant is defined in the CMS
- final static String ROLES_BASEDN = "ou=roles,ou=node";
-
- final static String COL_ICON = "colID.icon";
- final static String COL_DN = "colID.dn";
- final static String COL_DISPLAY_NAME = "colID.displayName";
- final static String COL_DOMAIN = "colID.domain";
-
- final String currType;
-
- // private Font italic;
- private Font bold;
-
- GroupLP(String colId) {
- this.currType = colId;
- }
-
- @Override
- public Font getFont(Object element) {
- // Self as bold
- try {
- LdapName selfUserName = UsersUtils.getLdapName();
- String userName = UsersUtils.getProperty((User) element,
- LdifName.dn.name());
- LdapName userLdapName = new LdapName(userName);
- if (userLdapName.equals(selfUserName)) {
- if (bold == null)
- bold = JFaceResources.getFontRegistry()
- .defaultFontDescriptor().setStyle(SWT.BOLD)
- .createFont(Display.getCurrent());
- return bold;
- }
- } catch (InvalidNameException e) {
- throw new ArgeoException("cannot parse dn for " + element, e);
- }
-
- // Disabled as Italic
- // Node userProfile = (Node) elem;
- // if (!userProfile.getProperty(ARGEO_ENABLED).getBoolean())
- // return italic;
-
- return null;
- // return super.getFont(element);
- }
-
- @Override
- public Image getImage(Object element) {
- if (COL_ICON.equals(currType)) {
- User user = (User) element;
- String dn = (String) user.getProperties().get(LdifName.dn.name());
- if (dn.endsWith(ROLES_BASEDN))
- return UsersImages.ICON_ROLE;
- else if (user.getType() == Role.GROUP)
- return UsersImages.ICON_GROUP;
- else
- return UsersImages.ICON_USER;
- } else
- return null;
- }
-
- @Override
- public String getText(Object element) {
- User user = (User) element;
- return getText(user);
-
- }
-
- public String getText(User user) {
- if (COL_DN.equals(currType))
- return user.getName();
- else if (COL_DISPLAY_NAME.equals(currType)) {
- Object obj = user.getProperties().get(LdifName.cn.name());
- if (obj != null)
- return (String) obj;
- else
- return "";
- } else if (COL_DOMAIN.equals(currType)) {
- String dn = (String) user.getProperties().get(LdifName.dn.name());
- if (dn.endsWith(ROLES_BASEDN))
- return "System roles";
- try {
- LdapName name;
- name = new LdapName(dn);
- List<Rdn> rdns = name.getRdns();
- return (String) rdns.get(1).getValue() + '.'
- + (String) rdns.get(0).getValue();
- } catch (InvalidNameException e) {
- throw new ArgeoException("Unable to get domain name for " + dn,
- e);
- }
- } else
- return "";
- }
-}
\ No newline at end of file
+++ /dev/null
-/*
- * Copyright (C) 2007-2012 Argeo GmbH
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-package org.argeo.eclipse.ui.workbench.users;
-
-import java.util.ArrayList;
-import java.util.List;
-
-import org.argeo.ArgeoException;
-import org.argeo.eclipse.ui.ColumnDefinition;
-import org.argeo.eclipse.ui.EclipseUiUtils;
-import org.argeo.eclipse.ui.parts.LdifUsersTable;
-import org.argeo.osgi.useradmin.LdifName;
-import org.eclipse.jface.dialogs.TrayDialog;
-import org.eclipse.jface.viewers.DoubleClickEvent;
-import org.eclipse.jface.viewers.IDoubleClickListener;
-import org.eclipse.jface.viewers.ISelectionChangedListener;
-import org.eclipse.jface.viewers.IStructuredSelection;
-import org.eclipse.jface.viewers.SelectionChangedEvent;
-import org.eclipse.jface.viewers.TableViewer;
-import org.eclipse.swt.SWT;
-import org.eclipse.swt.events.SelectionAdapter;
-import org.eclipse.swt.events.SelectionEvent;
-import org.eclipse.swt.graphics.Point;
-import org.eclipse.swt.layout.FillLayout;
-import org.eclipse.swt.layout.GridLayout;
-import org.eclipse.swt.widgets.Button;
-import org.eclipse.swt.widgets.Composite;
-import org.eclipse.swt.widgets.Control;
-import org.eclipse.swt.widgets.Shell;
-import org.osgi.framework.InvalidSyntaxException;
-import org.osgi.service.useradmin.Group;
-import org.osgi.service.useradmin.Role;
-import org.osgi.service.useradmin.User;
-import org.osgi.service.useradmin.UserAdmin;
-
-/** Dialog with a group list to pick up one */
-public class PickUpGroupDialog extends TrayDialog {
- private static final long serialVersionUID = -1420106871173920369L;
-
- // Business objects
- private final UserAdmin userAdmin;
- private Group selectedGroup;
-
- // this page widgets and UI objects
- private String title;
- private LdifUsersTable groupTableViewerCmp;
- private TableViewer userViewer;
- private List<ColumnDefinition> columnDefs = new ArrayList<ColumnDefinition>();
-
- public PickUpGroupDialog(Shell parentShell, String title,
- UserAdmin userAdmin) {
- super(parentShell);
- this.title = title;
- this.userAdmin = userAdmin;
-
- // Define the displayed columns
- columnDefs.add(new ColumnDefinition(new GroupLP(GroupLP.COL_ICON), "",
- 26, 0));
- columnDefs.add(new ColumnDefinition(new GroupLP(
- GroupLP.COL_DISPLAY_NAME), "Common Name", 150, 100));
- columnDefs.add(new ColumnDefinition(new GroupLP(GroupLP.COL_DOMAIN),
- "Domain", 100, 120));
- columnDefs.add(new ColumnDefinition(new GroupLP(GroupLP.COL_DN),
- "Distinguished Name", 300, 100));
- }
-
- protected Point getInitialSize() {
- return new Point(600, 450);
- }
-
- protected Control createDialogArea(Composite parent) {
- Composite dialogArea = (Composite) super.createDialogArea(parent);
- dialogArea.setLayout(new FillLayout());
-
- Composite bodyCmp = new Composite(dialogArea, SWT.NO_FOCUS);
- bodyCmp.setLayout(new GridLayout());
-
- // Create and configure the table
- groupTableViewerCmp = new MyUserTableViewer(parent, SWT.MULTI
- | SWT.H_SCROLL | SWT.V_SCROLL);
-
- groupTableViewerCmp.setColumnDefinitions(columnDefs);
- groupTableViewerCmp.populateWithStaticFilters(false, false);
- groupTableViewerCmp.setLayoutData(EclipseUiUtils.fillAll());
- groupTableViewerCmp.refresh();
-
- // Controllers
- userViewer = groupTableViewerCmp.getTableViewer();
- userViewer.addDoubleClickListener(new MyDoubleClickListener());
- userViewer
- .addSelectionChangedListener(new MySelectionChangedListener());
-
- parent.pack();
- return dialogArea;
- }
-
- public String getSelected() {
- if (selectedGroup == null)
- return null;
- else
- return selectedGroup.getName();
- }
-
- protected void configureShell(Shell shell) {
- super.configureShell(shell);
- shell.setText(title);
- }
-
- class MyDoubleClickListener implements IDoubleClickListener {
- public void doubleClick(DoubleClickEvent evt) {
- if (evt.getSelection().isEmpty())
- return;
-
- Object obj = ((IStructuredSelection) evt.getSelection())
- .getFirstElement();
- if (obj instanceof Group) {
- selectedGroup = (Group) obj;
- okPressed();
- }
- }
- }
-
- class MySelectionChangedListener implements ISelectionChangedListener {
- @Override
- public void selectionChanged(SelectionChangedEvent event) {
- if (event.getSelection().isEmpty()) {
- selectedGroup = null;
- return;
- }
- Object obj = ((IStructuredSelection) event.getSelection())
- .getFirstElement();
- if (obj instanceof Group) {
- selectedGroup = (Group) obj;
- }
- }
- }
-
- private class MyUserTableViewer extends LdifUsersTable {
- private static final long serialVersionUID = 8467999509931900367L;
-
- private final String[] knownProps = { LdifName.uid.name(),
- LdifName.cn.name(), LdifName.dn.name() };
-
- private Button showSystemRoleBtn;
-
- public MyUserTableViewer(Composite parent, int style) {
- super(parent, style);
- }
-
- protected void populateStaticFilters(Composite staticFilterCmp) {
- staticFilterCmp.setLayout(new GridLayout());
- showSystemRoleBtn = new Button(staticFilterCmp, SWT.CHECK);
- showSystemRoleBtn.setText("Show system roles ");
- showSystemRoleBtn.addSelectionListener(new SelectionAdapter() {
- private static final long serialVersionUID = -7033424592697691676L;
-
- @Override
- public void widgetSelected(SelectionEvent e) {
- refresh();
- }
-
- });
- }
-
- @Override
- protected List<User> listFilteredElements(String filter) {
- Role[] roles;
- try {
- StringBuilder builder = new StringBuilder();
- StringBuilder tmpBuilder = new StringBuilder();
- if (notNull(filter))
- for (String prop : knownProps) {
- tmpBuilder.append("(");
- tmpBuilder.append(prop);
- tmpBuilder.append("=*");
- tmpBuilder.append(filter);
- tmpBuilder.append("*)");
- }
- if (tmpBuilder.length() > 1) {
- builder.append("(&(objectclass=groupOfNames)");
- if (!showSystemRoleBtn.getSelection())
- builder.append("(!(").append(LdifName.dn.name())
- .append("=*").append(GroupLP.ROLES_BASEDN)
- .append("))");
- builder.append("(|");
- builder.append(tmpBuilder.toString());
- builder.append("))");
- } else {
- if (!showSystemRoleBtn.getSelection())
- builder.append("(&(objectclass=groupOfNames)(!(")
- .append(LdifName.dn.name()).append("=*")
- .append(GroupLP.ROLES_BASEDN).append(")))");
- else
- builder.append("(objectclass=groupOfNames)");
-
- }
- roles = userAdmin.getRoles(builder.toString());
- } catch (InvalidSyntaxException e) {
- throw new ArgeoException("Unable to get roles with filter: "
- + filter, e);
- }
- List<User> users = new ArrayList<User>();
- for (Role role : roles)
- users.add((User) role);
- return users;
- }
- }
-
- private boolean notNull(String string) {
- if (string == null)
- return false;
- else
- return !"".equals(string.trim());
- }
-}
\ No newline at end of file
--- /dev/null
+/*
+ * Copyright (C) 2007-2012 Argeo GmbH
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package org.argeo.eclipse.ui.workbench.users;
+
+import java.util.ArrayList;
+import java.util.List;
+
+import org.argeo.ArgeoException;
+import org.argeo.eclipse.ui.ColumnDefinition;
+import org.argeo.eclipse.ui.EclipseUiUtils;
+import org.argeo.eclipse.ui.parts.LdifUsersTable;
+import org.argeo.eclipse.ui.workbench.users.internal.UsersUtils;
+import org.argeo.osgi.useradmin.LdifName;
+import org.eclipse.jface.dialogs.TrayDialog;
+import org.eclipse.jface.viewers.DoubleClickEvent;
+import org.eclipse.jface.viewers.IDoubleClickListener;
+import org.eclipse.jface.viewers.ISelectionChangedListener;
+import org.eclipse.jface.viewers.IStructuredSelection;
+import org.eclipse.jface.viewers.SelectionChangedEvent;
+import org.eclipse.jface.viewers.TableViewer;
+import org.eclipse.swt.SWT;
+import org.eclipse.swt.events.SelectionAdapter;
+import org.eclipse.swt.events.SelectionEvent;
+import org.eclipse.swt.events.SelectionListener;
+import org.eclipse.swt.graphics.Point;
+import org.eclipse.swt.layout.FillLayout;
+import org.eclipse.swt.layout.GridLayout;
+import org.eclipse.swt.widgets.Button;
+import org.eclipse.swt.widgets.Composite;
+import org.eclipse.swt.widgets.Control;
+import org.eclipse.swt.widgets.Shell;
+import org.osgi.framework.InvalidSyntaxException;
+import org.osgi.service.useradmin.Group;
+import org.osgi.service.useradmin.Role;
+import org.osgi.service.useradmin.User;
+import org.osgi.service.useradmin.UserAdmin;
+
+/** Dialog with a group list to pick up one */
+public class PickUpUserDialog extends TrayDialog {
+ private static final long serialVersionUID = -1420106871173920369L;
+
+ // Business objects
+ private final UserAdmin userAdmin;
+ private User selectedUser;
+
+ // this page widgets and UI objects
+ private String title;
+ private LdifUsersTable userTableViewerCmp;
+ private TableViewer userViewer;
+ private List<ColumnDefinition> columnDefs = new ArrayList<ColumnDefinition>();
+
+ public PickUpUserDialog(Shell parentShell, String title, UserAdmin userAdmin) {
+ super(parentShell);
+ this.title = title;
+ this.userAdmin = userAdmin;
+
+ // Define the displayed columns
+ columnDefs.add(new ColumnDefinition(new UserLP(UserLP.COL_ICON), "",
+ 26, 0));
+ columnDefs.add(new ColumnDefinition(
+ new UserLP(UserLP.COL_DISPLAY_NAME), "Common Name", 150, 100));
+ columnDefs.add(new ColumnDefinition(new UserLP(UserLP.COL_DOMAIN),
+ "Domain", 100, 120));
+ columnDefs.add(new ColumnDefinition(new UserLP(UserLP.COL_DN),
+ "Distinguished Name", 300, 100));
+ }
+
+ protected Point getInitialSize() {
+ return new Point(700, 450);
+ }
+
+ protected Control createDialogArea(Composite parent) {
+ Composite dialogArea = (Composite) super.createDialogArea(parent);
+ dialogArea.setLayout(new FillLayout());
+
+ Composite bodyCmp = new Composite(dialogArea, SWT.NO_FOCUS);
+ bodyCmp.setLayout(new GridLayout());
+
+ // Create and configure the table
+ userTableViewerCmp = new MyUserTableViewer(bodyCmp, SWT.MULTI
+ | SWT.H_SCROLL | SWT.V_SCROLL);
+
+ userTableViewerCmp.setColumnDefinitions(columnDefs);
+ userTableViewerCmp.populateWithStaticFilters(false, false);
+ userTableViewerCmp.setLayoutData(EclipseUiUtils.fillAll());
+ userTableViewerCmp.refresh();
+
+ // Controllers
+ userViewer = userTableViewerCmp.getTableViewer();
+ userViewer.addDoubleClickListener(new MyDoubleClickListener());
+ userViewer
+ .addSelectionChangedListener(new MySelectionChangedListener());
+
+ parent.pack();
+ return dialogArea;
+ }
+
+ public User getSelected() {
+ if (selectedUser == null)
+ return null;
+ else
+ return selectedUser;
+ }
+
+ protected void configureShell(Shell shell) {
+ super.configureShell(shell);
+ shell.setText(title);
+ }
+
+ class MyDoubleClickListener implements IDoubleClickListener {
+ public void doubleClick(DoubleClickEvent evt) {
+ if (evt.getSelection().isEmpty())
+ return;
+
+ Object obj = ((IStructuredSelection) evt.getSelection())
+ .getFirstElement();
+ if (obj instanceof User) {
+ selectedUser = (User) obj;
+ okPressed();
+ }
+ }
+ }
+
+ class MySelectionChangedListener implements ISelectionChangedListener {
+ @Override
+ public void selectionChanged(SelectionChangedEvent event) {
+ if (event.getSelection().isEmpty()) {
+ selectedUser = null;
+ return;
+ }
+ Object obj = ((IStructuredSelection) event.getSelection())
+ .getFirstElement();
+ if (obj instanceof Group) {
+ selectedUser = (Group) obj;
+ }
+ }
+ }
+
+ private class MyUserTableViewer extends LdifUsersTable {
+ private static final long serialVersionUID = 8467999509931900367L;
+
+ private final String[] knownProps = { LdifName.uid.name(),
+ LdifName.cn.name(), LdifName.dn.name() };
+
+ private Button showSystemRoleBtn;
+ private Button showUserBtn;
+
+ public MyUserTableViewer(Composite parent, int style) {
+ super(parent, style);
+ }
+
+ protected void populateStaticFilters(Composite staticFilterCmp) {
+ staticFilterCmp.setLayout(new GridLayout());
+ showSystemRoleBtn = new Button(staticFilterCmp, SWT.CHECK);
+ showSystemRoleBtn.setText("Show system roles ");
+
+ showUserBtn = new Button(staticFilterCmp, SWT.CHECK);
+ showUserBtn.setText("Show users ");
+
+ SelectionListener sl = new SelectionAdapter() {
+ private static final long serialVersionUID = -7033424592697691676L;
+
+ @Override
+ public void widgetSelected(SelectionEvent e) {
+ refresh();
+ }
+ };
+
+ showSystemRoleBtn.addSelectionListener(sl);
+ showUserBtn.addSelectionListener(sl);
+ }
+
+ @Override
+ protected List<User> listFilteredElements(String filter) {
+ Role[] roles;
+ try {
+ StringBuilder builder = new StringBuilder();
+
+ StringBuilder filterBuilder = new StringBuilder();
+ if (notNull(filter))
+ for (String prop : knownProps) {
+ filterBuilder.append("(");
+ filterBuilder.append(prop);
+ filterBuilder.append("=*");
+ filterBuilder.append(filter);
+ filterBuilder.append("*)");
+ }
+
+ String typeStr = "(" + LdifName.objectClass.name() + "="
+ + LdifName.groupOfNames.name() + ")";
+ if ((showUserBtn.getSelection()))
+ typeStr = "(|(" + LdifName.objectClass.name() + "="
+ + LdifName.inetOrgPerson.name() + ")" + typeStr
+ + ")";
+
+ if (!showSystemRoleBtn.getSelection())
+ typeStr = "(& " + typeStr + "(!(" + LdifName.dn.name()
+ + "=*" + UsersUtils.ROLES_BASEDN + ")))";
+
+ if (filterBuilder.length() > 1) {
+ builder.append("(&" + typeStr);
+ builder.append("(|");
+ builder.append(filterBuilder.toString());
+ builder.append("))");
+ } else {
+ builder.append(typeStr);
+ }
+ roles = userAdmin.getRoles(builder.toString());
+ } catch (InvalidSyntaxException e) {
+ throw new ArgeoException("Unable to get roles with filter: "
+ + filter, e);
+ }
+ List<User> users = new ArrayList<User>();
+ for (Role role : roles)
+ if (!users.contains(role))
+ users.add((User) role);
+ return users;
+ }
+ }
+
+ private boolean notNull(String string) {
+ if (string == null)
+ return false;
+ else
+ return !"".equals(string.trim());
+ }
+}
\ No newline at end of file
--- /dev/null
+package org.argeo.eclipse.ui.workbench.users;
+
+import javax.naming.InvalidNameException;
+import javax.naming.ldap.LdapName;
+
+import org.argeo.ArgeoException;
+import org.argeo.eclipse.ui.workbench.users.internal.UsersImages;
+import org.argeo.eclipse.ui.workbench.users.internal.UsersUtils;
+import org.argeo.osgi.useradmin.LdifName;
+import org.eclipse.jface.resource.JFaceResources;
+import org.eclipse.jface.viewers.ColumnLabelProvider;
+import org.eclipse.swt.SWT;
+import org.eclipse.swt.graphics.Font;
+import org.eclipse.swt.graphics.Image;
+import org.eclipse.swt.widgets.Display;
+import org.osgi.service.useradmin.Role;
+import org.osgi.service.useradmin.User;
+
+/** Centralize label providers for the group table */
+class UserLP extends ColumnLabelProvider {
+ private static final long serialVersionUID = -4645930210988368571L;
+
+ final static String COL_ICON = "colID.icon";
+ final static String COL_DN = "colID.dn";
+ final static String COL_DISPLAY_NAME = "colID.displayName";
+ final static String COL_DOMAIN = "colID.domain";
+
+ final String currType;
+
+ // private Font italic;
+ private Font bold;
+
+ UserLP(String colId) {
+ this.currType = colId;
+ }
+
+ @Override
+ public Font getFont(Object element) {
+ // Self as bold
+ try {
+ LdapName selfUserName = UsersUtils.getLdapName();
+ String userName = UsersUtils.getProperty((User) element,
+ LdifName.dn.name());
+ LdapName userLdapName = new LdapName(userName);
+ if (userLdapName.equals(selfUserName)) {
+ if (bold == null)
+ bold = JFaceResources.getFontRegistry()
+ .defaultFontDescriptor().setStyle(SWT.BOLD)
+ .createFont(Display.getCurrent());
+ return bold;
+ }
+ } catch (InvalidNameException e) {
+ throw new ArgeoException("cannot parse dn for " + element, e);
+ }
+
+ // Disabled as Italic
+ // Node userProfile = (Node) elem;
+ // if (!userProfile.getProperty(ARGEO_ENABLED).getBoolean())
+ // return italic;
+
+ return null;
+ // return super.getFont(element);
+ }
+
+ @Override
+ public Image getImage(Object element) {
+ if (COL_ICON.equals(currType)) {
+ User user = (User) element;
+ String dn = (String) user.getProperties().get(LdifName.dn.name());
+ if (dn.endsWith(UsersUtils.ROLES_BASEDN))
+ return UsersImages.ICON_ROLE;
+ else if (user.getType() == Role.GROUP)
+ return UsersImages.ICON_GROUP;
+ else
+ return UsersImages.ICON_USER;
+ } else
+ return null;
+ }
+
+ @Override
+ public String getText(Object element) {
+ User user = (User) element;
+ return getText(user);
+
+ }
+
+ public String getText(User user) {
+ if (COL_DN.equals(currType))
+ return user.getName();
+ else if (COL_DISPLAY_NAME.equals(currType))
+ return UsersUtils.getCommonName(user);
+ else if (COL_DOMAIN.equals(currType))
+ return UsersUtils.getDomainName(user);
+ else
+ return "";
+ }
+}
\ No newline at end of file
package org.argeo.eclipse.ui.workbench.users.internal;
import java.security.AccessController;
+import java.util.List;
import javax.naming.InvalidNameException;
import javax.naming.ldap.LdapName;
+import javax.naming.ldap.Rdn;
import javax.security.auth.Subject;
import javax.security.auth.x500.X500Principal;
/** Utility methods to manage user concepts in the ui.workbench bundle */
public class UsersUtils {
+ // TODO this constant is defined in the CMS
+ public final static String ROLES_BASEDN = "ou=roles,ou=node";
public final static boolean isCurrentUser(User user) {
String userName = getProperty(user, LdifName.dn.name());
return dn;
}
+ public final static String getCommonName(User user) {
+ return getProperty(user, LdifName.cn.name());
+ }
+
+ /** Simply retrieves a display name of the relevant domain */
+ public final static String getDomainName(User user) {
+ String dn = (String) user.getProperties().get(LdifName.dn.name());
+ if (dn.endsWith(ROLES_BASEDN))
+ return "System roles";
+ try {
+ LdapName name;
+ name = new LdapName(dn);
+ List<Rdn> rdns = name.getRdns();
+ String dname = null;
+ int i = 0;
+ loop: while (i < rdns.size()) {
+ Rdn currrRdn = rdns.get(i);
+ if (!"dc".equals(currrRdn.getType()))
+ break loop;
+ else {
+ String currVal = (String) currrRdn.getValue();
+ dname = dname == null ? currVal : currVal + "." + dname;
+ }
+ i++;
+ }
+ return dname;
+ } catch (InvalidNameException e) {
+ throw new ArgeoException("Unable to get domain name for " + dn, e);
+ }
+ }
+
public final static String getProperty(Role role, String key) {
Object obj = role.getProperties().get(key);
if (obj != null)
else
return !"".equals(string.trim());
}
+
}
\ No newline at end of file
*/
public enum LdifName {
// Attributes
- dn, cn, sn, uid, mail, displayName, objectClass, userpassword,
+ dn, cn, sn, uid, mail, displayName, objectClass, userpassword, givenname, description,
// Object classes
inetOrgPerson, organizationalPerson, person, groupOfNames, top;
package org.argeo.security.ui.admin.internal;
import java.security.AccessController;
+import java.util.List;
import javax.naming.InvalidNameException;
import javax.naming.ldap.LdapName;
+import javax.naming.ldap.Rdn;
import javax.security.auth.Subject;
import javax.security.auth.x500.X500Principal;
import javax.transaction.Status;
return cn;
}
+ /** Simply retrieves a display name of the relevant domain */
+ public final static String getDomainName(User user) {
+ String dn = (String) user.getProperties().get(LdifName.dn.name());
+ if (dn.endsWith(UserAdminConstants.SYSTEM_ROLE_BASE_DN))
+ return "System roles";
+ try {
+ LdapName name;
+ name = new LdapName(dn);
+ List<Rdn> rdns = name.getRdns();
+ String dname = null;
+ int i = 0;
+ loop: while (i < rdns.size()) {
+ Rdn currrRdn = rdns.get(i);
+ if (!"dc".equals(currrRdn.getType()))
+ break loop;
+ else {
+ String currVal = (String) currrRdn.getValue();
+ dname = dname == null ? currVal : currVal + "." + dname;
+ }
+ i++;
+ }
+ return dname;
+ } catch (InvalidNameException e) {
+ throw new ArgeoException("Unable to get domain name for " + dn, e);
+ }
+ }
+
public final static String getProperty(Role role, String key) {
Object obj = role.getProperties().get(key);
if (obj != null)
/** Temporary centralization of the user admin constants */
public interface UserAdminConstants {
- public final static String KEY_DESC = "description";
- public final static String KEY_FIRSTNAME = "givenname";
- public final static String KEY_LASTNAME = "sn";
-
// TO BE CLEANED
public final static String SYSTEM_ROLE_BASE_DN = "ou=roles,ou=node";
import org.argeo.eclipse.ui.EclipseUiUtils;
import org.argeo.eclipse.ui.dialogs.ErrorFeedback;
import org.argeo.jcr.ArgeoNames;
+import org.argeo.osgi.useradmin.LdifName;
import org.argeo.security.ui.admin.SecurityAdminPlugin;
import org.argeo.security.ui.admin.internal.UiAdminUtils;
-import org.argeo.security.ui.admin.internal.UserAdminConstants;
import org.argeo.security.ui.admin.internal.UserAdminWrapper;
import org.eclipse.core.commands.AbstractHandler;
import org.eclipse.core.commands.ExecutionEvent;
Dictionary props = group.getProperties();
String descStr = descriptionTxt.getText();
if (UiAdminUtils.notNull(descStr))
- props.put(UserAdminConstants.KEY_DESC, descStr);
+ props.put(LdifName.description.name(), descStr);
userAdminWrapper.notifyListeners(new UserAdminEvent(null,
UserAdminEvent.ROLE_CREATED, group));
return true;
import org.argeo.osgi.useradmin.LdifName;
import org.argeo.security.ui.admin.SecurityAdminPlugin;
import org.argeo.security.ui.admin.internal.UiAdminUtils;
-import org.argeo.security.ui.admin.internal.UserAdminConstants;
import org.argeo.security.ui.admin.internal.UserAdminWrapper;
import org.eclipse.core.commands.AbstractHandler;
import org.eclipse.core.commands.ExecutionEvent;
String firstNameStr = firstNameTxt.getText();
if (UiAdminUtils.notNull(firstNameStr))
- props.put(UserAdminConstants.KEY_FIRSTNAME, firstNameStr);
+ props.put(LdifName.givenname.name(), firstNameStr);
String cn = UiAdminUtils
.getDefaultCn(firstNameStr, lastNameStr);
import org.argeo.osgi.useradmin.LdifName;
import org.argeo.security.ui.admin.SecurityAdminImages;
import org.argeo.security.ui.admin.internal.UiAdminUtils;
-import org.argeo.security.ui.admin.internal.UserAdminConstants;
import org.argeo.security.ui.admin.internal.UserAdminWrapper;
import org.argeo.security.ui.admin.internal.parts.UserEditor.GroupChangeListener;
import org.argeo.security.ui.admin.internal.parts.UserEditor.MainInfoListener;
import org.argeo.security.ui.admin.internal.providers.CommonNameLP;
import org.argeo.security.ui.admin.internal.providers.MailLP;
import org.argeo.security.ui.admin.internal.providers.RoleIconLP;
+import org.argeo.security.ui.admin.internal.providers.UserFilter;
import org.argeo.security.ui.admin.internal.providers.UserNameLP;
import org.argeo.security.ui.admin.internal.providers.UserTableDefaultDClickListener;
import org.eclipse.jface.action.Action;
@SuppressWarnings("unchecked")
public void commit(boolean onSave) {
- group.getProperties().put(UserAdminConstants.KEY_DESC,
+ group.getProperties().put(LdifName.description.name(),
descTxt.getText());
// Enable common name ?
// editor.setProperty(UserAdminConstants.KEY_CN,
cnTxt.setText(UiAdminUtils.getProperty(group,
LdifName.cn.name()));
descTxt.setText(UiAdminUtils.getProperty(group,
- UserAdminConstants.KEY_DESC));
-
+ LdifName.description.name()));
super.refresh();
}
};
private class MyUserTableViewer extends LdifUsersTable {
private static final long serialVersionUID = 8467999509931900367L;
+ private final UserFilter userFilter;
+
public MyUserTableViewer(Composite parent, int style,
UserAdmin userAdmin) {
super(parent, style, true);
+ userFilter = new UserFilter();
+
}
@Override
Group group = (Group) editor.getDisplayedUser();
Role[] roles = group.getMembers();
List<User> users = new ArrayList<User>();
+ userFilter.setSearchText(filter);
for (Role role : roles)
// if (role.getType() == Role.GROUP)
- users.add((User) role);
+ if (userFilter.select(null, null, role))
+ users.add((User) role);
return users;
}
}
tmpBuilder.append("*)");
}
if (tmpBuilder.length() > 1) {
- builder.append("(&(objectclass=groupOfNames)");
+ builder.append("(&(").append(LdifName.objectClass.name())
+ .append("=").append(LdifName.groupOfNames.name())
+ .append(")");
if (!showSystemRoleBtn.getSelection())
builder.append("(!(").append(LdifName.dn.name())
.append("=*")
builder.append("))");
} else {
if (!showSystemRoleBtn.getSelection())
- builder.append("(&(objectclass=groupOfNames)(!(")
- .append(LdifName.dn.name()).append("=*")
+ builder.append("(&(")
+ .append(LdifName.objectClass.name())
+ .append("=")
+ .append(LdifName.groupOfNames.name())
+ .append(")(!(").append(LdifName.dn.name())
+ .append("=*")
.append(UserAdminConstants.SYSTEM_ROLE_BASE_DN)
.append(")))");
else
- builder.append("(objectclass=groupOfNames)");
+ builder.append("(").append(LdifName.objectClass.name())
+ .append("=")
+ .append(LdifName.groupOfNames.name())
+ .append(")");
}
roles = userAdminWrapper.getUserAdmin().getRoles(
import org.argeo.osgi.useradmin.LdifName;
import org.argeo.security.ui.admin.SecurityAdminImages;
import org.argeo.security.ui.admin.internal.UiAdminUtils;
-import org.argeo.security.ui.admin.internal.UserAdminConstants;
import org.argeo.security.ui.admin.internal.UserAdminWrapper;
import org.argeo.security.ui.admin.internal.parts.UserEditor.GroupChangeListener;
import org.argeo.security.ui.admin.internal.parts.UserEditor.MainInfoListener;
import org.argeo.security.ui.admin.internal.providers.CommonNameLP;
import org.argeo.security.ui.admin.internal.providers.DomainNameLP;
import org.argeo.security.ui.admin.internal.providers.RoleIconLP;
+import org.argeo.security.ui.admin.internal.providers.UserFilter;
import org.argeo.security.ui.admin.internal.providers.UserNameLP;
import org.argeo.security.ui.admin.internal.providers.UserTableDefaultDClickListener;
import org.eclipse.jface.action.Action;
commonName.setEnabled(false);
final Text firstName = createLT(tk, body, "First name",
- UiAdminUtils
- .getProperty(user, UserAdminConstants.KEY_FIRSTNAME));
+ UiAdminUtils.getProperty(user, LdifName.givenname.name()));
final Text lastName = createLT(tk, body, "Last name",
- UiAdminUtils.getProperty(user, UserAdminConstants.KEY_LASTNAME));
+ UiAdminUtils.getProperty(user, LdifName.sn.name()));
final Text email = createLT(tk, body, "Email",
UiAdminUtils.getProperty(user, LdifName.mail.name()));
@SuppressWarnings("unchecked")
public void commit(boolean onSave) {
// TODO Sanity checks (mail validity...)
- user.getProperties().put(UserAdminConstants.KEY_FIRSTNAME,
+ user.getProperties().put(LdifName.givenname.name(),
firstName.getText());
- user.getProperties().put(UserAdminConstants.KEY_LASTNAME,
- lastName.getText());
+ user.getProperties()
+ .put(LdifName.sn.name(), lastName.getText());
user.getProperties().put(LdifName.cn.name(),
commonName.getText());
user.getProperties().put(LdifName.mail.name(), email.getText());
commonName.setText(UiAdminUtils.getProperty(user,
LdifName.cn.name()));
firstName.setText(UiAdminUtils.getProperty(user,
- UserAdminConstants.KEY_FIRSTNAME));
+ LdifName.givenname.name()));
lastName.setText(UiAdminUtils.getProperty(user,
- UserAdminConstants.KEY_LASTNAME));
+ LdifName.sn.name()));
email.setText(LdifName.mail.name());
refreshFormTitle(user);
super.refresh();
private static final long serialVersionUID = 8467999509931900367L;
private final User user;
+ private final UserFilter userFilter;
public MyUserTableViewer(Composite parent, int style, User user) {
super(parent, style, true);
this.user = user;
+ userFilter = new UserFilter();
}
@Override
protected List<User> listFilteredElements(String filter) {
List<User> users = (List<User>) editor.getFlatGroups(null);
+ List<User> filteredUsers = new ArrayList<User>();
if (users.contains(user))
users.remove(user);
- return users;
+ userFilter.setSearchText(filter);
+ for (User user : users)
+ if (userFilter.select(null, null, user))
+ filteredUsers.add(user);
+ return filteredUsers;
}
}
import org.argeo.osgi.useradmin.LdifName;
import org.argeo.security.ui.admin.SecurityAdminPlugin;
import org.argeo.security.ui.admin.internal.UiAdminUtils;
-import org.argeo.security.ui.admin.internal.UserAdminConstants;
import org.argeo.security.ui.admin.internal.UserAdminWrapper;
import org.argeo.security.ui.admin.internal.providers.CommonNameLP;
import org.argeo.security.ui.admin.internal.providers.DomainNameLP;
/** List all users with filter - based on Ldif userAdmin */
public class UsersView extends ViewPart implements ArgeoNames {
// private final static Log log = LogFactory.getLog(UsersView.class);
-
+
public final static String ID = SecurityAdminPlugin.PLUGIN_ID
+ ".usersView";
private final String[] knownProps = { LdifName.uid.name(),
LdifName.dn.name(), LdifName.cn.name(),
- UserAdminConstants.KEY_FIRSTNAME,
- UserAdminConstants.KEY_LASTNAME, LdifName.mail.name() };
+ LdifName.givenname.name(), LdifName.sn.name(),
+ LdifName.mail.name() };
public MyUserTableViewer(Composite parent, int style) {
super(parent, style);
tmpBuilder.append("*)");
}
if (tmpBuilder.length() > 1) {
- builder.append("(&(objectclass=inetOrgPerson)(|");
+ builder.append("(&(").append(LdifName.objectClass.name())
+ .append("=").append(LdifName.inetOrgPerson.name())
+ .append(")(|");
builder.append(tmpBuilder.toString());
builder.append("))");
} else
- builder.append("(objectclass=inetOrgPerson)");
+ builder.append("(").append(LdifName.objectClass.name())
+ .append("=").append(LdifName.inetOrgPerson.name())
+ .append(")");
roles = userAdminWrapper.getUserAdmin().getRoles(
builder.toString());
} catch (InvalidSyntaxException e) {
package org.argeo.security.ui.admin.internal.providers;
-import java.util.List;
-
-import javax.naming.InvalidNameException;
-import javax.naming.ldap.LdapName;
-import javax.naming.ldap.Rdn;
-
-import org.argeo.ArgeoException;
-import org.argeo.osgi.useradmin.LdifName;
-import org.argeo.security.ui.admin.internal.UserAdminConstants;
+import org.argeo.security.ui.admin.internal.UiAdminUtils;
import org.osgi.service.useradmin.User;
/** The human friendly domain name for the corresponding user. */
@Override
public String getText(User user) {
- String dn = (String) user.getProperties().get(LdifName.dn.name());
- if (dn.endsWith(UserAdminConstants.SYSTEM_ROLE_BASE_DN))
- return "System roles";
- try {
- LdapName name;
- name = new LdapName(dn);
- List<Rdn> rdns = name.getRdns();
- return (String) rdns.get(1).getValue() + '.'
- + (String) rdns.get(0).getValue();
- } catch (InvalidNameException e) {
- throw new ArgeoException("Unable to get domain name for " + dn, e);
- }
+ return UiAdminUtils.getDomainName(user);
}
}
\ No newline at end of file
package org.argeo.security.ui.admin.internal.providers;
-import java.util.Dictionary;
-
import org.argeo.osgi.useradmin.LdifName;
+import org.argeo.security.ui.admin.internal.UiAdminUtils;
import org.osgi.service.useradmin.User;
/** Simply declare a label provider that returns the Primary Mail of a user */
@Override
public String getText(User user) {
- @SuppressWarnings("rawtypes")
- Dictionary props = user.getProperties();
- Object obj = props.get(LdifName.mail.name());
- if (obj != null)
- return (String) obj;
- else
- return "";
+ return UiAdminUtils.getProperty(user, LdifName.mail.name());
}
}
\ No newline at end of file
--- /dev/null
+package org.argeo.security.ui.admin.internal.providers;
+
+import org.argeo.osgi.useradmin.LdifName;
+import org.argeo.security.ui.admin.internal.UiAdminUtils;
+import org.eclipse.jface.viewers.Viewer;
+import org.eclipse.jface.viewers.ViewerFilter;
+import org.osgi.service.useradmin.User;
+
+public class UserFilter extends ViewerFilter {
+ private static final long serialVersionUID = 5082509381672880568L;
+
+ private String searchString;
+
+ private final String[] knownProps = { LdifName.dn.name(),
+ LdifName.cn.name(), LdifName.givenname.name(), LdifName.sn.name(),
+ LdifName.uid.name(), LdifName.description.name(),
+ LdifName.mail.name() };
+
+ public void setSearchText(String s) {
+ // ensure that the value can be used for matching
+ if (notNull(s))
+ searchString = ".*" + s.toLowerCase() + ".*";
+ else
+ searchString = ".*";
+ }
+
+ @Override
+ public boolean select(Viewer viewer, Object parentElement, Object element) {
+ if (searchString == null || searchString.length() == 0) {
+ return true;
+ }
+ User user = (User) element;
+
+ if (user.getName().matches(searchString))
+ return true;
+
+ for (String key : knownProps) {
+ String currVal = UiAdminUtils.getProperty(user, key);
+ if (notNull(currVal) && currVal.toLowerCase().matches(searchString))
+ return true;
+ }
+
+ return false;
+ }
+
+ private boolean notNull(String str) {
+ return !(str == null || "".equals(str.trim()));
+ }
+
+}
\ No newline at end of file