Package org.activiti.workflow.simple.util

Source Code of org.activiti.workflow.simple.util.BpmnModelUtil

package org.activiti.workflow.simple.util;

import java.util.ArrayList;
import java.util.List;

import org.activiti.bpmn.model.ActivitiListener;
import org.activiti.bpmn.model.Activity;
import org.activiti.bpmn.model.BoundaryEvent;
import org.activiti.bpmn.model.EventDefinition;
import org.activiti.bpmn.model.FlowElement;
import org.activiti.bpmn.model.FlowNode;
import org.activiti.bpmn.model.Process;
import org.activiti.bpmn.model.SequenceFlow;
import org.activiti.bpmn.model.Signal;
import org.activiti.bpmn.model.SignalEventDefinition;
import org.activiti.bpmn.model.ThrowEvent;
import org.activiti.workflow.simple.converter.ConversionConstants;
import org.activiti.workflow.simple.converter.WorkflowDefinitionConversion;

public class BpmnModelUtil {

  private static final String SIGNAL_PREFIX = "signal_";
  private static final String SIGNAL_THROWEVENT_PREFIX = "signal_throw_";
  private static final String SIGNAL_BOUNDARY_EVENT = "signal_boundary_";

  public static List<FlowElement> findSucessorFlowElementsFor(
      Process process, FlowElement sourceFlowElement) {
    List<FlowElement> successors = new ArrayList<FlowElement>();
    for (SequenceFlow sequenceFlow : process.findFlowElementsOfType(SequenceFlow.class)) {
      if (sequenceFlow.getSourceRef().equals(sourceFlowElement.getId())) {
        successors.add(process.getFlowElement(sequenceFlow.getTargetRef()));
      }
    }
    return successors;
  }

  public static SequenceFlow createSequenceFlow(WorkflowDefinitionConversion conversion, FlowNode source, FlowNode target) {
    return createSequenceFlow(conversion, source, target,(ActivitiListener[]) null);
  }

  public static SequenceFlow createSequenceFlow(WorkflowDefinitionConversion conversion, FlowNode source,
      FlowNode target, ActivitiListener... executionListeners) {
    SequenceFlow sequenceFlow = new SequenceFlow();
    sequenceFlow.setId(conversion.getUniqueNumberedId(ConversionConstants.DEFAULT_SEQUENCEFLOW_PREFIX));
    sequenceFlow.setSourceRef(source.getId());
    sequenceFlow.setTargetRef(target.getId());

    if (executionListeners != null && executionListeners.length > 0) {
      List<ActivitiListener> listeners = new ArrayList<ActivitiListener>();
      for (ActivitiListener listener : executionListeners) {
        listeners.add(listener);
      }
      sequenceFlow.setExecutionListeners(listeners);
    }

    return sequenceFlow;
  }

  public static Signal createSignal(WorkflowDefinitionConversion conversion, String signalName, boolean processInstanceScope) {
    Signal approvalFinishedSignal = new Signal();
    approvalFinishedSignal.setId(conversion.getUniqueNumberedId(SIGNAL_PREFIX));
    approvalFinishedSignal.setName(signalName);

    if (processInstanceScope) {
      approvalFinishedSignal.setScope("processInstance");
    }

    return approvalFinishedSignal;
  }

  public static ThrowEvent createSignalThrowEvent(
      WorkflowDefinitionConversion conversion,
      Signal approvalFinishedSignal) {
    SignalEventDefinition signalEventDefinition = new SignalEventDefinition();
    signalEventDefinition.setSignalRef(approvalFinishedSignal.getId());
    List<EventDefinition> signalEventDefinitions = new ArrayList<EventDefinition>();
    signalEventDefinitions.add(signalEventDefinition);

    ThrowEvent signalThrowEvent = new ThrowEvent();
    signalThrowEvent.setId(conversion.getUniqueNumberedId(SIGNAL_THROWEVENT_PREFIX));
    signalThrowEvent.setEventDefinitions(signalEventDefinitions);
    return signalThrowEvent;
  }

  public static BoundaryEvent createSignalBoundaryEvent(
      WorkflowDefinitionConversion conversion, Signal signal,
      Activity activity, boolean cancelActivity) {
    BoundaryEvent signalBoundaryEvent = new BoundaryEvent();
    signalBoundaryEvent.setId(conversion.getUniqueNumberedId(SIGNAL_BOUNDARY_EVENT));
    signalBoundaryEvent.setCancelActivity(cancelActivity);
    signalBoundaryEvent.setAttachedToRef(activity);

    SignalEventDefinition boundarySignalEventDefinition = new SignalEventDefinition();
    boundarySignalEventDefinition.setSignalRef(signal.getId());
    signalBoundaryEvent.addEventDefinition(boundarySignalEventDefinition);

    return signalBoundaryEvent;
  }

}
TOP

Related Classes of org.activiti.workflow.simple.util.BpmnModelUtil

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.