
com.xlrit.gears.engine.flowable.GearsObjectSerializer Maven / Gradle / Ivy
package com.xlrit.gears.engine.flowable;
import static com.google.common.base.Preconditions.*;
import com.xlrit.gears.engine.meta.PrintOptions;
import org.flowable.variable.api.types.ValueFields;
import com.fasterxml.jackson.databind.JsonNode;
import com.fasterxml.jackson.databind.ObjectMapper;
import com.xlrit.gears.engine.meta.MetaManager;
import com.xlrit.gears.engine.meta.TypeInfo;
public class GearsObjectSerializer extends AbstractGearsSerializer {
public static final String NAME = "gears-object";
private final MetaManager metaManager;
public GearsObjectSerializer(MetaManager metaManager, ObjectMapper objectMapper) {
super(NAME, objectMapper);
this.metaManager = checkNotNull(metaManager);
}
@Override
protected boolean canWriteObject(Object value) {
// needs to be able to store anything that's not handled by the previous serializers
return !(
value == null
|| value instanceof String
|| value instanceof Boolean
|| value instanceof Number
|| value instanceof JsonNode
);
}
@Override
protected void writeObject(Object obj, ValueFields valueFields) {
// always reset the previous values
valueFields.setTextValue(null);
valueFields.setTextValue2(null);
valueFields.setBytes(null);
if (obj == null) return;
TypeInfo typeInfo = metaManager.requireTypeInfo(obj);
valueFields.setTextValue(typeInfo.getTypeName());
String id = typeInfo.getId(obj);
if (id != null) {
valueFields.setTextValue2(id);
}
else {
JsonNode json = typeInfo.serialize(obj, objectMapper, PrintOptions.NONE);
valueFields.setBytes(jsonToBytes(json));
}
}
@Override
protected Object readObject(ValueFields valueFields) {
String typeName = valueFields.getTextValue();
if (typeName == null) return null;
TypeInfo typeInfo = metaManager.requireTypeInfo(typeName);
String id = valueFields.getTextValue2();
if (id != null) {
return typeInfo.getInstance(id);
}
else {
JsonNode json = bytesToJson(valueFields.getBytes());
return typeInfo.deserialize(json, objectMapper);
}
}
}
© 2015 - 2025 Weber Informatics LLC | Privacy Policy