public static boolean writeFieldExtensions(List<FieldExtension> fieldExtensions, boolean didWriteExtensionElement, XMLStreamWriter xtw) throws XMLStreamException { if (fieldExtensions.size() > 0) { if (!didWriteExtensionElement) { xtw.writeStartElement(CmmnXmlConstants.ELEMENT_EXTENSION_ELEMENTS); didWriteExtensionElement = true; } for (FieldExtension fieldExtension : fieldExtensions) { xtw.writeStartElement(CmmnXmlConstants.FLOWABLE_EXTENSIONS_PREFIX, CmmnXmlConstants.ELEMENT_FIELD, CmmnXmlConstants.FLOWABLE_EXTENSIONS_NAMESPACE); xtw.writeAttribute(CmmnXmlConstants.ATTRIBUTE_NAME, fieldExtension.getFieldName()); if (StringUtils.isNotEmpty(fieldExtension.getStringValue())) { xtw.writeStartElement(CmmnXmlConstants.FLOWABLE_EXTENSIONS_PREFIX, CmmnXmlConstants.ELEMENT_FIELD_STRING, CmmnXmlConstants.FLOWABLE_EXTENSIONS_NAMESPACE); xtw.writeCData(fieldExtension.getStringValue()); } else { xtw.writeStartElement(CmmnXmlConstants.FLOWABLE_EXTENSIONS_PREFIX, CmmnXmlConstants.ATTRIBUTE_FIELD_EXPRESSION, CmmnXmlConstants.FLOWABLE_EXTENSIONS_NAMESPACE); xtw.writeCData(fieldExtension.getExpression()); } xtw.writeEndElement(); xtw.writeEndElement(); } } return didWriteExtensionElement; }
protected List<DmnDecisionTable> getDecisionTablesFromModel(Case caseModel, CaseDefinition caseDefinition) { Set<String> decisionTableKeys = new HashSet<>(); List<DmnDecisionTable> decisionTables = new ArrayList<>(); List<DecisionTask> decisionTasks = caseModel.getPlanModel().findPlanItemDefinitionsOfType(DecisionTask.class, true); for (DecisionTask decisionTask : decisionTasks) { if (decisionTask.getFieldExtensions() != null && decisionTask.getFieldExtensions().size() > 0) { for (FieldExtension fieldExtension : decisionTask.getFieldExtensions()) { if ("decisionTableReferenceKey".equals(fieldExtension.getFieldName())) { String decisionTableReferenceKey = fieldExtension.getStringValue(); if (!decisionTableKeys.contains(decisionTableReferenceKey)) { addDecisionTableToCollection(decisionTables, decisionTableReferenceKey, caseDefinition); decisionTableKeys.add(decisionTableReferenceKey); } break; } } } } return decisionTables; }
@Override public CmmnActivityBehavior createHttpActivityBehavior(PlanItem planItem, ServiceTask task) { try { Class<?> theClass = null; FieldExtension behaviorExtension = null; for (FieldExtension fieldExtension : task.getFieldExtensions()) { if ("httpActivityBehaviorClass".equals(fieldExtension.getFieldName()) && StringUtils.isNotEmpty(fieldExtension.getStringValue())) { theClass = Class.forName(fieldExtension.getStringValue()); behaviorExtension = fieldExtension; break; } } if (behaviorExtension != null) { task.getFieldExtensions().remove(behaviorExtension); } // Default Http behavior class if (theClass == null) { theClass = Class.forName("org.flowable.http.cmmn.impl.CmmnHttpActivityBehaviorImpl"); } return (CmmnActivityBehavior) classDelegateFactory.defaultInstantiateDelegate(theClass, task); } catch (ClassNotFoundException e) { throw new FlowableException("Could not find org.flowable.http.HttpActivityBehavior: ", e); } }
protected String getFieldString(String fieldName) { for (FieldExtension fieldExtension : decisionTask.getFieldExtensions()) { if (fieldName.equals(fieldExtension.getFieldName())) { if (StringUtils.isNotEmpty(fieldExtension.getStringValue())) { return fieldExtension.getStringValue(); } else if (StringUtils.isNotEmpty(fieldExtension.getExpression())) { return fieldExtension.getExpression(); } } } return null; }
protected static Object defaultInstantiateDelegate(String className, ServiceTask serviceTask) { Object object = ReflectUtil.instantiate(className); for (FieldExtension extension : serviceTask.getFieldExtensions()) { String value; if (StringUtils.isEmpty(extension.getStringValue())) { value = extension.getExpression(); } else { value = extension.getStringValue(); } ReflectUtil.invokeSetterOrField(object, extension.getFieldName(), value, false); } if (serviceTask != null) { ReflectUtil.invokeSetterOrField(object, "serviceTask", serviceTask, false); } return object; }
protected static void applyFieldExtension(FieldExtension fieldExtension, Object target, VariableContainer variableContainer, boolean throwExceptionOnMissingField) { Object value = null; if (fieldExtension.getStringValue() != null) { value = fieldExtension.getStringValue(); } else if (fieldExtension.getExpression() != null) { ExpressionManager expressionManager = CommandContextUtil.getCmmnEngineConfiguration().getExpressionManager(); value = expressionManager.createExpression(fieldExtension.getExpression()); } ReflectUtil.invokeSetterOrField(target, fieldExtension.getFieldName(), value, throwExceptionOnMissingField); }
protected static void applyFieldExtension(FieldExtension fieldExtension, Object target, boolean throwExceptionOnMissingField) { Object value = null; if (fieldExtension.getStringValue() != null) { value = fieldExtension.getStringValue(); } else if (fieldExtension.getExpression() != null) { ExpressionManager expressionManager = CommandContextUtil.getCmmnEngineConfiguration().getExpressionManager(); value = expressionManager.createExpression(fieldExtension.getExpression()); } ReflectUtil.invokeSetterOrField(target, fieldExtension.getFieldName(), value, throwExceptionOnMissingField); }