use of org.camunda.bpm.engine.variable.type.ValueTypeResolver in project camunda-bpm-platform by camunda.
the class VariableValueDto method toTypedValue.
public TypedValue toTypedValue(ProcessEngine processEngine, ObjectMapper objectMapper) {
ValueTypeResolver valueTypeResolver = processEngine.getProcessEngineConfiguration().getValueTypeResolver();
if (type == null) {
if (valueInfo != null && valueInfo.get(ValueType.VALUE_INFO_TRANSIENT) instanceof Boolean) {
return Variables.untypedValue(value, (Boolean) valueInfo.get(ValueType.VALUE_INFO_TRANSIENT));
}
return Variables.untypedValue(value);
}
ValueType valueType = valueTypeResolver.typeForName(fromRestApiTypeName(type));
if (valueType == null) {
throw new RestException(Status.BAD_REQUEST, String.format("Unsupported value type '%s'", type));
} else {
if (valueType instanceof PrimitiveValueType) {
PrimitiveValueType primitiveValueType = (PrimitiveValueType) valueType;
Class<?> javaType = primitiveValueType.getJavaType();
Object mappedValue = null;
try {
if (value != null) {
if (javaType.isAssignableFrom(value.getClass())) {
mappedValue = value;
} else {
// use jackson to map the value to the requested java type
mappedValue = objectMapper.readValue("\"" + value + "\"", javaType);
}
}
return valueType.createValue(mappedValue, valueInfo);
} catch (Exception e) {
throw new InvalidRequestException(Status.BAD_REQUEST, e, String.format("Cannot convert value '%s' of type '%s' to java type %s", value, type, javaType.getName()));
}
} else if (valueType instanceof SerializableValueType) {
if (value != null && !(value instanceof String)) {
throw new InvalidRequestException(Status.BAD_REQUEST, "Must provide 'null' or String value for value of SerializableValue type '" + type + "'.");
}
return ((SerializableValueType) valueType).createValueFromSerialized((String) value, valueInfo);
} else if (valueType instanceof FileValueType) {
if (value instanceof String) {
value = Base64.decodeBase64((String) value);
}
return valueType.createValue(value, valueInfo);
} else {
return valueType.createValue(value, valueInfo);
}
}
}
use of org.camunda.bpm.engine.variable.type.ValueTypeResolver in project camunda-bpm-platform by camunda.
the class SpinProcessEnginePlugin method registerValueTypes.
protected void registerValueTypes(ProcessEngineConfigurationImpl processEngineConfiguration) {
ValueTypeResolver resolver = processEngineConfiguration.getValueTypeResolver();
resolver.addType(JSON);
resolver.addType(XML);
}
use of org.camunda.bpm.engine.variable.type.ValueTypeResolver in project camunda-bpm-platform by camunda.
the class CompositeQueryVariableValueCondition method initializeValue.
public void initializeValue(VariableSerializers serializers) {
TypedValue typedValue = wrappedQueryValue.getTypedValue();
ValueTypeResolver resolver = Context.getProcessEngineConfiguration().getValueTypeResolver();
Collection<ValueType> concreteTypes = resolver.getSubTypes(typedValue.getType());
for (ValueType type : concreteTypes) {
if (type.canConvertFromTypedValue(typedValue)) {
TypedValue convertedValue = type.convertFromTypedValue(typedValue);
SingleQueryVariableValueCondition aggregatedValue = new SingleQueryVariableValueCondition(wrappedQueryValue);
aggregatedValue.initializeValue(serializers, convertedValue);
aggregatedValues.add(aggregatedValue);
}
}
}
Aggregations