提交 c35e987d 编写于 作者: T tombaeyens

ACT-258 form property handling

上级 b4ab7901
......@@ -25,12 +25,12 @@ import org.activiti.engine.ActivitiException;
*/
public class DateFormType extends AbstractFormType {
protected String pattern;
protected String datePattern;
protected Format dateFormat;
public DateFormType(String simpleDateFormatPattern) {
this.pattern = simpleDateFormatPattern;
this.dateFormat = new SimpleDateFormat(simpleDateFormatPattern);
public DateFormType(String datePattern) {
this.datePattern = datePattern;
this.dateFormat = new SimpleDateFormat(datePattern);
}
public String getName() {
......@@ -38,8 +38,8 @@ public class DateFormType extends AbstractFormType {
}
public Object getInformation(String key) {
if ("pattern".equals(key)) {
return pattern;
if ("datePattern".equals(key)) {
return datePattern;
}
return null;
}
......
......@@ -55,24 +55,24 @@ public class DefaultFormHandler {
List<Element> formPropertyElements = extensionElement.elementsNS(BpmnParser.BPMN_EXTENSIONS_NS, "formProperty");
for (Element formPropertyElement : formPropertyElements) {
FormPropertyHandler formProperty = new FormPropertyHandler();
FormPropertyHandler formPropertyHandler = new FormPropertyHandler();
String id = formPropertyElement.attribute("http://activiti.org/bpmn-extensions:id");
if (id==null) {
bpmnParse.addError("attribute 'id' is required", formPropertyElement);
}
formProperty.setId(id);
formPropertyHandler.setId(id);
String name = formPropertyElement.attribute("http://activiti.org/bpmn-extensions:name");
formProperty.setName(name);
formPropertyHandler.setName(name);
AbstractFormType type = formTypes.parseFormPropertyType(formPropertyElement, bpmnParse);
formProperty.setType(type);
formPropertyHandler.setType(type);
String requiredText = formPropertyElement.attribute("http://activiti.org/bpmn-extensions:required", "false");
Boolean required = bpmnParse.parseBooleanAttribute(requiredText);
if (required!=null) {
formProperty.setRequired(required);
formPropertyHandler.setRequired(required);
} else {
bpmnParse.addError("attribute 'required' must be one of {on|yes|true|enabled|active|off|no|false|disabled|inactive}", formPropertyElement);
}
......@@ -80,7 +80,7 @@ public class DefaultFormHandler {
String readableText = formPropertyElement.attribute("readable", "true");
Boolean readable = bpmnParse.parseBooleanAttribute(readableText);
if (readable!=null) {
formProperty.setReadable(readable);
formPropertyHandler.setReadable(readable);
} else {
bpmnParse.addError("attribute 'readable' must be one of {on|yes|true|enabled|active|off|no|false|disabled|inactive}", formPropertyElement);
}
......@@ -88,21 +88,21 @@ public class DefaultFormHandler {
String writableText = formPropertyElement.attribute("http://activiti.org/bpmn-extensions:writable", "true");
Boolean writable = bpmnParse.parseBooleanAttribute(writableText);
if (writable!=null) {
formProperty.setWritable(writable);
formPropertyHandler.setWritable(writable);
} else {
bpmnParse.addError("attribute 'writable' must be one of {on|yes|true|enabled|active|off|no|false|disabled|inactive}", formPropertyElement);
}
String variableName = formPropertyElement.attribute("http://activiti.org/bpmn-extensions:variable");
formProperty.setVariableName(variableName);
formPropertyHandler.setVariableName(variableName);
String valueExpressionText = formPropertyElement.attribute("http://activiti.org/bpmn-extensions:expression");
if (valueExpressionText!=null) {
ActivitiValueExpression valueExpression = expressionManager.createValueExpression(valueExpressionText);
formProperty.setVariableExpression(valueExpression);
formPropertyHandler.setVariableExpression(valueExpression);
}
formPropertyHandlers.add(formProperty);
formPropertyHandlers.add(formPropertyHandler);
}
}
}
......
......@@ -30,6 +30,7 @@ public class DefaultStartFormHandler extends DefaultFormHandler implements Start
startFormData.setFormKey(formKey);
startFormData.setDeploymentId(deploymentId);
startFormData.setProcessDefinition(processDefinition);
initializeFormProperties(startFormData, null);
return startFormData;
}
......
......@@ -38,20 +38,21 @@ public class FormPropertyHandler {
public FormProperty createFormProperty(ExecutionEntity execution) {
FormPropertyImpl formProperty = new FormPropertyImpl(this);
Object modelValue = null;
if (variableName!=null) {
modelValue = execution.getVariable(variableName);
} else if (variableExpression!=null) {
modelValue = variableExpression.getValue(execution);
} else {
modelValue = execution.getVariable(id);
}
if (type!=null) {
String formValue = type.convertModelValueToFormValue(modelValue);
formProperty.setValue(formValue);
} else if (modelValue!=null) {
formProperty.setValue(modelValue.toString());
if (execution!=null) {
Object modelValue = null;
if (variableName != null) {
modelValue = execution.getVariable(variableName);
} else if (variableExpression != null) {
modelValue = variableExpression.getValue(execution);
} else {
modelValue = execution.getVariable(id);
}
if (type != null) {
String formValue = type.convertModelValueToFormValue(modelValue);
formProperty.setValue(formValue);
} else if (modelValue != null) {
formProperty.setValue(modelValue.toString());
}
}
return formProperty;
......
......@@ -35,20 +35,24 @@ public class FormTypes {
AbstractFormType formType = null;
String typeText = formPropertyElement.attribute("http://activiti.org/bpmn-extensions:type");
if (typeText!=null) {
String datePatternText = formPropertyElement.attribute("http://activiti.org/bpmn-extensions:datePattern");
if ("date".equals(typeText) && datePatternText!=null) {
formType = new DateFormType(datePatternText);
} else if ("enum".equals(typeText)) {
Map<String, String> values = new HashMap<String, String>();
for (Element valueElement: formPropertyElement.elementsNS("http://activiti.org/bpmn-extensions","value")) {
String valueId = valueElement.attribute("http://activiti.org/bpmn-extensions:id");
String valueName = valueElement.attribute("http://activiti.org/bpmn-extensions:name");
values.put(valueId, valueName);
}
formType = new EnumFormType(values);
} else if (typeText!=null) {
formType = formTypes.get(typeText);
if (formType==null) {
if ("enum".equals(formType)) {
Map<String, String> values = new HashMap<String, String>();
for (Element valueElement: formPropertyElement.elements("value")) {
String valueId = valueElement.attribute("id");
String valueName = valueElement.attribute("name");
values.put(valueId, valueName);
}
formType = new EnumFormType(values);
} else {
bpmnParse.addError("unknown type '"+typeText+"'", formPropertyElement);
}
bpmnParse.addError("unknown type '"+typeText+"'", formPropertyElement);
}
}
return formType;
......
......@@ -153,4 +153,42 @@ public class FormsTest extends ActivitiInternalTestCase {
assertEquals("rubensstraat", address.getStreet());
assertEquals(expectedVariables, variables);
}
@SuppressWarnings("unchecked")
@Deployment
public void testFormPropertyDetails() {
StartFormData startFormData = formService.getStartFormData("FormPropertyDetails:1");
FormProperty property = startFormData.getFormProperties().get(0);
assertEquals("speaker", property.getId());
assertNull(property.getValue());
assertTrue(property.isReadable());
assertTrue(property.isWritable());
assertFalse(property.isRequired());
assertEquals("string", property.getType().getName());
property = startFormData.getFormProperties().get(1);
assertEquals("start", property.getId());
assertNull(property.getValue());
assertTrue(property.isReadable());
assertTrue(property.isWritable());
assertFalse(property.isRequired());
assertEquals("date", property.getType().getName());
assertEquals("dd-MMM-yyyy", property.getType().getInformation("datePattern"));
property = startFormData.getFormProperties().get(2);
assertEquals("direction", property.getId());
assertNull(property.getValue());
assertTrue(property.isReadable());
assertTrue(property.isWritable());
assertFalse(property.isRequired());
assertEquals("enum", property.getType().getName());
Map<String, String> values = (Map) property.getType().getInformation("values");
Map<String, String> expectedValues = new HashMap<String, String>();
expectedValues.put("left", "Go Left");
expectedValues.put("right", "Go Right");
expectedValues.put("up", "Go Up");
expectedValues.put("down", "Go Down");
assertEquals(expectedValues, values);
}
}
<?xml version="1.0" encoding="UTF-8" ?>
<definitions id="definitions"
targetNamespace="http://activiti.org/bpmn20"
xmlns="http://www.omg.org/spec/BPMN/20100524/MODEL"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:a="http://activiti.org/bpmn-extensions">
<process id="FormPropertyDetails">
<startEvent id="start">
<extensionElements>
<a:formProperty a:id="speaker"
a:name="Speaker"
a:variable="SpeakerName"
a:type="string" />
<a:formProperty a:id="start"
a:type="date"
a:datePattern="dd-MMM-yyyy" />
<a:formProperty a:id="direction"
a:type="enum">
<a:value a:id="left" a:name="Go Left" />
<a:value a:id="right" a:name="Go Right" />
<a:value a:id="up" a:name="Go Up" />
<a:value a:id="down" a:name="Go Down" />
</a:formProperty>
</extensionElements>
</startEvent>
</process>
</definitions>
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册