Package org.uengine.kernel

Source Code of org.uengine.kernel.ScriptActivity

/*
* Created on 2004-04-02
*
* To change the template for this generated file go to
* Window>Preferences>Java>Code Generation>Code and Comments
*/
package org.uengine.kernel;

import java.util.Map;

import javax.servlet.http.HttpServletRequest;

import org.apache.bsf.*;
import org.codehaus.janino.ExpressionEvaluator;
import org.codehaus.janino.ScriptEvaluator;
import org.codehaus.janino.samples.DemoBase;
import org.codehaus.janino.samples.ScriptDemo;
import org.metaworks.FieldDescriptor;
import org.metaworks.Type;
import org.metaworks.inputter.RadioInput;
import org.metaworks.inputter.SelectInput;

/**
* @author Jinyoung Jang
*
* To change the template for this generated type comment go to
* Window>Preferences>Java>Code Generation>Code and Comments
*/
public class ScriptActivity extends DefaultActivity {

  private static final long serialVersionUID = org.uengine.kernel.GlobalContext.SERIALIZATION_UID;
  public static final int LANGUAGE_JAVASCRIPT        = 0;
  public static final int LANGUAGE_JAVA              = 1;
 
  public static void metaworksCallback_changeMetadata(Type type){
    FieldDescriptor fd;
   
    fd = type.getFieldDescriptor("Language")
    fd.setInputter(new RadioInput(
        new String[]{
                  "Javascript",
                              "Java"
                  },
        new Object[]{
                 new Integer(LANGUAGE_JAVASCRIPT),
                            new Integer(LANGUAGE_JAVA)
                }
    ))
  }
 
 
  String script;
    public String getScript() {
      return script;
    }
    public void setScript(String string) {
      script = string;
    }

  ProcessVariable out;
    public ProcessVariable getOut() {
      return out;
    }
    public void setOut(ProcessVariable variable) {
      out = variable;
    }
   
  int language ;
    public int getLanguage() {
      return language;
    }
    public void setLanguage(int language) {
      this.language = language;
   
   
  public ScriptActivity(){
    super();
    setName("script");   
  }
 
  public Object scriptEngine(String scriptSmt) throws BSFException{
    BSFManager manager = new BSFManager();
    manager.setClassLoader(this.getClass().getClassLoader());
       
    BSFEngine engine = manager.loadScriptingEngine("javascript");
       
    return engine.eval("my_class.my_generated_method",0,0,"function getVal(){\nimportPackage(java.lang);\n"+ scriptSmt + "}\ngetVal();");
  }
 
  protected void executeActivity(ProcessInstance instance) throws Exception{
    if(getScript()==null) return;
 
   
    Object result=null;
    if(getLanguage()==LANGUAGE_JAVASCRIPT){
      BSFManager manager = new BSFManager();
      manager.setClassLoader(this.getClass().getClassLoader());
   
      if(instance !=null)
        manager.declareBean("instance", instance, ProcessInstance.class);

      try{
        manager.declareBean("request", instance.getProcessTransactionContext().getServletRequest(), HttpServletRequest.class);
      }catch(Exception e){
      }

      manager.declareBean("activity", this, Activity.class);
      manager.declareBean("definition", getProcessDefinition(), ProcessDefinition.class);
//      manager.declareBean("globalContext", GlobalContext.getInstance(), GlobalContext.class);
      manager.declareBean("util", new ScriptUtil(), ScriptUtil.class);
     
      try{
        manager.declareBean("loggedRoleMapping", instance.getProcessTransactionContext().getProcessManager().getGenericContext().get(HumanActivity.GENERICCONTEXT_CURR_LOGGED_ROLEMAPPING), RoleMapping.class);
      }catch(Exception e){
      }
     
      BSFEngine engine = manager.loadScriptingEngine("javascript");
       
      result = engine.eval("my_class.my_generated_method",0,0,"function getVal(){\nimportPackage(java.lang);\n"+ script + "}\ngetVal();");

    }else{
     
      RoleMapping loggedRoleMapping = null;
      try{
        loggedRoleMapping = (RoleMapping) instance.getProcessTransactionContext().getProcessManager().getGenericContext().get(HumanActivity.GENERICCONTEXT_CURR_LOGGED_ROLEMAPPING);
      }catch(Exception e){
      }
     
      HttpServletRequest request = null;
      try{
        request = (HttpServletRequest) instance.getProcessTransactionContext().getServletRequest();
      }catch(Exception e){
      }
     
     
      String[] parameterNames= {"instance", "activity", "definition", "util", "loggedRoleMapping", "request"};
      Object[] parameterValues = {
          instance,
          this,
          getProcessDefinition(),
          new ScriptUtil(),
          loggedRoleMapping,
          request,
      };
     
      Class[] parameterTypes = {
          ProcessInstance.class,
          Activity.class,
          ProcessDefinition.class,
          ScriptUtil.class,
          RoleMapping.class,
          HttpServletRequest.class,
      };
     
          ScriptEvaluator se = new ScriptEvaluator(
                  script,
                  Object.class,
                  parameterNames,
                  parameterTypes
              );

              // Evaluate script with actual parameter values.
          result = se.evaluate(parameterValues);
         
          if(result instanceof UEngineException){           
            throw (UEngineException)result;           
          }
    }
       
    if(getOut()!=null)
      getOut().set(instance, "", (java.io.Serializable)result);
    fireComplete(instance);
  }
 
  public static void main(String [] args) throws Exception{
    ProcessDefinition scriptProcTest = new ProcessDefinition();
   
    ScriptActivity scriptAct = new ScriptActivity();
    scriptAct.setScript("instance.set(\"\", \"a\", util.formatSerializable(\"test\"))");
    // scriptAct.setScript("instance.get(\"\", \"a\");");

    scriptProcTest.setChildActivities(new Activity[]{scriptAct});
       
    ProcessInstance.USE_CLASS = DefaultProcessInstance.class;
    ComplexActivity.USE_JMS = false;
    ComplexActivity.USE_THREAD = false;
   
    ProcessInstance inst = scriptProcTest.createInstance();
    inst.execute();
   
    System.out.println(inst.get("", "a"));
  }


  public ValidationContext validate(Map options) {
    ValidationContext vc = super.validate(options);
   
    String script = getScript();
    
    return vc;
  }


}
TOP

Related Classes of org.uengine.kernel.ScriptActivity

TOP
Copyright © 2018 www.massapi.com. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.