001package org.conqat.engine.commons.util;
002
003import java.awt.Color;
004import java.io.IOException;
005
006import org.conqat.lib.commons.color.ColorUtils;
007
008import com.fasterxml.jackson.core.JsonGenerator;
009import com.fasterxml.jackson.core.JsonParser;
010import com.fasterxml.jackson.databind.DeserializationContext;
011import com.fasterxml.jackson.databind.JsonDeserializer;
012import com.fasterxml.jackson.databind.JsonSerializer;
013import com.fasterxml.jackson.databind.SerializerProvider;
014import com.fasterxml.jackson.databind.module.SimpleModule;
015
016/**
017 * Jackson module which supports serialization and deserialization of
018 * {@link Color} objects to their hex string representation and back.
019 */
020public class ColorSerializationModule extends SimpleModule {
021
022        ColorSerializationModule() {
023                addSerializer(Color.class, new ColorSerializer());
024                addDeserializer(Color.class, new ColorDeserializer());
025        }
026
027        /**
028         * Serializer for {@link Color} objects represented as "#001122".
029         */
030        private static class ColorSerializer extends JsonSerializer<Color> {
031
032                @Override
033                public void serialize(Color value, JsonGenerator gen, SerializerProvider serializers) throws IOException {
034                        gen.writeString(ColorUtils.toHtmlString(value));
035                }
036        }
037
038        /**
039         * Deserializer for {@link Color} objects represented as "#001122".
040         */
041        private static class ColorDeserializer extends JsonDeserializer<Color> {
042
043                @Override
044                public Color deserialize(JsonParser p, DeserializationContext ctxt) throws IOException {
045                        String root = p.getText();
046                        return ColorUtils.fromString(root);
047                }
048        }
049
050}