package org.cytoscape.rest.internal.serializer; import java.io.IOException; import java.util.List; import org.cytoscape.rest.internal.datamapper.VisualStyleMapper; import org.cytoscape.view.model.VisualProperty; import org.cytoscape.view.vizmap.mappings.BoundaryRangeValues; import org.cytoscape.view.vizmap.mappings.ContinuousMapping; import org.cytoscape.view.vizmap.mappings.ContinuousMappingPoint; import com.fasterxml.jackson.core.JsonGenerator; import com.fasterxml.jackson.core.JsonProcessingException; import com.fasterxml.jackson.databind.JsonSerializer; import com.fasterxml.jackson.databind.SerializerProvider; import com.qmino.miredot.annotations.MireDotIgnore; @SuppressWarnings("rawtypes") @MireDotIgnore public class ContinuousMappingSerializer extends JsonSerializer<ContinuousMapping> { @Override public Class<ContinuousMapping> handledType() { return ContinuousMapping.class; } @Override public void serialize(ContinuousMapping mapping, JsonGenerator jgen, SerializerProvider provider) throws IOException, JsonProcessingException { jgen.useDefaultPrettyPrinter(); jgen.writeStartObject(); jgen.writeStringField(VisualStyleMapper.MAPPING_TYPE, "continuous"); jgen.writeStringField(VisualStyleMapper.MAPPING_COLUMN, mapping.getMappingColumnName()); jgen.writeStringField(VisualStyleMapper.MAPPING_COLUMN_TYPE, mapping.getMappingColumnType().getSimpleName()); jgen.writeStringField(VisualStyleMapper.MAPPING_VP, mapping.getVisualProperty().getIdString()); serializePoints(mapping, jgen); jgen.writeEndObject(); } @SuppressWarnings("unchecked") private final void serializePoints(final ContinuousMapping mapping, final JsonGenerator jgen) throws IOException { final VisualProperty<Object> vp = mapping.getVisualProperty(); jgen.writeArrayFieldStart("points"); final List<ContinuousMappingPoint> points = mapping.getAllPoints(); for(final ContinuousMappingPoint<?, ?> point : points) { jgen.writeStartObject(); final Number val = (Number) point.getValue(); jgen.writeNumberField("value", val.doubleValue()); final BoundaryRangeValues<?> range = point.getRange(); jgen.writeStringField("lesser", vp.toSerializableString(range.lesserValue)); jgen.writeStringField("equal", vp.toSerializableString(range.equalValue)); jgen.writeStringField("greater", vp.toSerializableString(range.greaterValue)); jgen.writeEndObject(); } jgen.writeEndArray(); } }