use of org.terasology.persistence.typeHandling.PersistedData in project Terasology by MovingBlocks.
the class EnumTypeHandlerSerializerTest method testNonNullValue.
@Test
public void testNonNullValue() throws Exception {
PersistedData data = mock(PersistedData.class);
when(data.getAsString()).thenReturn(TestEnum.NON_NULL.toString());
when(data.isString()).thenReturn(true);
SerializationContext serializationContext = mock(SerializationContext.class);
when(serializationContext.create(TestEnum.NON_NULL.toString())).thenReturn(data);
EnumTypeHandler<TestEnum> handler = new EnumTypeHandler<>(TestEnum.class);
PersistedData serializedNonNull = handler.serialize(TestEnum.NON_NULL, serializationContext);
assertEquals(data, serializedNonNull);
DeserializationContext deserializationContext = mock(DeserializationContext.class);
TestEnum deserializedValue = handler.deserialize(data, deserializationContext);
assertEquals(TestEnum.NON_NULL, deserializedValue);
}
use of org.terasology.persistence.typeHandling.PersistedData in project Terasology by MovingBlocks.
the class EnumTypeHandlerSerializerTest method testNullValue.
@Test
public void testNullValue() throws Exception {
PersistedData nullData = mock(PersistedData.class);
when(nullData.isNull()).thenReturn(true);
SerializationContext serializationContext = mock(SerializationContext.class);
when(serializationContext.createNull()).thenReturn(nullData);
EnumTypeHandler<TestEnum> handler = new EnumTypeHandler<>(TestEnum.class);
PersistedData serializedNull = handler.serialize(null, serializationContext);
assertEquals(nullData, serializedNull);
DeserializationContext deserializationContext = mock(DeserializationContext.class);
TestEnum deserializedValue = handler.deserialize(nullData, deserializationContext);
assertEquals(null, deserializedValue);
}
use of org.terasology.persistence.typeHandling.PersistedData in project Terasology by MovingBlocks.
the class ComponentSerializer method serialize.
/**
* Serializes the differences between two components.
*
* @param base The base component to compare against.
* @param delta The component whose differences will be serialized
* @param check A check to use to see if each field should be serialized.
* @return The serialized component, or null if it could not be serialized
*/
public EntityData.Component serialize(Component base, Component delta, FieldSerializeCheck<Component> check) {
ComponentMetadata<?> componentMetadata = componentLibrary.getMetadata(base.getClass());
if (componentMetadata == null) {
logger.error("Unregistered component type: {}", base.getClass());
return null;
}
EntityData.Component.Builder componentMessage = EntityData.Component.newBuilder();
serializeComponentType(componentMetadata, componentMessage);
Serializer serializer = typeSerializationLibrary.getSerializerFor(componentMetadata);
boolean changed = false;
for (ReplicatedFieldMetadata field : componentMetadata.getFields()) {
if (check.shouldSerializeField(field, delta) && serializer.getHandlerFor(field) != null) {
Object origValue = field.getValue(base);
Object deltaValue = field.getValue(delta);
if (!Objects.equal(origValue, deltaValue)) {
PersistedData value = serializer.serializeValue(field, deltaValue, serializationContext);
if (!value.isNull()) {
EntityData.Value dataValue = ((ProtobufPersistedData) value).getValue();
if (usingFieldIds) {
componentMessage.addField(EntityData.NameValue.newBuilder().setNameIndex(field.getId()).setValue(dataValue).build());
} else {
componentMessage.addField(EntityData.NameValue.newBuilder().setName(field.getName()).setValue(dataValue).build());
}
changed = true;
}
}
}
}
if (changed) {
return componentMessage.build();
}
return null;
}
use of org.terasology.persistence.typeHandling.PersistedData in project Terasology by MovingBlocks.
the class EnumTypeHandler method deserializeCollection.
@Override
public List<T> deserializeCollection(PersistedData data, DeserializationContext context) {
if (data.isArray()) {
PersistedDataArray array = data.getAsArray();
List<T> result = Lists.newArrayListWithCapacity(array.size());
for (PersistedData item : array) {
result.add(deserialize(item, context));
}
return result;
}
return Lists.newArrayList();
}
use of org.terasology.persistence.typeHandling.PersistedData in project Terasology by MovingBlocks.
the class MappedContainerTypeHandler method deserialize.
@Override
public T deserialize(PersistedData data, DeserializationContext context) {
try {
T result = clazz.newInstance();
for (Map.Entry<String, PersistedData> entry : data.getAsValueMap().entrySet()) {
FieldMetadata fieldInfo = fieldByName.get(UriUtil.normalise(entry.getKey()));
if (fieldInfo != null) {
TypeHandler handler = mappedFields.get(fieldInfo);
Object val = handler.deserialize(entry.getValue(), context);
fieldInfo.setValue(result, val);
}
}
return result;
} catch (Exception e) {
logger.error("Unable to deserialize {}", data, e);
}
return null;
}
Aggregations