package org.cytoscape.rest.internal.serializer;
import java.io.IOException;
import java.util.Map;
import org.cytoscape.rest.internal.datamapper.VisualStyleMapper;
import org.cytoscape.view.model.VisualProperty;
import org.cytoscape.view.vizmap.mappings.DiscreteMapping;
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 DiscreteMappingSerializer extends JsonSerializer<DiscreteMapping> {
@Override
public Class<DiscreteMapping> handledType() {
return DiscreteMapping.class;
}
@Override
public void serialize(DiscreteMapping mapping, JsonGenerator jgen, SerializerProvider provider) throws IOException,
JsonProcessingException {
jgen.useDefaultPrettyPrinter();
jgen.writeStartObject();
jgen.writeStringField(VisualStyleMapper.MAPPING_TYPE, "discrete");
jgen.writeStringField(VisualStyleMapper.MAPPING_COLUMN, mapping.getMappingColumnName());
jgen.writeStringField(VisualStyleMapper.MAPPING_COLUMN_TYPE, mapping.getMappingColumnType().getSimpleName());
jgen.writeStringField(VisualStyleMapper.MAPPING_VP, mapping.getVisualProperty().getIdString());
serializeMapping(mapping, jgen);
jgen.writeEndObject();
}
@SuppressWarnings("unchecked")
private final void serializeMapping(final DiscreteMapping mapping, JsonGenerator jgen) throws IOException {
final Map valueMap = mapping.getAll();
final VisualProperty<Object> vp = mapping.getVisualProperty();
jgen.writeArrayFieldStart("map");
for(final Object key:valueMap.keySet()) {
final Object value = valueMap.get(key);
jgen.writeStartObject();
jgen.writeStringField("key", key.toString());
jgen.writeStringField("value", vp.toSerializableString(value));
jgen.writeEndObject();
}
jgen.writeEndArray();
}
}