diff --git a/ccm-cms-types-article/src/com/arsdigita/cms/contenttypes/ArticlesExporter.java b/ccm-cms-types-article/src/com/arsdigita/cms/contenttypes/ArticlesExporter.java index 805398a6d..c3c4f2da9 100644 --- a/ccm-cms-types-article/src/com/arsdigita/cms/contenttypes/ArticlesExporter.java +++ b/ccm-cms-types-article/src/com/arsdigita/cms/contenttypes/ArticlesExporter.java @@ -21,6 +21,7 @@ public class ArticlesExporter extends AbstractContentItemsExporter
{ final Article contentItem, final JsonGenerator jsonGenerator) throws IOException { + // Nothing } @Override diff --git a/ccm-cms-types-newsitem/src/com/arsdigita/cms/contenttypes/NewsItemInitializer.java b/ccm-cms-types-newsitem/src/com/arsdigita/cms/contenttypes/NewsItemInitializer.java index 0ef1aad73..4e7662300 100755 --- a/ccm-cms-types-newsitem/src/com/arsdigita/cms/contenttypes/NewsItemInitializer.java +++ b/ccm-cms-types-newsitem/src/com/arsdigita/cms/contenttypes/NewsItemInitializer.java @@ -20,6 +20,8 @@ package com.arsdigita.cms.contenttypes; import org.apache.log4j.Logger; +import org.libreccm.export.ExportManager; +import org.librecms.contenttypes.NewsExporter; /** * Executes at each system startup and initializes the NewsItem content type. @@ -43,6 +45,8 @@ public class NewsItemInitializer extends ContentTypeInitializer { */ public NewsItemInitializer() { super("ccm-cms-types-newsitem.pdl.mf", NewsItem.BASE_DATA_OBJECT_TYPE); + + ExportManager.getInstance().registerExporter(new NewsExporter()); } /** diff --git a/ccm-cms-types-newsitem/src/org/librecms/contenttypes/NewsExporter.java b/ccm-cms-types-newsitem/src/org/librecms/contenttypes/NewsExporter.java new file mode 100644 index 000000000..e3eb067e7 --- /dev/null +++ b/ccm-cms-types-newsitem/src/org/librecms/contenttypes/NewsExporter.java @@ -0,0 +1,91 @@ +package org.librecms.contenttypes; + +import com.arsdigita.cms.ItemCollection; +import com.arsdigita.cms.contenttypes.NewsItem; + +import com.fasterxml.jackson.core.JsonGenerator; +import org.librecms.contentsection.AbstractContentItemsExporter; + +import java.io.IOException; +import java.time.LocalDateTime; +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 NewsExporter extends AbstractContentItemsExporter { + + @Override + protected void exportContentItemProperties( + final NewsItem newsItem, final JsonGenerator jsonGenerator) + throws IOException { + + final DateTimeFormatter dateTimeFormatter + = DateTimeFormatter.ISO_DATE_TIME; + if (newsItem.getNewsDate() != null) { + final LocalDateTime newsDate = LocalDateTime + .ofInstant(newsItem.getNewsDate().toInstant(), + ZoneId.systemDefault()); + jsonGenerator.writeStringField( + "releaseDate", dateTimeFormatter.format(newsDate)); + } + jsonGenerator.writeBooleanField("homepage", newsItem.isHomepage()); + } + + @Override + protected Map> collectLocalizedValues( + final ItemCollection instances) { + + final Map leadPropertyValues = new HashMap<>(); + final Map textPropertyValues = new HashMap<>(); + + while (instances.next()) { + + final NewsItem news = (NewsItem) instances.getContentItem(); + final String lang = news.getLanguage(); + final Locale locale = new Locale(lang); + final String lead = news.getLead(); + final String text; + if (news.getTextAsset() == null) { + text = ""; + } else { + text = news.getTextAsset().getText(); + } + + leadPropertyValues.put(locale, lead); + textPropertyValues.put(locale, text); + } + + instances.rewind(); + + final Map> properties = new HashMap<>(); + properties.put("description", leadPropertyValues); + properties.put("text", textPropertyValues); + + return properties; + } + + @Override + public Class exportsType() { + + return NewsItem.class; + } + + @Override + public String exportsBaseDataObjectType() { + + return NewsItem.BASE_DATA_OBJECT_TYPE; + } + + @Override + public String convertsToType() { + + return "org.librecms.contenttypes.News"; + } + +}