コード例 #1
0
 @Override
 public void postReconnect(IReconnectionContext context) {
   Object connectionObject =
       getFeatureProvider().getBusinessObjectForPictogramElement(context.getConnection());
   if (connectionObject instanceof MessageFlow) {
     FlowNode source = null;
     FlowNode target = null;
     MessageFlow messageFlow = (MessageFlow) connectionObject;
     BpmnMemoryModel memoryModel = ModelHandler.getModel(EcoreUtil.getURI(getDiagram()));
     memoryModel.getBpmnModel().getMessageFlows().remove(messageFlow);
     if (context.getReconnectType().equalsIgnoreCase(ReconnectionContext.RECONNECT_TARGET)) {
       source = getFlowNode(context.getConnection().getStart());
       target = getFlowNode(context.getNewAnchor());
     } else {
       source = getFlowNode(context.getNewAnchor());
       target = getFlowNode(context.getConnection().getEnd());
     }
     messageFlow.setSourceRef(source.getId());
     messageFlow.setTargetRef(target.getId());
     memoryModel.getBpmnModel().getMessageFlows().add(messageFlow);
     undoedSource = messageFlow.getSourceRef();
     undoedTarget = messageFlow.getTargetRef();
   } else {
     return;
   }
   super.postReconnect(context);
 }
コード例 #2
0
  @Override
  public boolean canReconnect(IReconnectionContext context) {
    FlowNode source = null;
    FlowNode target = null;
    Object target2 = null;
    Object targetContainer = null;
    Object targetContainer2 = null;
    Object sourceContainer = null;
    Object targetContainerParent = null;
    Object sourceContainerParent = null;
    Object sourceContainerParent2 = null;
    if (context.getReconnectType().equals(ReconnectionContext.RECONNECT_TARGET)) {
      source = getFlowNode(context.getConnection().getStart());
      target = getFlowNode(context.getNewAnchor());
      targetContainer =
          getBusinessObjectForPictogramElement(
              (PictogramElement) context.getNewAnchor().getParent().eContainer());
      sourceContainer =
          getBusinessObjectForPictogramElement(
              (PictogramElement) context.getConnection().getStart().eContainer().eContainer());
      targetContainerParent =
          getBusinessObjectForPictogramElement(
              (PictogramElement) context.getNewAnchor().getParent().eContainer().eContainer());
      sourceContainerParent =
          getBusinessObjectForPictogramElement(
              (PictogramElement)
                  context.getConnection().getStart().getParent().eContainer().eContainer());
      // sourceContainerParent2 =
      // getBusinessObjectForPictogramElement((PictogramElement)context.getConnection().getStart().getParent().eContainer().eContainer().eContainer());
      // sourceContainerParent2 =
      // getBusinessObjectForPictogramElement((PictogramElement)context.getConnection().getStart().getParent().eContainer().eContainer().eContainer());
    } else {
      source = getFlowNode(context.getNewAnchor());
      target = getFlowNode(context.getConnection().getEnd());
      targetContainer =
          getBusinessObjectForPictogramElement(
              (PictogramElement) context.getConnection().getEnd().eContainer().eContainer());
      targetContainer2 =
          getBusinessObjectForPictogramElement(
              (PictogramElement) context.getConnection().getStart().eContainer().eContainer());
      sourceContainer =
          getBusinessObjectForPictogramElement(
              (PictogramElement) context.getNewAnchor().getParent().eContainer());
      targetContainerParent =
          getBusinessObjectForPictogramElement(
              (PictogramElement)
                  context.getConnection().getEnd().getParent().eContainer().eContainer());
      sourceContainerParent =
          getBusinessObjectForPictogramElement(
              (PictogramElement) context.getNewAnchor().getParent().eContainer().eContainer());
      // sourceContainerParent2 =
      // getBusinessObjectForPictogramElement((PictogramElement)context.getNewAnchor().getParent().eContainer().eContainer().eContainer());
    }

    if (source != null && target != null && source != target) {
      BpmnMemoryModel memoryModel = ModelHandler.getModel(EcoreUtil.getURI(getDiagram()));
      Process sourceProcess = null;
      Process targetProcess = null;
      for (Process proc : memoryModel.getBpmnModel().getProcesses()) {
        if (proc.getFlowElement(source.getId()) != null) {
          sourceProcess = proc;
        }
        if (proc.getFlowElement(target.getId()) != null) {
          targetProcess = proc;
        }
      }

      /*if(context.getReconnectType().equals(ReconnectionContext.RECONNECT_TARGET)
      		&& sourceContainer instanceof SubProcess
      		&& target instanceof SubProcess){
      	return true;
      }*/

      // **New rules - SZ
      if (source instanceof ServiceTask
          || source instanceof UserTask
          || source instanceof ScriptTask
          || target instanceof ServiceTask
          || target instanceof UserTask
          || target instanceof ScriptTask
          || source instanceof ReceiveTask
          || source instanceof StartEvent
          // || source instanceof BoundaryEvent &&
          // ((BoundaryEvent)source).getEventDefinitions().get(0) instanceof MessageEventDefinition
          || target instanceof SendTask
          // || source instanceof IntermediateCatchEvent &&
          // ((IntermediateCatchEvent)source).getEventDefinitions().get(0) instanceof
          // MessageEventDefinition
          || target instanceof StartEvent
              && !(((StartEvent) target).getEventDefinitions().get(0)
                  instanceof MessageEventDefinition)) {
        return false;
      }
      // **

      // System.out.println("SOURCE PROC: "+sourceProcess.getId());
      // System.out.println("TARGET PROC: "+targetProcess.getId());

      if (!(context.getReconnectType().equals(ReconnectionContext.RECONNECT_TARGET))
          && targetContainerParent != sourceContainerParent
          && targetContainer != sourceContainer
          && targetContainer != sourceContainerParent
          && targetContainerParent != sourceContainer) {
        if (source instanceof SendTask
            || source instanceof EndEvent
                && ((EndEvent) source).getEventDefinitions().get(0)
                    instanceof MessageEventDefinition
            || source instanceof IntermediateThrowEvent
                && ((IntermediateThrowEvent) source).getEventDefinitions().get(0)
                    instanceof MessageEventDefinition) {
          return true;
        }
      }

      // **SubProcess bug fixes -SZ
      if (targetProcess == null && target.getId() != null) {
        if (sourceProcess != null
            && targetContainerParent != sourceContainerParent
            && sourceContainer != targetContainerParent
            && targetContainer instanceof SubProcess) {
          if (target instanceof StartEvent
              || target instanceof ReceiveTask
              || target instanceof CatchEvent) {
            return true;
          }
        }
      }
      // **

      if (!(sourceContainer instanceof SubProcess)) {
        if (sourceProcess == null || targetProcess == null || sourceProcess == targetProcess) {
          return false;
        }
      } else if (sourceContainerParent == targetContainer) {
        return false;
      } else if (context.getReconnectType().equals(ReconnectionContext.RECONNECT_TARGET)) {
        if (sourceContainer instanceof SubProcess && sourceContainer != targetContainer) {
        } else {
          sourceContainerParent =
              getBusinessObjectForPictogramElement(
                  (PictogramElement) context.getNewAnchor().getParent().eContainer().eContainer());
          sourceContainerParent2 =
              getBusinessObjectForPictogramElement(
                  (PictogramElement)
                      context.getNewAnchor().getParent().eContainer().eContainer().eContainer());
          if (sourceContainerParent2 == targetContainerParent
              || targetContainer == sourceContainer) {
            return false;
          }
        }
      } else if (sourceContainer instanceof SubProcess) {
        return false;
      }

      if (source instanceof Task
          || source instanceof SubProcess
          || (source instanceof IntermediateThrowEvent
              && ((IntermediateThrowEvent) source).getEventDefinitions().get(0)
                  instanceof MessageEventDefinition)
          || (source instanceof EndEvent
              && ((EndEvent) source).getEventDefinitions().get(0)
                  instanceof MessageEventDefinition)) {
        if (target instanceof Task
            || (target instanceof IntermediateCatchEvent
                && ((IntermediateCatchEvent) target).getEventDefinitions().get(0)
                    instanceof MessageEventDefinition)
            || (source instanceof StartEvent
                && ((StartEvent) source).getEventDefinitions().get(0)
                    instanceof MessageEventDefinition)
            || target instanceof SubProcess
            || target instanceof StartEvent
            || (target instanceof BoundaryEvent
                && ((BoundaryEvent) target).getEventDefinitions().get(0)
                    instanceof MessageEventDefinition)) {
          return true;
        } else {
          return false;
        }
      }
      return false;
    } else {
      return false;
    }
  }