package in.partake.base; import in.partake.model.dto.Event; import java.io.ByteArrayOutputStream; import java.io.IOException; import java.net.URI; import java.net.URISyntaxException; import net.fortuna.ical4j.data.CalendarOutputter; import net.fortuna.ical4j.model.Calendar; import net.fortuna.ical4j.model.DateTime; import net.fortuna.ical4j.model.TimeZone; import net.fortuna.ical4j.model.TimeZoneRegistry; import net.fortuna.ical4j.model.TimeZoneRegistryFactory; import net.fortuna.ical4j.model.ValidationException; import net.fortuna.ical4j.model.component.VEvent; import net.fortuna.ical4j.model.property.CalScale; import net.fortuna.ical4j.model.property.Description; import net.fortuna.ical4j.model.property.LastModified; import net.fortuna.ical4j.model.property.ProdId; import net.fortuna.ical4j.model.property.Sequence; import net.fortuna.ical4j.model.property.Uid; import net.fortuna.ical4j.model.property.Url; import net.fortuna.ical4j.model.property.Version; public class CalendarUtil { private static final TimeZone JST_TIMEZONE; static { TimeZoneRegistry registry = TimeZoneRegistryFactory.getInstance().createRegistry(); JST_TIMEZONE = registry.getTimeZone("Asia/Tokyo"); } public static Calendar createCalendarSkeleton() { Calendar calendar = new Calendar(); calendar.getProperties().add(new ProdId("-//Events Calendar//iCal4j 1.0//EN")); calendar.getProperties().add(Version.VERSION_2_0); calendar.getProperties().add(CalScale.GREGORIAN); calendar.getComponents().add(JST_TIMEZONE.getVTimeZone()); return calendar; } public static void addToCalendar(Calendar calendar, Event event) { DateTime beginDate = new DateTime(event.getBeginDate().getTime()); beginDate.setTimeZone(JST_TIMEZONE); VEvent vEvent; if (event.getEndDate() != null) { DateTime endDate = new DateTime(event.getEndDate().getTime()); endDate.setTimeZone(JST_TIMEZONE); vEvent = new VEvent(beginDate, endDate, event.getTitle()); } else { vEvent = new VEvent(beginDate, event.getTitle()); } // set unique identifier vEvent.getProperties().add(new Uid(event.getId())); // Description vEvent.getProperties().add(new Description(event.getEventURL())); // URL if (event.getUrl() != null && !event.getUrl().isEmpty()) { try { vEvent.getProperties().add(new Url(new URI(event.getUrl()))); } catch (URISyntaxException e) { e.printStackTrace(); } } // modified DateTime modifiedAt = null; if (event.getModifiedAt() != null) { modifiedAt = new DateTime(event.getModifiedAt().getTime()); } else if (event.getCreatedAt() != null){ modifiedAt = new DateTime(event.getCreatedAt().getTime()); } if (modifiedAt != null) { modifiedAt.setTimeZone(JST_TIMEZONE); vEvent.getProperties().add(new LastModified(modifiedAt)); } // sequence vEvent.getProperties().add(new Sequence(event.getRevision())); calendar.getComponents().add(vEvent); } public static byte[] outputCalendar(Calendar calendar) throws IOException, ValidationException { ByteArrayOutputStream baos = new ByteArrayOutputStream(); new CalendarOutputter().output(calendar, baos); return baos.toByteArray(); } }