From 3933c21e6d2a10066553243fda7f44819aad175d Mon Sep 17 00:00:00 2001 From: jensp Date: Fri, 18 Apr 2014 08:30:49 +0000 Subject: [PATCH] SciPublicationsAbout asset: It is now possible to filter a list of publications for discussed and discussing publications git-svn-id: https://svn.libreccm.org/ccm/trunk@2618 8810af33-2d31-482b-a856-94f89814c4df --- .../contentassets/SciPublicationsAbout.pdl | 20 ++- .../contentassets/SciPublicationsAbout.java | 117 ++++++++++++++++++ .../SciPublicationsAboutInitializer.java | 13 ++ .../SciPublicationsAboutService.java | 41 ++++-- ...SciPublicationsAboutExtraXMLGenerator.java | 2 +- .../includes/types/SciPublications/Series.xsl | 2 +- 6 files changed, 182 insertions(+), 13 deletions(-) create mode 100644 ccm-sci-assets-publicationsabout/src/com/arsdigita/cms/contentassets/SciPublicationsAbout.java diff --git a/ccm-sci-assets-publicationsabout/pdl/com/arsdigita/cms/contentassets/SciPublicationsAbout.pdl b/ccm-sci-assets-publicationsabout/pdl/com/arsdigita/cms/contentassets/SciPublicationsAbout.pdl index f6bf64ef8..8151aaa9c 100644 --- a/ccm-sci-assets-publicationsabout/pdl/com/arsdigita/cms/contentassets/SciPublicationsAbout.pdl +++ b/ccm-sci-assets-publicationsabout/pdl/com/arsdigita/cms/contentassets/SciPublicationsAbout.pdl @@ -20,7 +20,8 @@ model com.arsdigita.cms.contentassets; import com.arsdigita.cms.contenttypes.PublicationBundle; -import com.arsdigita.kernel.ACSObjects; +import com.arsdigita.kernel.ACSObject; +import com.arsdigita.cms.ContentItem; association { @@ -35,4 +36,21 @@ association { to ct_publication_bundles.bundle_id; Integer[0..1] publicationsOrder = ca_publications_about.publications_order INTEGER; +} + +object type SciPublicationsAbout extends ACSObject { + + String[0..1] discusses = ca_publications_about_asset.discusses; + String[0..1] discussedBy = ca_publications_about_asset.discussed_by; + + reference key ( ca_publications_about_asset.about_id); +} + +association { + + composite ContentItem[1..1] owner = join ca_publications_about_asset.owner_id + to cms_items.item_id; + + component SciPublicationsAbout[0..1] publicationsAbout = join cms_items.item_id + to ca_publications_about_asset.owner_id; } \ No newline at end of file diff --git a/ccm-sci-assets-publicationsabout/src/com/arsdigita/cms/contentassets/SciPublicationsAbout.java b/ccm-sci-assets-publicationsabout/src/com/arsdigita/cms/contentassets/SciPublicationsAbout.java new file mode 100644 index 000000000..9904af47a --- /dev/null +++ b/ccm-sci-assets-publicationsabout/src/com/arsdigita/cms/contentassets/SciPublicationsAbout.java @@ -0,0 +1,117 @@ +/* + * 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; + +import com.arsdigita.cms.ItemCollection; +import com.arsdigita.cms.contenttypes.Publication; +import com.arsdigita.cms.contenttypes.PublicationBundle; +import com.arsdigita.kernel.ACSObject; +import com.arsdigita.persistence.DataObject; + +/** + * + * @author Jens Pelzetter + * @version $Id$ + */ +public class SciPublicationsAbout extends ACSObject { + + public static final String BASE_DATA_OBJECT_TYPE + = "com.arsdigita.cms.contentassets.SciPublicationsAbout"; + + public static final String DISCUSSES = "discusses"; + public static final String DISCUSSED_BY = "discussedBy"; + public static final String OWNER = "owner"; + + public SciPublicationsAbout() { + super(BASE_DATA_OBJECT_TYPE); + } + + public SciPublicationsAbout(final String type) { + super(type); + } + + public SciPublicationsAbout(final DataObject dataObject) { + super(dataObject); + } + + public static SciPublicationsAbout create(final Publication owner) { + final PublicationBundle ownerBundle = owner.getPublicationBundle(); + final ItemCollection instances = ownerBundle.getInstances(); + + Publication instance; + while (instances.next()) { + instance = (Publication) instances.getContentItem(); + createForInstance(instance); + } + + return new SciPublicationsAbout((DataObject) owner.get(PUBLICATIONS_ABOUT)); + } + public static final String PUBLICATIONS_ABOUT = "publicationsAbout"; + + private static void createForInstance(final Publication instance) { + final SciPublicationsAbout about = new SciPublicationsAbout(); + about.set("owner", instance); + about.update(); + + about.save(); + } + + public String getDiscussedPublications() { + return (String) get(DISCUSSES); + } + + public String getDiscussingPublications() { + return (String) get(DISCUSSED_BY); + } + + protected void update() { + + final Publication owner = new Publication((DataObject) get(OWNER)); + final SciPublicationsAboutService service = new SciPublicationsAboutService(); + + final PublicationCollection discussedPublications = service.getDiscussedPublications(owner); + final StringBuilder discussedBuilder = new StringBuilder(); + while (discussedPublications.next()) { + discussedBuilder.append(discussedPublications.getPublication().getTitle()); + discussedBuilder.append(';'); + } + + final PublicationCollection discussingPublications = service. + getDiscussingPublications(owner); + final StringBuilder discussingBuilder = new StringBuilder(); + while (discussingPublications.next()) { + discussingBuilder.append(discussingPublications.getPublication().getTitle()); + discussingBuilder.append(';'); + } + + final PublicationBundle bundle = owner.getPublicationBundle(); + final ItemCollection instances = bundle.getInstances(); + + Publication instance; + SciPublicationsAbout about; + while(instances.next()) { + instance = (Publication) instances.getContentItem(); + about = new SciPublicationsAbout((DataObject) instance.get(PUBLICATIONS_ABOUT)); + + about.set(DISCUSSES, discussedBuilder.toString()); + about.set(DISCUSSED_BY, discussingBuilder.toString()); + } + } + +} 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 b8e36aae7..a512ac758 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 @@ -26,9 +26,13 @@ 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.DomainObject; +import com.arsdigita.domain.DomainObjectFactory; +import com.arsdigita.domain.DomainObjectInstantiator; import com.arsdigita.domain.DomainObjectTraversalAdapter; import com.arsdigita.domain.xml.TraversalHandler; import com.arsdigita.globalization.GlobalizedMessage; +import com.arsdigita.persistence.DataObject; import com.arsdigita.persistence.pdl.ManifestSource; import com.arsdigita.persistence.pdl.NameFilter; import com.arsdigita.runtime.CompoundInitializer; @@ -58,6 +62,15 @@ public class SciPublicationsAboutInitializer extends CompoundInitializer { super.init(event); + DomainObjectFactory.registerInstantiator(SciPublicationsAbout.BASE_DATA_OBJECT_TYPE, + new DomainObjectInstantiator() { + + @Override + protected DomainObject doNewInstance(final DataObject dataObject) { + return new SciPublicationsAbout(dataObject); + } + }); + final String traversal = "/WEB-INF/traversal-adapters/com/arsdigita/cms/contentassets/" + "SciPublicationsAbout.xml"; XML.parseResource(traversal, new TraversalHandler() { diff --git a/ccm-sci-assets-publicationsabout/src/com/arsdigita/cms/contentassets/SciPublicationsAboutService.java b/ccm-sci-assets-publicationsabout/src/com/arsdigita/cms/contentassets/SciPublicationsAboutService.java index 5a1b1c8d1..b93905b36 100644 --- a/ccm-sci-assets-publicationsabout/src/com/arsdigita/cms/contentassets/SciPublicationsAboutService.java +++ b/ccm-sci-assets-publicationsabout/src/com/arsdigita/cms/contentassets/SciPublicationsAboutService.java @@ -21,6 +21,7 @@ package com.arsdigita.cms.contentassets; import com.arsdigita.cms.contenttypes.Publication; import com.arsdigita.cms.contenttypes.PublicationBundle; import com.arsdigita.persistence.DataCollection; +import com.arsdigita.persistence.DataObject; /** * This class provides some convenient methods for dealing with the About asset/mixin. @@ -32,6 +33,7 @@ public class SciPublicationsAboutService { public static final String DISCUSSED_BY = "discussedBy"; public static final String DISCUSSING = "discusses"; + private static final String PUBLICATIONS_ABOUT = "publicationsAbout"; /** * Get all publications which are discussed by the provided publication. @@ -59,6 +61,23 @@ public class SciPublicationsAboutService { final PublicationBundle discussedBundle = discussed.getPublicationBundle(); discussingBundle.add(DISCUSSING, discussedBundle); + + final DataObject discussingAboutDobj = (DataObject) discussing.get(PUBLICATIONS_ABOUT); + if (discussingAboutDobj == null) { + SciPublicationsAbout.create(discussing); + } else { + final SciPublicationsAbout discussingAbout = new SciPublicationsAbout( + discussingAboutDobj); + discussingAbout.update(); + } + + final DataObject discussedAboutDobj = (DataObject) discussed.get(PUBLICATIONS_ABOUT); + if (discussedAboutDobj == null) { + SciPublicationsAbout.create(discussed); + } else { + final SciPublicationsAbout discussedAbout = new SciPublicationsAbout(discussedAboutDobj); + discussedAbout.update(); + } } /** @@ -77,31 +96,33 @@ public class SciPublicationsAboutService { /** * Retrieves all publications which are discussing the provided publication. - * + * * @param discussed - * @return + * + * @return */ public PublicationCollection getDiscussingPublications(final Publication discussed) { final PublicationBundle bundle = discussed.getPublicationBundle(); - + final DataCollection dataCollection = (DataCollection) bundle.get(DISCUSSED_BY); - + return new PublicationCollection(dataCollection); } - - public void addDiscussingPublication(final Publication discussed, + + public void addDiscussingPublication(final Publication discussed, final Publication discussing) { final PublicationBundle discussedBundle = discussed.getPublicationBundle(); final PublicationBundle discussingBundle = discussing.getPublicationBundle(); - + discussedBundle.add(DISCUSSED_BY, discussingBundle); } - + public void removeDiscussingPublication(final Publication discussed, - final Publication discussing) { + final Publication discussing) { final PublicationBundle discussedBundle = discussed.getPublicationBundle(); final PublicationBundle discussingBundle = discussing.getPublicationBundle(); - + discussedBundle.remove(DISCUSSED_BY, discussingBundle); } + } 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 index d7c3c02d1..1452c8cee 100644 --- 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 @@ -1,5 +1,5 @@ /* - * Copyright (c) 2010 Jens Pelzetter + * Copyright (c) 2014 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 diff --git a/ccm-sci-bundle/web/themes/mandalay/user/includes/types/SciPublications/Series.xsl b/ccm-sci-bundle/web/themes/mandalay/user/includes/types/SciPublications/Series.xsl index 6e3900fb1..ba66128ed 100644 --- a/ccm-sci-bundle/web/themes/mandalay/user/includes/types/SciPublications/Series.xsl +++ b/ccm-sci-bundle/web/themes/mandalay/user/includes/types/SciPublications/Series.xsl @@ -307,7 +307,7 @@