Package org.uengine.ui.flowchart.impl

Source Code of org.uengine.ui.flowchart.impl.AbstractMakeProcessDefinitionToJSON

package org.uengine.ui.flowchart.impl;

import java.io.Writer;
import java.util.ArrayList;
import java.util.Vector;

import org.uengine.kernel.Activity;
import org.uengine.kernel.ComplexActivity;
import org.uengine.kernel.Condition;
import org.uengine.kernel.HumanActivity;
import org.uengine.kernel.ProcessDefinition;
import org.uengine.kernel.SubProcessActivity;
import org.uengine.kernel.SwitchActivity;
import org.uengine.ui.flowchart.model.ProcessDefinitionInfo;

import com.thoughtworks.xstream.XStream;
import com.thoughtworks.xstream.io.HierarchicalStreamWriter;
import com.thoughtworks.xstream.io.json.JsonHierarchicalStreamDriver;
import com.thoughtworks.xstream.io.json.JsonWriter;

public abstract class AbstractMakeProcessDefinitionToJSON {
  protected abstract ProcessDefinitionInfo prefixLogic(Activity act);
  protected abstract ProcessDefinitionInfo suffixLogic(Activity act, ProcessDefinitionInfo pdInfo);
 
  private boolean onlyHumanActivity;
    public boolean isOnlyHumanActivity() {
      return onlyHumanActivity;
   
    public void setOnlyHumanActivity(boolean onlyHumanActivity) {
      this.onlyHumanActivity = onlyHumanActivity;
    }

  private ArrayList<ProcessDefinitionInfo> makeChildren(Vector<? extends Activity> chilrenActivity) {
    ArrayList<ProcessDefinitionInfo> returnProcessDefinitionInfos = new ArrayList<ProcessDefinitionInfo>();
   
    if (chilrenActivity != null) {
      for (int i = 0; i < chilrenActivity.size(); i++) {
        Activity act = chilrenActivity.get(i);
       
        if (act.isHidden() == false) {
          ProcessDefinitionInfo pdInfo = prefixLogic(act);
         
          pdInfo.setName(act.getName().getText());
          pdInfo.setTracingTag(act.getTracingTag());
          if (act instanceof HumanActivity) {
            HumanActivity humanAct = (HumanActivity) act;
            pdInfo.setRoleName(humanAct.getRole().getDisplayName().getText());
            pdInfo.setDuration(String.valueOf(humanAct.getDuration()));
            pdInfo.setDescription(humanAct.getDescription().getText());
          }
         
          if (act instanceof SubProcessActivity) {
            pdInfo.setSubDefId(((SubProcessActivity)act).getDefinitionId());
          }
         
          String activityClassName = act.getClass().toString();
          pdInfo.setType(activityClassName.substring(activityClassName.lastIndexOf(".") + 1, activityClassName.length()));
         
          if (act instanceof SwitchActivity) {
            Condition[] condition = ((SwitchActivity) act).getConditions();
            String[] conditionDescription = new String[condition.length];
            for (int j = 0; j < condition.length; j++) {
              conditionDescription[j] = condition[j].getDescription().getText();
            }
            pdInfo.setCondition(conditionDescription);
          }
         
          pdInfo = suffixLogic(act, pdInfo);
         
          if(act instanceof ComplexActivity) {
            pdInfo.setChildren(makeChildren(((ComplexActivity) act).getChildActivities()));
            if (pdInfo.getChildren() != null) {
              if (pdInfo.getChildren().size() != 0) {
                returnProcessDefinitionInfos.add(pdInfo);
              }
            }
          } else {
            if (this.onlyHumanActivity == true) {
              if (act instanceof HumanActivity) {
                returnProcessDefinitionInfos.add(pdInfo)
              }
            } else {
              returnProcessDefinitionInfos.add(pdInfo);
            }
          }
        }
      }
    }
   
    return returnProcessDefinitionInfos;
  }

  public String toJSON(ProcessDefinition pd) throws Exception {
   
    ArrayList<ProcessDefinitionInfo> activityInfos = makeChildren(pd.getChildActivities());

        XStream xstream = new XStream(new JsonHierarchicalStreamDriver() {
            public HierarchicalStreamWriter createWriter(Writer writer) {
                return new JsonWriter(writer, JsonWriter.DROP_ROOT_MODE);
            }
        });

    return xstream.toXML(activityInfos);
  }
}
TOP

Related Classes of org.uengine.ui.flowchart.impl.AbstractMakeProcessDefinitionToJSON

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.