package com.apoapsis.wanbus.ejb.cmp;

import com.apoapsis.wanbus.ejb.interfaces.RuleDefData;

import javax.ejb.EntityBean;
import javax.ejb.CreateException;
import java.util.Collection;

import com.apoapsis.wanbus.ejb.interfaces.RuleDefLocal;
import com.apoapsis.wanbus.ejb.interfaces.RuleDefData;

/**
 *
 *
 * @author $Author: james $
 * @version $Revision: 1.5 $
 * @ejb.bean name="RuleDef"
 *           type="CMP"
 *           local-jndi-name="RuleDef"
 *           primkey-field="ruleId"
 *           view-type="local"
 * @ejb.data-object
 * @ejb.persistence table-name="rule_def"
 * @ejb.finder signature="java.util.Collection findByParentId(java.lang.Integer parentId)"
 *             query="select object(r) from RuleDef r where r.parentRuleDef.ruleId=?1"
 *             unchecked="true"
 * @jboss.query signature="java.util.Collection findByParentId(java.lang.Integer parentId)"
 *              query="select object(r) from RuleDef r where r.parentRuleDef.ruleId=?1 order by r.ordinal"
 * @ejb.finder signature="java.util.Collection findRootRules()"
 *             query="select object(r) from RuleDef r where r.parentRuleDef is null"
 *             unchecked="true"
 * @jboss.query signature="java.util.Collection findRootRules()"
 *              query="select object(r) from RuleDef r where r.parentRuleDef is null order by r.ordinal"
 * @jboss.persistence create-table="${jboss.create.table}"
 *                    remove-table="${jboss.remove.table}"
 * @ejb.facade type="Stateless"
 *             view-type="remote"
 */
public abstract class RuleDefBean implements EntityBean {

   /**
    * @ejb.create-method
    * @ejb.permission role-name="${wanbus.role.rule.admin}"
    */
   public Integer ejbCreate() throws CreateException {
      return getRuleId();
   }

   /**
    * @todo fix the column-name for ruleId field in RuleDefBean
    * @ejb.interface-method
    * @ejb.pk-field
    * @ejb.persistence column-name="link_id"
    *                  jdbc-type="INTEGER"
    * @ejb.permission unchecked="true"
    */
   public abstract Integer getRuleId();

   /**
    * @ejb.interface-method
    * @ejb.relation name="parent-rule-child-rules"
    *               role-name="child-rule-has-parent"
    * @jboss.relation fk-constraint="true"
    *                 related-pk-field="ruleId"
    *                 fk-column="parent_rule_id"
    * @ejb.permission unchecked="true"
    */
   public abstract RuleDefLocal getParentRuleDef();

   /**
    * @ejb.interface-method
    * @ejb.permission role-name="${wanbus.role.rule.admin}"
    * @param parent
    */
   public abstract void setParentRuleDef(RuleDefLocal parent);

   /**
    * @ejb.interface-method
    * @ejb.relation name="parent-rule-child-rules"
    *               role-name="parent-rule-has-children"
    * @ejb.permission unchecked="true"
    * @return
    */
   public abstract Collection getChildRuleDefs();

   public abstract void setChildRuleDefs(Collection children);

   /**
    * @ejb.interface-method
    * @ejb.persistence column-name="application_id"
    *                  jdbc-type="INTEGER"
    * @ejb.permission unchecked="true"
    */
   public abstract Integer getApplicationId();

   /**
    * @ejb.interface-method
    * @ejb.persistence column-name="rule_type"
    *                  jdbc-type="INTEGER"
    * @ejb.permission unchecked="true"
    */
   public abstract Integer getRuleType();

   /**
    * @ejb.interface-method
    * @ejb.persistence column-name="field"
    *                  jdbc-type="VARCHAR"
    * @ejb.permission unchecked="true"
    */
   public abstract String getField();

   /**
    * @ejb.interface-method
    * @ejb.persistence column-name="value1"
    *                  jdbc-type="VARCHAR"
    * @ejb.permission unchecked="true"
    */
   public abstract String getValue1();

   /**
    * @ejb.interface-method
    * @ejb.persistence column-name="value2"
    *                  jdbc-type="VARCHAR"
    * @ejb.permission unchecked="true"
    */
   public abstract String getValue2();

   /**
    * @ejb.interface-method
    * @ejb.persistence column-name="ordinal"
    *                  jdbc-type="INTEGER"
    * @ejb.permission unchecked="true"
    * @return
    */
   public abstract Integer getOrdinal();

   /**
    * @ejb.interface-method
    * @ejb.permission role-name="${wanbus.role.rule.admin}"
    * @param ordinal
    */
   public abstract void setOrdinal(Integer ordinal);

   /**
    * @ejb.interface-method
    * @ejb.permission unchecked="true"
    * @return
    */
   public abstract RuleDefData getData();

   /**
    * @ejb.interface-method
    * @ejb.permission role-name="${wanbus.role.rule.admin}"
    * @return
    */
   public abstract void setData(RuleDefData data);
}
