package fi.arcusys.koku.common.service;
import java.util.Calendar;
import java.util.Date;
import java.util.GregorianCalendar;
import java.util.TimeZone;
import javax.xml.datatype.DatatypeConfigurationException;
import javax.xml.datatype.DatatypeFactory;
import javax.xml.datatype.XMLGregorianCalendar;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
/**
* Common util methods for processing Date/XMLGregorianCalendar conversion.
*
* @author Dmitry Kudinov (dmitry.kudinov@arcusys.fi)
* Jul 25, 2011
*/
public class CalendarUtil {
private final static Logger logger = LoggerFactory.getLogger(CalendarUtil.class);
public static XMLGregorianCalendar getXmlGregorianCalendar(final Date date) {
return getXmlCalendar(date, new SetCalendar());
}
public static XMLGregorianCalendar getXmlDate(final Date date) {
return getXmlCalendar(date, new SetDateOnlyCalendar() {
@Override
void setCalendar(Calendar calendar) {
calendar.setTimeZone(TimeZone.getTimeZone("GMT"));
super.setCalendar(calendar);
}
});
}
public static XMLGregorianCalendar getXmlTime(final Date date, final int minutes) {
return getXmlCalendar(date, new SetDateOnlyCalendar() {
@Override
void setCalendar(Calendar calendar) {
calendar.setTimeZone(TimeZone.getTimeZone("GMT"));
super.setCalendar(calendar);
calendar.set(Calendar.MINUTE, minutes);
}
});
}
private static XMLGregorianCalendar getXmlCalendar(final Date date, final SetCalendar setCalendar) {
if (date == null) {
return null;
}
try {
final GregorianCalendar calendar = (GregorianCalendar)GregorianCalendar.getInstance();
calendar.setTime(date);
setCalendar.setCalendar(calendar);
return DatatypeFactory.newInstance().newXMLGregorianCalendar(calendar);
} catch (DatatypeConfigurationException e) {
logger.error(null, e);
}
return null;
}
private static class SetCalendar {
void setCalendar(final Calendar calendar){
}
}
private static class SetDateOnlyCalendar extends SetCalendar {
void setCalendar(final Calendar calendar){
calendar.set(Calendar.HOUR_OF_DAY, 0);
calendar.set(Calendar.MINUTE, 0);
calendar.set(Calendar.SECOND, 0);
calendar.set(Calendar.MILLISECOND, 0);
}
}
/**
* @param createdFromDate
* @return
*/
public static Date getSafeDate(XMLGregorianCalendar calendar) {
if (calendar == null) {
return null;
}
return calendar.toGregorianCalendar().getTime();
}
}