package org.openlmis.core.network.adapter;
import com.google.gson.Gson;
import com.google.gson.GsonBuilder;
import com.google.gson.JsonDeserializationContext;
import com.google.gson.JsonDeserializer;
import com.google.gson.JsonElement;
import com.google.gson.JsonObject;
import com.google.gson.JsonParseException;
import com.google.gson.JsonParser;
import com.google.gson.JsonSerializationContext;
import com.google.gson.JsonSerializer;
import org.openlmis.core.model.ProgramDataColumn;
import org.openlmis.core.model.ProgramDataFormItem;
import java.lang.reflect.Type;
import java.text.DateFormat;
import java.util.Date;
public class ProgramDataFormItemAdapter implements JsonDeserializer<ProgramDataFormItem>, JsonSerializer<ProgramDataFormItem> {
private final Gson gson;
private final JsonParser jsonParser;
public ProgramDataFormItemAdapter() {
gson = new GsonBuilder().excludeFieldsWithoutExposeAnnotation()
.registerTypeAdapter(Date.class, new DateAdapter()).setDateFormat(DateFormat.LONG)
.create();
jsonParser = new JsonParser();
}
@Override
public JsonElement serialize(ProgramDataFormItem src, Type typeOfSrc, JsonSerializationContext context) {
JsonObject result = gson.toJsonTree(src).getAsJsonObject();
result.add("columnCode", jsonParser.parse(src.getProgramDataColumn().getCode()));
return result;
}
@Override
public ProgramDataFormItem deserialize(JsonElement json, Type typeOfT, JsonDeserializationContext context) throws JsonParseException {
ProgramDataFormItem programDataFormItem = gson.fromJson(json.toString(), ProgramDataFormItem.class);
programDataFormItem.setProgramDataColumn(new ProgramDataColumn(json.getAsJsonObject().get("columnCode").getAsString()));
return programDataFormItem;
}
}