From 0178ffa26ed2a3697b05cf938fc4b8102414549b Mon Sep 17 00:00:00 2001 From: jensp Date: Wed, 16 Apr 2014 14:10:30 +0000 Subject: [PATCH] XML output for ccm-sci-assets-publicationsabout git-svn-id: https://svn.libreccm.org/ccm/trunk@2615 8810af33-2d31-482b-a856-94f89814c4df --- .../SciPublicationsAboutInitializer.java | 4 + ...SciPublicationsAboutExtraXMLGenerator.java | 126 ++++++++++++++++++ .../ui/PublicationExtraXmlGenerator.java | 11 ++ 3 files changed, 141 insertions(+) create mode 100644 ccm-sci-assets-publicationsabout/src/com/arsdigita/cms/contentassets/ui/SciPublicationsAboutExtraXMLGenerator.java diff --git a/ccm-sci-assets-publicationsabout/src/com/arsdigita/cms/contentassets/SciPublicationsAboutInitializer.java b/ccm-sci-assets-publicationsabout/src/com/arsdigita/cms/contentassets/SciPublicationsAboutInitializer.java index e86ccdbb1..b8e36aae7 100644 --- a/ccm-sci-assets-publicationsabout/src/com/arsdigita/cms/contentassets/SciPublicationsAboutInitializer.java +++ b/ccm-sci-assets-publicationsabout/src/com/arsdigita/cms/contentassets/SciPublicationsAboutInitializer.java @@ -20,8 +20,10 @@ package com.arsdigita.cms.contentassets; import com.arsdigita.cms.contentassets.ui.SciPublicationsAboutDiscussesStep; import com.arsdigita.cms.contentassets.ui.SciPublicationsAboutDiscussingStep; +import com.arsdigita.cms.contentassets.ui.SciPublicationsAboutExtraXMLGenerator; import com.arsdigita.cms.contenttypes.ContentItemTraversalAdapter; import com.arsdigita.cms.contenttypes.Publication; +import com.arsdigita.cms.contenttypes.ui.PublicationExtraXmlGenerator; import com.arsdigita.cms.ui.authoring.AuthoringKitWizard; import com.arsdigita.db.DbHelper; import com.arsdigita.domain.DomainObjectTraversalAdapter; @@ -87,6 +89,8 @@ public class SciPublicationsAboutInitializer extends CompoundInitializer { new GlobalizedMessage("com.arsdigita.cms.contentassets.about.discussing.desc", "com.arsdigita.cms.contentassets.SciPublicationsAboutResources"), 40); + + PublicationExtraXmlGenerator.addExteningGenerator(new SciPublicationsAboutExtraXMLGenerator()); } } diff --git a/ccm-sci-assets-publicationsabout/src/com/arsdigita/cms/contentassets/ui/SciPublicationsAboutExtraXMLGenerator.java b/ccm-sci-assets-publicationsabout/src/com/arsdigita/cms/contentassets/ui/SciPublicationsAboutExtraXMLGenerator.java new file mode 100644 index 000000000..e30185647 --- /dev/null +++ b/ccm-sci-assets-publicationsabout/src/com/arsdigita/cms/contentassets/ui/SciPublicationsAboutExtraXMLGenerator.java @@ -0,0 +1,126 @@ +/* + * Copyright (c) 2010 Jens Pelzetter + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public License + * as published by the Free Software Foundation; either version 2.1 of + * the License, or (at your option) any later version. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + * + */ +package com.arsdigita.cms.contentassets.ui; + +import com.arsdigita.bebop.Page; +import com.arsdigita.bebop.PageState; +import com.arsdigita.cms.ContentItem; +import com.arsdigita.cms.ExtraXMLGenerator; +import com.arsdigita.cms.contentassets.PublicationCollection; +import com.arsdigita.cms.contentassets.SciPublicationsAboutService; +import com.arsdigita.cms.contenttypes.Publication; +import com.arsdigita.cms.dispatcher.SimpleXMLGenerator; +import com.arsdigita.xml.Element; + +/** + * + * @author Jens Pelzetter + * @version $Id$ + */ +public class SciPublicationsAboutExtraXMLGenerator implements ExtraXMLGenerator { + + private boolean listMode; + + @Override + public void generateXML(final ContentItem item, + final Element element, + final PageState state) { + if (listMode) { + return; + } + + if (!(item instanceof Publication)) { + throw new IllegalArgumentException(String.format( + "ExtraXMLGenerator '%s' only supports items of type '%s'.", + getClass().getName(), + Publication.class.getName())); + } + + final Publication publication = (Publication) item; + final SciPublicationsAboutService service = new SciPublicationsAboutService(); + final PublicationCollection discussedPublications = service.getDiscussedPublications( + publication); + final PublicationCollection discussingPublications = service. + getDiscussingPublications(publication); + if ((discussedPublications != null) && !discussedPublications.isEmpty()) { + final Element discussedElem = element.newChildElement("discussedPublications"); + + while(discussedPublications.next()) { + addDiscussedPublication(discussedElem, + discussedPublications.getPublication(), + state); + } + } + + if ((discussingPublications != null) && !discussingPublications.isEmpty()) { + final Element discussingElem = element.newChildElement("discussingPublications"); + + while(discussingPublications.next()) { + addDiscussingPublication(discussingElem, + discussingPublications.getPublication(), + state); + } + } + } + + private void addDiscussedPublication(final Element parent, + final Publication discussed, + final PageState state) { + final XmlGenerator generator = new XmlGenerator(discussed); + generator.setItemElemName("discussedPublication", ""); + generator.setListMode(true); + generator.generateXML(state, parent, ""); + } + + private void addDiscussingPublication(final Element parent, + final Publication discussing, + final PageState state) { + final XmlGenerator generator = new XmlGenerator(discussing); + generator.setItemElemName("discussingPublication", ""); + generator.setListMode(true); + generator.generateXML(state, parent, ""); + } + + @Override + public void addGlobalStateParams(final Page page) { + //Nothing + } + + @Override + public void setListMode(final boolean listMode) { + this.listMode = listMode; + } + + private class XmlGenerator extends SimpleXMLGenerator { + + private final ContentItem item; + + public XmlGenerator(final ContentItem item) { + super(); + this.item = item; + } + + @Override + protected ContentItem getContentItem(final PageState state) { + return item; + } + + } + +} diff --git a/ccm-sci-publications/src/com/arsdigita/cms/contenttypes/ui/PublicationExtraXmlGenerator.java b/ccm-sci-publications/src/com/arsdigita/cms/contenttypes/ui/PublicationExtraXmlGenerator.java index d2f09fa2b..5b93cd4e8 100644 --- a/ccm-sci-publications/src/com/arsdigita/cms/contenttypes/ui/PublicationExtraXmlGenerator.java +++ b/ccm-sci-publications/src/com/arsdigita/cms/contenttypes/ui/PublicationExtraXmlGenerator.java @@ -34,6 +34,7 @@ import com.arsdigita.cms.scipublications.imexporter.PublicationFormat; import com.arsdigita.cms.scipublications.exporter.SciPublicationsExporters; import com.arsdigita.globalization.GlobalizationHelper; import com.arsdigita.xml.Element; +import java.util.ArrayList; import java.util.List; /** @@ -43,8 +44,13 @@ import java.util.List; */ public class PublicationExtraXmlGenerator implements ExtraXMLGenerator { + private final static List EXTENDING_GENERATORS = new ArrayList(); private boolean listMode; + public static void addExteningGenerator(final ExtraXMLGenerator generator) { + EXTENDING_GENERATORS.add(generator); + } + @Override public void generateXML(final ContentItem item, final Element element, @@ -75,6 +81,11 @@ public class PublicationExtraXmlGenerator implements ExtraXMLGenerator { createExportLink(format, element, (Publication) item, state); } } + + for (ExtraXMLGenerator extending : EXTENDING_GENERATORS) { + extending.setListMode(listMode); + extending.generateXML(item, element, state); + } // System.out.printf("[%s] Created extra XML in %d ms\n", // PublicationExtraXmlGenerator.class.getName(), // (System.nanoTime() - start) / 1000000);