SubjectRuntimeContext.java :  » Workflow-Engines » osbl-1_0 » org » osbl » agent » logic » Java Open Source

Java Open Source » Workflow Engines » osbl 1_0 
osbl 1_0 » org » osbl » agent » logic » SubjectRuntimeContext.java
package org.osbl.agent.logic;

import org.concern.Controller;
import org.concern.ControllerLookup;
import org.concern.LoaderException;
import org.concern.Subject;
import org.concern.SubjectNotFoundException;
import org.concern.controller.LoaderFactory;
import org.conform.BeanMeta;
import org.conform.hibernate.HibernateEnvironment;
import org.osbl.agent.model.Rule;
import org.osbl.agent.model.RuleContext;


/**
 * The Class SubjectRuntimeContext.
 * 
 * @author Sebastian Nozzi.
 */
public class SubjectRuntimeContext extends RuntimeContext {

  /* (non-Javadoc)
   * @see org.osbl.agent.logic.RuntimeContext#populateRuleContext(org.osbl.agent.model.RuleContext, java.lang.Object)
   */
  public void populateRuleContext(RuleContext rtc, Object concernSubject) {
    
    Subject subject = (Subject) concernSubject;
    
        Controller controller = ControllerLookup.getInstance().getController(subject.getProcess());
        HibernateEnvironment.getInstance().beginTransaction();
        org.concern.controller.Loader loader = new LoaderFactory().getLoader(controller);
        try {
      subject.setSubject(loader.load(subject.getSubjectId()));
    } catch (LoaderException e) {
      // TODO Auto-generated catch block
      e.printStackTrace();
    } catch (SubjectNotFoundException e) {
      // TODO Auto-generated catch block
      e.printStackTrace();
    }finally {
      HibernateEnvironment.getInstance().endTransaction();
    }
    
    rtc.setTargetObject(subject.getSubject());
    rtc.put(rtc.SUBJECT_ID, subject.getSubjectId());
    rtc.put(rtc.PROCESS_NAME_KEY, subject.getProcess());
    
    BeanMeta beanMeta = new BeanMeta(subject.getSubject().getClass());
    rtc.put(rtc.BEAN_META, beanMeta);
  }

  /* (non-Javadoc)
   * @see org.osbl.agent.logic.RuntimeContext#ruleIsApplicable(org.osbl.agent.model.Rule, java.lang.Object)
   */
  public boolean ruleIsApplicable(Rule rule, Object concernSubject) {

    if(concernSubject instanceof Subject == false)
      return false;
    
    Subject subject = (Subject) concernSubject;

    String processNameInSubject = subject.getProcess();

    String processNameInRule = (String) rule.getMetaInformation().get(
        RuleContext.PROCESS_NAME_KEY);

    return processNameInSubject.equals(processNameInRule);
  }

}
java2s.com  | Contact Us | Privacy Policy
Copyright 2009 - 12 Demo Source and Support. All rights reserved.
All other trademarks are property of their respective owners.