package eric.share.ejb;

import java.util.Set;

import javax.ejb.CreateException;
import javax.ejb.EntityBean;
import javax.ejb.EntityContext;

/**
 * The UserGroupBean.
 *
 * @ejb.bean
 *    type="CMP"
 *    cmp-version="${ejb.cmp.version}" 
 *    name="UserGroup"
 *    view-type="local"
 *    local-jndi-name="${project.packages}.local.UserGroup"
 *
 * @ejb.transaction
 *    type="Required"
 *
 *
 * @ejb.persistence
 *    table-name="chk_userGroup"
 *
 * @ejb.home
 *    local-class="${project.packages}.interfaces.UserGroupHome"
 *
 * @ejb.interface
 *    local-class="${project.packages}.interfaces.UserGroup"
 *
 * @ejb.pk
 *    class="${project.packages}.pk.UserGroupPK"
 *
 * @ejb.finder
 *    signature="Collection findAll()"
 *    query="SELECT OBJECT(a) FROM UserGroup AS a"
 *    transaction-type="Required"
 *    unchecked="true"
 *
 * @ejb.finder
 *    signature="UserGroup findByPrimaryKey(eric.share.pk.UserGroupPK pk)"
 *
 * @ejb.finder
 *    signature="UserGroup findByName(java.lang.String name)"
 *    query="SELECT OBJECT(g) FROM UserGroup AS g WHERE g.name = ?1"
 *    methof-intf="LocalHome"
 *    result-type-mapping="Local"
 *
 * @jboss.query
 *    signature="UserGroup findByName(java.lang.String name)"
 *    query="SELECT OBJECT(g) FROM UserGroup AS g WHERE g.name = ?1" 
 *   
 * @jonas.bean
 *    ejb-name="UserGroup"
 *    jndi-name="${project.packages}.local.UserGroup"
 *
 * @jonas.jdbc-mapping
 *    jndi-name="${jonas.datasource}"
 *    jdbc-table-name="chk_userGroup"
 * 
 *
 *
 *
 * @jrun.jndi-name
 *    jndi-name="${project.packages}.local.UserGroup"
 * 
 *
 *
 * @author
 *    <a href="mailto:eric138@yahoo.com">Eric Chow</a>
 */
public abstract class UserGroupBean implements EntityBean {
	protected EntityContext ctx;


   /**
    * @ejb.create-method
    */
   public Object ejbCreate(long groupId, String name, String description) throws CreateException {
		setGroupId(groupId);
		setName(name);		
		setDescription(description);

		return null;
	}

	public void ejbPostCreate(long groupId, String name, String description) { }


	/**
	 * Gets the group ID.
	 *
	 * @return  the user status.
	 *
	 *
	 *
	 *
    * @ejb.interface-method
    *
    * @ejb.pk-field
    *    
    * @ejb.transaction
    *      type="Supports"
    *
    *
    * @ejb.persistence
    *    column-name="groupId"
    *
    *
    *
    * @jboss.persistence
    *    not-null="true"    
    *
    * @jonas.cmp-field-jdbc-mapping 
    *    field-name="groupId"
    *    jdbc-field-name="groupId"
    *	 
	 *	 
	 */
	public abstract long getGroupId();

	/**
	 * Sets the group ID.
	 *
	 * @param   the group ID
	 *
	 *
	 *
    * @ejb.interface-method
	 */
	public abstract void setGroupId(long groupId);



	/**
	 * Gets the group name.
	 *
	 * @return  the group name.
	 *
	 *
	 *
	 *
    * @ejb.interface-method
    *
    * @ejb.transaction
    *      type="Supports"
    *
    *
    * @ejb.persistence
    *    column-name="name"
    *
    *
    *
    * @jboss.persistence
    *    not-null="true"    
    *
    * @jonas.cmp-field-jdbc-mapping 
    *    field-name="name"
    *    jdbc-field-name="name"
    *	 
	 *	 
	 */
	public abstract String getName();



	/**
	 * Sets the group name.
	 *
	 * @param   the group name.
	 *
	 *
	 *
    * @ejb.interface-method
	 */
	public abstract void setName(String name);



	/**
	 * Gets the group description.
	 *
	 * @return  the description.
	 *
	 *
	 *
	 *
    * @ejb.interface-method
    *
    * @ejb.transaction
    *      type="Supports"
    *
    *
    * @ejb.persistence
    *    column-name="description"
    *
    *
    *
    * @jboss.persistence
    *    not-null="false"    
    *
    * @jonas.cmp-field-jdbc-mapping 
    *    field-name="description"
    *    jdbc-field-name="description"
    *	 
	 *	 
	 */
   public abstract String getDescription();
   
   
   // CMR fields

	/**
	 * Sets the description.
	 *
	 * @param   the description.
	 *
	 *
	 *
    * @ejb.interface-method
	 */   
   public abstract void setDescription(String description);
   
   
   /**
    * Returns a Set of UserRoles in the UserGroup.
    * 
    * @ejb.interface-method
    *    view-type="local"
    *
    *
    * @ejb.relation
    *    name="userGroup-userRole"
    *    role-name="userGroup-has-userRoles"
    *
    * @jboss.relation
    *    related-pk-field="roleId"
    *    fk-column="roleId"
    *
    * @jboss.relation-table
    *    table-name="chk_group_role_link"
    *
    *
    * @weblogic.relation
    *    join-table-name="chk_group_role_link"
    *
    * @weblogic.column-map
    *    key-column=groupId"
    *    foreign-key-column="roleId"    
    *
    *            
    */
	public abstract Set getRoles();



	/**
	 * Sets the roles to this group.
	 *
	 * @param   a set of roles.
	 *
	 *
	 *
    * @ejb.interface-method
	 */
	public abstract void setRoles(Set roles);



   /**
    * Returns a Set of Users in the UserGroup.
    * 
    * @ejb.interface-method
    *    view-type="local"
    *
    *
    * @ejb.relation
    *    name="user-userGroup"
    *    role-name="userGroup-belongs-to-users"
    *
    * @jboss.relation
    *    related-pk-field="userId"
    *    fk-column="userId"
    *
    * @jboss.relation-table
    *    table-name="chk_user_group_link"
    *
    *
    * @weblogic.relation
    *    join-table-name="chk_user_group_link"
    *
    * @weblogic.column-map
    *    key-column=groupId"
    *    foreign-key-column="userId"    
    *
    *            
    */
	public abstract Set getUsers();


   
	/**
	 * Sets the users to this group.
	 *
	 * @param		the users
	 *
	 *
	 *
    * @ejb.interface-method
	 */
	public abstract void setUsers(Set users);
}

