public DataType getTypeByValue(Object value) { if (value==null) { return null; } Class<?> valueClass = value.getClass(); if (String.class.isAssignableFrom(valueClass)) { return new TextType(); } if (Number.class.isAssignableFrom(valueClass)) { return new NumberType(); } if (Collection.class.isAssignableFrom(valueClass)) { ListType listType = new ListType(); Iterator iterator = ((Collection)value).iterator(); if (iterator.hasNext()) { Object elementValue = iterator.next(); DataType elementType = getTypeByValue(elementValue); listType.elementType(elementType); } return listType; } else if (javaBeanTypes.containsKey(valueClass)) { return new JavaBeanType(valueClass); } throw new RuntimeException("No data type found for value "+value+" ("+valueClass.getName()+")"); }
@Override public Object readBpmnValue(BpmnReader r) { return parseValue(r.readStringAttributeEffektif("value")); }
@Test public void testListOfNumbersType() { ExecutableWorkflow workflow = new ExecutableWorkflow() .variable("v", new ListType(new NumberType())); deploy(workflow); WorkflowInstance workflowInstance = workflowEngine.start(new TriggerInstance() .workflowId(workflow.getId()) .data("v", Lists.of(5, 6))); GenericType genericType = new GenericType(List.class, Long.class); List<Long> listOfNumbers = workflowInstance.getVariableValue("v", genericType); assertEquals(new Long(5), listOfNumbers.get(0)); assertEquals(new Long(6), listOfNumbers.get(1)); }
@Override public Object readBpmnValue(BpmnReader r) { return parseValue(r.readStringAttributeEffektif("value")); }
@Test public void testNumberType() { ExecutableWorkflow workflow = new ExecutableWorkflow() .variable("v", new NumberType()); deploy(workflow); WorkflowInstance workflowInstance = workflowEngine.start(new TriggerInstance() .workflowId(workflow.getId()) .data("v", 5)); assertEquals(new Long(5), workflowInstance.getVariableValue("v", Long.class)); }
@Test public void testExclusiveGateway() { ExecutableWorkflow workflow = new ExecutableWorkflow() .variable("v", new NumberType()) .activity("start", new StartEvent() .transitionTo("?"))
public void testAndXorCombinationWithLooseEnd() { ExecutableWorkflow workflow = new ExecutableWorkflow() .variable("dealSize", new NumberType()) .activity("start", new StartEvent().transitionTo("fork")) .activity("fork", new ParallelGateway()
public void testAndXorCombination() { ExecutableWorkflow workflow = new ExecutableWorkflow() .variable("dealSize", new NumberType()) .activity("start", new StartEvent().transitionTo("fork")) .activity("fork", new ParallelGateway()