View Javadoc
1   /*
2    * Licensed to the Apache Software Foundation (ASF) under one
3    * or more contributor license agreements.  See the NOTICE file
4    * distributed with this work for additional information
5    * regarding copyright ownership.  The ASF licenses this file
6    * to you under the Apache License, Version 2.0 (the
7    * "License"); you may not use this file except in compliance
8    * with the License.  You may obtain a copy of the License at
9    *
10   *   http://www.apache.org/licenses/LICENSE-2.0
11   *
12   * Unless required by applicable law or agreed to in writing,
13   * software distributed under the License is distributed on an
14   * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
15   * KIND, either express or implied.  See the License for the
16   * specific language governing permissions and limitations
17   * under the License.
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  }