Java Code Examples for org.activiti.bpmn.model.BpmnModel#getMessage()

The following examples show how to use org.activiti.bpmn.model.BpmnModel#getMessage() . You can vote up the ones you like or vote down the ones you don't like, and go to the original project or source file by following the links above each example. You may check out the related API usage on the sidebar.
Example 1
Source File: DeploymentEntityManagerImpl.java    From activiti6-boot2 with Apache License 2.0 6 votes vote down vote up
protected void restoreMessageStartEvent(ProcessDefinition previousProcessDefinition, BpmnModel bpmnModel, StartEvent startEvent, EventDefinition eventDefinition) {
  MessageEventDefinition messageEventDefinition = (MessageEventDefinition) eventDefinition;
  if (bpmnModel.containsMessageId(messageEventDefinition.getMessageRef())) {
    Message message = bpmnModel.getMessage(messageEventDefinition.getMessageRef());
    messageEventDefinition.setMessageRef(message.getName());
  }

  MessageEventSubscriptionEntity newSubscription = getEventSubscriptionEntityManager().createMessageEventSubscription();
  newSubscription.setEventName(messageEventDefinition.getMessageRef());
  newSubscription.setActivityId(startEvent.getId());
  newSubscription.setConfiguration(previousProcessDefinition.getId());
  newSubscription.setProcessDefinitionId(previousProcessDefinition.getId());

  if (previousProcessDefinition.getTenantId() != null) {
    newSubscription.setTenantId(previousProcessDefinition.getTenantId());
  }

  getEventSubscriptionEntityManager().insert(newSubscription);
}
 
Example 2
Source File: MessageEventDefinitionParseHandler.java    From activiti6-boot2 with Apache License 2.0 6 votes vote down vote up
protected void executeParse(BpmnParse bpmnParse, MessageEventDefinition messageDefinition) {
  BpmnModel bpmnModel = bpmnParse.getBpmnModel();
  String messageRef = messageDefinition.getMessageRef();
  if (bpmnModel.containsMessageId(messageRef)) {
    Message message = bpmnModel.getMessage(messageRef);
    messageDefinition.setMessageRef(message.getName());
    messageDefinition.setExtensionElements(message.getExtensionElements());
  }

  if (bpmnParse.getCurrentFlowElement() instanceof IntermediateCatchEvent) {
    IntermediateCatchEvent intermediateCatchEvent = (IntermediateCatchEvent) bpmnParse.getCurrentFlowElement();
    intermediateCatchEvent.setBehavior(bpmnParse.getActivityBehaviorFactory().createIntermediateCatchMessageEventActivityBehavior(intermediateCatchEvent, messageDefinition));

  } else if (bpmnParse.getCurrentFlowElement() instanceof BoundaryEvent) {
    BoundaryEvent boundaryEvent = (BoundaryEvent) bpmnParse.getCurrentFlowElement();
    boundaryEvent.setBehavior(bpmnParse.getActivityBehaviorFactory().createBoundaryMessageEventActivityBehavior(boundaryEvent, messageDefinition, boundaryEvent.isCancelActivity()));
  }

  else {
    // What to do here?
  }

}
 
Example 3
Source File: StartEventParseHandler.java    From activiti6-boot2 with Apache License 2.0 5 votes vote down vote up
@Override
protected void executeParse(BpmnParse bpmnParse, StartEvent element) {
  if (element.getSubProcess() != null && element.getSubProcess() instanceof EventSubProcess) {
    if (CollectionUtil.isNotEmpty(element.getEventDefinitions())) {
      EventDefinition eventDefinition = element.getEventDefinitions().get(0);
      if (eventDefinition instanceof MessageEventDefinition) {
        MessageEventDefinition messageDefinition = (MessageEventDefinition) eventDefinition;
        BpmnModel bpmnModel = bpmnParse.getBpmnModel();
        String messageRef = messageDefinition.getMessageRef();
        if (bpmnModel.containsMessageId(messageRef)) {
          Message message = bpmnModel.getMessage(messageRef);
          messageDefinition.setMessageRef(message.getName());
          messageDefinition.setExtensionElements(message.getExtensionElements());
        }
        element.setBehavior(bpmnParse.getActivityBehaviorFactory().createEventSubProcessMessageStartEventActivityBehavior(element, messageDefinition));
      
      } else if (eventDefinition instanceof ErrorEventDefinition) {
        element.setBehavior(bpmnParse.getActivityBehaviorFactory().createEventSubProcessErrorStartEventActivityBehavior(element));
      }
    }
    
  } else if (CollectionUtil.isEmpty(element.getEventDefinitions())) {
    element.setBehavior(bpmnParse.getActivityBehaviorFactory().createNoneStartEventActivityBehavior(element));
  }
  
  if (element.getSubProcess() == null && (CollectionUtil.isEmpty(element.getEventDefinitions()) || 
      bpmnParse.getCurrentProcess().getInitialFlowElement() == null)) {

    bpmnParse.getCurrentProcess().setInitialFlowElement(element);
  }
}
 
Example 4
Source File: EventSubscriptionManager.java    From activiti6-boot2 with Apache License 2.0 5 votes vote down vote up
protected void insertMessageEvent(MessageEventDefinition messageEventDefinition, StartEvent startEvent, ProcessDefinitionEntity processDefinition, BpmnModel bpmnModel) {
  CommandContext commandContext = Context.getCommandContext();
  if (bpmnModel.containsMessageId(messageEventDefinition.getMessageRef())) {
    Message message = bpmnModel.getMessage(messageEventDefinition.getMessageRef());
    messageEventDefinition.setMessageRef(message.getName());
  }

  // look for subscriptions for the same name in db:
  List<EventSubscriptionEntity> subscriptionsForSameMessageName = commandContext.getEventSubscriptionEntityManager()
      .findEventSubscriptionsByName(MessageEventHandler.EVENT_HANDLER_TYPE, messageEventDefinition.getMessageRef(), processDefinition.getTenantId());


  for (EventSubscriptionEntity eventSubscriptionEntity : subscriptionsForSameMessageName) {
    // throw exception only if there's already a subscription as start event
    if (eventSubscriptionEntity.getProcessInstanceId() == null || eventSubscriptionEntity.getProcessInstanceId().isEmpty()) { // processInstanceId != null or not empty -> it's a message related to an execution
      // the event subscription has no instance-id, so it's a message start event
      throw new ActivitiException("Cannot deploy process definition '" + processDefinition.getResourceName()
      + "': there already is a message event subscription for the message with name '" + messageEventDefinition.getMessageRef() + "'.");
    }
  }

  MessageEventSubscriptionEntity newSubscription = commandContext.getEventSubscriptionEntityManager().createMessageEventSubscription();
  newSubscription.setEventName(messageEventDefinition.getMessageRef());
  newSubscription.setActivityId(startEvent.getId());
  newSubscription.setConfiguration(processDefinition.getId());
  newSubscription.setProcessDefinitionId(processDefinition.getId());

  if (processDefinition.getTenantId() != null) {
    newSubscription.setTenantId(processDefinition.getTenantId());
  }

  commandContext.getEventSubscriptionEntityManager().insert(newSubscription);
}
 
Example 5
Source File: OperationValidator.java    From activiti6-boot2 with Apache License 2.0 5 votes vote down vote up
@Override
public void validate(BpmnModel bpmnModel, List<ValidationError> errors) {
  if (bpmnModel.getInterfaces() != null) {
    for (Interface bpmnInterface : bpmnModel.getInterfaces()) {
      if (bpmnInterface.getOperations() != null) {
        for (Operation operation : bpmnInterface.getOperations()) {
          if (bpmnModel.getMessage(operation.getInMessageRef()) == null) {
            addError(errors, Problems.OPERATION_INVALID_IN_MESSAGE_REFERENCE, null, operation, "Invalid inMessageRef for operation");
          }
        }
      }
    }
  }
}
 
Example 6
Source File: MessageConverterTest.java    From activiti6-boot2 with Apache License 2.0 5 votes vote down vote up
private void validateModel(BpmnModel model) {
  Message message = model.getMessage("writeReport");
  assertNotNull(message);
  assertEquals("Examples:writeReportItem", message.getItemRef());
  assertEquals("newWriteReport", message.getName());
  assertEquals("writeReport", message.getId());

  Message message2 = model.getMessage("writeReport2");
  assertNotNull(message2);
  assertEquals("http://foo.bar.com/Examples:writeReportItem2", message2.getItemRef());
  assertEquals("newWriteReport2", message2.getName());
  assertEquals("writeReport2", message2.getId());
}
 
Example 7
Source File: BpmnJsonConverter.java    From activiti6-boot2 with Apache License 2.0 4 votes vote down vote up
private void postProcessElements(FlowElementsContainer parentContainer, Collection<FlowElement> flowElementList, Map<String, JsonNode> edgeMap, BpmnModel bpmnModel,
    Map<String, FlowWithContainer> allFlowMap, List<Gateway> gatewayWithOrderList) {

  for (FlowElement flowElement : flowElementList) {

    if (flowElement instanceof Event) {
      Event event = (Event) flowElement;
      if (CollectionUtils.isNotEmpty(event.getEventDefinitions())) {
        EventDefinition eventDef = event.getEventDefinitions().get(0);
        if (eventDef instanceof SignalEventDefinition) {
          SignalEventDefinition signalEventDef = (SignalEventDefinition) eventDef;
          if (StringUtils.isNotEmpty(signalEventDef.getSignalRef())) {
            if (bpmnModel.getSignal(signalEventDef.getSignalRef()) == null) {
              bpmnModel.addSignal(new Signal(signalEventDef.getSignalRef(), signalEventDef.getSignalRef()));
            }
          }

        } else if (eventDef instanceof MessageEventDefinition) {
          MessageEventDefinition messageEventDef = (MessageEventDefinition) eventDef;
          if (StringUtils.isNotEmpty(messageEventDef.getMessageRef())) {
            if (bpmnModel.getMessage(messageEventDef.getMessageRef()) == null) {
              bpmnModel.addMessage(new Message(messageEventDef.getMessageRef(), messageEventDef.getMessageRef(), null));
            }
          }
        }
      }
    }

    if (flowElement instanceof BoundaryEvent) {
      BoundaryEvent boundaryEvent = (BoundaryEvent) flowElement;
      Activity activity = retrieveAttachedRefObject(boundaryEvent.getAttachedToRefId(), parentContainer.getFlowElements());

      if (activity == null) {
        LOGGER.warn("Boundary event " + boundaryEvent.getId() + " is not attached to any activity");
      } else {
        boundaryEvent.setAttachedToRef(activity);
        activity.getBoundaryEvents().add(boundaryEvent);
      }

    } else if (flowElement instanceof Gateway) {
      if (flowElement.getExtensionElements().containsKey("EDITOR_FLOW_ORDER")) {
        gatewayWithOrderList.add((Gateway) flowElement);
      }

    } else if (flowElement instanceof SubProcess) {
      SubProcess subProcess = (SubProcess) flowElement;
      postProcessElements(subProcess, subProcess.getFlowElements(), edgeMap, bpmnModel, allFlowMap, gatewayWithOrderList);

    } else if (flowElement instanceof SequenceFlow) {
      SequenceFlow sequenceFlow = (SequenceFlow) flowElement;
      FlowElement sourceFlowElement = parentContainer.getFlowElement(sequenceFlow.getSourceRef());
      if (sourceFlowElement != null && sourceFlowElement instanceof FlowNode) {

        FlowWithContainer flowWithContainer = new FlowWithContainer(sequenceFlow, parentContainer);
        if (sequenceFlow.getExtensionElements().get("EDITOR_RESOURCEID") != null && sequenceFlow.getExtensionElements().get("EDITOR_RESOURCEID").size() > 0) {
          allFlowMap.put(sequenceFlow.getExtensionElements().get("EDITOR_RESOURCEID").get(0).getElementText(), flowWithContainer);
          sequenceFlow.getExtensionElements().remove("EDITOR_RESOURCEID");
        }

        ((FlowNode) sourceFlowElement).getOutgoingFlows().add(sequenceFlow);
        JsonNode edgeNode = edgeMap.get(sequenceFlow.getId());
        if (edgeNode != null) {
          boolean isDefault = JsonConverterUtil.getPropertyValueAsBoolean(PROPERTY_SEQUENCEFLOW_DEFAULT, edgeNode);
          if (isDefault) {
            if (sourceFlowElement instanceof Activity) {
              ((Activity) sourceFlowElement).setDefaultFlow(sequenceFlow.getId());
            } else if (sourceFlowElement instanceof Gateway) {
              ((Gateway) sourceFlowElement).setDefaultFlow(sequenceFlow.getId());
            }
          }
        }
      }
      FlowElement targetFlowElement = parentContainer.getFlowElement(sequenceFlow.getTargetRef());
      if (targetFlowElement != null && targetFlowElement instanceof FlowNode) {
        ((FlowNode) targetFlowElement).getIncomingFlows().add(sequenceFlow);
      }
    }
  }
}