////////////
// Groups //
////////////
enum ComponentType 
( 
    /** 0 in db */
    UNSPECIFIED,
    /** 1 in db */
    CORE,
    /** 2 in db */
    APPLICATION,
    /** 3 in db */
    PROVIDER,
    /** 4 in db */
    MEDIA_ENGINE,
    /** 5 in db */
    LOG_SERVER,
    /** 6 in db */
    RTP_RELAY,
    /** Alarm Server 50 in db */
    SMTP_MANAGER,
    /** Alarm Server 51 in db */
    SNMP_MANAGER,
    /** Telephony Server 100 in db */
    SCCP_DEVICE_POOL,
    /** Telephony Server 101 in db */
    H323_GATEWAY,
    /** Telephony Server 102 in db */
    SIP_DEVICE_POOL,
    /** Telephony Server 103 in db */
    CTI_DEVICE_POOL,
    /** Telephony Server 104 in db */
    CTI_ROUTE_POINT,
    /** Telephony Server 105 in db */
    SIP_TRUNK_INTERFACE,
    /** Telephony Server 106 in db */
    IETF_SIP_DEVICE_POOL,
    /** Telephony Server 107 in db */
    MONITORED_CTI_DEVICE_POOL,
    /** Telephony Server 149 in db */
    TEST_IPT
)

struct GroupMember
(
	/** The unique id of the member **/
	string memberId,
	/** The group id of the member **/
	string groupId,
	/** The name of the member **/
	string name,
	/** The display name of the member **/
	string displayName,
	/** The description of the member **/
	string description,
	/** The order of the in the group **/
	string order
)

struct Group
(

	/** The unique id of the group **/
	string groupId,
	/** The name of the group **/
	string name,
	/** The type of the group **/
	ComponentType type,
	/** Whether the group is the default group for it's type **/
	boolean defaultGroup,
	/** The group description **/
	string description,
	/** The alarm group id of the group **/
	string alarmGroupId,
	/** The failover group id of the group **/
	string failoverGroupId
)

/**
 * Exception thrown when there are problems with groups.
 * @param msg a detail message of the problem.
 */
exception GroupException( string msg )

/**
 * Counts the total number of members that belong to the group with the given id.
 */
int countMembersOfGroup(string groupId) throws GroupException

/**
 * Gets all of the members that belong to the group with the given id.
 * 
 * @param groupId the group whose members will be returned
 * @param offset the index of the first GroupMember to return
 * @param length the number of GroupMember toReturn
 * 
 * @return the groups that contain the component
 * 
 * @throws GroupException the group exception
 */
GroupMember[] listMembersOfGroup(string groupId, int offset, int length) throws GroupException

/**
 * Counts the total number of groups of the specified type that contain the component with the given id.
 */
int countGroupsContainingComponent(string componentId, ComponentType groupType) throws GroupException

/**
 * Gets all of the groups of the specified type that contain the component with the given id.
 * 
 * @param componentId the component whose existence within the groups is to be probed.
 * @param groupType the type of groups to search through
 * @param offset the index of the first Group to return
 * @param length the number of Groups toReturn
 * 
 * @return the groups that contain the component
 * 
 * @throws GroupException the group exception
 */
Group[] listGroupsContainingComponent(string componentId, ComponentType groupType, int offset, int length) throws GroupException

/**
 * Removes the component with the given id from all groups.
 * 
 * @param memberId the id of the component the will be removed from all groups.
 * 
 * @throws GroupException the group exception
 */
void deleteMemberFromAllGroups(string memberId) throws GroupException

/**
 * Counts the total number of groups groups of the specified type.
 */
int countGroupsOfType(ComponentType groupType) throws GroupException

/**
 * Gets all of the existing groups of the specified type.
 * 
 * @param groupType the type of group to retrieve.
 * @param offset the index of the first Group to return
 * @param length the number of Groups toReturn
 * 
 * @return the groups that exist with the specified type
 * 
 * @throws GroupException the group exception
 */
Group[] listGroupsOfType(ComponentType groupType, int offset, int length) throws GroupException

/**
 * Returns a group with the given id.
 * 
 * @param groupId the group to retrieve
 * 
 * @return the group with the given id or null if not present.
 * 
 * @throws GroupException thrown due to an SQLException or trying to add an identically named group
 */
Group getGroup(string groupId) throws GroupException

/**
 * Adds a group to the db as well as any members it may contain.
 * 
 * @param group the group to Add
 * 
 * @return the group which will include the new unique id of the group.
 * 
 * @throws GroupException thrown due to an SQLException or trying to add an identically named group
 */
Group addGroup(Group group) throws GroupException

/**
 * Delete's a group and all of it's members from the db.
 * 
 * @param groupId the id of the group to delete.
 * 
 * @throws GroupException if the SQL messes up.
 */
void deleteGroup(string groupId) throws GroupException

/**
 * Updates the group information as well as the members it has.
 * 
 * @param groupId the id of the group to update
 * @param group the new group contents
 * 
 * @throws GroupException the group exception
 */
void updateGroup(string groupId, Group group) throws GroupException

/**
 * Adds a group member to the db.
 * 
 * @param memberId the id of the member
 * @param groupId the id of the group it will be a member of.
 * 
 * @return the group member that was added
 * 
 * @throws GroupException most likely due to a SQL Exception or trying to add the member to a group it already is a member of.
 */
GroupMember addGroupMember(string memberId, string groupId ) throws GroupException

/**
 * Deletes a group member from the db.
 * 
 * @param memberId the member id, should be the component id.
 * @param groupId the id of the group that contains the member
 * 
 * @throws GroupException if the SQL messes up.
 */
void deleteGroupMember(string memberId, string groupId) throws GroupException

/**
 * Counts all possible members of the specified type.
 */
int countAllPossibleMembers(ComponentType type) throws GroupException

/**
 * Gets the all possible members of the specified type.  Note that the returned members 
 * won't have a group id associated with them.
 * 
 * @param type the type of component to retrieve
 * @param offset the index of the first GroupMember to return
 * @param length the number of GroupMembers toReturn
 * 
 * @return the all possible components that can exist within a group of the given type.
 * 
 * @throws GroupException the group exception
 */
GroupMember[] listAllPossibleMembers(ComponentType type, int offset, int length) throws GroupException



