package nl.fontys.sofa.limo.domain.component.serialization;
import com.google.gson.Gson;
import com.google.gson.GsonBuilder;
import nl.fontys.sofa.limo.domain.component.Icon;
import nl.fontys.sofa.limo.domain.component.MasterData;
import nl.fontys.sofa.limo.domain.component.event.distribution.Distribution;
import nl.fontys.sofa.limo.domain.component.event.distribution.input.DoubleInputValue;
import nl.fontys.sofa.limo.domain.component.event.distribution.input.InputValue;
import nl.fontys.sofa.limo.domain.component.event.distribution.input.IntegerInputValue;
import nl.fontys.sofa.limo.domain.component.leg.Leg;
import nl.fontys.sofa.limo.domain.component.leg.MultiModeLeg;
import nl.fontys.sofa.limo.domain.component.leg.ScheduledLeg;
import nl.fontys.sofa.limo.domain.component.procedure.value.Value;
/**
* A Singleton Instance of GSON.
*
* @author Convict42
*/
public class GsonHelper {
private static Gson gson;
private GsonHelper() {
}
public static Gson getInstance() {
if (gson == null) {
GsonBuilder gsonB = new GsonBuilder();
//Serializer
gsonB.registerTypeAdapter(Value.class, new ValueSerializer());
gsonB.registerTypeAdapter(MultiModeLeg.class, new MultiModeLegSerializer());
gsonB.registerTypeAdapter(ScheduledLeg.class, new ScheduleLegSerializer());
gsonB.registerTypeAdapter(Distribution.class, new DistributionSerializer());
gsonB.registerTypeAdapter(DoubleInputValue.class, new InputValueSerializer());
gsonB.registerTypeAdapter(IntegerInputValue.class, new InputValueSerializer());
//Deserializer
gsonB.registerTypeAdapter(Value.class, new ValueDeserializer());
gsonB.registerTypeAdapter(Leg.class, new LegDeserializer());
gsonB.registerTypeAdapter(Icon.class, new IconDeserializer());
gsonB.registerTypeAdapter(Distribution.class, new DistributionDeserializer());
gsonB.registerTypeAdapter(InputValue.class, new InputValueDeserializer());
gsonB.registerTypeAdapter(MasterData.class, new MasterDataDeserializer());
gson = gsonB.excludeFieldsWithoutExposeAnnotation().serializeNulls().create();
}
return gson;
}
}