package restx.jackson;
import com.fasterxml.jackson.core.JsonParser;
import com.fasterxml.jackson.core.JsonProcessingException;
import com.fasterxml.jackson.databind.DeserializationContext;
import com.fasterxml.jackson.databind.JsonDeserializer;
import com.fasterxml.jackson.databind.SerializerProvider;
import com.fasterxml.jackson.databind.module.SimpleModule;
import de.undercouch.bson4jackson.BsonGenerator;
import de.undercouch.bson4jackson.serializers.BsonSerializer;
import org.joda.time.DateTime;
import org.joda.time.DateTimeZone;
import java.io.IOException;
/**
* User: xavierhanin
* Date: 1/24/13
* Time: 9:03 AM
*/
@SuppressWarnings("deprecation") // DateMidnight is deprecated, but we still want to provide custom ser/deser for it
public class BsonJodaTimeModule extends SimpleModule {
public BsonJodaTimeModule() {
super("BsonJodaTimeModule");
addSerializer(org.joda.time.DateMidnight.class, new BsonSerializer<org.joda.time.DateMidnight>() {
@Override
public void serialize(org.joda.time.DateMidnight date, BsonGenerator bsonGenerator, SerializerProvider serializerProvider)
throws IOException {
if (date == null) {
serializerProvider.defaultSerializeNull(bsonGenerator);
} else {
bsonGenerator.writeDateTime(date.toDate());
}
}
});
addSerializer(DateTime.class, new BsonSerializer<DateTime>() {
@Override
public void serialize(DateTime date, BsonGenerator bsonGenerator, SerializerProvider serializerProvider)
throws IOException {
if (date == null) {
serializerProvider.defaultSerializeNull(bsonGenerator);
} else {
bsonGenerator.writeDateTime(date.toDate());
}
}
});
addDeserializer(org.joda.time.DateMidnight.class, new JsonDeserializer<org.joda.time.DateMidnight>() {
@Override
public org.joda.time.DateMidnight deserialize(JsonParser jp, DeserializationContext ctxt)
throws IOException, JsonProcessingException {
Object date = jp.getEmbeddedObject();
return new org.joda.time.DateMidnight(date, DateTimeZone.UTC);
}
});
addDeserializer(DateTime.class, new JsonDeserializer<DateTime>() {
@Override
public DateTime deserialize(JsonParser jp, DeserializationContext ctxt) throws IOException, JsonProcessingException {
Object date = jp.getEmbeddedObject();
return new DateTime(date, DateTimeZone.UTC);
}
});
}
}