* An exception is raised if the actionable aspect is not present on the
     * passed node.
     * 
     * @param nodeRef 	the node reference
     * @return 			a list of the rules associated with the node
     */
    @Auditable(parameters = {"nodeRef"})
    public List 
     * Optionally this list includes rules inherited from its parents.
     *  
     * An exception is raised if the actionable aspect is not present on the
     * passed node.
     * 
     * @param nodeRef 			the node reference
     * @param includeInhertied	indicates whether the inherited rules should be included in
     *            				the result list or not
     * @return 					a list of the rules associated with the node
     */
    @Auditable(parameters = {"nodeRef", "includeInhertied"})
    public List 	
     * If the rule is already associated with the node, the details are updated
     * with those specified.
     * 
     * @param nodeRef
     * @param rule
     */
    @Auditable(parameters = {"nodeRef", "rule"})
    public void saveRule(NodeRef nodeRef, Rule rule);
    
    /**
     * 
     * @param nodeRef
     * @param rule
     * @param index
     */
    @Auditable(parameters = {"nodeRef", "rule", "index"})
    public void saveRule(NodeRef nodeRef, Rule rule, int index);
    
    /**
     * 
     * @param nodeRef
     * @param ruleNodeRef
     * @param index
     */
    @Auditable(parameters = {"nodeRef", "ruleNodeRef", "index"})
    public void setRulePosition(NodeRef nodeRef, NodeRef ruleNodeRef, int index);
    
    /**
     * 
     * @param nodeRef
     * @param rule
     * @param index
     */
    @Auditable(parameters = {"nodeRef", "rule", "index"})
    public void setRulePosition(NodeRef nodeRef, Rule rule, int index);
    
    /**
     * Removes a rule from the given rule actionable node
     * 
     * @param nodeRef  the actionable node reference
     */
    @Auditable(parameters = {"nodeRef", "rule"})
    public void removeRule(NodeRef nodeRef, Rule rule);
    
    /**
     * Removes all the rules associated with an actionable node
     * 
     * @param nodeRef   the actionable node reference
     */
    @Auditable(parameters = {"nodeRef"})
    public void removeAllRules(NodeRef nodeRef);
    
    /**
     * Returns the owning node reference for a rule.  
     * 
     * @param rule  the rule
     * @return      the owning node reference
     */
    @Auditable(parameters = {"rule"})
    public NodeRef getOwningNodeRef(Rule rule);
    
    /**
     * Returns the owning node reference for an action.  Returns null for an unsaved action or one that is not 
     * parented by a rule.
     * 
     * NOTE: this method is temporary and will be removed in future versions.  It should only be used with good reason.
     * 
     * @param action    the action
     * @return          the owning node reference
     */
    @Auditable(parameters = {"action"})
    public NodeRef getOwningNodeRef(Action action);
    
    /**
     * Indicates whether the passed rule node reference is linked to another
     * rule node.
     * 
     * @param  nodeRef   rule node reference
     * @return boolean   true if linked, false otherwise
     */
    @Auditable(parameters = {"nodeRef"})
    public boolean isLinkedToRuleNode(NodeRef nodeRef);
    
    /**
     * Get the node reference to the rule node which the rule node links to.  Returns null
     * if rules are not linked.
     * 
     * @param nodeRef   node reference of a rule node
     * @return NodeRef  reference to the 
     */
    @Auditable(parameters = {"nodeRef"})
    public NodeRef getLinkedToRuleNode(NodeRef nodeRef);
    
    /**
     * Get a list of the all the rule nodes that link to the passed rule node.  
     * Returns an empty list if none link.
     * 
     * @param nodeRef           node reference of a rule node
     * @return List