#
#
Agent=Agents are an abstraction for a principal or group.  The Agent may be granted authorization to perform specific functions.  Agents are created through implementations of osid.shared.SharedManager and have an immutable name, Type, and [Id].

Group=The Group may contain Members (Agents) as well as other Groups.  There are management methods for adding, removing, and getting members and Groups.  There are also methods for testing if a Group or member is contained in a Group, and returning all Members in a Group, all Groups in a Group, or all Groups containing a specific Member. Many methods include an argument that specifies whether to include all subgroups or not.  This allows for more flexible maintenance and interrogation of the structure. Note that there is no specification for persisting the Group or its content -- this detail is left to the implementation.

PersonManager=PersonManager creates, deletes, and gets Agents and Groups.  Group subclasses Agent and Groups may contain other Groups as well as Agents.  The PersonManager interface provides for the creation, removal, and return of a variety of basic O.K.I.  objects.  Agents and Groups which extend Agents are used in many different contexts throughout the OSIDs.  As with other Managers, use the OsidLoader to load an implementation of this interface.  [Description_AllManagers]  

Description_addMemberOrGroup=Add an Agent member or a Group to this Group.  The Member or Group will not be added if it already exists in the group.
Description_removeMemberOrGroup=Remove an Agent member or a Group from this Group. If the Member or Group is not in the group no action is taken and no exception is thrown.
Description_createAgent=Create an Agent with the display name and Type specified.  Both are immutable.
Description_deleteAgent=Delete the Agent with the specified [Id].
Description_getAgent=Get the Agent with the specified [Id]. Getting an Agent by name is not supported since names are not guaranteed to be unique.
Description_getAgents=Return an iterator containing all the Agents.  An iterator provides access to the Agents one at a time.  Iterators have a method hasNext() which returns <code>true</code> if there are more Agents available and a method next() which returns the next Agent.
Description_createGroup=Create a Group with the display name and Type specified.  Both are immutable.
Description_deleteGroup=Delete the Group with the specified [Id].
Description_getGroup=Gets the Group with the specified [Id]. Getting a Group by name is not supported since names are not guaranteed to be unique.
Description_getGroups=Get all the Groups.  Note since Groups subclass Agents, we are returning an AgentIterator and there is no GroupIterator. An iterator provides access to the Groups one at a time.  Iterators have a method hasNext() which returns true if there are more Groups available and a method next() which returns the next Group.
Description_getAgentTypes=Return an iterator containing all the Agent Types.  An iterator provides access to the Agent Types from this implementation one at a time.  Iterators have a method hasNext() which returns true if there are more Agent Types available and a method next() which returns the next Agent Type.
Description_getGroupTypes=Return an iterator containing all the Group Types.  An iterator provides access to the Group Types from this implementation one at a time.  Iterators have a method hasNext() which returns true if there are more Group Types available and a method next() which returns the next Group Type.
Description_getMembers=Get all the Members of this group and optionally all the Members from all subgroups. Duplicates are not returned.  
Description_groupGetGroups=Get all the Groups in this group and optionally all the subgroups in this group. Note since Groups subclass Agents, we are returning an AgentIterator and there is no GroupIterator.
Description_groupGetGroupsMember=Get all the Groups, including subgroups, containing the Member. Note since Groups subclass Agents, we are returning an AgentIterator and there is no GroupIterator.
Description_groupContains=Return <code>true</code> if the Member or Group is in the Group, optionally including subgroups, <code>false</code> otherwise.
Description_getIdString=Return the String representation of this [Id].
Description_agentConstructor=Construct a new Agent object and initializes its properties to values passed to the constructor.
Description_groupConstructor=Construct a new Group object and initializes its properties to values passed to the constructor.
Description_agentIteratorConstructor=Construct an object that implements osid.shared.AgentIterator and initializes the iterator content to a java.util.Vector passed in as an argument.
Description_typeIteratorConstructor=Construct an object that implements osid.shared.TypeIterator and initializes the iterator content to a java.util.Vector passed in as an argument. 

Description_getAgentsType=Get all the Agents of the specified Type.
Description_getGroupsType=Get all the Groups of the specified Type.

Description_getDisplayNameGS=Get the DisplayName of this Group as stored.
Description_getDescriptionGS=Get the Description of this Group as stored.
Description_getTypeGS=Get the Type of this Group as stored.
Description_getIdGS=Get the [Id] of this Group as stored.
Description_getContentGS=Get the content of this Group as stored.
Description_updateDisplayNameGS=Update the DisplayName of this Group as stored.
Description_updateDescriptionGS=Update the Description of this Group as stored.
Description_updateTypeGS=Update the Type of this Group as stored.
Description_updateIdGS=Update the [Id] of this Group as stored.
Description_updateContentGS=Update the content of this Group as stored.

Description_iteratorImplementation=To maximize reuse and implementation substitutability, it is important not to reference a class in one OSID implementation directly in another.  Interfaces should be used and new called only on objects in the implementation package.  To avoid binding a specific implementation of Shared to a specific implementaiton of some other OSID, implementations TypeIterator and the other primitative-type Iterators should reside in each OSID that requires them and not in an implementation of Shared.  For example, if an implementation of osid.logging.LoggingManager needs a class that implements osid.shared.StringIterator, the class should be in the package implementing Logging.   

Description_getIdAgent=Get the id of this Agent.
Description_getDisplayNameAgent=Get the name of this Agent.
Description_getTypeAgent=Get the type of this Agent.

Description_getAgentProperties=Get all the Properties associated with this Agent.
Description_getAgentPropertiesType=Get the Properties of this Type associated with this Agent.
Description_getAgentPropertiesTypes=Get the Properties Types supported by the implementation.
Description_getPropertiesType=Get the Type associated with these Properties.
Description_getProperty=Get the Property associated with this key.
Description_getPropertyKeys=Get the Keys associated with these Properties.
Properties=Properties is a mechanism for returning read-only data about an Agent.  Each Agent can have data associated with a PropertiesType.  For each PropertiesType, there are Properties which are Serializable values identified by a key. 
@throws=@throws osid.person.PersonException An exception with one of the following messages defined in osid.person.PersonException: 
Link_OPERATION_FAILED={@link osid.person.PersonException#OPERATION_FAILED OPERATION_FAILED}
Link_PERMISSION_DENIED={@link osid.person.PersonException#PERMISSION_DENIED PERMISSION_DENIED}
Link_CONFIGURATION_ERROR={@link osid.person.PersonException#CONFIGURATION_ERROR CONFIGURATION_ERROR}
Link_UNIMPLEMENTED={@link osid.person.PersonException#UNIMPLEMENTED UNIMPLEMENTED}
Link_NULL_ARGUMENT={@link osid.person.PersonException#NULL_ARGUMENT NULL_ARGUMENT}
Link_UNKNOWN_TYPE={@link osid.person.PersonException#UNKNOWN_TYPE UNKNOWN_TYPE}
Link_UNKNOWN_ID={@link osid.person.PersonException#UNKNOWN_ID UNKNOWN_ID}
Link_NO_MORE_ITERATOR_ELEMENTS={@link osid.person.PersonException#NO_MORE_ITERATOR_ELEMENTS NO_MORE_ITERATOR_ELEMENTS}
Link_CIRCULAR_OPERATION={@link osid.person.PersonException#CIRCULAR_OPERATION CIRCULAR_OPERATION}
Link_ALREADY_ADDED={@link osid.person.PersonException#ALREADY_ADDED ALREADY_ADDED}
Link_UNKNOWN_KEY={@link osid.person.PersonException#UNKNOWN_KEY UNKNOWN_KEY}




