package ${package}.om;

import org.apache.torque.TorqueException;


/**
 * The skeleton for this class was autogenerated by Torque on:
 *
 * [Tue Oct 25 15:50:37 CEST 2016]
 *
 * You should add additional methods to this class to meet the
 * application requirements.  This class will only be generated as
 * long as it does not already exist in the output directory.
 */
/**
 * Added Interface and default implementations 
 * @author gk
 *
 */
public  class TurbineGroup
    extends ${package}.om.BaseTurbineGroup implements org.apache.fulcrum.security.entity.Group, org.apache.fulcrum.security.model.turbine.entity.TurbineGroup
{
    /** Serial version */
    private static final long serialVersionUID = 1477403437121L;

    /**
     * Get the value of id.
     *
     * @return Object
     */
    @Override
	public Object getId() 
    {
        
        return getGroupId();
    }

    /**
     * Set the value of id.
     *
     * @param v new value
     */
    @Override
	public void setId(Object v)
    {
        setGroupId( (Integer)v);

    }
    
        /**
     * Get the value of name.
     *
     * @return String
     */
    @Override
	public String getName() 
    {
        
        return getEntityName();
    }

    /**
     * Set the value of name.
     *
     * @param v new value
     */
    @Override
	public void setName(String v)
    {
        setEntityName(v);
    }
    
	@Override
	public Integer getEntityId() {
		return getGroupId();
	}

	@Override
	public void setEntityId(Integer id) throws TorqueException {
		setGroupId(id);
	}

    @Override
    public String getDatabaseName()
    {
      return "default";
    }

}
