You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@aries.apache.org by da...@apache.org on 2012/06/08 17:06:00 UTC

svn commit: r1348100 - in /aries/trunk/sandbox/jmx-next: jmx-api/src/main/java/org/osgi/jmx/service/useradmin/ jmx-core/src/main/java/org/apache/aries/jmx/codec/

Author: davidb
Date: Fri Jun  8 15:06:00 2012
New Revision: 1348100

URL: http://svn.apache.org/viewvc?rev=1348100&view=rev
Log:
Update UserAdmin with credentials as required by the spec.

Modified:
    aries/trunk/sandbox/jmx-next/jmx-api/src/main/java/org/osgi/jmx/service/useradmin/UserAdminMBean.java
    aries/trunk/sandbox/jmx-next/jmx-core/src/main/java/org/apache/aries/jmx/codec/GroupData.java
    aries/trunk/sandbox/jmx-next/jmx-core/src/main/java/org/apache/aries/jmx/codec/RoleData.java
    aries/trunk/sandbox/jmx-next/jmx-core/src/main/java/org/apache/aries/jmx/codec/UserData.java

Modified: aries/trunk/sandbox/jmx-next/jmx-api/src/main/java/org/osgi/jmx/service/useradmin/UserAdminMBean.java
URL: http://svn.apache.org/viewvc/aries/trunk/sandbox/jmx-next/jmx-api/src/main/java/org/osgi/jmx/service/useradmin/UserAdminMBean.java?rev=1348100&r1=1348099&r2=1348100&view=diff
==============================================================================
--- aries/trunk/sandbox/jmx-next/jmx-api/src/main/java/org/osgi/jmx/service/useradmin/UserAdminMBean.java (original)
+++ aries/trunk/sandbox/jmx-next/jmx-api/src/main/java/org/osgi/jmx/service/useradmin/UserAdminMBean.java Fri Jun  8 15:06:00 2012
@@ -33,470 +33,470 @@ import org.osgi.jmx.JmxConstants;
  * @ThreadSafe
  */
 public interface UserAdminMBean {
-	/**
-	 * User Admin MBean object name.
-	 */
-	String			OBJECTNAME				= JmxConstants.OSGI_COMPENDIUM + ":service=useradmin,version=1.1";
-
-	/**
-	 * The key NAME, used in {@link #NAME_ITEM}.
-	 */
-	String			NAME					= "Name";
-
-	/**
-	 * The item for the user name for an authorization object. The key is
-	 * {@link #NAME} and the type is {@link SimpleType#STRING}.
-	 */
-	Item			NAME_ITEM				= new Item(NAME, "The user name for this authorization object", SimpleType.STRING);
-
-	/**
-	 * The key ROLES, used in {@link #ROLES_ITEM}.
-	 */
-	String			ROLES					= "Roles";
-
-	/**
-	 * The item containing the roles for this authorization object. The key is
-	 * {@link #ROLES}. and the type is {@link JmxConstants#STRING_ARRAY_TYPE}.
-	 */
-	Item			ROLES_ITEM				= new Item(ROLES, "The names of the roles encapsulated by this auth object", JmxConstants.STRING_ARRAY_TYPE);
-
-	/**
-	 * The Composite Type for an Authorization object. It consists of the
-	 * {@link #NAME_ITEM} and {@link #TYPE_ITEM} items.
-	 */
-	CompositeType	AUTORIZATION_TYPE		= Item.compositeType("AUTHORIZATION", "An authorization object defines which roles has a user got", NAME_ITEM, ROLES_ITEM);
-	/**
-	 * The Role TYPE key, used in {@link #TYPE_ITEM}.
-	 */
-	String			TYPE					= "Type";
-
-	/**
-	 * The item containing the type of the roles encapsulated by this
-	 * authorization object. The key is {@link #TYPE} and the type is
-	 * {@link SimpleType#INTEGER}.
-	 */
-	Item			TYPE_ITEM				= new Item(TYPE, "An integer representing type of the role: {0=Role,1=user,2=group}", SimpleType.INTEGER);
-
-	/**
-	 * The PROPERTIES key, used in {@link #PROPERTIES_ITEM}.
-	 */
-	String			PROPERTIES				= "Properties";
-
-	/**
-	 * The item containing the properties of a Role. The key is
-	 * {@link #PROPERTIES} and the type is {@link JmxConstants#PROPERTIES_TYPE}.
-	 */
-	Item			PROPERTIES_ITEM			= new Item(PROPERTIES, "A properties as defined by org.osgi.service.useradmin.Role", JmxConstants.PROPERTIES_TYPE);
-	/**
-	 * The Composite Type for a Role. It contains the following items:
-	 * <ul>
-	 * <li>{@link #NAME}</li>
-	 * <li>{@link #TYPE}</li>
-	 * <li>{@link #PROPERTIES}</li>
-	 * </ul>
-	 *
-	 */
-	CompositeType	ROLE_TYPE				= Item.compositeType("ROLE",
-													"Mapping of org.osgi.service.useradmin.Role for remote management purposes. User and Group extend Role",
-													NAME_ITEM,
-													TYPE_ITEM,
-													PROPERTIES_ITEM);
-
-	/**
-	 * The CREDENTIALS key, used in {@link #CREDENTIALS_ITEM}.
-	 */
-	String			CREDENTIALS				= "Credentials";
-
-	/**
-	 * The item containing the credentials of a user. The key is
-	 * {@link #CREDENTIALS} and the type is {@link JmxConstants#PROPERTIES_TYPE}
-	 * .
-	 */
-	Item			CREDENTIALS_ITEM		= new Item(CREDENTIALS, "The credentials for this user", JmxConstants.PROPERTIES_TYPE);
-
-	/**
-	 * A Composite Type for a User. A User contains its Role description and
-	 * adds the credentials. It extends {@link #ROLE_TYPE} and adds
-	 * {@link #CREDENTIALS_ITEM}.
-	 *
-	 * This type extends the {@link #ROLE_TYPE}. It adds:
-	 * <ul>
-	 * <li>{@link #CREDENTIALS}</li>
-	 * </ul>
-	 */
-	CompositeType	USER_TYPE				= Item.extend(ROLE_TYPE, "USER", "Mapping of org.osgi.service.useradmin.User for remote management purposes. User extends Role");
-
-	/**
-	 * The MEMBERS key, used in {@link #MEMBERS_ITEM}.
-	 */
-	String			MEMBERS					= "Members";
-
-	/**
-	 * The item containing the members of a group. The key is {@link #MEMBERS}
-	 * and the type is {@link JmxConstants#STRING_ARRAY_TYPE}. It is used in
-	 * {@link #GROUP_TYPE}.
-	 */
-	Item			MEMBERS_ITEM			= new Item(MEMBERS, "The members of this group", JmxConstants.STRING_ARRAY_TYPE);
-
-	/**
-	 * The REQUIRED_MEMBERS key, used in {@link #REQUIRED_MEMBERS_ITEM}.
-	 */
-	String			REQUIRED_MEMBERS		= "RequiredMembers";
-
-	/**
-	 * The item containing the required members of a group. The key is
-	 * {@link #REQUIRED_MEMBERS} and the type is
-	 * {@link JmxConstants#STRING_ARRAY_TYPE}. It is used in {@link #GROUP_TYPE}
-	 * .
-	 */
-	Item			REQUIRED_MEMBERS_ITEM	= new Item(REQUIRED_MEMBERS, "The required members of this group", JmxConstants.STRING_ARRAY_TYPE);
-
-	/**
-	 * The Composite Type for a Group. It extends {@link #USER_TYPE} and adds
-	 * {@link #MEMBERS_ITEM}, and {@link #REQUIRED_MEMBERS_ITEM}.
-	 *
-	 * This type extends the {@link #USER_TYPE}. It adds:
-	 * <ul>
-	 * <li>{@link #MEMBERS}</li>
-	 * <li>{@link #REQUIRED_MEMBERS}</li>
-	 * </ul>
-	 * If there are no members or required members an empty array is returned in
-	 * the respective items.
-	 */
-	CompositeType	GROUP_TYPE				= Item.extend(USER_TYPE,
-													"GROUP",
-													"Mapping of org.osgi.service.useradmin.Group for remote management purposes. Group extends User which in turn extends Role",
-													MEMBERS_ITEM,
-													REQUIRED_MEMBERS_ITEM);
-
-	/**
-	 * Add credentials to a user, associated with the supplied key
-	 *
-	 * @param key The key of the credential to add
-	 * @param value The value of the credential to add
-	 * @param username The name of the user that gets the credential.
-	 * @throws IOException if the operation fails
-	 * @throws IllegalArgumentException if the username is not a User
-	 */
-	void addCredential(String key, byte[] value, String username) throws IOException;
-
-	/**
-	 * Add credentials to a user, associated with the supplied key
-	 *
-	 * @param key The key of the credential to add
-	 * @param value The value of the credential to add
-	 * @param username The name of the user that gets the credential.
-	 * @throws IOException if the operation fails
-	 * @throws IllegalArgumentException if the username is not a User
-	 */
-	void addCredentialString(String key, String value, String username) throws IOException;
-
-	/**
-	 * Add a member to the group.
-	 *
-	 * @param groupname The group name that receives the {@code rolename} as
-	 *        member.
-	 * @param rolename The {@code rolename} (User or Group) that must be added.
-	 * @return {@code true} if the role was added to the group
-	 * @throws IOException if the operation fails
-	 * @throws IllegalArgumentException if an invalid group name or role name is
-	 *         specified
-	 *
-	 */
-	boolean addMember(String groupname, String rolename) throws IOException;
-
-	/**
-	 * Add or update a property on a role
-	 *
-	 * @param key The key of the property to add
-	 * @param value The value of the property to add ({@code String})
-	 * @param rolename The role name
-	 * @throws IOException if the operation fails
-	 * @throws IllegalArgumentException if an invalid role name is specified
-	 */
-	void addPropertyString(String key, String value, String rolename) throws IOException;
-
-	/**
-	 * Add or update a property on a role.
-	 *
-	 * @param key The added property key
-	 * @param value The added byte[] property value
-	 * @param rolename The role name that receives the property
-	 * @throws IOException if the operation fails
-	 * @throws IllegalArgumentException if an invalid role name is specified
-	 */
-	void addProperty(String key, byte[] value, String rolename) throws IOException;
-
-	/**
-	 * Add a required member to the group
-	 *
-	 * @param groupname The group name that is addded
-	 * @param rolename The role that
-	 * @return true if the role was added to the group
-	 * @throws IOException if the operation fails
-	 * @throws IllegalArgumentException if an invalid group name or role name is
-	 *         specified
-	 */
-	boolean addRequiredMember(String groupname, String rolename) throws IOException;
-
-	/**
-	 * Create a User
-	 *
-	 * @param name Name of the user to create
-	 * @throws IOException if the operation fails
-	 */
-	void createUser(String name) throws IOException;
-
-	/**
-	 * Create a Group
-	 *
-	 * @param name Name of the group to create
-	 * @throws IOException if the operation fails
-	 */
-	void createGroup(String name) throws IOException;
-
-	/**
-	 * This method was specified in error and must not be used.
-	 *
-	 * @param name Ignored.
-	 * @throws IOException This method will throw an exception if called.
-	 * @deprecated This method was specified in error. It does not function and
-	 *             must not be used. Use either {@link #createUser(String)} or
-	 *             {@link #createGroup(String)}.
-	 */
-	void createRole(String name) throws IOException;
-
-	/**
-	 * Answer the authorization for the user name.
-	 *
-	 * The Composite Data is typed by {@link #AUTORIZATION_TYPE}.
-	 *
-	 * @param user The user name
-	 * @return the Authorization typed by {@link #AUTORIZATION_TYPE}.
-	 * @throws IOException if the operation fails
-	 * @throws IllegalArgumentException if the user name is not a User
-	 */
-	CompositeData getAuthorization(String user) throws IOException;
-
-	/**
-	 * Answer the credentials associated with a user.
-	 *
-	 * The returned Tabular Data is typed by
-	 * {@link JmxConstants#PROPERTIES_TYPE}.
-	 *
-	 * @param username The user name
-	 * @return the credentials associated with the user, see
-	 *         {@link JmxConstants#PROPERTIES_TYPE}
-	 * @throws IOException if the operation fails
-	 * @throws IllegalArgumentException if the user name is not a User
-	 */
-	TabularData getCredentials(String username) throws IOException;
-
-	/**
-	 * Answer the Group associated with the group name.
-	 *
-	 * The returned Composite Data is typed by {@link #GROUP_TYPE}
-	 *
-	 * @param groupname The group name
-	 * @return the Group, see {@link #GROUP_TYPE}
-	 * @throws IOException if the operation fails
-	 * @throws IllegalArgumentException if the group name is not a Group
-	 */
-	CompositeData getGroup(String groupname) throws IOException;
-
-	/**
-	 * Answer the list of group names
-	 *
-	 * @return The list of group names
-	 * @throws IOException if the operation fails
-	 */
-	String[] listGroups() throws IOException;
-
-	/**
-	 * Answer the list of group names
-	 *
-	 * @param filter The filter to apply
-	 * @return The list of group names
-	 * @throws IOException if the operation fails
-	 */
-	String[] getGroups(String filter) throws IOException;
-
-	/**
-	 * Answer the list of implied roles for a user
-	 *
-	 * @param username The name of the user that has the implied roles
-	 * @return The list of role names
-	 * @throws IOException if the operation fails
-	 * @throws IllegalArgumentException if the username is not a User
-	 */
-	String[] getImpliedRoles(String username) throws IOException;
-
-	/**
-	 * Answer the the user names which are members of the group
-	 *
-	 * @param groupname The name of the group to get the members from
-	 * @return The list of user names
-	 * @throws IOException if the operation fails
-	 * @throws IllegalArgumentException if the groupname is not a Group
-	 */
-	String[] getMembers(String groupname) throws IOException;
-
-	/**
-	 * Answer the properties associated with a role.
-	 *
-	 * The returned Tabular Data is typed by
-	 * {@link JmxConstants#PROPERTIES_TYPE}.
-	 *
-	 * @param rolename The name of the role to get properties from
-	 * @return the properties associated with the role, see
-	 *         {@link JmxConstants#PROPERTIES_TYPE}
-	 * @throws IOException if the operation fails
-	 * @throws IllegalArgumentException if the rolename is not a role
-	 */
-	TabularData getProperties(String rolename) throws IOException;
-
-	/**
-	 * Answer the list of user names which are required members of this group
-	 *
-	 * @param groupname The name of the group to get the required members from
-	 * @return The list of user names
-	 * @throws IOException if the operation fails
-	 * @throws IllegalArgumentException if the group name is not a Group
-	 */
-	String[] getRequiredMembers(String groupname) throws IOException;
-
-	/**
-	 * Answer the role associated with a name.
-	 *
-	 * The returned Composite Data is typed by {@link #ROLE_TYPE}.
-	 *
-	 * @param name The name of the role to get the data from
-	 * @return the Role, see {@link #ROLE_TYPE}
-	 * @throws IOException if the operation fails
-	 * @throws IllegalArgumentException if the name is not a role
-	 */
-	CompositeData getRole(String name) throws IOException;
-
-	/**
-	 * Answer the list of role names in the User Admin database
-	 *
-	 * @return The list of role names
-	 * @throws IOException if the operation fails
-	 */
-	String[] listRoles() throws IOException;
-
-	/**
-	 * Answer the list of role names which match the supplied filter
-	 *
-	 * @param filter The string representation of the
-	 *        {@code org.osgi.framework.Filter} that is used to filter the roles
-	 *        by applying to the properties, if {@code null} all roles are
-	 *        returned.
-	 *
-	 * @return The list the role names
-	 * @throws IOException if the operation fails
-	 */
-	String[] getRoles(String filter) throws IOException;
-
-	/**
-	 * Answer the User associated with the user name.
-	 *
-	 * The returned Composite Data is typed by {@link #USER_TYPE}.
-	 *
-	 * @param username The name of the requested user
-	 * @return The User, see {@link #USER_TYPE}
-	 * @throws IOException if the operation fails
-	 * @throws IllegalArgumentException if the username is not a User
-	 */
-	CompositeData getUser(String username) throws IOException;
-
-	/**
-	 * Answer the user name with the given property key-value pair from the User
-	 * Admin service database.
-	 *
-	 * @param key The key to compare
-	 * @param value The value to compare
-	 * @return The User
-	 * @throws IOException if the operation fails
-	 */
-	String getUserWithProperty(String key, String value) throws IOException;
-
-	/**
-	 * Answer the list of user names in the User Admin database
-	 *
-	 * @return The list of user names
-	 * @throws IOException if the operation fails
-	 */
-	String[] listUsers() throws IOException;
-
-	/**
-	 * Answer the list of user names in the User Admin database
-	 *
-	 * @param filter The filter to apply
-	 * @return The list of user names
-	 * @throws IOException if the operation fails
-	 */
-	String[] getUsers(String filter) throws IOException;
-
-	/**
-	 * Remove the credential associated with the given user
-	 *
-	 * @param key The key of the credential to remove
-	 * @param username The name of the user for which the credential must be
-	 *        removed
-	 * @throws IOException if the operation fails
-	 * @throws IllegalArgumentException if the username is not a User
-	 */
-	void removeCredential(String key, String username) throws IOException;
-
-	/**
-	 * Remove a role from the group
-	 *
-	 * @param groupname The group name
-	 * @param rolename
-	 * @return true if the role was removed from the group
-	 * @throws IOException if the operation fails
-	 * @throws IllegalArgumentException if the groupname is not a Group
-	 */
-	boolean removeMember(String groupname, String rolename) throws IOException;
-
-	/**
-	 * Remove a property from a role
-	 *
-	 * @param key
-	 * @param rolename
-	 * @throws IOException if the operation fails
-	 * @throws IllegalArgumentException if the rolename is not a role
-	 */
-	void removeProperty(String key, String rolename) throws IOException;
-
-	/**
-	 * Remove the Role associated with the name
-	 *
-	 * @param name
-	 * @return true if the remove succeeded
-	 * @throws IOException if the operation fails
-	 * @throws IllegalArgumentException if the name is not a role
-	 */
-	boolean removeRole(String name) throws IOException;
-
-	/**
-	 * Remove the Group associated with the name
-	 *
-	 * @param name
-	 * @return true if the remove succeeded
-	 * @throws IOException if the operation fails
-	 * @throws IllegalArgumentException if the name is not a Group
-	 */
-	boolean removeGroup(String name) throws IOException;
-
-	/**
-	 * Remove the User associated with the name
-	 *
-	 * @param name
-	 * @return true if the remove succeeded
-	 * @throws IOException if the operation fails
-	 * @throws IllegalArgumentException if the name is not a User
-	 */
-	boolean removeUser(String name) throws IOException;
+    /**
+     * User Admin MBean object name.
+     */
+    String          OBJECTNAME              = JmxConstants.OSGI_COMPENDIUM + ":service=useradmin,version=1.1";
+
+    /**
+     * The key NAME, used in {@link #NAME_ITEM}.
+     */
+    String          NAME                    = "Name";
+
+    /**
+     * The item for the user name for an authorization object. The key is
+     * {@link #NAME} and the type is {@link SimpleType#STRING}.
+     */
+    Item            NAME_ITEM               = new Item(NAME, "The user name for this authorization object", SimpleType.STRING);
+
+    /**
+     * The key ROLES, used in {@link #ROLES_ITEM}.
+     */
+    String          ROLES                   = "Roles";
+
+    /**
+     * The item containing the roles for this authorization object. The key is
+     * {@link #ROLES}. and the type is {@link JmxConstants#STRING_ARRAY_TYPE}.
+     */
+    Item            ROLES_ITEM              = new Item(ROLES, "The names of the roles encapsulated by this auth object", JmxConstants.STRING_ARRAY_TYPE);
+
+    /**
+     * The Composite Type for an Authorization object. It consists of the
+     * {@link #NAME_ITEM} and {@link #ROLES_ITEM} items.
+     */
+    CompositeType   AUTORIZATION_TYPE       = Item.compositeType("AUTHORIZATION", "An authorization object defines which roles has a user got", NAME_ITEM, ROLES_ITEM);
+    /**
+     * The Role TYPE key, used in {@link #TYPE_ITEM}.
+     */
+    String          TYPE                    = "Type";
+
+    /**
+     * The item containing the type of the roles encapsulated by this
+     * authorization object. The key is {@link #TYPE} and the type is
+     * {@link SimpleType#INTEGER}.
+     */
+    Item            TYPE_ITEM               = new Item(TYPE, "An integer representing type of the role: {0=Role,1=user,2=group}", SimpleType.INTEGER);
+
+    /**
+     * The PROPERTIES key, used in {@link #PROPERTIES_ITEM}.
+     */
+    String          PROPERTIES              = "Properties";
+
+    /**
+     * The item containing the properties of a Role. The key is
+     * {@link #PROPERTIES} and the type is {@link JmxConstants#PROPERTIES_TYPE}.
+     */
+    Item            PROPERTIES_ITEM         = new Item(PROPERTIES, "A properties as defined by org.osgi.service.useradmin.Role", JmxConstants.PROPERTIES_TYPE);
+    /**
+     * The Composite Type for a Role. It contains the following items:
+     * <ul>
+     * <li>{@link #NAME}</li>
+     * <li>{@link #TYPE}</li>
+     * <li>{@link #PROPERTIES}</li>
+     * </ul>
+     *
+     */
+    CompositeType   ROLE_TYPE               = Item.compositeType("ROLE",
+                                                    "Mapping of org.osgi.service.useradmin.Role for remote management purposes. User and Group extend Role",
+                                                    NAME_ITEM,
+                                                    TYPE_ITEM,
+                                                    PROPERTIES_ITEM);
+
+    /**
+     * The CREDENTIALS key, used in {@link #CREDENTIALS_ITEM}.
+     */
+    String          CREDENTIALS             = "Credentials";
+
+    /**
+     * The item containing the credentials of a user. The key is
+     * {@link #CREDENTIALS} and the type is {@link JmxConstants#PROPERTIES_TYPE}
+     * .
+     */
+    Item            CREDENTIALS_ITEM        = new Item(CREDENTIALS, "The credentials for this user", JmxConstants.PROPERTIES_TYPE);
+
+    /**
+     * A Composite Type for a User. A User contains its Role description and
+     * adds the credentials. It extends {@link #ROLE_TYPE} and adds
+     * {@link #CREDENTIALS_ITEM}.
+     *
+     * This type extends the {@link #ROLE_TYPE}. It adds:
+     * <ul>
+     * <li>{@link #CREDENTIALS}</li>
+     * </ul>
+     */
+    CompositeType   USER_TYPE               = Item.extend(ROLE_TYPE, "USER", "Mapping of org.osgi.service.useradmin.User for remote management purposes. User extends Role", CREDENTIALS_ITEM);
+
+    /**
+     * The MEMBERS key, used in {@link #MEMBERS_ITEM}.
+     */
+    String          MEMBERS                 = "Members";
+
+    /**
+     * The item containing the members of a group. The key is {@link #MEMBERS}
+     * and the type is {@link JmxConstants#STRING_ARRAY_TYPE}. It is used in
+     * {@link #GROUP_TYPE}.
+     */
+    Item            MEMBERS_ITEM            = new Item(MEMBERS, "The members of this group", JmxConstants.STRING_ARRAY_TYPE);
+
+    /**
+     * The REQUIRED_MEMBERS key, used in {@link #REQUIRED_MEMBERS_ITEM}.
+     */
+    String          REQUIRED_MEMBERS        = "RequiredMembers";
+
+    /**
+     * The item containing the required members of a group. The key is
+     * {@link #REQUIRED_MEMBERS} and the type is
+     * {@link JmxConstants#STRING_ARRAY_TYPE}. It is used in {@link #GROUP_TYPE}
+     * .
+     */
+    Item            REQUIRED_MEMBERS_ITEM   = new Item(REQUIRED_MEMBERS, "The required members of this group", JmxConstants.STRING_ARRAY_TYPE);
+
+    /**
+     * The Composite Type for a Group. It extends {@link #USER_TYPE} and adds
+     * {@link #MEMBERS_ITEM}, and {@link #REQUIRED_MEMBERS_ITEM}.
+     *
+     * This type extends the {@link #USER_TYPE}. It adds:
+     * <ul>
+     * <li>{@link #MEMBERS}</li>
+     * <li>{@link #REQUIRED_MEMBERS}</li>
+     * </ul>
+     * If there are no members or required members an empty array is returned in
+     * the respective items.
+     */
+    CompositeType   GROUP_TYPE              = Item.extend(USER_TYPE,
+                                                    "GROUP",
+                                                    "Mapping of org.osgi.service.useradmin.Group for remote management purposes. Group extends User which in turn extends Role",
+                                                    MEMBERS_ITEM,
+                                                    REQUIRED_MEMBERS_ITEM);
+
+    /**
+     * Add credentials to a user, associated with the supplied key
+     *
+     * @param key The key of the credential to add
+     * @param value The value of the credential to add
+     * @param username The name of the user that gets the credential.
+     * @throws IOException if the operation fails
+     * @throws IllegalArgumentException if the username is not a User
+     */
+    void addCredential(String key, byte[] value, String username) throws IOException;
+
+    /**
+     * Add credentials to a user, associated with the supplied key
+     *
+     * @param key The key of the credential to add
+     * @param value The value of the credential to add
+     * @param username The name of the user that gets the credential.
+     * @throws IOException if the operation fails
+     * @throws IllegalArgumentException if the username is not a User
+     */
+    void addCredentialString(String key, String value, String username) throws IOException;
+
+    /**
+     * Add a member to the group.
+     *
+     * @param groupname The group name that receives the {@code rolename} as
+     *        member.
+     * @param rolename The {@code rolename} (User or Group) that must be added.
+     * @return {@code true} if the role was added to the group
+     * @throws IOException if the operation fails
+     * @throws IllegalArgumentException if an invalid group name or role name is
+     *         specified
+     *
+     */
+    boolean addMember(String groupname, String rolename) throws IOException;
+
+    /**
+     * Add or update a property on a role
+     *
+     * @param key The key of the property to add
+     * @param value The value of the property to add ({@code String})
+     * @param rolename The role name
+     * @throws IOException if the operation fails
+     * @throws IllegalArgumentException if an invalid role name is specified
+     */
+    void addPropertyString(String key, String value, String rolename) throws IOException;
+
+    /**
+     * Add or update a property on a role.
+     *
+     * @param key The added property key
+     * @param value The added byte[] property value
+     * @param rolename The role name that receives the property
+     * @throws IOException if the operation fails
+     * @throws IllegalArgumentException if an invalid role name is specified
+     */
+    void addProperty(String key, byte[] value, String rolename) throws IOException;
+
+    /**
+     * Add a required member to the group
+     *
+     * @param groupname The group name that is addded
+     * @param rolename The role that
+     * @return true if the role was added to the group
+     * @throws IOException if the operation fails
+     * @throws IllegalArgumentException if an invalid group name or role name is
+     *         specified
+     */
+    boolean addRequiredMember(String groupname, String rolename) throws IOException;
+
+    /**
+     * Create a User
+     *
+     * @param name Name of the user to create
+     * @throws IOException if the operation fails
+     */
+    void createUser(String name) throws IOException;
+
+    /**
+     * Create a Group
+     *
+     * @param name Name of the group to create
+     * @throws IOException if the operation fails
+     */
+    void createGroup(String name) throws IOException;
+
+    /**
+     * This method was specified in error and must not be used.
+     *
+     * @param name Ignored.
+     * @throws IOException This method will throw an exception if called.
+     * @deprecated This method was specified in error. It does not function and
+     *             must not be used. Use either {@link #createUser(String)} or
+     *             {@link #createGroup(String)}.
+     */
+    void createRole(String name) throws IOException;
+
+    /**
+     * Answer the authorization for the user name.
+     *
+     * The Composite Data is typed by {@link #AUTORIZATION_TYPE}.
+     *
+     * @param user The user name
+     * @return the Authorization typed by {@link #AUTORIZATION_TYPE}.
+     * @throws IOException if the operation fails
+     * @throws IllegalArgumentException if the user name is not a User
+     */
+    CompositeData getAuthorization(String user) throws IOException;
+
+    /**
+     * Answer the credentials associated with a user.
+     *
+     * The returned Tabular Data is typed by
+     * {@link JmxConstants#PROPERTIES_TYPE}.
+     *
+     * @param username The user name
+     * @return the credentials associated with the user, see
+     *         {@link JmxConstants#PROPERTIES_TYPE}
+     * @throws IOException if the operation fails
+     * @throws IllegalArgumentException if the user name is not a User
+     */
+    TabularData getCredentials(String username) throws IOException;
+
+    /**
+     * Answer the Group associated with the group name.
+     *
+     * The returned Composite Data is typed by {@link #GROUP_TYPE}
+     *
+     * @param groupname The group name
+     * @return the Group, see {@link #GROUP_TYPE}
+     * @throws IOException if the operation fails
+     * @throws IllegalArgumentException if the group name is not a Group
+     */
+    CompositeData getGroup(String groupname) throws IOException;
+
+    /**
+     * Answer the list of group names
+     *
+     * @return The list of group names
+     * @throws IOException if the operation fails
+     */
+    String[] listGroups() throws IOException;
+
+    /**
+     * Answer the list of group names
+     *
+     * @param filter The filter to apply
+     * @return The list of group names
+     * @throws IOException if the operation fails
+     */
+    String[] getGroups(String filter) throws IOException;
+
+    /**
+     * Answer the list of implied roles for a user
+     *
+     * @param username The name of the user that has the implied roles
+     * @return The list of role names
+     * @throws IOException if the operation fails
+     * @throws IllegalArgumentException if the username is not a User
+     */
+    String[] getImpliedRoles(String username) throws IOException;
+
+    /**
+     * Answer the the user names which are members of the group
+     *
+     * @param groupname The name of the group to get the members from
+     * @return The list of user names
+     * @throws IOException if the operation fails
+     * @throws IllegalArgumentException if the groupname is not a Group
+     */
+    String[] getMembers(String groupname) throws IOException;
+
+    /**
+     * Answer the properties associated with a role.
+     *
+     * The returned Tabular Data is typed by
+     * {@link JmxConstants#PROPERTIES_TYPE}.
+     *
+     * @param rolename The name of the role to get properties from
+     * @return the properties associated with the role, see
+     *         {@link JmxConstants#PROPERTIES_TYPE}
+     * @throws IOException if the operation fails
+     * @throws IllegalArgumentException if the rolename is not a role
+     */
+    TabularData getProperties(String rolename) throws IOException;
+
+    /**
+     * Answer the list of user names which are required members of this group
+     *
+     * @param groupname The name of the group to get the required members from
+     * @return The list of user names
+     * @throws IOException if the operation fails
+     * @throws IllegalArgumentException if the group name is not a Group
+     */
+    String[] getRequiredMembers(String groupname) throws IOException;
+
+    /**
+     * Answer the role associated with a name.
+     *
+     * The returned Composite Data is typed by {@link #ROLE_TYPE}.
+     *
+     * @param name The name of the role to get the data from
+     * @return the Role, see {@link #ROLE_TYPE}
+     * @throws IOException if the operation fails
+     * @throws IllegalArgumentException if the name is not a role
+     */
+    CompositeData getRole(String name) throws IOException;
+
+    /**
+     * Answer the list of role names in the User Admin database
+     *
+     * @return The list of role names
+     * @throws IOException if the operation fails
+     */
+    String[] listRoles() throws IOException;
+
+    /**
+     * Answer the list of role names which match the supplied filter
+     *
+     * @param filter The string representation of the
+     *        {@code org.osgi.framework.Filter} that is used to filter the roles
+     *        by applying to the properties, if {@code null} all roles are
+     *        returned.
+     *
+     * @return The list the role names
+     * @throws IOException if the operation fails
+     */
+    String[] getRoles(String filter) throws IOException;
+
+    /**
+     * Answer the User associated with the user name.
+     *
+     * The returned Composite Data is typed by {@link #USER_TYPE}.
+     *
+     * @param username The name of the requested user
+     * @return The User, see {@link #USER_TYPE}
+     * @throws IOException if the operation fails
+     * @throws IllegalArgumentException if the username is not a User
+     */
+    CompositeData getUser(String username) throws IOException;
+
+    /**
+     * Answer the user name with the given property key-value pair from the User
+     * Admin service database.
+     *
+     * @param key The key to compare
+     * @param value The value to compare
+     * @return The User
+     * @throws IOException if the operation fails
+     */
+    String getUserWithProperty(String key, String value) throws IOException;
+
+    /**
+     * Answer the list of user names in the User Admin database
+     *
+     * @return The list of user names
+     * @throws IOException if the operation fails
+     */
+    String[] listUsers() throws IOException;
+
+    /**
+     * Answer the list of user names in the User Admin database
+     *
+     * @param filter The filter to apply
+     * @return The list of user names
+     * @throws IOException if the operation fails
+     */
+    String[] getUsers(String filter) throws IOException;
+
+    /**
+     * Remove the credential associated with the given user
+     *
+     * @param key The key of the credential to remove
+     * @param username The name of the user for which the credential must be
+     *        removed
+     * @throws IOException if the operation fails
+     * @throws IllegalArgumentException if the username is not a User
+     */
+    void removeCredential(String key, String username) throws IOException;
+
+    /**
+     * Remove a role from the group
+     *
+     * @param groupname The group name
+     * @param rolename
+     * @return true if the role was removed from the group
+     * @throws IOException if the operation fails
+     * @throws IllegalArgumentException if the groupname is not a Group
+     */
+    boolean removeMember(String groupname, String rolename) throws IOException;
+
+    /**
+     * Remove a property from a role
+     *
+     * @param key
+     * @param rolename
+     * @throws IOException if the operation fails
+     * @throws IllegalArgumentException if the rolename is not a role
+     */
+    void removeProperty(String key, String rolename) throws IOException;
+
+    /**
+     * Remove the Role associated with the name
+     *
+     * @param name
+     * @return true if the remove succeeded
+     * @throws IOException if the operation fails
+     * @throws IllegalArgumentException if the name is not a role
+     */
+    boolean removeRole(String name) throws IOException;
+
+    /**
+     * Remove the Group associated with the name
+     *
+     * @param name
+     * @return true if the remove succeeded
+     * @throws IOException if the operation fails
+     * @throws IllegalArgumentException if the name is not a Group
+     */
+    boolean removeGroup(String name) throws IOException;
+
+    /**
+     * Remove the User associated with the name
+     *
+     * @param name
+     * @return true if the remove succeeded
+     * @throws IOException if the operation fails
+     * @throws IllegalArgumentException if the name is not a User
+     */
+    boolean removeUser(String name) throws IOException;
 }

Modified: aries/trunk/sandbox/jmx-next/jmx-core/src/main/java/org/apache/aries/jmx/codec/GroupData.java
URL: http://svn.apache.org/viewvc/aries/trunk/sandbox/jmx-next/jmx-core/src/main/java/org/apache/aries/jmx/codec/GroupData.java?rev=1348100&r1=1348099&r2=1348100&view=diff
==============================================================================
--- aries/trunk/sandbox/jmx-next/jmx-core/src/main/java/org/apache/aries/jmx/codec/GroupData.java (original)
+++ aries/trunk/sandbox/jmx-next/jmx-core/src/main/java/org/apache/aries/jmx/codec/GroupData.java Fri Jun  8 15:06:00 2012
@@ -58,7 +58,7 @@ public class GroupData extends UserData 
      * @param group {@link Group} instance.
      */
     public GroupData(Group group) {
-        super(group.getName(), Role.GROUP, group.getProperties());
+        super(group.getName(), Role.GROUP, group.getProperties(), group.getCredentials());
         this.members = toArray(group.getMembers());
         this.requiredMembers = toArray(group.getRequiredMembers());
     }
@@ -71,8 +71,8 @@ public class GroupData extends UserData 
      * @param members basic members.
      * @param requiredMembers required members.
      */
-    public GroupData(String name, Dictionary properties, String[] members, String[] requiredMembers) {
-        super(name, Role.GROUP, properties);
+    public GroupData(String name, Dictionary properties, Dictionary credentials, String[] members, String[] requiredMembers) {
+        super(name, Role.GROUP, properties, credentials);
         this.members = (members == null) ? new String[0] : members;
         this.requiredMembers = (requiredMembers == null) ? new String[0] : requiredMembers;
     }
@@ -88,6 +88,7 @@ public class GroupData extends UserData 
             items.put(UserAdminMBean.NAME, name);
             items.put(UserAdminMBean.TYPE, type);
             items.put(UserAdminMBean.PROPERTIES, getPropertiesTable());
+            items.put(UserAdminMBean.CREDENTIALS, getCredentialsTable());
             items.put(UserAdminMBean.MEMBERS, members);
             items.put(UserAdminMBean.REQUIRED_MEMBERS, requiredMembers);
             return new CompositeDataSupport(UserAdminMBean.GROUP_TYPE, items);
@@ -109,10 +110,11 @@ public class GroupData extends UserData 
         }
         String name = (String) data.get(UserAdminMBean.NAME);
         Dictionary<String, Object> props = propertiesFrom((TabularData) data.get(UserAdminMBean.PROPERTIES));
+        Dictionary<String, Object> credentials = propertiesFrom((TabularData) data.get(UserAdminMBean.CREDENTIALS));
 
         String[] members = (String[]) data.get(UserAdminMBean.MEMBERS);
         String[] requiredMembers = (String[]) data.get(UserAdminMBean.REQUIRED_MEMBERS);
-        return new GroupData(name, props, members, requiredMembers);
+        return new GroupData(name, props, credentials, members, requiredMembers);
     }
 
     /**

Modified: aries/trunk/sandbox/jmx-next/jmx-core/src/main/java/org/apache/aries/jmx/codec/RoleData.java
URL: http://svn.apache.org/viewvc/aries/trunk/sandbox/jmx-next/jmx-core/src/main/java/org/apache/aries/jmx/codec/RoleData.java?rev=1348100&r1=1348099&r2=1348100&view=diff
==============================================================================
--- aries/trunk/sandbox/jmx-next/jmx-core/src/main/java/org/apache/aries/jmx/codec/RoleData.java (original)
+++ aries/trunk/sandbox/jmx-next/jmx-core/src/main/java/org/apache/aries/jmx/codec/RoleData.java Fri Jun  8 15:06:00 2012
@@ -105,8 +105,12 @@ public class RoleData {
     }
 
     protected TabularData getPropertiesTable() {
+        return getPropertiesTable(properties);
+    }
+
+    protected static TabularData getPropertiesTable(List<PropertyData<? extends Object>> data) {
         TabularData propertiesTable = new TabularDataSupport(JmxConstants.PROPERTIES_TYPE);
-        for (PropertyData<? extends Object> propertyData : properties) {
+        for (PropertyData<? extends Object> propertyData : data) {
             propertiesTable.put(propertyData.toCompositeData());
         }
         return propertiesTable;

Modified: aries/trunk/sandbox/jmx-next/jmx-core/src/main/java/org/apache/aries/jmx/codec/UserData.java
URL: http://svn.apache.org/viewvc/aries/trunk/sandbox/jmx-next/jmx-core/src/main/java/org/apache/aries/jmx/codec/UserData.java?rev=1348100&r1=1348099&r2=1348100&view=diff
==============================================================================
--- aries/trunk/sandbox/jmx-next/jmx-core/src/main/java/org/apache/aries/jmx/codec/UserData.java (original)
+++ aries/trunk/sandbox/jmx-next/jmx-core/src/main/java/org/apache/aries/jmx/codec/UserData.java Fri Jun  8 15:06:00 2012
@@ -16,8 +16,11 @@
  */
 package org.apache.aries.jmx.codec;
 
+import java.util.ArrayList;
 import java.util.Dictionary;
+import java.util.Enumeration;
 import java.util.HashMap;
+import java.util.List;
 import java.util.Map;
 
 import javax.management.openmbean.CompositeData;
@@ -40,12 +43,17 @@ import org.osgi.service.useradmin.User;
 public class UserData extends RoleData {
 
     /**
+     * user credentials.
+     */
+    protected List<PropertyData<? extends Object>> credentials = new ArrayList<PropertyData<? extends Object>>();
+
+    /**
      * Constructs new UserData from {@link User} object.
      *
      * @param user {@link User} instance.
      */
     public UserData(User user){
-        super(user.getName(), user.getType(), user.getProperties());
+        this(user.getName(), user.getType(), user.getProperties(), user.getCredentials());
     }
 
     /**
@@ -54,9 +62,17 @@ public class UserData extends RoleData {
      * @param name user name.
      * @param type role type.
      * @param properties user properties.
+     * @param credentials user credentials.
      */
-    public UserData(String name, int type, Dictionary properties) {
+    public UserData(String name, int type, Dictionary properties, Dictionary credentials) {
         super(name, type, properties);
+
+        if (credentials != null) {
+            for (Enumeration e = credentials.keys(); e.hasMoreElements(); ) {
+                String key = e.nextElement().toString();
+                this.credentials.add(PropertyData.newInstance(key, credentials.get(key)));
+            }
+        }
     }
 
     /**
@@ -71,12 +87,17 @@ public class UserData extends RoleData {
             items.put(UserAdminMBean.NAME, name);
             items.put(UserAdminMBean.TYPE, type);
             items.put(UserAdminMBean.PROPERTIES, getPropertiesTable());
+            items.put(UserAdminMBean.CREDENTIALS, getCredentialsTable());
             return new CompositeDataSupport(UserAdminMBean.USER_TYPE, items);
         } catch (OpenDataException e) {
             throw new IllegalStateException("Can't create CompositeData" + e);
         }
     }
 
+    protected TabularData getCredentialsTable() {
+        return getPropertiesTable(credentials);
+    }
+
     /**
      * Static factory method to create UserData from CompositeData object.
      *
@@ -90,7 +111,7 @@ public class UserData extends RoleData {
         String name = (String) data.get(UserAdminMBean.NAME);
         int type = (Integer)data.get(UserAdminMBean.TYPE);
         Dictionary<String, Object> props = propertiesFrom((TabularData) data.get(UserAdminMBean.PROPERTIES));
-
-        return new UserData(name, type, props);
+        Dictionary<String, Object> credentials = propertiesFrom((TabularData) data.get(UserAdminMBean.CREDENTIALS));
+        return new UserData(name, type, props, credentials);
     }
 }