diff --git a/ccm-cms-types-event/src/com/arsdigita/cms/contenttypes/EventInitializer.java b/ccm-cms-types-event/src/com/arsdigita/cms/contenttypes/EventInitializer.java index ac211357e..a54eefc2e 100755 --- a/ccm-cms-types-event/src/com/arsdigita/cms/contenttypes/EventInitializer.java +++ b/ccm-cms-types-event/src/com/arsdigita/cms/contenttypes/EventInitializer.java @@ -19,6 +19,8 @@ package com.arsdigita.cms.contenttypes; import org.apache.log4j.Logger; +import org.libreccm.export.ExportManager; +import org.librecms.contenttypes.EventExporter; /** * Executes at each system startup and initializes the Event content type. @@ -42,6 +44,8 @@ public class EventInitializer extends ContentTypeInitializer { */ public EventInitializer() { super("ccm-cms-types-event.pdl.mf", Event.BASE_DATA_OBJECT_TYPE); + + ExportManager.getInstance().registerExporter(new EventExporter()); } /** diff --git a/ccm-cms-types-event/src/org/librecms/contenttypes/EventExporter.java b/ccm-cms-types-event/src/org/librecms/contenttypes/EventExporter.java new file mode 100644 index 000000000..e618c5f6d --- /dev/null +++ b/ccm-cms-types-event/src/org/librecms/contenttypes/EventExporter.java @@ -0,0 +1,147 @@ +package org.librecms.contenttypes; + +import com.arsdigita.cms.ItemCollection; +import com.arsdigita.cms.contenttypes.Event; + +import com.fasterxml.jackson.core.JsonGenerator; +import org.librecms.contentsection.AbstractContentItemsExporter; + +import java.io.IOException; +import java.time.LocalDate; +import java.time.LocalDateTime; +import java.time.LocalTime; +import java.time.ZoneId; +import java.time.format.DateTimeFormatter; +import java.util.HashMap; +import java.util.Locale; +import java.util.Map; + +/** + * + * @author Jens Pelzetter + */ +public class EventExporter extends AbstractContentItemsExporter { + + @Override + protected void exportContentItemProperties( + final Event event, final JsonGenerator jsonGenerator) + throws IOException { + + final DateTimeFormatter dateTimeFormatter + = DateTimeFormatter.ISO_DATE_TIME; + + if (event.getEndDate() != null) { + + final LocalDateTime endDate = LocalDateTime + .ofInstant(event.getEndDate().toInstant(), + ZoneId.systemDefault()); + final LocalDateTime endDateTime; + + + if (event.getEndTime() == null) { + endDateTime = endDate; + } else { + + final LocalDateTime endTime = LocalDateTime + .ofInstant(event.getEndTime().toInstant(), + ZoneId.systemDefault()); + + endDateTime = LocalDateTime.of(endDate.toLocalDate(), + endTime.toLocalTime()); + } + + + jsonGenerator.writeStringField( + "endDate", dateTimeFormatter.format(endDateTime)); + } + + if (event.getStartDate() != null) { + + final LocalDateTime startDate = LocalDateTime + .ofInstant(event.getStartDate().toInstant(), + ZoneId.systemDefault()); + final LocalDateTime startDateTime; + if (event.getStartTime() == null) { + startDateTime = startDate; + } else { + + final LocalDateTime startTime = LocalDateTime + .ofInstant(event.getStartTime().toInstant(), + ZoneId.systemDefault()); + + startDateTime = LocalDateTime.of(startDate.toLocalDate(), + startTime.toLocalTime()); + } + jsonGenerator.writeStringField( + "startDate", dateTimeFormatter.format(startDateTime)); + } + + jsonGenerator.writeStringField("mapLink", event.getMapLink()); + } + + @Override + protected Map> collectLocalizedValues( + final ItemCollection instances) { + + final Map eventDateValues = new HashMap<>(); + final Map locationValues = new HashMap<>(); + final Map mainContributorValues = new HashMap<>(); + final Map eventTypeValues = new HashMap<>(); + final Map leadValues = new HashMap<>(); + final Map textValues = new HashMap<>(); + + while(instances.next()) { + + final Event event = (Event) instances.getContentItem(); + final String lang = event.getLanguage(); + final Locale locale = new Locale(lang); + + final String eventDate = event.getEventDate(); + final String location = event.getLocation(); + final String mainContributor = event.getMainContributor(); + final String eventType = event.getEventType(); + final String lead = event.getLead(); + final String text; + if (event.getTextAsset() == null) { + text = ""; + } else { + text = event.getTextAsset().getText(); + } + + eventDateValues.put(locale, eventDate); + locationValues.put(locale, location); + mainContributorValues.put(locale, mainContributor); + eventTypeValues.put(locale, eventType); + leadValues.put(locale, lead); + textValues.put(locale, text); + } + + instances.rewind(); + + final Map> properties = new HashMap<>(); + properties.put("eventDate", eventDateValues); + properties.put("location", locationValues); + properties.put("mainContributor", mainContributorValues); + properties.put("eventType", eventTypeValues); + properties.put("description", leadValues); + properties.put("text", textValues); + + return properties; + } + + @Override + public Class exportsType() { + return Event.class; + } + + @Override + public String exportsBaseDataObjectType() { + return Event.BASE_DATA_OBJECT_TYPE; + } + + @Override + public String convertsToType() { + return "org.librecms.contenttypes.Event"; + } + +}