package org.activiti.editor.language;
import static org.junit.Assert.assertEquals;
import static org.junit.Assert.assertNotNull;
import static org.junit.Assert.assertTrue;
import java.util.Calendar;
import java.util.Date;
import java.util.GregorianCalendar;
import java.util.List;
import org.activiti.bpmn.model.BooleanDataObject;
import org.activiti.bpmn.model.BpmnModel;
import org.activiti.bpmn.model.DateDataObject;
import org.activiti.bpmn.model.DoubleDataObject;
import org.activiti.bpmn.model.FlowElement;
import org.activiti.bpmn.model.IntegerDataObject;
import org.activiti.bpmn.model.LongDataObject;
import org.activiti.bpmn.model.StartEvent;
import org.activiti.bpmn.model.StringDataObject;
import org.activiti.bpmn.model.SubProcess;
import org.activiti.bpmn.model.ValuedDataObject;
import org.junit.Test;
public class ValuedDataObjectConverterTest extends AbstractConverterTest {
@Test
public void convertJsonToModel() throws Exception {
BpmnModel bpmnModel = readJsonFile();
validateModel(bpmnModel);
}
@Test
public void doubleConversionValidation() throws Exception {
BpmnModel bpmnModel = readJsonFile();
bpmnModel = convertToJsonAndBack(bpmnModel);
validateModel(bpmnModel);
}
protected String getResource() {
return "test.valueddataobjectmodel.json";
}
private void validateModel(BpmnModel model) {
FlowElement flowElement = model.getMainProcess().getFlowElement("start1");
assertNotNull(flowElement);
assertTrue(flowElement instanceof StartEvent);
assertEquals("start1", flowElement.getId());
// verify main process data objects
List<ValuedDataObject> dataObjects = model.getMainProcess().getDataObjects();
assertEquals(6, dataObjects.size());
for (ValuedDataObject dObj : dataObjects) {
if ("dObj1".equals(dObj.getId())) {
assertEquals(StringDataObject.class, dObj.getClass());
assertEquals("StringTest", dObj.getName());
assertTrue(dObj.getValue() instanceof String);
assertEquals("xsd:string", dObj.getItemSubjectRef().getStructureRef());
assertEquals("Testing123", dObj.getValue());
} else if ("dObj2".equals(dObj.getId())) {
assertEquals(BooleanDataObject.class, dObj.getClass());
assertEquals("BooleanTest", dObj.getName());
assertEquals("xsd:boolean", dObj.getItemSubjectRef().getStructureRef());
assertTrue(dObj.getValue() instanceof Boolean);
assertEquals(new Boolean(true), dObj.getValue());
} else if ("dObj3".equals(dObj.getId())) {
assertEquals(DateDataObject.class, dObj.getClass());
assertEquals("DateTest", dObj.getName());
assertEquals("xsd:datetime", dObj.getItemSubjectRef().getStructureRef());
assertTrue(dObj.getValue() instanceof Date);
GregorianCalendar dateCal = new GregorianCalendar();
dateCal.setTime((Date) dObj.getValue());
assertEquals(2013, dateCal.get(Calendar.YEAR));
assertEquals(8, dateCal.get(Calendar.MONTH));
assertEquals(16, dateCal.get(Calendar.DAY_OF_MONTH));
assertEquals(11, dateCal.get(Calendar.HOUR_OF_DAY));
assertEquals(23, dateCal.get(Calendar.MINUTE));
} else if ("dObj4".equals(dObj.getId())) {
assertEquals(DoubleDataObject.class, dObj.getClass());
assertEquals("DoubleTest", dObj.getName());
assertEquals("xsd:double", dObj.getItemSubjectRef().getStructureRef());
assertTrue(dObj.getValue() instanceof Double);
assertEquals(new Double(123456789), dObj.getValue());
} else if ("dObj5".equals(dObj.getId())) {
assertEquals(IntegerDataObject.class, dObj.getClass());
assertEquals("IntegerTest", dObj.getName());
assertEquals("xsd:int", dObj.getItemSubjectRef().getStructureRef());
assertTrue(dObj.getValue() instanceof Integer);
assertEquals(new Integer(123), dObj.getValue());
} else if ("dObj6".equals(dObj.getId())) {
assertEquals(LongDataObject.class, dObj.getClass());
assertEquals("LongTest", dObj.getName());
assertEquals("xsd:long", dObj.getItemSubjectRef().getStructureRef());
assertTrue(dObj.getValue() instanceof Long);
assertEquals(new Long(-123456), dObj.getValue());
}
}
flowElement = model.getMainProcess().getFlowElement("subprocess1");
assertNotNull(flowElement);
assertTrue(flowElement instanceof SubProcess);
assertEquals("subprocess1", flowElement.getId());
SubProcess subProcess = (SubProcess) flowElement;
assertEquals(11, subProcess.getFlowElements().size());
// verify subprocess data objects
dataObjects = ((SubProcess)flowElement).getDataObjects();
assertEquals(6, dataObjects.size());
for (ValuedDataObject dObj : dataObjects) {
if ("dObj1".equals(dObj.getId())) {
assertEquals(StringDataObject.class, dObj.getClass());
assertEquals("SubStringTest", dObj.getName());
assertTrue(dObj.getValue() instanceof String);
assertEquals("xsd:string", dObj.getItemSubjectRef().getStructureRef());
assertEquals("Testing456", dObj.getValue());
} else if ("dObj2".equals(dObj.getId())) {
assertEquals(BooleanDataObject.class, dObj.getClass());
assertEquals("SubBooleanTest", dObj.getName());
assertEquals("xsd:boolean", dObj.getItemSubjectRef().getStructureRef());
assertTrue(dObj.getValue() instanceof Boolean);
assertEquals(new Boolean(false), dObj.getValue());
} else if ("dObj3".equals(dObj.getId())) {
assertEquals(DateDataObject.class, dObj.getClass());
assertEquals("SubDateTest", dObj.getName());
assertEquals("xsd:datetime", dObj.getItemSubjectRef().getStructureRef());
assertTrue(dObj.getValue() instanceof Date);
GregorianCalendar dateCal = new GregorianCalendar();
dateCal.setTime((Date) dObj.getValue());
assertEquals(2013, dateCal.get(Calendar.YEAR));
assertEquals(10, dateCal.get(Calendar.MONTH));
assertEquals(11, dateCal.get(Calendar.DAY_OF_MONTH));
} else if ("dObj4".equals(dObj.getId())) {
assertEquals(DoubleDataObject.class, dObj.getClass());
assertEquals("SubDoubleTest", dObj.getName());
assertEquals("xsd:double", dObj.getItemSubjectRef().getStructureRef());
assertTrue(dObj.getValue() instanceof Double);
assertEquals(new Double(678912345), dObj.getValue());
} else if ("dObj5".equals(dObj.getId())) {
assertEquals(IntegerDataObject.class, dObj.getClass());
assertEquals("SubIntegerTest", dObj.getName());
assertEquals("xsd:int", dObj.getItemSubjectRef().getStructureRef());
assertTrue(dObj.getValue() instanceof Integer);
assertEquals(new Integer(45), dObj.getValue());
} else if ("dObj6".equals(dObj.getId())) {
assertEquals(LongDataObject.class, dObj.getClass());
assertEquals("SubLongTest", dObj.getName());
assertEquals("xsd:long", dObj.getItemSubjectRef().getStructureRef());
assertTrue(dObj.getValue() instanceof Long);
assertEquals(new Long(456123), dObj.getValue());
assertEquals(1, dObj.getExtensionElements().size());
}
}
}
}