package com.asana;
import com.google.api.client.util.DateTime;
import com.google.gson.*;
import java.lang.reflect.Type;
import java.text.ParseException;
/**
* Class to handle serialization/deserialization of JSON
*/
public class Json {
private static Gson instance;
/**
* Implements ISO 3339 date/time deserialization since SimpleDateFormat in Java 6 does not support the "X" format specifier
*/
private static class ISO3339DateDeserializer implements JsonDeserializer<DateTime> {
@Override
public DateTime deserialize(JsonElement jsonElement, Type type, JsonDeserializationContext jsonDeserializationContext) {
DateTime result = null;
try {
String date = jsonElement.getAsString();
result = DateTime.parseRfc3339(date);
} catch (NumberFormatException e) {
System.err.println("Couldn't parse date: " + jsonElement.getAsString());
}
return result;
}
}
/**
* @return Singleton instance of the Gson parser that handle Asana's date format (ISO 3339)
*/
static public Gson getInstance() {
if (instance == null) {
instance = new GsonBuilder()
.registerTypeAdapter(DateTime.class, new ISO3339DateDeserializer())
.setDateFormat("yyyy-MM-dd'T'HH:mm:ss.SSS'Z'")
.create();
}
return instance;
}
}