private StringBuffer generateFlowTriggerRule(Event event, String... flowIds) throws WorkflowException { StringBuffer ruleCode = new StringBuffer(); ruleCode.append(String.format(FLOW_TRIGGER_RULE_TEMPLATE_START, event.getClass().getName(), event.getName())); addOtherPropertyChecks(event, ruleCode); for (String flowId : flowIds) { ruleCode.append(String.format(START_FLOW_CONSEQUENCE_LINE, flowId)); } return ruleCode; }
@Override public Long getProcessId(Event e) { if (e == null) { return null; } return e.getProcessId(); }
/** * @deprecated see {@link Event#getType()} */ @Deprecated @Override public String getType() { if (type != null) { return type; } else { return super.getType(); } }
public static <T> T getResponseProxy(Event e, Class<T> targetClass) { String origin = e.getOrigin(); String filter = String.format("(%s=%s)", Constants.ID_KEY, origin); return utilsService.getOsgiServiceProxy(filter, targetClass); }
@Override public String toString() { try { BeanInfo beanInfo = Introspector.getBeanInfo(this.getClass()); PropertyDescriptor[] propertyDescriptors = beanInfo.getPropertyDescriptors(); StringBuilder builder = new StringBuilder(); builder.append("Event Properties =>"); for (PropertyDescriptor propertyDescriptor : propertyDescriptors) { String name = propertyDescriptor.getName(); Object invoke = propertyDescriptor.getReadMethod().invoke(this); builder.append(" " + name + ":" + invoke + ";"); } return builder.toString(); } catch (IntrospectionException e) { return returnSimpleEventString(); } catch (IllegalArgumentException e) { return returnSimpleEventString(); } catch (IllegalAccessException e) { return returnSimpleEventString(); } catch (InvocationTargetException e) { return returnSimpleEventString(); } }
public static <T> T getResponseProxy(Event e, Class<T> targetClass) { String origin = e.getOrigin(); String filter = String.format("(%s=%s)", org.osgi.framework.Constants.SERVICE_PID, origin); return utilsService.getOsgiServiceProxy(filter, targetClass); }
@Override public String toString() { try { BeanInfo beanInfo = Introspector.getBeanInfo(this.getClass()); PropertyDescriptor[] propertyDescriptors = beanInfo.getPropertyDescriptors(); StringBuilder builder = new StringBuilder(); builder.append("Event Properties =>"); for (PropertyDescriptor propertyDescriptor : propertyDescriptors) { String name = propertyDescriptor.getName(); Object invoke = propertyDescriptor.getReadMethod().invoke(this); builder.append(" " + name + ":" + invoke + ";"); } return builder.toString(); } catch (IntrospectionException e) { return returnSimpleEventString(); } catch (IllegalArgumentException e) { return returnSimpleEventString(); } catch (IllegalAccessException e) { return returnSimpleEventString(); } catch (InvocationTargetException e) { return returnSimpleEventString(); } }
private StringBuffer generateFlowTriggerRule(Event event, String... flowIds) throws WorkflowException { StringBuffer ruleCode = new StringBuffer(); ruleCode.append(String.format(FLOW_TRIGGER_RULE_TEMPLATE_START, event.getClass().getName(), event.getName())); addOtherPropertyChecks(event, ruleCode); for (String flowId : flowIds) { ruleCode.append(String.format(START_FLOW_CONSEQUENCE_LINE, flowId)); } return ruleCode; }
@SuppressWarnings("deprecation") // will be removed in 3.0 (OPENENGSB-2789) private void signalEventToProcesses(Event event, StatefulKnowledgeSession session, Set<Long> processIds) { for (Long pid : processIds) { ProcessInstance processInstance = session.getProcessInstance(pid); if (processInstance == null) { LOGGER.warn("processInstance with ID {} not found, maybe it already terminated", pid); } else { processInstance.signalEvent(event.getType(), event); } } }
private Set<Long> retrieveRelevantProcessInstanceIds(Event event, StatefulKnowledgeSession session) { Set<Long> processIds = new HashSet<Long>(); Long processIdFromEvent = event.getProcessId(); if (processIdFromEvent != null) { processIds.add(processIdFromEvent); processIds.addAll(getSubFlows(session.getProcessInstance(processIdFromEvent))); } if (event instanceof InternalWorkflowEvent) { ProcessBag bag = ((InternalWorkflowEvent) event).getProcessBag(); Long processIdFromBag = Long.parseLong(bag.getProcessId()); processIds.add(processIdFromBag); processIds.addAll(getSubFlows(session.getProcessInstance(processIdFromBag))); } return processIds; }
@Override public void registerFlowTriggerEvent(Event event, String... flowIds) throws WorkflowException { String eventName = event.getName(); String ruleName = String.format("_generated_ trigger %s on %s", Arrays.asList(flowIds), eventName); StringBuffer ruleCode = generateFlowTriggerRule(event, flowIds); LOGGER.info("adding new rule with id: {}", ruleName); try { rulemanager.add(new RuleBaseElementId(RuleBaseElementType.Rule, ruleName), ruleCode.toString()); } catch (RuleBaseException e) { throw new WorkflowException(e); } }
private EventType guessEventType(Event e) { String classname; if (e.getType() != null) { classname = e.getType().toLowerCase(); } else { classname = e.getClass().getSimpleName().toLowerCase(); } EventType type = new EventType(); if (classname.contains("start")) { type.setValue(Eventtypes.START); } else if (classname.contains("end")) { type.setValue(Eventtypes.COMPLETE); } else if (classname.contains("success")) { type.setValue(Eventtypes.COMPLETE); } else if (classname.contains("fail")) { type.setValue(Eventtypes.PI_ABORT); } else { type.setValue(Eventtypes.UNKNOWN); type.setUnknowntype(classname); } return type; }
private Set<Long> retrieveRelevantProcessInstanceIds(Event event, StatefulKnowledgeSession session) { Set<Long> processIds = new HashSet<Long>(); Long processIdFromEvent = event.getProcessId(); if (processIdFromEvent != null) { processIds.add(processIdFromEvent); processIds.addAll(getSubFlows(session.getProcessInstance(processIdFromEvent))); } if (event instanceof InternalWorkflowEvent) { ProcessBag bag = ((InternalWorkflowEvent) event).getProcessBag(); Long processIdFromBag = Long.parseLong(bag.getProcessId()); processIds.add(processIdFromBag); processIds.addAll(getSubFlows(session.getProcessInstance(processIdFromBag))); } return processIds; }
@Override public void registerFlowTriggerEvent(Event event, String... flowIds) throws WorkflowException { String eventName = event.getName(); String ruleName = String.format("_generated_ trigger %s on %s", Arrays.asList(flowIds), eventName); StringBuffer ruleCode = generateFlowTriggerRule(event, flowIds); LOGGER.info("adding new rule with id: {}", ruleName); try { rulemanager.add(new RuleBaseElementId(RuleBaseElementType.Rule, ruleName), ruleCode.toString()); } catch (RuleBaseException e) { throw new WorkflowException(e); } }
@SuppressWarnings("deprecation") // will be removed in 3.0 (OPENENGSB-2789) @Override public void processEvent(Event event) throws WorkflowException { LOGGER.info("processing Event {} of type {}", event, event.getClass()); StatefulKnowledgeSession session = getSessionForCurrentContext(); FactHandle factHandle = null; try { factHandle = session.insert(event); workflowLock.lock(); try { session.fireAllRules(); } catch (ConsequenceException e) { throw new WorkflowException("ConsequenceException occured while processing event", e.getCause()); } finally { workflowLock.unlock(); } Set<Long> processIds = retrieveRelevantProcessInstanceIds(event, session); if (processIds.isEmpty()) { for (ProcessInstance p : session.getProcessInstances()) { p.signalEvent(event.getType(), event); } } else { signalEventToProcesses(event, session, processIds); } } finally { session.retract(factHandle); } }
@Override public AuditTrailEntry transform(Event e) { if (e == null) { return null; } AuditTrailEntry aent = new AuditTrailEntry(); Data data = new Data(); for (Data.Attribute a : getData(e)) { data.getAttribute().add(a); } aent.setData(data); if (e.getName() == null) { aent.setWorkflowModelElement("unknown"); } else { aent.setWorkflowModelElement(e.getName()); } aent.setEventType(guessEventType(e)); if (dataTypeFactory != null) { AuditTrailEntry.Timestamp timestamp = new AuditTrailEntry.Timestamp(); timestamp.setValue(getCalendar()); aent.setTimestamp(timestamp); } return aent; }