diff --git a/ccm-cms-assets-relatedlink/src/com/arsdigita/cms/contentassets/RelatedLink.java b/ccm-cms-assets-relatedlink/src/com/arsdigita/cms/contentassets/RelatedLink.java index b6f465e96..dbb6edf07 100755 --- a/ccm-cms-assets-relatedlink/src/com/arsdigita/cms/contentassets/RelatedLink.java +++ b/ccm-cms-assets-relatedlink/src/com/arsdigita/cms/contentassets/RelatedLink.java @@ -182,6 +182,7 @@ public class RelatedLink extends Link { * * @param item The item to return links for * @param name Name of the link list + * @return */ public static DataCollection getRelatedLinks(ContentItem item, String name) { s_log.debug("Getting related links for a content item"); diff --git a/ccm-cms-dabinimporter/src/com/arsdigita/cms/dabin/DaBInImporter.java b/ccm-cms-dabinimporter/src/com/arsdigita/cms/dabin/DaBInImporter.java index 0a581595b..e89eb6ad4 100644 --- a/ccm-cms-dabinimporter/src/com/arsdigita/cms/dabin/DaBInImporter.java +++ b/ccm-cms-dabinimporter/src/com/arsdigita/cms/dabin/DaBInImporter.java @@ -2881,8 +2881,10 @@ public class DaBInImporter extends Program { publisherDe.setName(DaBInImporter.normalizeString(publisherData. getName())); } else { - publisherDe.setTitle(String.format("%s, %s", publisherData. - getName(), publisherData.getPlace())); + /*publisherDe.setTitle(String.format("%s, %s", publisherData. + getName(), publisherData.getPlace()));*/ + publisherDe.setTitle(String.format("%s", publisherData. + getName())); publisherDe.setName(DaBInImporter.normalizeString(String. format( "%s, %s", publisherData.getName(), publisherData. diff --git a/ccm-sci-types-organization/src/com/arsdigita/cms/contenttypes/ui/SciDepartmentPanel.java b/ccm-sci-types-organization/src/com/arsdigita/cms/contenttypes/ui/SciDepartmentPanel.java index bc87a199c..7a9dcb932 100644 --- a/ccm-sci-types-organization/src/com/arsdigita/cms/contenttypes/ui/SciDepartmentPanel.java +++ b/ccm-sci-types-organization/src/com/arsdigita/cms/contenttypes/ui/SciDepartmentPanel.java @@ -21,6 +21,7 @@ package com.arsdigita.cms.contenttypes.ui; import com.arsdigita.bebop.PageState; import com.arsdigita.cms.ContentItem; +import com.arsdigita.cms.contentassets.RelatedLink; import com.arsdigita.cms.contenttypes.GenericOrganizationalUnitContactCollection; import com.arsdigita.cms.contenttypes.GenericOrganizationalUnitPersonCollection; import com.arsdigita.cms.contenttypes.GenericPerson; @@ -29,6 +30,7 @@ import com.arsdigita.cms.contenttypes.SciDepartmentProjectsCollection; import com.arsdigita.cms.contenttypes.SciDepartmentSubDepartmentsCollection; import com.arsdigita.cms.contenttypes.SciOrganizationConfig; import com.arsdigita.cms.contenttypes.SciProject; +import com.arsdigita.persistence.DataCollection; import com.arsdigita.xml.Element; import java.util.Collections; import java.util.LinkedList; @@ -51,6 +53,7 @@ public class SciDepartmentPanel extends SciOrganizationBasePanel { public static final String SHOW_PROJECTS = "projects"; public static final String SHOW_PROJECTS_ONGOING = "projectsOngoing"; public static final String SHOW_PROJECTS_FINISHED = "projectsFinished"; + public static final String SHOW_PUBLICATIONS = "publications"; @Override protected String getDefaultForShowParam() { @@ -447,6 +450,12 @@ public class SciDepartmentPanel extends SciOrganizationBasePanel { availableData.newChildElement("projectsFinished"); } } + DataCollection publicationLinks = + RelatedLink.getRelatedLinks(department, + "SciDepartmentPublications"); + if ((publicationLinks != null) && (publicationLinks.size() > 0)) { + availableData.newChildElement("publications"); + } String show = getShowParam(state); @@ -481,6 +490,12 @@ public class SciDepartmentPanel extends SciOrganizationBasePanel { getFiltersForFinishedProjects()); } else if (SHOW_SUBDEPARTMENTS.equals(show)) { generateSubDepartmentsXML(department, content, state); + } else if (SHOW_PUBLICATIONS.equals(show)) { + generatePublicationsXML( + RelatedLink.getRelatedLinks(item, + "SciDepartmentPublications"), + content, + state); } } } diff --git a/ccm-sci-types-organization/src/com/arsdigita/cms/contenttypes/ui/SciOrganizationBasePanel.java b/ccm-sci-types-organization/src/com/arsdigita/cms/contenttypes/ui/SciOrganizationBasePanel.java index 8b4037910..8dad34ff6 100644 --- a/ccm-sci-types-organization/src/com/arsdigita/cms/contenttypes/ui/SciOrganizationBasePanel.java +++ b/ccm-sci-types-organization/src/com/arsdigita/cms/contenttypes/ui/SciOrganizationBasePanel.java @@ -20,6 +20,9 @@ package com.arsdigita.cms.contenttypes.ui; import com.arsdigita.bebop.PageState; +import com.arsdigita.cms.ContentItem; +import com.arsdigita.cms.ContentItemXMLRenderer; +import com.arsdigita.cms.contentassets.RelatedLink; import com.arsdigita.cms.contenttypes.GenericOrganizationalUnitContactCollection; import com.arsdigita.cms.contenttypes.GenericOrganizationalUnitPersonCollection; import com.arsdigita.cms.contenttypes.GenericPerson; @@ -28,7 +31,13 @@ import com.arsdigita.cms.contenttypes.SciDepartment; import com.arsdigita.cms.contenttypes.SciDepartmentProjectsCollection; import com.arsdigita.cms.contenttypes.SciDepartmentSubDepartmentsCollection; import com.arsdigita.cms.contenttypes.SciProject; +import com.arsdigita.cms.dispatcher.SimpleXMLGenerator; +import com.arsdigita.domain.DomainCollection; +import com.arsdigita.domain.DomainObject; +import com.arsdigita.persistence.DataCollection; +import com.arsdigita.persistence.DataObject; import com.arsdigita.xml.Element; +import java.util.ArrayList; import java.util.Calendar; import java.util.Collections; import java.util.Comparator; @@ -439,4 +448,74 @@ public abstract class SciOrganizationBasePanel } } } + + /** + * Create the XML for the list of publications, using the special + * RelatedLinks passed by the caller. To avoid a dependency to the + * sci-publications module, we are using only methods from + * {@link DataObject}, {@link DomainObject}, {@link DataCollection} and + * {@link DomainCollection}. + * + * @param links Links to the publications + * @param parent The parent XML element for the XML created by this method + * @param state The current page state. + */ + protected void generatePublicationsXML(final DataCollection links, + final Element parent, + final PageState state) { + RelatedLink link; + ContentItem publication; + String objectType; + List publications; + + publications = new ArrayList(); + + while (links.next()) { + link = new RelatedLink(links.getDataObject()); + publication = link.getTargetItem(); + + publications.add(publication); + } + + Collections.sort(publications, new Comparator() { + + public int compare(ContentItem o1, ContentItem o2) { + Integer year1; + Integer year2; + + year1 = (Integer) o1.get("yearOfPublication"); + year2 = (Integer) o2.get("yearOfPublication"); + + if (year1.compareTo(year2) == 0) { + String title1; + String title2; + + title1 = (String) o1.get("title"); + title2 = (String) o2.get("title"); + + return title1.compareTo(title2); + } else { + return (year1.compareTo(year2)) * -1; + } + } + }); + + for (ContentItem pub : publications) { + generatePublicationXML(pub, parent, state); + } + } + + protected void generatePublicationXML(final ContentItem publication, + final Element parent, + final PageState state) { + Element publicationElem; + ContentItemXMLRenderer renderer; + + publicationElem = parent.newChildElement("publications"); + + renderer = new ContentItemXMLRenderer(publicationElem); + renderer.setWrapAttributes(true); + + renderer.walk(publication, SimpleXMLGenerator.class.getName()); + } } diff --git a/ccm-sci-types-organization/src/com/arsdigita/cms/contenttypes/ui/SciOrganizationPanel.java b/ccm-sci-types-organization/src/com/arsdigita/cms/contenttypes/ui/SciOrganizationPanel.java index e7d3a2ac2..53c40acc2 100644 --- a/ccm-sci-types-organization/src/com/arsdigita/cms/contenttypes/ui/SciOrganizationPanel.java +++ b/ccm-sci-types-organization/src/com/arsdigita/cms/contenttypes/ui/SciOrganizationPanel.java @@ -21,6 +21,7 @@ package com.arsdigita.cms.contenttypes.ui; import com.arsdigita.bebop.PageState; import com.arsdigita.cms.ContentItem; +import com.arsdigita.cms.contentassets.RelatedLink; import com.arsdigita.cms.contenttypes.GenericOrganizationalUnitContactCollection; import com.arsdigita.cms.contenttypes.GenericOrganizationalUnitPersonCollection; import com.arsdigita.cms.contenttypes.GenericPerson; @@ -32,10 +33,9 @@ import com.arsdigita.cms.contenttypes.SciOrganizationConfig; import com.arsdigita.cms.contenttypes.SciOrganizationDepartmentsCollection; import com.arsdigita.cms.contenttypes.SciOrganizationProjectsCollection; import com.arsdigita.cms.contenttypes.SciProject; +import com.arsdigita.persistence.DataCollection; import com.arsdigita.xml.Element; -import java.util.Calendar; import java.util.Collections; -import java.util.GregorianCalendar; import java.util.HashSet; import java.util.LinkedList; import java.util.List; @@ -60,6 +60,7 @@ public class SciOrganizationPanel extends SciOrganizationBasePanel { public static final String SHOW_PROJECTS = "projects"; public static final String SHOW_PROJECTS_ONGOING = "projectsOngoing"; public static final String SHOW_PROJECTS_FINISHED = "projectsFinished"; + public static final String SHOW_PUBLICATIONS = "publications"; @Override protected String getDefaultForShowParam() { @@ -546,6 +547,12 @@ public class SciOrganizationPanel extends SciOrganizationBasePanel { availableData.newChildElement("projectsFinished"); } } + DataCollection publicationLinks = + RelatedLink.getRelatedLinks(orga, + "SciOrganizationPublications"); + if ((publicationLinks != null) && (publicationLinks.size() > 0)) { + availableData.newChildElement("publications"); + } String show = getShowParam(state); @@ -578,6 +585,12 @@ public class SciOrganizationPanel extends SciOrganizationBasePanel { } else if (SHOW_PROJECTS_FINISHED.equals(show)) { generateProjectsXML( orga, content, state, getFiltersForFinishedProjects()); + } else if (SHOW_PUBLICATIONS.equals(show)) { + generatePublicationsXML( + RelatedLink.getRelatedLinks(item, + "SciOrganizationPublications"), + content, + state); } } } diff --git a/ccm-sci-types-organization/src/com/arsdigita/cms/contenttypes/ui/SciProjectPanel.java b/ccm-sci-types-organization/src/com/arsdigita/cms/contenttypes/ui/SciProjectPanel.java index 6a3cde56e..06ec01e8e 100644 --- a/ccm-sci-types-organization/src/com/arsdigita/cms/contenttypes/ui/SciProjectPanel.java +++ b/ccm-sci-types-organization/src/com/arsdigita/cms/contenttypes/ui/SciProjectPanel.java @@ -21,15 +21,13 @@ package com.arsdigita.cms.contenttypes.ui; import com.arsdigita.bebop.PageState; import com.arsdigita.cms.ContentItem; +import com.arsdigita.cms.contentassets.RelatedLink; import com.arsdigita.cms.contenttypes.GenericOrganizationalUnitPersonCollection; -import com.arsdigita.cms.contenttypes.GenericPerson; -import com.arsdigita.cms.contenttypes.SciMember; import com.arsdigita.cms.contenttypes.SciOrganizationConfig; import com.arsdigita.cms.contenttypes.SciProject; import com.arsdigita.cms.contenttypes.SciProjectSubProjectsCollection; +import com.arsdigita.persistence.DataCollection; import com.arsdigita.xml.Element; -import java.util.Calendar; -import java.util.GregorianCalendar; import java.util.LinkedList; import java.util.List; import org.apache.log4j.Logger; @@ -234,6 +232,12 @@ public class SciProjectPanel extends SciOrganizationBasePanel { availableData.newChildElement("formerMembers"); } } + DataCollection publicationLinks = + RelatedLink.getRelatedLinks(project, + "SciProjectPublications"); + if ((publicationLinks != null) && (publicationLinks.size() > 0)) { + availableData.newChildElement("publications"); + } String show = getShowParam(state); @@ -256,6 +260,12 @@ public class SciProjectPanel extends SciOrganizationBasePanel { getFiltersForFinishedProjects()); } else if (SHOW_MEMBERS.equals(show)) { generateMembersXML(project, content, state, true, true, true); + } else if (SHOW_PUBLICATIONS.equals(show)) { + generatePublicationsXML( + RelatedLink.getRelatedLinks(item, + "SciProjectPublications"), + content, + state); } } }