Package org.huihoo.workflow.impl.xpdl.parser

Source Code of org.huihoo.workflow.impl.xpdl.parser.XPDLParserFile

//----------------------------BEGIN LICENSE----------------------------
/*
* Willow : the Open Source WorkFlow Project
* Distributable under GNU LGPL license by gun.org
*
* Copyright (C) 2004-2010 huihoo.org
* Copyright (C) 2004-2010  ZosaTapo <dertyang@hotmail.com>
*
* ====================================================================
* Project Homepage : http://www.huihoo.org/willow
* Source Forge     : http://sourceforge.net/projects/huihoo
* Mailing list     : willow@lists.sourceforge.net
*/
//----------------------------END  LICENSE-----------------------------
package org.huihoo.workflow.impl.xpdl.parser;
import java.io.IOException;
import java.io.Reader;

import org.apache.commons.beanutils.ConvertUtils;
import org.apache.commons.digester.Digester;
import org.huihoo.workflow.impl.xpdl.parser.converters.JoinTypeConverter;
import org.huihoo.workflow.impl.xpdl.parser.converters.ParameterModeConverter;
import org.huihoo.workflow.impl.xpdl.parser.converters.SplitTypeConverter;
import org.huihoo.workflow.impl.xpdl.parser.xmlrules.ActivityRuleSet;
import org.huihoo.workflow.impl.xpdl.parser.xmlrules.ApplicationRuleSet;
import org.huihoo.workflow.impl.xpdl.parser.xmlrules.DataFieldRuleSet;
import org.huihoo.workflow.impl.xpdl.parser.xmlrules.PackageHeaderRuleSet;
import org.huihoo.workflow.impl.xpdl.parser.xmlrules.PackageRuleSet;
import org.huihoo.workflow.impl.xpdl.parser.xmlrules.ProcessHeaderRuleSet;
import org.huihoo.workflow.impl.xpdl.parser.xmlrules.ProcessRuleSet;
import org.huihoo.workflow.impl.xpdl.parser.xmlrules.SetAliasPropertyRule;
import org.huihoo.workflow.impl.xpdl.parser.xmlrules.TransitionRuleSet;
import org.huihoo.workflow.xpdl.WorkflowPackage;
import org.huihoo.workflow.xpdl.activity.JoinType;
import org.huihoo.workflow.xpdl.activity.SplitType;
import org.huihoo.workflow.xpdl.parameter.ParameterMode;
import org.huihoo.workflow.xpdl.parser.XPDLParserException;
import org.huihoo.workflow.xpdl.parser.XPDLParserTools;

import com.zosatapo.commons.util.converters.ClassConverter;
/**
* @author zosatapo
*
* To change the template for this generated type comment go to
* Window - Preferences - Java - Code Generation - Code and Comments
*/
public class XPDLParserFile
{
  public static WorkflowPackage parseReader(DefaultXPDLParser parser, Reader inputReader)
    throws XPDLParserException, IOException
  {
    WorkflowPackage result = null;
    Digester digester = null;
    try
    {
      digester = createXPDLDigester();
      digester.parse(inputReader);
      result = (WorkflowPackage) digester.getRoot();
      if (parser.isValidating())
      {
        parser.errorList = XPDLParserTools.internalValidate(result);
        XPDLParserTools.dumpErrorList(parser.errorList);
      }
      XPDLParserTools.internalFormat(result);
    }
    catch (Exception e)
    {
      throw new XPDLParserException(e);
    }
    return result;
  }

  private static Digester configDigester(Digester digester)
  {
    digester.setValidating(false);
    digester.setNamespaceAware(true);
    digester.setClassLoader(XPDLParserFile.class.getClassLoader());
    ConvertUtils.register(new ParameterModeConverter(), ParameterMode.class);
    ConvertUtils.register(new JoinTypeConverter(), JoinType.class);
    ConvertUtils.register(new SplitTypeConverter(), SplitType.class);
    ConvertUtils.register(new ClassConverter(), Class.class);
    return digester;
  }

  private static Digester createXPDLDigester()
  {
    // Initialize the digester
    Digester digester = new Digester();
    configDigester(digester);
    //-----------------------Package   
    digester.addObjectCreate("Package", "org.huihoo.workflow.impl.xpdl.WorkflowPackageImpl");
    digester.addRule("Package", new SetAliasPropertyRule("UUID", "Id"));
    digester.addRule("Package", new SetAliasPropertyRule("name", "Name"));
    digester.addRuleSet(new PackageRuleSet("Package/"));
    //  -----------------------PackageHeader
    digester.addRuleSet(new PackageHeaderRuleSet("Package/PackageHeader/"));
    //  -----------------------DataField
    //  digester.addRule("Package/DataFields/DataField",new SetAliasPropertyRule("isArray","IsArray"));
    digester.addRule("Package/DataFields/DataField", new SetAliasPropertyRule("UUID", "Id"));
    digester.addRule("Package/DataFields/DataField", new SetAliasPropertyRule("name", "Name"));
    digester.addRuleSet(new DataFieldRuleSet("Package/DataFields/DataField/"));
    //  -----------------------WorkflowProcess
    digester.addRule("Package/WorkflowProcesses/WorkflowProcess", new SetAliasPropertyRule("UUID", "Id"));
    digester.addRule("Package/WorkflowProcesses/WorkflowProcess", new SetAliasPropertyRule("name", "Name"));
    digester.addRuleSet(new ProcessRuleSet("Package/WorkflowProcesses/WorkflowProcess/"));
    //  -----------------------ProcessHeader  
    digester.addSetProperties("Package/WorkflowProcesses/WorkflowProcess/ProcessHeader");
    digester.addRuleSet(new ProcessHeaderRuleSet("Package/WorkflowProcesses/WorkflowProcess/ProcessHeader/"));
    //  -----------------------WorkflowActivity
    //  We need use SetTransitionActivityRule,so we must put these here
    digester.addRule(
      "Package/WorkflowProcesses/WorkflowProcess/Activities/Activity",
      new SetAliasPropertyRule("UUID", "Id"));
    digester.addRule(
      "Package/WorkflowProcesses/WorkflowProcess/Activities/Activity",
      new SetAliasPropertyRule("name", "Name"));
    digester.addRuleSet(new ActivityRuleSet("Package/WorkflowProcesses/WorkflowProcess/Activities/Activity/"));
    //  -----------------------WorkflowTransition
    digester.addRule(
      "Package/WorkflowProcesses/WorkflowProcess/Transitions/Transition",
      new SetAliasPropertyRule("UUID", "Id"));
    digester.addRule(
      "Package/WorkflowProcesses/WorkflowProcess/Transitions/Transition",
      new SetAliasPropertyRule("name", "Name"));
    digester.addRuleSet(new TransitionRuleSet("Package/WorkflowProcesses/WorkflowProcess/Transitions/Transition/"));
    //  -----------------------WorkflowApplication
    digester.addRule("Package/Applications/Application", new SetAliasPropertyRule("UUID", "Id"));
    digester.addRule("Package/Applications/Application", new SetAliasPropertyRule("name", "Name"));
    digester.addRuleSet(new ApplicationRuleSet("Package/Applications/Application/"));
    return (digester);
  }
}
TOP

Related Classes of org.huihoo.workflow.impl.xpdl.parser.XPDLParserFile

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.