diff --git a/ccm-cms/src/com/arsdigita/cms/contenttypes/ui/panels/SelectFilter.java b/ccm-cms/src/com/arsdigita/cms/contenttypes/ui/panels/SelectFilter.java index 587e8f1f2..694f40c09 100644 --- a/ccm-cms/src/com/arsdigita/cms/contenttypes/ui/panels/SelectFilter.java +++ b/ccm-cms/src/com/arsdigita/cms/contenttypes/ui/panels/SelectFilter.java @@ -1,5 +1,6 @@ package com.arsdigita.cms.contenttypes.ui.panels; +import com.arsdigita.persistence.DataCollection; import com.arsdigita.persistence.DataQuery; import com.arsdigita.xml.Element; import java.util.ArrayList; @@ -45,7 +46,7 @@ public class SelectFilter implements Filter { this.allOptionIsDefault = allOptionIsDefault; this.propertyIsNumeric = propertyIsNumeric; } - + public SelectFilter(final String label, final String property, final boolean reverseOptions, @@ -74,11 +75,11 @@ public class SelectFilter implements Filter { this.queryProperty = queryProperty; } - public String getFilter() { + public String getFilter() { if ((value == null) || value.isEmpty()) { if (allOptionIsDefault) { value = ALL; - } else if(emptyDefaultOption) { + } else if (emptyDefaultOption) { value = NONE; } else { value = getOptions().get(0); @@ -109,14 +110,14 @@ public class SelectFilter implements Filter { filter.addAttribute("type", "select"); filter.addAttribute("label", label); - if(options.isEmpty()) { + if (options.isEmpty()) { return; } - + if ((value == null) || value.isEmpty()) { if (allOptionIsDefault) { selected = ALL; - } else if(emptyDefaultOption) { + } else if (emptyDefaultOption) { selected = NONE; } else { selected = options.get(0); @@ -124,14 +125,14 @@ public class SelectFilter implements Filter { } else { selected = value; } - + filter.addAttribute("selected", selected); if (emptyDefaultOption) { optionElem = filter.newChildElement("option"); optionElem.addAttribute("label", NONE); } - + if (allOption) { optionElem = filter.newChildElement("option"); optionElem.addAttribute("label", ALL); @@ -141,7 +142,7 @@ public class SelectFilter implements Filter { optionElem = filter.newChildElement("option"); optionElem.addAttribute("label", optionStr); if (propertyIsNumeric) { - optionElem.addAttribute("valueType", "number"); + optionElem.addAttribute("valueType", "number"); } else { optionElem.addAttribute("valueType", "text"); } @@ -152,31 +153,36 @@ public class SelectFilter implements Filter { this.value = value; } - private List getOptions() { + private List getOptions() { Object obj; String option; Set optionsSet; List options; optionsSet = new HashSet(); - - while(dataQuery.next()) { - obj = dataQuery.get(queryProperty); + + while (dataQuery.next()) { + if (dataQuery instanceof DataCollection) { + obj = ((DataCollection) dataQuery.get(queryProperty)); + } else { + obj = dataQuery.get(queryProperty); + } if (obj == null) { continue; } option = obj.toString(); optionsSet.add(option); } - + dataQuery.rewind(); - + options = new ArrayList(optionsSet); Collections.sort(options); if (reverseOptions) { Collections.reverse(options); } - + return options; } + } diff --git a/ccm-sci-personalpublications/src/com/arsdigita/cms/publicpersonalprofile/PersonalPublications.java b/ccm-sci-personalpublications/src/com/arsdigita/cms/publicpersonalprofile/PersonalPublications.java index 23aba402c..ba6da7706 100644 --- a/ccm-sci-personalpublications/src/com/arsdigita/cms/publicpersonalprofile/PersonalPublications.java +++ b/ccm-sci-personalpublications/src/com/arsdigita/cms/publicpersonalprofile/PersonalPublications.java @@ -265,7 +265,7 @@ public class PersonalPublications implements ContentGenerator { final XmlGenerator generator = new XmlGenerator(publication); generator.setItemElemName("publications", ""); generator.setListMode(true); - generator.generateXML(null, parent, ""); + generator.generateXML(state, parent, ""); } private class XmlGenerator extends SimpleXMLGenerator { diff --git a/ccm-sci-publications/pdl/com/arsdigita/content-types/Publication.pdl b/ccm-sci-publications/pdl/com/arsdigita/content-types/Publication.pdl index f641c4070..065393ae7 100644 --- a/ccm-sci-publications/pdl/com/arsdigita/content-types/Publication.pdl +++ b/ccm-sci-publications/pdl/com/arsdigita/content-types/Publication.pdl @@ -85,86 +85,27 @@ association { Integer[0..1] publicationOrder = cms_organizationalunits_publications_map.publication_order INTEGER; } -//Retrieves the publications (the ids). Allows filtering for a orgaunit id -//For each author there will be on row in the result -query getIdsOfPublicationsForOrgaUnitOneRowPerAuthor { - BigDecimal publicationId; - String objectType; - BigDecimal orgaunitId; - String title; - Integer year; - String authorSurname; - String authorGivenname; - String language; - - do { - select distinct on (cms_pages.item_id) cms_pages.item_id, - cms_pages.title, - acs_objects.object_type, - cms_organizationalunits.organizationalunit_id, - ct_publications.year, - cms_persons.surname, - cms_persons.givenname, - cms_items.language - from cms_pages - join ct_publications on cms_pages.item_id = ct_publications.publication_id - join ct_publications_authorship on ct_publications.publication_id = ct_publications_authorship.publication_id - join cms_persons on ct_publications_authorship.person_id = cms_persons.person_id - join cms_organizationalunits_publications_map on cms_pages.item_id = cms_organizationalunits_publications_map.publication_id - join cms_organizationalunits on cms_organizationalunits_publications_map.orgaunit_id = cms_organizationalunits.organizationalunit_id - join acs_objects on cms_pages.item_id = acs_objects.object_id - join cms_items on cms_items.item_id = cms_pages.item_id - where cms_organizationalunits.organizationalunit_id in :orgaunitIds - } map { - publicationId = cms_pages.item_id; - objectType = acs_objects.object_type; - orgaunitId = cms_organizationalunits.organizationalunit_id; - title = cms_pages.title; - year = ct_publications.year; - authorSurname = cms_persons.surname; - authorGivenname = cms_persons.givenname; - language = cms_items.item_id; - } -} - //Retrieves the publications (the ids). Allows filtering for a orgaunit id //The authors are merged into one field in the result, each publication will //only appear one time query getIdsOfPublicationsForOrgaUnit { - BigDecimal publicationId; - String objectType; + BigDecimal publicationId; BigDecimal orgaunitId; - String title; - Integer year; - String authors; - String language; - Boolean reviewed; - + String name; + do { - select distinct on (cms_pages.item_id) cms_pages.item_id, - acs_objects.object_type, - cms_pages.title, - cms_organizationalunits.organizationalunit_id, - ct_publications.year, - ct_publications.authors, - cms_items.language, - ct_publications.reviewed - from cms_pages - join ct_publications on cms_pages.item_id = ct_publications.publication_id - join cms_organizationalunits_publications_map on cms_pages.item_id = cms_organizationalunits_publications_map.publication_id - join cms_organizationalunits on cms_organizationalunits_publications_map.orgaunit_id = cms_organizationalunits.organizationalunit_id - join acs_objects on cms_pages.item_id = acs_objects.object_id - join cms_items on cms_pages.item_id = cms_items.item_id - where cms_organizationalunits.organizationalunit_id in :orgaunitIds + select distinct on (ct_publication_bundles.bundle_id) + ct_publication_bundles.bundle_id, + cms_items.name, + cms_organizationalunits_publications_map.orgaunit_id + from ct_publication_bundles + join cms_items on ct_publication_bundles.bundle_id = cms_items.item_id + join cms_organizationalunits_publications_map on ct_publication_bundles.bundle_id = cms_organizationalunits_publications_map.publication_id + where cms_organizationalunits_publications_map.orgaunit_id in :orgaunitIds } map { - publicationId = cms_pages.item_id; - objectType = acs_objects.object_type; - orgaunitId = cms_organizationalunits.organizationalunit_id; - title = cms_pages.title; - year = ct_publications.year; - authors = ct_publications.authors; - language = cms_items.language; - reviewed = ct_publications.reviewed; + publicationId =ct_publication_bundles.bundle_id; + orgaunitId = cms_organizationalunits_publications_map.orgaunit_id; + name = cms_items.name; } } @@ -172,128 +113,18 @@ query getIdsOfPublicationsForOrgaUnit { query getPublicationsForAuthor { BigDecimal publicationId; BigDecimal authorId; - String objectType; - String title; - Integer year; - String language; - Boolean reviewed; - String authors; - BigDecimal parent; + String name; do { - select cms_pages.item_id, - acs_objects.object_type, - cms_pages.title, - ct_publications_authorship.person_id, - ct_publications.year, - cms_items.language, - ct_publications.reviewed, - ct_publications.authors, - cms_items.parent_id - from cms_pages - join ct_publications on cms_pages.item_id = ct_publications.publication_id - join ct_publications_authorship on ct_publications.publication_id = ct_publications_authorship.publication_id - join cms_items on cms_pages.item_id = cms_items.item_id - join acs_objects on cms_pages.item_id = acs_objects.object_id + select ct_publication_bundles.bundle_id, + ct_publications_authorship.person_id, + cms_items.name + from ct_publication_bundles.bundle_id, + join cms_items on ct_publication_bundles.bundle_id = cms_items.item_id + join ct_publications_authorship on ct_publication_bundles.bundle_id = ct_publications_authorship.publication_id } map { - publicationId = cms_pages.item_id; - objectType = acs_objects.object_type; + publicationId = ct_publication_bundles.bundle_id; authorId = ct_publications_authorship.person_id; - title = cms_pages.title; - year = ct_publications.year; - language = ct_items.language; - reviewed = ct_publications.reviewed; - authors = ct_publications.authors; - parent = cms_items.parent_id; - } -} - -//Retrieves all publications of an author -query getPublicationsForAuthorWithAuthors { - BigDecimal publicationId; - BigDecimal authorId; - String objectType; - String title; - Integer year; - String authors; - String language; - Boolean reviewed; - - do { - select cms_pages.item_id, - acs_objects.object_type, - cms_pages.title, - ct_publications_authorship.person_id, - ct_publications.year, - ct_publications.reviewed, - ct_publications.authors - //(select array_to_string(array (select cms_persons.surname || ', ' || cms_persons.givenname - // from cms_persons - // join ct_publications_authorship on cms_persons.person_id = ct_publications_authorship.person_id - // where ct_publications_authorship.publication_id = cms_pages.item_id order by ct_publications_authorship.authorship_order), '; ')) as authors - from cms_pages - join ct_publications on cms_pages.item_id = ct_publications.publication_id - join ct_publications_authorship on ct_publications.publication_id = ct_publications_authorship.publication_id - join cms_items on cms_pages.item_id = cms_items.item_id - join acs_objects on cms_pages.item_id = acs_objects.object_id - } map { - publicationId = cms_pages.item_id; - objectType = acs_objects.object_type; - authorId = ct_publications_authorship.person_id; - title = cms_pages.title; - year = ct_publications.year; - authors = ct_publications.authors; - language = ct_items.language; - reviewed = ct_publications.reviewed; - } -} - -//Old, possible obsolete queries. Will be removed soon -query getAllYearsOfPublication { - Integer yearOfPublication; - - do { - select distinct ct_publications.year - from ct_publications - } map { - yearOfPublication = ct_publications.year; - } -} - -query getAllYearsOfPublicationForAuthor { - Integer yearOfPublication; - - do { - select distinct ct_publications.year - from ct_publications join ct_publications_authorship on ct_publications.publication_id = ct_publications_authorship.publication_id - where person_id = :author - } map { - yearOfPublication = ct_publications.year; - } -} - -query getAllPublicationTypesForAuthor { - - String objectType; - - do { - select distinct acs_objects.object_type - from ct_publications join acs_objects on ct_publications.publication_id = acs_objects.object_id join ct_publications_authorship on ct_publications.publication_id = ct_publications_authorship.publication_id - where person_id = :author - } map { - objectType = acs_objects.object_type; - } - -} - -query getIdsOfPublicationsOfSciMember { - BigDecimal publicationId; - - do { - select ct_publications_authorship.publication_id - from ct_publications_authorship - where ct_publications_authorship.person_id = :author - } map { - publicationId = ct_publications_authorship.publication_id; + name = cms_items.name; } } \ No newline at end of file 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 9dcb51f17..d59ae99f6 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 @@ -39,13 +39,11 @@ public class PublicationExtraXmlGenerator implements ExtraXMLGenerator { final Publication publication = (Publication) item; createAuthorsXml(publication, element, state); - createOrgaUnitsXml(publication, element, state); - if (!listMode) { + createOrgaUnitsXml(publication, element, state); createSeriesXml(publication, element, state); - final List formats = SciPublicationsExporters. - getInstance().getSupportedFormats(); + final List formats = SciPublicationsExporters.getInstance().getSupportedFormats(); for (PublicationFormat format : formats) { @@ -89,8 +87,7 @@ public class PublicationExtraXmlGenerator implements ExtraXMLGenerator { final Element parent, final PageState state) { final PublicationGenericOrganizationalsUnitCollection orgaunits = - publication. - getOrganizationalUnits(); + publication.getOrganizationalUnits(); if ((orgaunits == null) || orgaunits.isEmpty()) { return; } @@ -98,8 +95,7 @@ public class PublicationExtraXmlGenerator implements ExtraXMLGenerator { final Element orgaunitsElem = parent.newChildElement( "organizationalunits"); while (orgaunits.next()) { - createOrgaUnitXml(orgaunits.getOrganizationalUnit(GlobalizationHelper. - getNegotiatedLocale().getLanguage()), + createOrgaUnitXml(orgaunits.getOrganizationalUnit(GlobalizationHelper.getNegotiatedLocale().getLanguage()), orgaunitsElem, state); } @@ -123,8 +119,7 @@ public class PublicationExtraXmlGenerator implements ExtraXMLGenerator { final Element seriesElem = parent.newChildElement("series"); while (series.next()) { - createSeriesElemXml(series.getSeries(GlobalizationHelper. - getNegotiatedLocale().getLanguage()), + createSeriesElemXml(series.getSeries(GlobalizationHelper.getNegotiatedLocale().getLanguage()), seriesElem, state); } @@ -177,5 +172,6 @@ public class PublicationExtraXmlGenerator implements ExtraXMLGenerator { protected ContentItem getContentItem(final PageState state) { return item; } + } } diff --git a/ccm-sci-types-department/src/com/arsdigita/cms/contenttypes/ui/SciDepartmentMembersTab.java b/ccm-sci-types-department/src/com/arsdigita/cms/contenttypes/ui/SciDepartmentMembersTab.java index a0d3aa325..9f779d62a 100644 --- a/ccm-sci-types-department/src/com/arsdigita/cms/contenttypes/ui/SciDepartmentMembersTab.java +++ b/ccm-sci-types-department/src/com/arsdigita/cms/contenttypes/ui/SciDepartmentMembersTab.java @@ -162,7 +162,7 @@ public class SciDepartmentMembersTab implements GenericOrgaUnitTab { final StringBuilder filterBuilder = new StringBuilder(); while (personBundlesQuery.next()) { if (filterBuilder.length() > 0) { - filterBuilder.append(","); + filterBuilder.append(','); } filterBuilder.append(personBundlesQuery.get("memberId").toString()); } @@ -171,10 +171,10 @@ public class SciDepartmentMembersTab implements GenericOrgaUnitTab { if (filterBuilder.length() == 0) { //No member return null to indicate return null; - } else { - membersQuery.addFilter(String.format("parent.id in (%s)", filterBuilder.toString())); } - + + membersQuery.addFilter(String.format("parent.id in (%s)", filterBuilder.toString())); + membersQuery.addOrder(GenericPerson.SURNAME); membersQuery.addOrder(GenericPerson.GIVENNAME); diff --git a/ccm-sci-types-department/src/com/arsdigita/cms/contenttypes/ui/SciDepartmentProjectsTab.java b/ccm-sci-types-department/src/com/arsdigita/cms/contenttypes/ui/SciDepartmentProjectsTab.java index b5c84d8ed..94f7646b4 100644 --- a/ccm-sci-types-department/src/com/arsdigita/cms/contenttypes/ui/SciDepartmentProjectsTab.java +++ b/ccm-sci-types-department/src/com/arsdigita/cms/contenttypes/ui/SciDepartmentProjectsTab.java @@ -225,7 +225,7 @@ public class SciDepartmentProjectsTab implements GenericOrgaUnitTab { final StringBuilder filterBuilder = new StringBuilder(); while (projectBundlesQuery.next()) { if (filterBuilder.length() > 0) { - filterBuilder.append(","); + filterBuilder.append(','); } filterBuilder.append(projectBundlesQuery.get("projectId").toString()); } @@ -235,10 +235,10 @@ public class SciDepartmentProjectsTab implements GenericOrgaUnitTab { if (filterBuilder.length() == 0) { //No Projects, return null to indicate return null; - } else { - projectsQuery.addFilter(String.format("parent.id in (%s)", filterBuilder.toString())); - } - + } + + projectsQuery.addFilter(String.format("parent.id in (%s)", filterBuilder.toString())); + if (Kernel.getConfig().languageIndependentItems()) { final FilterFactory filterFactory = projectsQuery.getFilterFactory(); final Filter filter = filterFactory.or(). diff --git a/ccm-sci-types-department/src/com/arsdigita/cms/contenttypes/ui/SciDepartmentPublicationsTab.java b/ccm-sci-types-department/src/com/arsdigita/cms/contenttypes/ui/SciDepartmentPublicationsTab.java index aa8dd1afd..4efba427a 100644 --- a/ccm-sci-types-department/src/com/arsdigita/cms/contenttypes/ui/SciDepartmentPublicationsTab.java +++ b/ccm-sci-types-department/src/com/arsdigita/cms/contenttypes/ui/SciDepartmentPublicationsTab.java @@ -13,7 +13,12 @@ import com.arsdigita.cms.contenttypes.ui.panels.TextFilter; import com.arsdigita.cms.dispatcher.SimpleXMLGenerator; import com.arsdigita.domain.DomainObjectFactory; import com.arsdigita.globalization.Globalization; +import com.arsdigita.globalization.GlobalizationHelper; +import com.arsdigita.kernel.Kernel; +import com.arsdigita.persistence.DataCollection; import com.arsdigita.persistence.DataQuery; +import com.arsdigita.persistence.Filter; +import com.arsdigita.persistence.FilterFactory; import com.arsdigita.persistence.OID; import com.arsdigita.persistence.SessionManager; import com.arsdigita.xml.Element; @@ -34,15 +39,10 @@ public class SciDepartmentPublicationsTab implements GenericOrgaUnitTab { SciDepartmentPublicationsTab.class); private static final SciDepartmentPublicationsTabConfig config = new SciDepartmentPublicationsTabConfig(); - private static final String YEAR_PARAM = "year"; + private static final String YEAR_PARAM = "yearOfPublication"; private static final String TITLE_PARAM = "title"; private static final String AUTHOR_PARAM = "author"; - /*private static final String SORT_PARAM = "sortBy"; - private static final String SORT_BY_YEAR_ASC = "yearAsc"; - private static final String SORT_BY_YEAR_DESC = "yearDesc"; - private static final String SORT_BY_TITLE = "title"; - private static final String SORT_BY_AUTHOR = "author";*/ - private final SelectFilter yearFilter = new SelectFilter(YEAR_PARAM, + private final SelectFilter yearFilter = new SelectFilter("year", YEAR_PARAM, true, true, @@ -60,17 +60,14 @@ public class SciDepartmentPublicationsTab implements GenericOrgaUnitTab { public SciDepartmentPublicationsTab() { super(); - if (config.getOneRowPerAuthor()) { - authorFilter = new TextFilter(AUTHOR_PARAM, "authorSurname"); - } else { - authorFilter = new TextFilter(AUTHOR_PARAM, "authors"); - } + authorFilter = new TextFilter(AUTHOR_PARAM, "authorsStr"); } public boolean hasData(final GenericOrganizationalUnit orgaunit, final PageState state) { final long start = System.currentTimeMillis(); + //Check if ccm-sci-publications is installed final ContentTypeCollection types = ContentType.getAllContentTypes(); types.addFilter( "associatedObjectType = 'com.arsdigita.cms.contenttypes.Publication'"); @@ -80,7 +77,8 @@ public class SciDepartmentPublicationsTab implements GenericOrgaUnitTab { } types.close(); - final boolean result = !getData(orgaunit).isEmpty(); + final DataCollection data = getData(orgaunit); + final boolean result = (data != null) && !data.isEmpty(); logger.debug(String.format("Needed %d ms to determine if department " + "'%s' has publications.", @@ -93,7 +91,7 @@ public class SciDepartmentPublicationsTab implements GenericOrgaUnitTab { final Element parent, final PageState state) { final long start = System.currentTimeMillis(); - final DataQuery publications = getData(orgaunit); + final DataCollection publications = getData(orgaunit); final HttpServletRequest request = state.getRequest(); final Element depPublicationsElem = parent.newChildElement( @@ -102,7 +100,6 @@ public class SciDepartmentPublicationsTab implements GenericOrgaUnitTab { final String yearValue = Globalization.decodeParameter(request, YEAR_PARAM); final String titleValue = Globalization.decodeParameter(request, TITLE_PARAM); final String authorValue = Globalization.decodeParameter(request, AUTHOR_PARAM); - //final String sortValue = Globalization.decodeParameter(request, SORT_PARAM); final Element filtersElem = depPublicationsElem.newChildElement( "filters"); @@ -114,27 +111,17 @@ public class SciDepartmentPublicationsTab implements GenericOrgaUnitTab { depPublicationsElem.newChildElement("greeting"); - publications.addOrder("year desc"); - if (config.getOneRowPerAuthor()) { - publications.addOrder("case when (authorSurname is null) " - + "then 'zzzz' " - + "else authorSurname " - + "end asc"); - publications.addOrder("case when (authorGivenname is null) " - + "then 'zzzz' " - + "else authorGivenname " - + "end asc"); - } else { - publications.addOrder("case when (authors is null) " - + "then 'zzzz' " - + "else authors " - + "end asc"); - } + publications.addOrder("yearOfPublication desc"); + publications.addOrder("case when (authorsStr is null) " + + "then 'zzzz' " + + "else authorsStr " + + "end asc"); + publications.addOrder("title asc"); publications.setRange(1, config.getGreetingSize() + 1); - yearFilter.setDataQuery(publications, "year"); + yearFilter.setDataQuery(publications, YEAR_PARAM); yearFilter.generateXml(filtersElem); titleFilter.generateXml(filtersElem); @@ -142,64 +129,11 @@ public class SciDepartmentPublicationsTab implements GenericOrgaUnitTab { } else { - /*if (SORT_BY_AUTHOR.equals(sortValue)) { - if (config.getOneRowPerAuthor()) { - publications.addOrder("surname"); - } else { - publications.addOrder("authors"); - } - publications.addOrder("title"); - publications.addOrder("year asc"); - } else if (SORT_BY_TITLE.equals(sortValue)) { - publications.addOrder("title"); - if (config.getOneRowPerAuthor()) { - publications.addOrder("surname"); - } else { - publications.addOrder("authors"); - } - publications.addOrder("year asc"); - } else if (SORT_BY_YEAR_ASC.equals(sortValue)) { - publications.addOrder("year asc"); - if (config.getOneRowPerAuthor()) { - publications.addOrder("surname"); - } else { - publications.addOrder("authors"); - } - publications.addOrder("title"); - } else if (SORT_BY_YEAR_DESC.equals(sortValue)) { - publications.addOrder("year desc"); - if (config.getOneRowPerAuthor()) { - publications.addOrder("surname"); - } else { - publications.addOrder("authors"); - } - publications.addOrder("title"); - } else { - if (config.getOneRowPerAuthor()) { - publications.addOrder("surname"); - } else { - publications.addOrder("authors"); - } - publications.addOrder("title"); - publications.addOrder("year asc"); - }*/ - - publications.addOrder("year desc"); - if (config.getOneRowPerAuthor()) { - publications.addOrder("case when (authorSurname is null) " - + "then 'zzzz' " - + "else authorSurname " - + "end asc"); - publications.addOrder("case when (authorGivenname is null) " - + "then 'zzzz' " - + "else authorGivenname " - + "end asc"); - } else { - publications.addOrder("case when (authors is null) " - + "then 'zzzz' " - + "else authors " - + "end asc"); - } + publications.addOrder("yearOfPublication desc"); + publications.addOrder("case when (authorsStr is null) " + + "then 'zzzz' " + + "else authorsStr " + + "end asc"); publications.addOrder("title"); final DataQuery yearQuery = getData(orgaunit); @@ -220,7 +154,6 @@ public class SciDepartmentPublicationsTab implements GenericOrgaUnitTab { depPublicationsElem.newChildElement("noPublications"); return; - } final Paginator paginator = new Paginator(request, @@ -244,22 +177,9 @@ public class SciDepartmentPublicationsTab implements GenericOrgaUnitTab { paginator.generateXml(depPublicationsElem); } - /*final Element sortFieldsElem = depPublicationsElem.newChildElement( - "sortFields"); - sortFieldsElem.addAttribute("sortBy", sortValue); - - sortFieldsElem.newChildElement("sortField").addAttribute("label", - SORT_BY_AUTHOR); - sortFieldsElem.newChildElement("sortField").addAttribute("label", - SORT_BY_TITLE); - sortFieldsElem.newChildElement("sortField").addAttribute("label", - SORT_BY_YEAR_ASC); - sortFieldsElem.newChildElement("sortField").addAttribute("label", - SORT_BY_YEAR_DESC);*/ - while (publications.next()) { generatePublicationXml( - (BigDecimal) publications.get("publicationId"), + (BigDecimal) publications.get("id"), (String) publications.get("objectType"), depPublicationsElem, state); @@ -271,7 +191,7 @@ public class SciDepartmentPublicationsTab implements GenericOrgaUnitTab { System.currentTimeMillis() - start)); } - protected DataQuery getData(final GenericOrganizationalUnit orgaunit) { + protected DataCollection getData(final GenericOrganizationalUnit orgaunit) { final long start = System.currentTimeMillis(); if (!(orgaunit instanceof SciDepartment)) { @@ -282,20 +202,11 @@ public class SciDepartmentPublicationsTab implements GenericOrgaUnitTab { orgaunit.getClass().getName())); } + final DataQuery publicationBundlesQuery; - final DataQuery publicationsQuery; - if (config.getOneRowPerAuthor()) { - publicationsQuery = - SessionManager.getSession(). - retrieveQuery( - "com.arsdigita.cms.contenttypes.getIdsOfPublicationsForOrgaUnitOneRowPerAuthor"); - } else { - publicationsQuery = - SessionManager.getSession(). - retrieveQuery( - "com.arsdigita.cms.contenttypes.getIdsOfPublicationsForOrgaUnit"); - } - //final StringBuffer publicationsFilter = new StringBuffer(); + publicationBundlesQuery = + SessionManager.getSession().retrieveQuery( + "com.arsdigita.cms.contenttypes.getIdsOfPublicationsForOrgaUnit"); final List orgaunitIds = new ArrayList(); if (config.isMergingPublications()) { @@ -303,26 +214,47 @@ public class SciDepartmentPublicationsTab implements GenericOrgaUnitTab { SessionManager.getSession().retrieveQuery( "com.arsdigita.cms.contenttypes.getIdsOfSubordinateOrgaUnitsRecursivlyWithAssocType"); subDepartmentsQuery.setParameter("orgaunitId", - orgaunit.getID().toString()); + orgaunit.getContentBundle().getID().toString()); subDepartmentsQuery.setParameter("assocType", SciDepartmentSubDepartmentsStep.ASSOC_TYPE); while (subDepartmentsQuery.next()) { - /*if (publicationsFilter.length() > 0) { - publicationsFilter.append(" or "); - } - publicationsFilter.append(String.format("orgaunitId = %s", - subDepartmentsQuery.get( - "orgaunitId").toString()));*/ orgaunitIds.add(subDepartmentsQuery.get("orgaunitId").toString()); } } else { - //publicationsFilter.append(String.format("orgaunitId = %s", - // orgaunit.getID().toString())); orgaunitIds.add(orgaunit.getID().toString()); } - //publicationsQuery.addFilter(publicationsFilter.toString()); - publicationsQuery.setParameter("orgaunitIds", orgaunitIds); + publicationBundlesQuery.setParameter("orgaunitIds", orgaunitIds); + + final StringBuilder filterBuilder = new StringBuilder(); + while (publicationBundlesQuery.next()) { + if (filterBuilder.length() > 0) { + filterBuilder.append(','); + } + filterBuilder.append(publicationBundlesQuery.get("publicationId").toString()); + } + final DataCollection publicationsQuery = SessionManager.getSession().retrieve( + "com.arsdigita.cms.contenttypes.Publication"); + + if (filterBuilder.length() == 0) { + //No publications return null to indicate + return null; + } + + publicationsQuery.addFilter(String.format("parent.id in (%s)", filterBuilder.toString())); + + if (Kernel.getConfig().languageIndependentItems()) { + final FilterFactory filterFactory = publicationsQuery.getFilterFactory(); + final Filter filter = filterFactory.or(). + addFilter(filterFactory.equals("language", GlobalizationHelper.getNegotiatedLocale().getLanguage())). + addFilter(filterFactory.and(). + addFilter(filterFactory.equals("language", GlobalizationHelper.LANG_INDEPENDENT)). + addFilter(filterFactory.notIn("parent", "com.arsdigita.navigation.getParentIDsOfMatchedItems").set( + "language", GlobalizationHelper.getNegotiatedLocale().getLanguage()))); + publicationsQuery.addFilter(filter); + } else { + publicationsQuery.addEqualsFilter("language", GlobalizationHelper.getNegotiatedLocale().getLanguage()); + } logger.debug(String.format( "Got publications of department '%s'" @@ -377,8 +309,8 @@ public class SciDepartmentPublicationsTab implements GenericOrgaUnitTab { final Element parent, final PageState state) { final long start = System.currentTimeMillis(); - final ContentPage publication = (ContentPage) DomainObjectFactory. - newInstance(new OID(objectType, publicationId)); + final ContentPage publication = + (ContentPage) DomainObjectFactory.newInstance(new OID(objectType, publicationId)); logger.debug(String.format("Got domain object for publication '%s' " + "in %d ms.", publication.getName(), @@ -391,7 +323,7 @@ public class SciDepartmentPublicationsTab implements GenericOrgaUnitTab { final PageState state) { final long start = System.currentTimeMillis(); final XmlGenerator generator = new XmlGenerator(publication); - generator.setUseExtraXml(false); + generator.setListMode(true); generator.setItemElemName("publications", ""); generator.generateXML(state, parent, ""); logger.debug(String.format( @@ -413,5 +345,6 @@ public class SciDepartmentPublicationsTab implements GenericOrgaUnitTab { protected ContentItem getContentItem(final PageState state) { return item; } + } } diff --git a/ccm-sci-types-department/src/com/arsdigita/cms/contenttypes/ui/SciDepartmentPublicationsTabConfig.java b/ccm-sci-types-department/src/com/arsdigita/cms/contenttypes/ui/SciDepartmentPublicationsTabConfig.java index bf0e0929f..a29988657 100644 --- a/ccm-sci-types-department/src/com/arsdigita/cms/contenttypes/ui/SciDepartmentPublicationsTabConfig.java +++ b/ccm-sci-types-department/src/com/arsdigita/cms/contenttypes/ui/SciDepartmentPublicationsTabConfig.java @@ -15,8 +15,7 @@ public class SciDepartmentPublicationsTabConfig extends AbstractConfig { private final Parameter greetingSize; private final Parameter pageSize; private final Parameter enableSearchLimit; - private final Parameter mergePublications; - private final Parameter oneRowPerAuthor; + private final Parameter mergePublications; public SciDepartmentPublicationsTabConfig() { greetingSize = @@ -42,18 +41,11 @@ public class SciDepartmentPublicationsTabConfig extends AbstractConfig { "com.arsdigita.cms.contenttypes.scidepartment.tabs.publications.merge", Parameter.REQUIRED, Boolean.TRUE); - - oneRowPerAuthor = - new BooleanParameter( - "com.arsdigita.cms.contenttypes.scidepartment.tabs.publications.one_row_per_author", - Parameter.REQUIRED, - Boolean.FALSE); - + register(greetingSize); register(pageSize); register(enableSearchLimit); - register(mergePublications); - register(oneRowPerAuthor); + register(mergePublications); loadInfo(); } @@ -72,9 +64,5 @@ public class SciDepartmentPublicationsTabConfig extends AbstractConfig { public final boolean isMergingPublications() { return (Boolean) get(mergePublications); - } - - public final boolean getOneRowPerAuthor() { - return (Boolean) get(oneRowPerAuthor); - } + } } diff --git a/ccm-sci-types-project/pdl/com/arsdigita/content-types/SciProject.pdl b/ccm-sci-types-project/pdl/com/arsdigita/content-types/SciProject.pdl index a7e53b223..efe5c4a53 100644 --- a/ccm-sci-types-project/pdl/com/arsdigita/content-types/SciProject.pdl +++ b/ccm-sci-types-project/pdl/com/arsdigita/content-types/SciProject.pdl @@ -34,7 +34,7 @@ query getIdsOfProjectsOfOrgaUnit { cms_items.name, cms_organizationalunits_hierarchy_map.superior_orgaunit_id from ct_sci_project_bundles - join cms_items on ct_sci_project_bundles.bundle_id = ct_sci_project_bundles.bundle_id + join cms_items on ct_sci_project_bundles.bundle_id = cms_items.item_id join cms_organizationalunits_hierarchy_map on ct_sci_project_bundles.bundle_id = cms_organizationalunits_hierarchy_map.subordinate_orgaunit_id where cms_organizationalunits_hierarchy_map.assoc_type = 'ProjectOf' and cms_organizationalunits_hierarchy_map.superior_orgaunit_id in :orgaunitIds