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}