package org.openstack.atlas.api.helpers.JsonSerializer;
import org.openstack.atlas.api.helpers.JsonSerializeException;
import org.openstack.atlas.api.helpers.reflection.ClassReflectionTools;
import static org.openstack.atlas.util.converters.DateTimeConverters.calToiso;
import org.openstack.atlas.util.common.exceptions.ConverterException;
import java.io.IOException;
import java.util.Calendar;
import java.util.logging.Level;
import java.util.logging.Logger;
import org.codehaus.jackson.JsonGenerator;
import org.codehaus.jackson.JsonProcessingException;
import org.codehaus.jackson.map.JsonSerializer;
import org.codehaus.jackson.map.SerializationConfig;
import org.codehaus.jackson.map.SerializerProvider;
public class DateTimeSerializer extends JsonSerializer<Object> {
private final SerializationConfig config;
private final String wrapperFieldName;
public DateTimeSerializer(SerializationConfig config, Class someClass) {
String rootName;
String nameSpace;
this.config = config;
if (someClass == null) {
this.wrapperFieldName = null;
return;
}
rootName = ClassReflectionTools.getXmlRootElementName(someClass);
if (rootName == null) {
this.wrapperFieldName = someClass.getSimpleName();
return;
}
this.wrapperFieldName = rootName;
}
@Override
public void serialize(Object object, JsonGenerator jgen,
SerializerProvider sp) throws IOException, JsonProcessingException {
String isoStr;
Calendar cal;
cal = (Calendar) object;
String msg;
try {
isoStr = calToiso(cal);
} catch (ConverterException ex) {
msg = String.format("Error converting calendar to iso8601 string");
Logger.getLogger(DateTimeSerializer.class.getName()).log(Level.SEVERE, null, ex);
throw new JsonSerializeException(msg, ex);
}
jgen.writeString(isoStr);
}
}