1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19 package org.apache.syncope.core.flowable.support;
20
21 import com.fasterxml.jackson.databind.JsonNode;
22 import java.util.ArrayList;
23 import java.util.List;
24 import org.apache.commons.lang3.StringUtils;
25 import org.flowable.bpmn.model.BaseElement;
26 import org.flowable.bpmn.model.FormProperty;
27 import org.flowable.bpmn.model.FormValue;
28 import org.flowable.bpmn.model.StartEvent;
29 import org.flowable.bpmn.model.UserTask;
30 import org.flowable.editor.language.json.converter.BpmnJsonConverterUtil;
31 import org.flowable.editor.language.json.converter.UserTaskJsonConverter;
32
33 public class DropdownAwareUserTaskJsonConverter extends UserTaskJsonConverter {
34
35 @Override
36 protected void convertJsonToFormProperties(final JsonNode objectNode, final BaseElement element) {
37 JsonNode formPropertiesNode = getProperty(PROPERTY_FORM_PROPERTIES, objectNode);
38 if (formPropertiesNode != null) {
39 formPropertiesNode = BpmnJsonConverterUtil.validateIfNodeIsTextual(formPropertiesNode);
40 JsonNode propertiesArray = formPropertiesNode.get("formProperties");
41 if (propertiesArray != null) {
42 for (JsonNode formNode : propertiesArray) {
43 JsonNode formIdNode = formNode.get(PROPERTY_FORM_ID);
44 if (formIdNode != null && StringUtils.isNotEmpty(formIdNode.asText())) {
45
46 FormProperty formProperty = new FormProperty();
47 formProperty.setId(formIdNode.asText());
48 formProperty.setName(getValueAsString(PROPERTY_FORM_NAME, formNode));
49 formProperty.setType(getValueAsString(PROPERTY_FORM_TYPE, formNode));
50 formProperty.setExpression(getValueAsString(PROPERTY_FORM_EXPRESSION, formNode));
51 formProperty.setVariable(getValueAsString(PROPERTY_FORM_VARIABLE, formNode));
52
53 if ("date".equalsIgnoreCase(formProperty.getType())) {
54 formProperty.setDatePattern(getValueAsString(PROPERTY_FORM_DATE_PATTERN, formNode));
55
56 } else if ("enum".equalsIgnoreCase(formProperty.getType())
57 || "dropdown".equalsIgnoreCase(formProperty.getType())) {
58
59 JsonNode enumValuesNode = formNode.get(PROPERTY_FORM_ENUM_VALUES);
60 if (enumValuesNode != null) {
61 List<FormValue> formValueList = new ArrayList<>();
62 for (JsonNode enumNode : enumValuesNode) {
63 if (enumNode.get(PROPERTY_FORM_ENUM_VALUES_ID) != null && !enumNode.get(
64 PROPERTY_FORM_ENUM_VALUES_ID).isNull() && enumNode.get(
65 PROPERTY_FORM_ENUM_VALUES_NAME) != null
66 && !enumNode.get(PROPERTY_FORM_ENUM_VALUES_NAME).isNull()) {
67
68 FormValue formValue = new FormValue();
69 formValue.setId(enumNode.get(PROPERTY_FORM_ENUM_VALUES_ID).asText());
70 formValue.setName(enumNode.get(PROPERTY_FORM_ENUM_VALUES_NAME).asText());
71 formValueList.add(formValue);
72
73 } else if (enumNode.get("value") != null && !enumNode.get("value").isNull()) {
74 FormValue formValue = new FormValue();
75 formValue.setId(enumNode.get("value").asText());
76 formValue.setName(enumNode.get("value").asText());
77 formValueList.add(formValue);
78 }
79 }
80 formProperty.setFormValues(formValueList);
81 }
82 }
83
84 formProperty.setRequired(getValueAsBoolean(PROPERTY_FORM_REQUIRED, formNode));
85 formProperty.setReadable(getValueAsBoolean(PROPERTY_FORM_READABLE, formNode));
86 formProperty.setWriteable(getValueAsBoolean(PROPERTY_FORM_WRITABLE, formNode));
87
88 if (element instanceof StartEvent) {
89 ((StartEvent) element).getFormProperties().add(formProperty);
90 } else if (element instanceof UserTask) {
91 ((UserTask) element).getFormProperties().add(formProperty);
92 }
93 }
94 }
95 }
96 }
97 }
98 }