package org.janelia.saalfeldlab.paintera.serialization.config; import java.lang.reflect.Type; import java.util.Optional; import com.google.gson.JsonDeserializationContext; import com.google.gson.JsonDeserializer; import com.google.gson.JsonElement; import com.google.gson.JsonObject; import com.google.gson.JsonParseException; import com.google.gson.JsonPrimitive; import com.google.gson.JsonSerializationContext; import com.google.gson.JsonSerializer; import javafx.scene.paint.Color; import org.janelia.saalfeldlab.paintera.config.CrosshairConfig; import org.janelia.saalfeldlab.paintera.serialization.PainteraSerialization; import org.janelia.saalfeldlab.util.Colors; import org.scijava.plugin.Plugin; @Plugin(type = PainteraSerialization.PainteraAdapter.class) public class CrosshairConfigSerializer implements PainteraSerialization.PainteraAdapter<CrosshairConfig> { private static final String ON_FOCUS_COLOR_KEY = "onFocusColor"; private static final String OFF_FOCUS_COLOR_KEY = "offFocusColor"; private static final String VISIBLE_KEY = "isVisible"; @Override public CrosshairConfig deserialize(final JsonElement json, final Type typeOfT, final JsonDeserializationContext context) throws JsonParseException { final CrosshairConfig config = new CrosshairConfig(); if (json != null && json.isJsonObject()) { final JsonObject obj = json.getAsJsonObject(); Optional .ofNullable(obj.get(ON_FOCUS_COLOR_KEY)) .map(JsonElement::getAsString) .map(Color::web) .ifPresent(config::setOnFocusColor); Optional .ofNullable(obj.get(OFF_FOCUS_COLOR_KEY)) .map(JsonElement::getAsString) .map(Color::web) .ifPresent(config::setOutOfFocusColor); Optional .ofNullable(obj.get(VISIBLE_KEY)) .filter(JsonElement::isJsonPrimitive) .map(JsonElement::getAsJsonPrimitive) .filter(JsonPrimitive::isBoolean) .map(JsonPrimitive::getAsBoolean) .ifPresent(config::setShowCrosshairs); } return config; } @Override public JsonElement serialize(final CrosshairConfig src, final Type typeOfSrc, final JsonSerializationContext context) { final JsonObject map = new JsonObject(); map.addProperty(ON_FOCUS_COLOR_KEY, Colors.toHTML(src.getOnFocusColor())); map.addProperty(OFF_FOCUS_COLOR_KEY, Colors.toHTML(src.getOutOfFocusColor())); map.addProperty(VISIBLE_KEY, src.getShowCrosshairs()); return map; } @Override public Class<CrosshairConfig> getTargetClass() { return CrosshairConfig.class; } }