protected boolean duplicateName(Collection<Signal> signals, String id, String name) { for (Signal signal : signals) { if (id != null && signal.getId() != null) { if (name.equals(signal.getName()) && !id.equals(signal.getId())) { return true; } } } return false; }
public IntermediateThrowSignalEventActivityBehavior(ThrowEvent throwEvent, SignalEventDefinition signalEventDefinition, Signal signal) { if (signal != null) { signalEventName = signal.getName(); if (Signal.SCOPE_PROCESS_INSTANCE.equals(signal.getScope())) { this.processInstanceScope = true; } } else if (StringUtils.isNotEmpty(signalEventDefinition.getSignalRef())) { signalEventName = signalEventDefinition.getSignalRef(); } else { signalExpression = signalEventDefinition.getSignalExpression(); } this.signalEventDefinition = signalEventDefinition; }
public static void convertSignalDefinitionsToJson(BpmnModel bpmnModel, ObjectNode propertiesNode) { if (bpmnModel.getSignals() != null) { ArrayNode signalDefinitions = objectMapper.createArrayNode(); for (Signal signal : bpmnModel.getSignals()) { ObjectNode signalNode = signalDefinitions.addObject(); signalNode.put(PROPERTY_SIGNAL_DEFINITION_ID, signal.getId()); signalNode.put(PROPERTY_SIGNAL_DEFINITION_NAME, signal.getName()); signalNode.put(PROPERTY_SIGNAL_DEFINITION_SCOPE, signal.getScope()); } propertiesNode.set(PROPERTY_SIGNAL_DEFINITIONS, signalDefinitions); } }
@Override public void validate(BpmnModel bpmnModel, List<ValidationError> errors) { Collection<Signal> signals = bpmnModel.getSignals(); if (signals != null && !signals.isEmpty()) { for (Signal signal : signals) { if (StringUtils.isEmpty(signal.getId())) { addError(errors, Problems.SIGNAL_MISSING_ID, signal, "Signal must have an id"); } if (StringUtils.isEmpty(signal.getName())) { addError(errors, Problems.SIGNAL_MISSING_NAME, signal, "Signal must have a name"); } if (!StringUtils.isEmpty(signal.getName()) && duplicateName(signals, signal.getId(), signal.getName())) { addError(errors, Problems.SIGNAL_DUPLICATE_NAME, signal, "Duplicate signal name found"); } if (signal.getScope() != null && !signal.getScope().equals(Signal.SCOPE_GLOBAL) && !signal.getScope().equals(Signal.SCOPE_PROCESS_INSTANCE)) { addError(errors, Problems.SIGNAL_INVALID_SCOPE, signal, "Invalid value for 'scope'. Only values 'global' and 'processInstance' are supported"); } } } }
public void setValues(Signal otherElement) { super.setValues(otherElement); setName(otherElement.getName()); setScope(otherElement.getScope()); } }
public void setValues(Signal otherElement) { super.setValues(otherElement); setName(otherElement.getName()); setScope(otherElement.getScope()); } }
protected ExecutionEntity deleteSignalEventSubscription(DelegateExecution execution) { ExecutionEntity executionEntity = (ExecutionEntity) execution; String eventName = null; if (signal != null) { eventName = signal.getName(); } else { eventName = signalEventDefinition.getSignalRef(); } EventSubscriptionEntityManager eventSubscriptionEntityManager = CommandContextUtil.getEventSubscriptionEntityManager(); List<EventSubscriptionEntity> eventSubscriptions = executionEntity.getEventSubscriptions(); for (EventSubscriptionEntity eventSubscription : eventSubscriptions) { if (eventSubscription instanceof SignalEventSubscriptionEntity && eventSubscription.getEventName().equals(eventName)) { eventSubscriptionEntityManager.delete(eventSubscription); } } return executionEntity; } }
xtw.writeStartElement(ELEMENT_SIGNAL); xtw.writeAttribute(ATTRIBUTE_ID, signal.getId()); xtw.writeAttribute(ATTRIBUTE_NAME, signal.getName()); if (signal.getScope() != null) { xtw.writeAttribute(FLOWABLE_EXTENSIONS_NAMESPACE, ATTRIBUTE_SCOPE, signal.getScope());
@Override public void trigger(DelegateExecution execution, String triggerName, Object triggerData) { ExecutionEntity executionEntity = (ExecutionEntity) execution; BoundaryEvent boundaryEvent = (BoundaryEvent) execution.getCurrentFlowElement(); if (boundaryEvent.isCancelActivity()) { String eventName = null; if (signal != null) { eventName = signal.getName(); } else { eventName = signalEventDefinition.getSignalRef(); } EventSubscriptionEntityManager eventSubscriptionEntityManager = CommandContextUtil.getEventSubscriptionEntityManager(); List<EventSubscriptionEntity> eventSubscriptions = executionEntity.getEventSubscriptions(); for (EventSubscriptionEntity eventSubscription : eventSubscriptions) { if (eventSubscription instanceof SignalEventSubscriptionEntity && eventSubscription.getEventName().equals(eventName)) { eventSubscriptionEntityManager.delete(eventSubscription); } } } super.trigger(executionEntity, triggerName, triggerData); } }
@Override public SignalEventSubscriptionEntity insertSignalEvent(String signalName, Signal signal, ExecutionEntity execution) { SignalEventSubscriptionEntity subscriptionEntity = createSignalEventSubscription(); subscriptionEntity.setExecution(execution); if (signal != null) { subscriptionEntity.setEventName(signal.getName()); if (signal.getScope() != null) { subscriptionEntity.setConfiguration(signal.getScope()); } } else { subscriptionEntity.setEventName(signalName); } subscriptionEntity.setActivityId(execution.getCurrentActivityId()); subscriptionEntity.setProcessDefinitionId(execution.getProcessDefinitionId()); if (execution.getTenantId() != null) { subscriptionEntity.setTenantId(execution.getTenantId()); } insert(subscriptionEntity); execution.getEventSubscriptions().add(subscriptionEntity); return subscriptionEntity; }
eventName = signal.getName(); } else { eventName = signalEventDefinition.getSignalRef();
protected void restoreSignalStartEvent(ProcessDefinition previousProcessDefinition, BpmnModel bpmnModel, StartEvent startEvent, EventDefinition eventDefinition) { SignalEventDefinition signalEventDefinition = (SignalEventDefinition) eventDefinition; SignalEventSubscriptionEntity subscriptionEntity = getEventSubscriptionEntityManager().createSignalEventSubscription(); Signal signal = bpmnModel.getSignal(signalEventDefinition.getSignalRef()); if (signal != null) { subscriptionEntity.setEventName(signal.getName()); } else { subscriptionEntity.setEventName(signalEventDefinition.getSignalRef()); } subscriptionEntity.setActivityId(startEvent.getId()); subscriptionEntity.setProcessDefinitionId(previousProcessDefinition.getId()); if (previousProcessDefinition.getTenantId() != null) { subscriptionEntity.setTenantId(previousProcessDefinition.getTenantId()); } getEventSubscriptionEntityManager().insert(subscriptionEntity); }
if (bpmnModel.containsSignalId(signalEventDefinition.getSignalRef())) { signal = bpmnModel.getSignal(signalEventDefinition.getSignalRef()); signalEventDefinition.setSignalRef(signal.getName());
protected void addSignalEventSubscriptions(CommandContext commandContext, ProcessDefinitionEntity processDefinition, org.flowable.bpmn.model.Process process, BpmnModel bpmnModel) { if (CollectionUtil.isNotEmpty(process.getFlowElements())) { for (FlowElement element : process.getFlowElements()) { if (element instanceof StartEvent) { StartEvent startEvent = (StartEvent) element; if (CollectionUtil.isNotEmpty(startEvent.getEventDefinitions())) { EventDefinition eventDefinition = startEvent.getEventDefinitions().get(0); if (eventDefinition instanceof SignalEventDefinition) { SignalEventDefinition signalEventDefinition = (SignalEventDefinition) eventDefinition; SignalEventSubscriptionEntity subscriptionEntity = CommandContextUtil.getEventSubscriptionEntityManager(commandContext).createSignalEventSubscription(); Signal signal = bpmnModel.getSignal(signalEventDefinition.getSignalRef()); if (signal != null) { subscriptionEntity.setEventName(signal.getName()); } else { subscriptionEntity.setEventName(signalEventDefinition.getSignalRef()); } subscriptionEntity.setActivityId(startEvent.getId()); subscriptionEntity.setProcessDefinitionId(processDefinition.getId()); if (processDefinition.getTenantId() != null) { subscriptionEntity.setTenantId(processDefinition.getTenantId()); } CommandContextUtil.getEventSubscriptionEntityManager(commandContext).insert(subscriptionEntity); } } } } } }
if (bpmnModel.containsSignalId(signalEventDefinition.getSignalRef())) { signal = bpmnModel.getSignal(signalEventDefinition.getSignalRef()); signalEventDefinition.setSignalRef(signal.getName());
if (bpmnParse.getBpmnModel().containsSignalId(signalDefinition.getSignalRef())) { signal = bpmnParse.getBpmnModel().getSignal(signalDefinition.getSignalRef()); String signalName = signal.getName(); signalDefinition.setSignalRef(signalName);