package polly.rx.core.orion.model.json;
import java.lang.reflect.Type;
import polly.rx.core.orion.model.DefaultProduction;
import polly.rx.core.orion.model.Production;
import polly.rx.entities.RxRessource;
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.JsonSerializationContext;
import com.google.gson.JsonSerializer;
import com.google.gson.reflect.TypeToken;
class ProductionJsonHandler extends AbstractJsonHandler implements
JsonDeserializer<Production>, JsonSerializer<Production>{
private final static String RESS_TYPE = "ress"; //$NON-NLS-1$
private final static String RESS_ID = "ressId"; //$NON-NLS-1$
private final static String RATE = "rate"; //$NON-NLS-1$
final static Type PRODUCTION_TYPE = new TypeToken<Production>() {}.getType();
@Override
public Production deserialize(JsonElement json, Type typeOfT,
JsonDeserializationContext context) throws JsonParseException {
final JsonObject obj = json.getAsJsonObject();
final int ressId = this.getMemberOrThrow(obj, RESS_ID).getAsInt() - 1;
final float rate = this.getMemberOrThrow(obj, RATE).getAsFloat();
return new DefaultProduction(RxRessource.values()[ressId], rate);
}
@Override
public JsonElement serialize(Production src, Type typeOfSrc,
JsonSerializationContext context) {
final JsonObject obj = new JsonObject();
obj.addProperty(RESS_TYPE, src.getRess().toString());
obj.addProperty(RATE, src.getRate());
return obj;
}
}