package nl.fontys.sofa.limo.domain.component.serialization; import com.google.gson.Gson; import com.google.gson.JsonDeserializationContext; import com.google.gson.JsonDeserializer; import com.google.gson.JsonElement; import com.google.gson.JsonObject; import com.google.gson.reflect.TypeToken; import java.lang.reflect.Type; import java.util.ArrayList; import nl.fontys.sofa.limo.domain.BaseEntity; import nl.fontys.sofa.limo.domain.component.MasterData; import nl.fontys.sofa.limo.domain.component.event.Event; import nl.fontys.sofa.limo.domain.component.hub.Hub; import nl.fontys.sofa.limo.domain.component.procedure.Procedure; import nl.fontys.sofa.limo.domain.component.procedure.ProcedureCategory; import nl.fontys.sofa.limo.domain.component.type.HubType; import nl.fontys.sofa.limo.domain.component.type.LegType; /** * Deserializes the MasterData from JSON to a Java Object. * * @author Christian Neumann */ public class MasterDataDeserializer implements JsonDeserializer<MasterData> { @Override public MasterData deserialize(JsonElement je, Type type, JsonDeserializationContext jdc) { Gson g = GsonHelper.getInstance(); MasterData md = new MasterData(); JsonObject obj = je.getAsJsonObject(); Type tLegtypes = new TypeToken<ArrayList<LegType>>() { }.getType(); Type tEvent = new TypeToken<ArrayList<Event>>() { }.getType(); Type tProcedure = new TypeToken<ArrayList<ProcedureCategory>>() { }.getType(); Type tHubTypes = new TypeToken<ArrayList<HubType>>() { }.getType(); Type tHub = new TypeToken<ArrayList<Hub>>() { }.getType(); Type tProcedures = new TypeToken<ArrayList<Procedure>>() { }.getType(); ArrayList<LegType> legTypeList = g.fromJson(obj.get("legtypes"), tLegtypes); ArrayList<BaseEntity> beLegTypeList = new ArrayList<>(); beLegTypeList.addAll(legTypeList); ArrayList<Event> eventList = g.fromJson(obj.get("events"), tEvent); ArrayList<BaseEntity> beEventList = new ArrayList<>(); beEventList.addAll(eventList); ArrayList<ProcedureCategory> catList = g.fromJson(obj.get("categories"), tProcedure); ArrayList<BaseEntity> beCatList = new ArrayList<>(); beCatList.addAll(catList); ArrayList<HubType> hubTypeList = g.fromJson(obj.get("hubtypes"), tHubTypes); ArrayList<BaseEntity> beHubTypeList = new ArrayList<>(); beHubTypeList.addAll(hubTypeList); ArrayList<Hub> hubList = g.fromJson(obj.get("hubs"), tHub); ArrayList<BaseEntity> beHubList = new ArrayList<>(); beHubList.addAll(hubList); if(!(obj.get("basicProcedures") == null)) { ArrayList<Procedure> procedureList = g.fromJson(obj.get("basicProcedures"), tProcedures); ArrayList<BaseEntity> beProcedureList = new ArrayList<>(); beProcedureList.addAll(procedureList); md.setBasicProcedures(beProcedureList); } md.setLegtypes(beLegTypeList); md.setEvents(beEventList); md.setCategories(beCatList); md.setHubtypes(beHubTypeList); md.setHubs(beHubList); return md; } }