package org.juxtasoftware.util;
import java.lang.reflect.Type;
import org.juxtasoftware.model.Alignment;
import org.juxtasoftware.model.Alignment.AlignedAnnotation;
import com.google.gson.JsonArray;
import com.google.gson.JsonElement;
import com.google.gson.JsonObject;
import com.google.gson.JsonSerializationContext;
import com.google.gson.JsonSerializer;
/**
* GSON serializer class used to ensure proper json format
* for alignments
*
* @author loufoster
*
*/
public class AlignmentSerializer implements JsonSerializer<Alignment> {
public JsonElement serialize(Alignment align, Type typeOfSrc, JsonSerializationContext context) {
JsonObject name = new JsonObject();
name.addProperty("namespace", align.getName().getNamespace().toString());
name.addProperty("localName", align.getName().getLocalName());
JsonArray annotations = new JsonArray();
for (AlignedAnnotation anno : align.getAnnotations()) {
JsonObject range = new JsonObject();
range.addProperty("start", anno.getRange().getStart());
range.addProperty("end", anno.getRange().getEnd());
JsonObject annoObj = new JsonObject();
annoObj.addProperty("id", anno.getId());
annoObj.addProperty("witnessId", anno.getWitnessId());
annoObj.add("range", range);
annoObj.addProperty("fragment", anno.getFragment());
annotations.add(annoObj);
}
JsonObject obj = new JsonObject();
obj.addProperty("id", align.getId());
obj.add("name", name);
obj.addProperty("editDistance", align.getEditDistance());
obj.add("annotations", annotations);
return obj;
}
}