package nl.fontys.sofa.limo.domain.component.serialization;
import com.google.gson.Gson;
import com.google.gson.JsonArray;
import com.google.gson.JsonDeserializationContext;
import com.google.gson.JsonDeserializer;
import com.google.gson.JsonElement;
import com.google.gson.JsonObject;
import java.lang.reflect.Type;
import java.util.HashMap;
import java.util.Map;
import nl.fontys.sofa.limo.domain.component.event.distribution.Distribution;
import nl.fontys.sofa.limo.domain.component.event.distribution.input.InputValue;
import org.openide.util.Exceptions;
/**
* Deserializes a Distribution from JSON to a Java Object.
*
* @author Convict42
*/
public class DistributionDeserializer implements JsonDeserializer<Distribution> {
@Override
public Distribution deserialize(JsonElement json, Type typeOfT, JsonDeserializationContext context) {
Gson g = GsonHelper.getInstance();
JsonObject obj = json.getAsJsonObject();
String propType = obj.get("propType").getAsString();
try {
Class c = Class.forName(propType);
Distribution distribution = (Distribution) c.newInstance();
Map<String, InputValue> map = new HashMap<>();
JsonArray jArray = obj.get("inputValues").getAsJsonArray();
for (JsonElement ele : jArray) {
JsonObject inputValObject = ele.getAsJsonObject();
String key = inputValObject.get("Name").getAsString();
InputValue inputVal = g.fromJson(inputValObject.get("Value"), InputValue.class);
map.put(key, inputVal);
}
distribution.setInputValues(map);
return distribution;
} catch (ClassNotFoundException | InstantiationException | IllegalAccessException ex) {
Exceptions.printStackTrace(ex);
}
return null;
}
}