Package org.huihoo.workflow.impl.xpdl.serializer

Source Code of org.huihoo.workflow.impl.xpdl.serializer.XPDLSerializerIO

//----------------------------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.serializer;
import java.io.IOException;
import java.io.Writer;
import java.util.Iterator;
import java.util.List;
import java.util.Map;

import org.huihoo.workflow.WorkflowComplexComponent;
import org.huihoo.workflow.xpdl.ExtendedAttribute;
import org.huihoo.workflow.xpdl.WorkflowActivity;
import org.huihoo.workflow.xpdl.WorkflowApplication;
import org.huihoo.workflow.xpdl.WorkflowCondition;
import org.huihoo.workflow.xpdl.WorkflowPackage;
import org.huihoo.workflow.xpdl.WorkflowPackageHeader;
import org.huihoo.workflow.xpdl.WorkflowParameter;
import org.huihoo.workflow.xpdl.WorkflowProcess;
import org.huihoo.workflow.xpdl.WorkflowProcessHeader;
import org.huihoo.workflow.xpdl.WorkflowScript;
import org.huihoo.workflow.xpdl.WorkflowTransition;
import org.huihoo.workflow.xpdl.XPDLGlobals;
import org.huihoo.workflow.xpdl.activity.ActivityType;
import org.huihoo.workflow.xpdl.activity.Implementation;
import org.huihoo.workflow.xpdl.activity.JoinType;
import org.huihoo.workflow.xpdl.activity.NoImplementation;
import org.huihoo.workflow.xpdl.activity.PageImplementation;
import org.huihoo.workflow.xpdl.activity.PerformerType;
import org.huihoo.workflow.xpdl.activity.SplitType;
import org.huihoo.workflow.xpdl.activity.SubFlowImplementation;
import org.huihoo.workflow.xpdl.activity.ToolImplementation;
import org.huihoo.workflow.xpdl.activity.ToolSet;
import org.huihoo.workflow.xpdl.condition.ConditionType;
import org.huihoo.workflow.xpdl.parameter.ActualParameter;
import org.huihoo.workflow.xpdl.parameter.FormalParameter;
import org.huihoo.workflow.xpdl.serializer.XPDLSerializerException;
import org.huihoo.workflow.xpdl.util.DateTools;
import org.huihoo.workflow.xpdl.util.DurationUnit;
import org.huihoo.workflow.xpdl.util.TypeDefinition;
/**
* @author reic
*
* To change the template for this generated type comment go to
* Window - Preferences - Java - Code Generation - Code and Comments
*/
public class XPDLSerializerIO
{
  public static void serialize(WorkflowPackage pkg, Writer out) throws XPDLSerializerException, IOException
  {
    if (pkg == null)
    {
      return;
    }
    String nsPrefix = "";
    String nsURI = "xmlns=\"" + Constants.XPDL_NS_URI + "\"";
   
    if (Constants.XPDL_NS_PREFIX != null && Constants.XPDL_NS_PREFIX.trim().length() > 0)
    {
      nsPrefix = Constants.XPDL_NS_PREFIX + ":";
      nsURI = "xmlns:" + Constants.XPDL_NS_PREFIX + "=\"" + Constants.XPDL_NS_URI + "\"";
    }
   
    xmlDecl(out);
    out.write("<" + nsPrefix + "Package ");
    stdAttributes(pkg, out);
    out.write(" " + nsURI);
    out.write(">");
    newLine(out);
    newLine(out);
   
    //Package Header
    serialize(pkg.getPackageHeader(), out, nsPrefix, 1);
    newLine(out);
   
    //DataFields
    List initParams = pkg.getWorkflowParameters();
    if (initParams.size() > 0)
    {
      pushIdent(out, 1);
      out.write("<" + nsPrefix + "DataFields>");
      newLine(out);
      for (int i = 0; i < initParams.size(); ++i)
      {
        serialize((WorkflowParameter) initParams.get(i), out, nsPrefix, 2);
      }
      pushIdent(out, 1);
      out.write("</" + nsPrefix + "DataFields>");
      newLine(out);
    }
    newLine(out);
   
    //ExtendedAttributes
    extendedAttriutes(pkg, out, nsPrefix, 1);
    newLine(out);
   
    //WorkflowScript
    serialize(pkg.getWorkflowScript(), out, nsPrefix, 1);
    newLine(out);
   
    //Applications
    List apps = pkg.getWorkflowApplications();
    if (apps.size() > 0)
    {
      pushIdent(out, 1);
      out.write("<" + nsPrefix + "Applications>");
      newLine(out);
      for (int i = 0; i < apps.size(); ++i)
      {
        serialize((WorkflowApplication) apps.get(i), out, nsPrefix, 2);
      }
      pushIdent(out, 1);
      out.write("</" + nsPrefix + "Applications>");
      newLine(out);
    }
    newLine(out);

    //WorkflowProcesses
    List processes = pkg.getWorkflowProcesses();
    if (processes.size() > 0)
    {
      pushIdent(out, 1);
      out.write("<" + nsPrefix + "WorkflowProcesses>");
      newLine(out);
      newLine(out);
      for (int i = 0; i < processes.size(); ++i)
      {
        serialize((WorkflowProcess) processes.get(i), out, nsPrefix, 2);
        newLine(out);
      }
      pushIdent(out, 1);
      out.write("</" + nsPrefix + "WorkflowProcesses>");
      newLine(out);
    }
    out.write("</" + nsPrefix + "Package> ");
  }
  protected static void xmlDecl(Writer out) throws XPDLSerializerException, IOException
  {
    out.write(Constants.XPDL_XML_DECL);
    newLine(out);
  }
  protected static void serialize(WorkflowPackageHeader pkgHeader, Writer out, String nsPrefix, int ident_unit)
    throws XPDLSerializerException, IOException
  {
    if (pkgHeader == null)
    {
      return;
    }
    pushIdent(out, ident_unit);
    out.write("<" + nsPrefix + "PackageHeader>");
    newLine(out);
    if (pkgHeader.getXPDLVersion() != null)
    {
      pushIdent(out, ident_unit + 1);
      out.write("<" + nsPrefix + "XPDLVersion>");
      out.write(pkgHeader.getXPDLVersion());
      out.write("</" + nsPrefix + "XPDLVersion>");
      newLine(out);
    }
    if (pkgHeader.getVendor() != null)
    {
      pushIdent(out, ident_unit + 1);
      out.write("<" + nsPrefix + "Vendor>");
      out.write(pkgHeader.getVendor());
      out.write("</" + nsPrefix + "Vendor>");
      newLine(out);
    }
    if (pkgHeader.getCreationTime() != null)
    {
      pushIdent(out, ident_unit + 1);
      out.write("<" + nsPrefix + "Created>");
      out.write(DateTools.toString(pkgHeader.getCreationTime()));
      out.write("</" + nsPrefix + "Created>");
      newLine(out);
    }
    if (pkgHeader.getDescription() != null)
    {
      pushIdent(out, ident_unit + 1);
      out.write("<" + nsPrefix + "Description>");
      out.write(pkgHeader.getDescription());
      out.write("</" + nsPrefix + "Description>");
      newLine(out);
    }
    pushIdent(out, ident_unit);
    out.write("</" + nsPrefix + "PackageHeader>");
    newLine(out);
  }
  protected static void serialize(WorkflowApplication application, Writer out, String nsPrefix, int ident_unit)
    throws XPDLSerializerException, IOException
  {
    if (application == null)
    {
      return;
    }
    pushIdent(out, ident_unit);
    out.write("<" + nsPrefix + "Application");
    minAttributes(application, out);
    out.write(">");
    newLine(out);
    if (application.getDescription() != null)
    {
      pushIdent(out, ident_unit + 1);
      out.write("<" + nsPrefix + "Description>");
      out.write(application.getDescription());
      out.write("</" + nsPrefix + "Description>");
      newLine(out);
    }
    List formals = application.getFormalParameters();
    if (formals.size() > 0)
    {
      pushIdent(out, ident_unit + 1);
      out.write("<" + nsPrefix + "FormalParameters>");
      newLine(out);
      for (int i = 0; i < formals.size(); ++i)
      {
        formalParameter((FormalParameter) formals.get(i), out, nsPrefix, ident_unit + 2);
      }
      pushIdent(out, ident_unit + 1);
      out.write("</" + nsPrefix + "FormalParameters>");
      newLine(out);
    }
   
    String qClassName=application.getQualifiedClassName();
    if(qClassName != null)
    {
      application.addExtendedAttribute(new ExtendedAttribute(XPDLGlobals.APPLICATION_QUALIFIED_CLASS_NAME,qClassName));
    }
    extendedAttriutes(application, out, nsPrefix, ident_unit + 1);
    pushIdent(out, ident_unit);
    out.write("</" + nsPrefix + "Application>");
    newLine(out);
  }
  protected static void serialize(WorkflowParameter parameter, Writer out, String nsPrefix, int ident_unit)
    throws XPDLSerializerException, IOException
  {
    if (parameter == null)
    {
      return;
    }
    pushIdent(out, ident_unit);
    out.write("<" + nsPrefix + "DataField");
    minAttributes(parameter, out);
    out.write(">");
    newLine(out);
   
    if (parameter.getDescription() != null)
    {
      pushIdent(out, ident_unit + 1);
      out.write("<" + nsPrefix + "Description>");
      out.write(parameter.getDescription());
      out.write("</" + nsPrefix + "Description>");
      newLine(out);
    }
    pushIdent(out, ident_unit + 1);
    out.write("<" + nsPrefix + "DataType>");
    newLine(out);
   
    if (parameter.getType().isPrimitive() || parameter.getType().getName().equals(String.class.getName()))
    {
      pushIdent(out, ident_unit + 2);
      out.write("<" + nsPrefix + "BasicType Type=\"" + TypeDefinition.javaToXPDL(parameter.getType()) + "\"/>");
      newLine(out);     
    }
    else
    {
      //noop
    }
   
    pushIdent(out, ident_unit + 1);
    out.write("</" + nsPrefix + "DataType>");
    newLine(out);
   
    pushIdent(out, ident_unit + 1);
    if (parameter.getValue() != null)
    {
      out.write("<" + nsPrefix + "InitialValue>");
      out.write(parameter.getValue().toString());
      out.write("</" + nsPrefix + "InitialValue>");
      newLine(out);
    }
         
    extendedAttriutes(parameter, out, nsPrefix, ident_unit + 1);
   
    pushIdent(out, ident_unit);
    out.write("</" + nsPrefix + "DataField>");
    newLine(out);
  }
  protected static void serialize(WorkflowScript script, Writer out, String nsPrefix, int ident_unit) throws XPDLSerializerException, IOException
  {
    if (script == null)
    {
      return;
    }
    pushIdent(out, ident_unit);
    out.write("<" + nsPrefix + "Script ");
    if (script.getType() != null)
    {
      out.write(" Type=\"" + script.getType() + "\"");
    }
    if (script.getVersion() != null)
    {
      out.write(" Version=\"" + script.getVersion() + "\"");
    }
    if (script.getGrammar() != null)
    {
      out.write(" Grammar=\"" + script.getGrammar() + "\"");
    }
    out.write("/>");
    newLine(out);
  }
  protected static void serialize(WorkflowProcess process, Writer out, String nsPrefix, int ident_unit) throws XPDLSerializerException, IOException
  {
    if (process == null)
    {
      return;
    }
    pushIdent(out, ident_unit);
    out.write("<" + nsPrefix + "WorkflowProcess");
    minAttributes(process, out);
    out.write(">");
    newLine(out);

    serialize(process.getProcessHeader(), out, nsPrefix, ident_unit + 1);
    newLine(out);
    List ativities = process.getWorkflowActivities();
    if (ativities.size() > 0)
    {
      pushIdent(out, ident_unit + 1);
      out.write("<" + nsPrefix + "Activities>");
      newLine(out);
      for (int i = 0; i < ativities.size(); ++i)
      {
        serialize((WorkflowActivity) ativities.get(i), out, nsPrefix, ident_unit + 2);
        newLine(out);
      }
      pushIdent(out, ident_unit + 1);
      out.write("</" + nsPrefix + "Activities>");
      newLine(out);
      newLine(out);
    }
    List trans = process.getWorkflowTransitions();
    if (trans.size() > 0)
    {
      pushIdent(out, ident_unit + 1);
      out.write("<" + nsPrefix + "Transitions>");
      newLine(out);
      for (int i = 0; i < trans.size(); ++i)
      {
        serialize((WorkflowTransition) trans.get(i), out, nsPrefix, ident_unit + 2);
        if(i < (trans.size()-1))
        {
          newLine(out);
        }
      }
      pushIdent(out, ident_unit + 1);
      out.write("</" + nsPrefix + "Transitions>");
      newLine(out);
      newLine(out);
    }
   
    String listenerClassName =   process.getListenerClassName();
    if(listenerClassName!=null)
    {
      process.addExtendedAttribute(new ExtendedAttribute(XPDLGlobals.LISTENER_QUALIFIED_CLASS_NAME,listenerClassName));
   
    extendedAttriutes(process, out, nsPrefix, ident_unit + 1);
 
    pushIdent(out, ident_unit);
    out.write("</" + nsPrefix + "WorkflowProcess>");
    newLine(out);
  }
  protected static void serialize(WorkflowProcessHeader processHeader, Writer out, String nsPrefix, int ident_unit)
    throws XPDLSerializerException, IOException
  {
    if (processHeader == null)
    {
      return;
    }
    pushIdent(out, ident_unit);
    out.write("<" + nsPrefix + "ProcessHeader ");
    if (processHeader.getDurationUnit() != null)
    {
      out.write(" DurationUnit=\"" + DurationUnit.typeToString(processHeader.getDurationUnit()) + "\"");
    }
    out.write(">");
    newLine(out);
    if (processHeader.getCreationTime() != null)
    {
      pushIdent(out, ident_unit + 1);
      out.write("<" + nsPrefix + "Created>");
      out.write(DateTools.toString(processHeader.getCreationTime()));
      out.write("</" + nsPrefix + "Created>");
      newLine(out);
    }
    if (processHeader.getDescription() != null)
    {
      pushIdent(out, ident_unit + 1);
      out.write("<" + nsPrefix + "Description>");
      out.write(processHeader.getDescription());
      out.write("</" + nsPrefix + "Description>");
      newLine(out);
    }
    if (processHeader.getLimit() != null)
    {
      pushIdent(out, ident_unit + 1);
      out.write("<" + nsPrefix + "Limit>");
      out.write(processHeader.getLimit().toString());
      out.write("</" + nsPrefix + "Limit>");
      newLine(out);
    }
    if (processHeader.getValidFrom() != null)
    {
      pushIdent(out, ident_unit + 1);
      out.write("<" + nsPrefix + "ValidFrom>");
      out.write(DateTools.toString(processHeader.getValidFrom()));
      out.write("</" + nsPrefix + "ValidFrom>");
      newLine(out);
    }
    if (processHeader.getValidTo() != null)
    {
      pushIdent(out, ident_unit + 1);
      out.write("<" + nsPrefix + "ValidTo>");
      out.write(DateTools.toString(processHeader.getValidTo()));
      out.write("</" + nsPrefix + "ValidTo>");
      newLine(out);
    }
    pushIdent(out, ident_unit);
    out.write("</" + nsPrefix + "ProcessHeader>");
    newLine(out);
  }
  protected static void serialize(WorkflowActivity activity, Writer out, String nsPrefix, int ident_unit) throws XPDLSerializerException, IOException
  {
    if (activity == null)
    {
      return;
    }
    pushIdent(out, ident_unit);
    out.write("<" + nsPrefix + "Activity");
    minAttributes(activity, out);
    out.write(">");
    newLine(out);
    if (activity.getDescription() != null)
    {
      pushIdent(out, ident_unit + 1);
      out.write("<" + nsPrefix + "Description>");
      out.write(activity.getDescription());
      out.write("</" + nsPrefix + "Description>");
      newLine(out);
    }
    if (activity.getDuration() != null)
    {
      pushIdent(out, ident_unit + 1);
      out.write("<" + nsPrefix + "Limit>");
      out.write(activity.getDuration().toString());
      out.write("</" + nsPrefix + "Limit>");
      newLine(out);
    }
   
    List pfs = activity.getPerformers();
    int size = pfs.size();
    StringBuffer performers = new StringBuffer();
    for (int i = 0; i < size; ++i)
    {     
      if (i == (size - 1))
      {
        performers.append(pfs.get(i).toString());
      }
      else
      {
        performers.append(pfs.get(i).toString() + XPDLGlobals.PERFORMER_SEPARATOR);
      }   
     
    }
    pushIdent(out, ident_unit + 1);
   
    if(performers.length() >0 )
    {
      out.write("<" + nsPrefix + "Performer>");
      out.write(performers.toString());
      out.write("</" + nsPrefix + "Performer>");     
    }
    else
    {
      //out.write("<" + nsPrefix + "Performer/>");   
    }
   
    newLine(out);
    serialize(activity.getImplementation(), out, nsPrefix, ident_unit + 1);
    serializeTransitionRestrictions(activity, out, nsPrefix, ident_unit + 1);
   
   
    ActivityType act_type=activity.getActivityType();
    if(act_type != null)
    {
      activity.addExtendedAttribute(new ExtendedAttribute(XPDLGlobals.ACTIVITY_TYPE,act_type.getType()));
    }
   
    PerformerType pf_type=activity.getPerformerType();
    if(pf_type!=null)
    {
      activity.addExtendedAttribute(new ExtendedAttribute(XPDLGlobals.PERFORMER_TYPE,pf_type.getType()));
    }
   
    String listenerClassName =   activity.getListenerClassName();
    if(listenerClassName!=null)
    {
      activity.addExtendedAttribute(new ExtendedAttribute(XPDLGlobals.LISTENER_QUALIFIED_CLASS_NAME,listenerClassName));
   
    extendedAttriutes(activity, out, nsPrefix, ident_unit + 1);
   
   
    pushIdent(out, ident_unit);
    out.write("</" + nsPrefix + "Activity>");
    newLine(out);
  }
  protected static void serialize(WorkflowTransition transition, Writer out, String nsPrefix, int ident_unit)
    throws XPDLSerializerException, IOException
  {
    if (transition == null)
    {
      return;
    }
    pushIdent(out, ident_unit);
    out.write("<" + nsPrefix + "Transition");
    minAttributes(transition, out);
    if (transition.getFromWorkflowActivity() != null)
    {
      out.write(" From=\"" + transition.getFromWorkflowActivity().getUUID() + "\"");
    }
    if (transition.getToWorkflowActivity() != null)
    {
      out.write(" To=\"" + transition.getToWorkflowActivity().getUUID() + "\"");
    }
    out.write(">");
    newLine(out);
    if (transition.getDescription() != null)
    {
      pushIdent(out, ident_unit + 1);
      out.write("<" + nsPrefix + "Description>");
      out.write(transition.getDescription());
      out.write("</" + nsPrefix + "Description>");
      newLine(out);
    }
    serializeCondition(transition, out, nsPrefix, ident_unit + 1);
    extendedAttriutes(transition, out, nsPrefix, ident_unit + 1);
    pushIdent(out, ident_unit);
    out.write("</" + nsPrefix + "Transition>");
    newLine(out);
  }
  protected static void serialize(Implementation impl, Writer out, String nsPrefix, int ident_unit) throws XPDLSerializerException, IOException
  {
    pushIdent(out, ident_unit);
    out.write("<" + nsPrefix + "Implementation>");
    newLine(out);
    if (impl == null)
    {
      pushIdent(out, ident_unit + 1);
      out.write("<" + nsPrefix + "No/>");
      newLine(out);
    }
    else
    {
      if ((impl instanceof NoImplementation) || (impl instanceof PageImplementation))
      {
        pushIdent(out, ident_unit + 1);
        out.write("<" + nsPrefix + "No/>");
        newLine(out);
      }
      else if (impl instanceof SubFlowImplementation)
      {
        pushIdent(out, ident_unit + 1);
        out.write("<" + nsPrefix + "SubFlow");
        SubFlowImplementation subflow = (SubFlowImplementation) impl;
        if (subflow.getProcessID() != null)
        {
          out.write(" Id=\"" + subflow.getProcessID() + "\"");
        }
        out.write(">");
        newLine(out);
        pushIdent(out, ident_unit + 1);
        extendedAttriutes_impl(subflow.getExtendedAttributes(), out, nsPrefix, ident_unit + 1);
        out.write("</" + nsPrefix + "SubFlow>");
        newLine(out);
      }
      else if (impl instanceof ToolImplementation)
      {
        serializeTool((ToolImplementation) impl, out, nsPrefix, ident_unit + 1);
      }
      else if (impl instanceof ToolSet)
      {
        ToolSet toolSet = (ToolSet) impl;
        List tools = toolSet.getToolKits();
        for (int i = 0; i < tools.size(); ++i)
        {
          serializeTool((ToolImplementation) tools.get(i), out, nsPrefix, ident_unit + 1);
        }
      }
    }
    pushIdent(out, ident_unit);
    out.write("</" + nsPrefix + "Implementation>");
    newLine(out);
  }
  protected static void serializeTool(ToolImplementation impl, Writer out, String nsPrefix, int ident_unit)
    throws XPDLSerializerException, IOException
  {
    if(impl ==null)
    {
      return;
    }
   
    pushIdent(out, ident_unit);
    out.write("<" + nsPrefix + "Tool ");
    if(impl.getApplicationID()!= null )
    {
      out.write(" Id=\"" + impl.getApplicationID() + "\"");
    }
    out.write(">");
   
    newLine(out);
    List actuals = impl.getActualParameters();
    //System.err.println("XPDLIO : getActualParameters || "+impl.getActualParameters());
    if (actuals.size() > 0)
    {
      pushIdent(out, ident_unit + 1);
      out.write("<" + nsPrefix + "ActualParameters>");
      newLine(out);
      for (int i = 0; i < actuals.size(); ++i)
      {
        actualParameter((ActualParameter) actuals.get(i), out, nsPrefix, ident_unit + 2);
      }
      pushIdent(out, ident_unit + 1);
      out.write("</" + nsPrefix + "ActualParameters>");
      newLine(out);
    }
    extendedAttriutes_impl(impl.getExtendedAttributes(), out, nsPrefix, ident_unit + 1);
    pushIdent(out, ident_unit);
    out.write("</" + nsPrefix + "Tool>");
    newLine(out);
  }
  protected static void serializeTransitionRestrictions(WorkflowActivity activity, Writer out, String nsPrefix, int ident_unit)
    throws XPDLSerializerException, IOException
  {
    if ( (activity.getJoinType() != null && !(JoinType.JOIN_NA.equals(activity.getJoinType())))
        || (activity.getSplitType() != null && !(SplitType.SPLIT_NA.equals(activity.getSplitType()) )))
    {
      pushIdent(out, ident_unit);
      out.write("<" + nsPrefix + "TransitionRestrictions>");
      newLine(out);
      if (activity.getJoinType() != null
      && !(JoinType.JOIN_NA.equals(activity.getJoinType()) ))
      {
        pushIdent(out, ident_unit + 1);
        out.write("<" + nsPrefix + "TransitionRestriction>");
        newLine(out);
        pushIdent(out, ident_unit + 2);
        out.write("<" + nsPrefix + "Join Type=\"" + activity.getJoinType().getType() + "\"/>");
        newLine(out);
        pushIdent(out, ident_unit + 1);
        out.write("</" + nsPrefix + "TransitionRestriction>");
        newLine(out);
      }
      if (activity.getSplitType() != null
      && !(SplitType.SPLIT_NA.equals(activity.getSplitType())))
      {
        pushIdent(out, ident_unit + 1);
        out.write("<" + nsPrefix + "TransitionRestriction>");
        newLine(out);
        pushIdent(out, ident_unit + 2);
        out.write("<" + nsPrefix + "Split Type=\"" + activity.getSplitType().getType() + "\"/>");
        newLine(out);
        pushIdent(out, ident_unit + 1);
        out.write("</" + nsPrefix + "TransitionRestriction>");
        newLine(out);
      }
      pushIdent(out, ident_unit);
      out.write("</" + nsPrefix + "TransitionRestrictions>");
      newLine(out);
    }
  }
  protected static void serializeCondition(WorkflowTransition transition, Writer out, String nsPrefix, int ident_unit)
    throws XPDLSerializerException, IOException
  {
    WorkflowCondition condition=transition.getCondition();
    transition.removeExtendedAttribute(XPDLGlobals.CONDITION_TYPE);
   
    if (condition != null && condition.getContent() != null)
    {
      transition.addExtendedAttribute(new ExtendedAttribute(XPDLGlobals.CONDITION_TYPE,condition.getType().getType()));
     
      if(ConditionType.CONDITION_SCRIPT.equals(condition.getType()))
      {
        pushIdent(out, ident_unit);
        out.write("<" + nsPrefix + "Condition>");
        out.write(condition.getContent());
        out.write("</" + nsPrefix + "Condition>");
        newLine(out);
      }
      else
      {
        pushIdent(out, ident_unit);
        out.write("<" + nsPrefix + "Condition>");
        out.write("<![CDATA[");
        out.write(condition.getContent());
        out.write("]]>");
        out.write("</" + nsPrefix + "Condition>");
        newLine(out);
      }
    }
  }
  protected static void minAttributes(WorkflowComplexComponent elem, Writer out) throws XPDLSerializerException, IOException
  {
    if (elem.getUUID() == null)
    {
      throw new XPDLSerializerException("Id required {" + elem + "}");
    }
    out.write(" Id=\"" + elem.getUUID() + "\"");
    if (elem.getName() != null)
    {
      out.write(" Name=\"" + elem.getName() + "\"");
    }
  }
  protected static void stdAttributes(WorkflowComplexComponent elem, Writer out) throws XPDLSerializerException, IOException
  {
    if (elem.getUUID() == null)
    {
      throw new XPDLSerializerException("Id reqired {" + elem + "}");
    }
    out.write(" Id=\"" + elem.getUUID() + "\"");
    if (elem.getName() != null)
    {
      out.write(" Name=\"" + elem.getName() + "\"");
    }
    if (elem.getDescription() != null)
    {
      out.write(" Description=\"" + elem.getDescription() + "\"");
    }
  }
  protected static void extendedAttriutes(WorkflowComplexComponent elem, Writer out, String nsPrefix, int ident_unit) throws XPDLSerializerException, IOException
  {
    extendedAttriutes_impl(elem.getExtendedAttributes(), out, nsPrefix, ident_unit);
  }
 
  protected static void extendedAttriutes_impl(Map elemAttributes, Writer out, String nsPrefix, int ident_unit)
    throws XPDLSerializerException, IOException
  {
    if (elemAttributes == null || elemAttributes.size() == 0)
    {
      return;
    }
    Iterator iterator = elemAttributes.keySet().iterator();
    pushIdent(out, ident_unit);
    out.write("<" + nsPrefix + "ExtendedAttributes>");
    newLine(out);
    while (iterator.hasNext())
    {
      Object name = iterator.next();
      Object value = elemAttributes.get(name);
      if (value instanceof ExtendedAttribute)
      {
        ExtendedAttribute attribute = (ExtendedAttribute) value;
        pushIdent(out, ident_unit + 1);
        out.write("<" + nsPrefix + "ExtendedAttribute");
        String attrname = (String)attribute.getName();
        if ( attrname!= null && attrname.length()>0)
        {
          out.write(" Name=\"" + attrname + "\"");
          if (attribute.getValue() != null)
          {
            out.write(" Value=\"" + attribute.getValue() + "\"");
          }
        }
      }
      else
      {
//        pushIdent(out, ident_unit + 1);
//        out.write("<" + nsPrefix + "ExtendedAttribute");
//
//        out.write(" Name=\"" + name.toString() + "\"");
//        if (value != null)
//        {
//          out.write(" Value=\"" + value.toString() + "\"");
//        }
          System.err.println("XPDLSerializerIO Error : NOT an ExtendedAttribute {"+value.getClass()+","+value+"}");
      }
     
      out.write("/>");
      newLine(out);
    }
    pushIdent(out, ident_unit);
    out.write("</" + nsPrefix + "ExtendedAttributes>");
    newLine(out);
  }
  protected static void formalParameter(FormalParameter param, Writer out, String nsPrefix, int ident_unit)
    throws XPDLSerializerException, IOException
  {
    pushIdent(out, ident_unit);
    out.write("<" + nsPrefix + "FormalParameter");
    if (param.getUUID() != null)
    {
      out.write(" Id=\"" + param.getUUID() + "\"");
    }
    out.write(" Index=\"" + param.getIndex() + "\"");
    out.write(" Mode=\"" + param.getMode().getMode() + "\"");
    out.write(">");
    newLine(out);
    if (param.getDescription() != null)
    {
      pushIdent(out, ident_unit + 1);
      out.write("<" + nsPrefix + "Description>");
      out.write(param.getDescription());
      out.write("</" + nsPrefix + "Description>");
      newLine(out);
    }
    pushIdent(out, ident_unit + 1);
    out.write("<" + nsPrefix + "DataType>");
    newLine(out);
   
    if (param.getType().isPrimitive() || param.getType().getName().equals("".getClass().getName()))
    {
      pushIdent(out, ident_unit + 2);
      out.write("<" + nsPrefix + "BasicType Type=\"" + TypeDefinition.javaToXPDL(param.getType()) + "\"/>");
      newLine(out);
    }
    else
    {
      //noop
    }
    pushIdent(out, ident_unit + 1);
    out.write("</" + nsPrefix + "DataType>");
    newLine(out);
   
    pushIdent(out, ident_unit);
    out.write("</" + nsPrefix + "FormalParameter>");
    newLine(out);
  }
  protected static void actualParameter(ActualParameter param, Writer out, String nsPrefix, int ident_unit)
    throws XPDLSerializerException, IOException
  {
    pushIdent(out, ident_unit);
    out.write("<" + nsPrefix + "ActualParameter>");
    out.write(param.getUUID());
    out.write("</" + nsPrefix + "ActualParameter>");
    newLine(out);
  }
  protected static void newLine(Writer out) throws XPDLSerializerException, IOException
  {
    out.write(System.getProperty("line.separator"));
  }
  protected static void pushIdent(Writer out, int ident_unit) throws XPDLSerializerException, IOException
  {
    for (int i = 0; i < ident_unit; ++i)
    {
      out.write("  ");
    }
  }
}
TOP

Related Classes of org.huihoo.workflow.impl.xpdl.serializer.XPDLSerializerIO

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.