/*
* To change this license header, choose License Headers in Project Properties.
* To change this template file, choose Tools | Templates
* and open the template in the editor.
*/
package fi.otavanopisto.muikku.plugins.googlecalendar;
import com.google.api.client.util.DateTime;
import com.google.api.services.calendar.model.EventDateTime;
import fi.otavanopisto.muikku.calendar.CalendarEventTemporalField;
import fi.otavanopisto.muikku.plugins.googlecalendar.model.GoogleCalendarEventTemporalField;
import java.util.Date;
import java.util.SimpleTimeZone;
import java.util.TimeZone;
import org.apache.commons.lang3.StringUtils;
import org.apache.commons.lang3.time.DateUtils;
/**
*
* @author Ilmo Euro <ilmo.euro@gmail.com>
*/
public abstract class Convert {
public static long minutesToMs(long minutes) {
return DateUtils.MILLIS_PER_MINUTE * minutes;
}
public static long msToMinutes(long ms) {
return ms / DateUtils.MILLIS_PER_MINUTE;
}
public static DateTime toDateTime(CalendarEventTemporalField d) {
long timestamp = d.getDateTime().getTime();
long offset = d.getTimeZone().getOffset(timestamp);
return new DateTime(timestamp, (int) msToMinutes(offset));
}
public static CalendarEventTemporalField toCalendarEventTemporalField(EventDateTime eventDateTime) {
return new GoogleCalendarEventTemporalField(
toDate(eventDateTime),
getJavaTimeZone(eventDateTime.getTimeZone()));
}
private static TimeZone getJavaTimeZone(String timeZone) {
if (StringUtils.isNotBlank(timeZone)) {
return SimpleTimeZone.getTimeZone(timeZone);
}
// TODO: this should fallback to calendar default timezone
return null;
}
public static Date toDate(EventDateTime dt) {
if (dt.getDateTime() != null) {
return toDate(dt.getDateTime());
} else {
return toDate(dt.getDate());
}
}
public static Date toDate(DateTime dt) {
return new Date(dt.getValue());
}
static EventDateTime toEventDateTime(boolean dateOnly, CalendarEventTemporalField datetime) {
EventDateTime result = new EventDateTime();
result.setTimeZone(datetime.getTimeZone().getID());
if (dateOnly) {
long timestamp = datetime.getDateTime().getTime();
long offset = datetime.getTimeZone().getOffset(timestamp);
result.setDate(new DateTime(true, timestamp + offset, (int) msToMinutes(offset)));
} else {
result.setDateTime(toDateTime(datetime));
}
return result;
}
}