org.conqat.engine.commons.util.ListMapSerializationModule Maven / Gradle / Ivy
package org.conqat.engine.commons.util;
import java.io.IOException;
import java.io.Serializable;
import java.util.Arrays;
import java.util.Collection;
import org.conqat.lib.commons.collections.ListMap;
import org.conqat.lib.commons.collections.UnmodifiableSet;
import com.fasterxml.jackson.annotation.JsonCreator;
import com.fasterxml.jackson.annotation.JsonProperty;
import com.fasterxml.jackson.core.JsonGenerator;
import com.fasterxml.jackson.core.JsonParser;
import com.fasterxml.jackson.databind.DeserializationContext;
import com.fasterxml.jackson.databind.JsonDeserializer;
import com.fasterxml.jackson.databind.JsonSerializer;
import com.fasterxml.jackson.databind.SerializerProvider;
import com.fasterxml.jackson.databind.module.SimpleModule;
/**
* Jackson module which supports serialization and deserialization of
* {@link ListMap} object and back.
*/
public class ListMapSerializationModule extends SimpleModule {
ListMapSerializationModule() {
addSerializer(ListMap.class, new ListMapSerializer());
addDeserializer(ListMap.class, new ListMapDeserializer());
}
/** Serializer for {@link ListMap} objects. */
private static class ListMapSerializer extends JsonSerializer {
@Override
public void serialize(ListMap value, JsonGenerator generator, SerializerProvider serializers)
throws IOException {
UnmodifiableSet keys = value.getKeys();
SerializableListMapEntry[] entries = new SerializableListMapEntry[keys.size()];
int i = 0;
for (Object key : keys) {
entries[i++] = new SerializableListMapEntry(key, value.getCollection(key));
}
generator.writeObject(entries);
}
}
/** Deserializer for {@link ListMap} objects. */
private static class ListMapDeserializer extends JsonDeserializer {
@Override
public ListMap deserialize(JsonParser parser, DeserializationContext ctx) throws IOException {
SerializableListMapEntry[] root = parser.getCodec().readValue(parser, SerializableListMapEntry[].class);
ListMap
© 2015 - 2025 Weber Informatics LLC | Privacy Policy