SciDepartmentPublicationsTab funktioniert jetzt wieder

git-svn-id: https://svn.libreccm.org/ccm/trunk@1616 8810af33-2d31-482b-a856-94f89814c4df
master
jensp 2012-04-25 19:18:33 +00:00
parent 39e6af24d1
commit 4e12119088
9 changed files with 132 additions and 378 deletions

View File

@ -1,5 +1,6 @@
package com.arsdigita.cms.contenttypes.ui.panels; package com.arsdigita.cms.contenttypes.ui.panels;
import com.arsdigita.persistence.DataCollection;
import com.arsdigita.persistence.DataQuery; import com.arsdigita.persistence.DataQuery;
import com.arsdigita.xml.Element; import com.arsdigita.xml.Element;
import java.util.ArrayList; import java.util.ArrayList;
@ -78,7 +79,7 @@ public class SelectFilter implements Filter {
if ((value == null) || value.isEmpty()) { if ((value == null) || value.isEmpty()) {
if (allOptionIsDefault) { if (allOptionIsDefault) {
value = ALL; value = ALL;
} else if(emptyDefaultOption) { } else if (emptyDefaultOption) {
value = NONE; value = NONE;
} else { } else {
value = getOptions().get(0); value = getOptions().get(0);
@ -109,14 +110,14 @@ public class SelectFilter implements Filter {
filter.addAttribute("type", "select"); filter.addAttribute("type", "select");
filter.addAttribute("label", label); filter.addAttribute("label", label);
if(options.isEmpty()) { if (options.isEmpty()) {
return; return;
} }
if ((value == null) || value.isEmpty()) { if ((value == null) || value.isEmpty()) {
if (allOptionIsDefault) { if (allOptionIsDefault) {
selected = ALL; selected = ALL;
} else if(emptyDefaultOption) { } else if (emptyDefaultOption) {
selected = NONE; selected = NONE;
} else { } else {
selected = options.get(0); selected = options.get(0);
@ -141,7 +142,7 @@ public class SelectFilter implements Filter {
optionElem = filter.newChildElement("option"); optionElem = filter.newChildElement("option");
optionElem.addAttribute("label", optionStr); optionElem.addAttribute("label", optionStr);
if (propertyIsNumeric) { if (propertyIsNumeric) {
optionElem.addAttribute("valueType", "number"); optionElem.addAttribute("valueType", "number");
} else { } else {
optionElem.addAttribute("valueType", "text"); optionElem.addAttribute("valueType", "text");
} }
@ -160,8 +161,12 @@ public class SelectFilter implements Filter {
optionsSet = new HashSet<String>(); optionsSet = new HashSet<String>();
while(dataQuery.next()) { while (dataQuery.next()) {
obj = dataQuery.get(queryProperty); if (dataQuery instanceof DataCollection) {
obj = ((DataCollection) dataQuery.get(queryProperty));
} else {
obj = dataQuery.get(queryProperty);
}
if (obj == null) { if (obj == null) {
continue; continue;
} }
@ -179,4 +184,5 @@ public class SelectFilter implements Filter {
return options; return options;
} }
} }

View File

@ -265,7 +265,7 @@ public class PersonalPublications implements ContentGenerator {
final XmlGenerator generator = new XmlGenerator(publication); final XmlGenerator generator = new XmlGenerator(publication);
generator.setItemElemName("publications", ""); generator.setItemElemName("publications", "");
generator.setListMode(true); generator.setListMode(true);
generator.generateXML(null, parent, ""); generator.generateXML(state, parent, "");
} }
private class XmlGenerator extends SimpleXMLGenerator { private class XmlGenerator extends SimpleXMLGenerator {

View File

@ -85,86 +85,27 @@ association {
Integer[0..1] publicationOrder = cms_organizationalunits_publications_map.publication_order INTEGER; 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 //Retrieves the publications (the ids). Allows filtering for a orgaunit id
//The authors are merged into one field in the result, each publication will //The authors are merged into one field in the result, each publication will
//only appear one time //only appear one time
query getIdsOfPublicationsForOrgaUnit { query getIdsOfPublicationsForOrgaUnit {
BigDecimal publicationId; BigDecimal publicationId;
String objectType;
BigDecimal orgaunitId; BigDecimal orgaunitId;
String title; String name;
Integer year;
String authors;
String language;
Boolean reviewed;
do { do {
select distinct on (cms_pages.item_id) cms_pages.item_id, select distinct on (ct_publication_bundles.bundle_id)
acs_objects.object_type, ct_publication_bundles.bundle_id,
cms_pages.title, cms_items.name,
cms_organizationalunits.organizationalunit_id, cms_organizationalunits_publications_map.orgaunit_id
ct_publications.year, from ct_publication_bundles
ct_publications.authors, join cms_items on ct_publication_bundles.bundle_id = cms_items.item_id
cms_items.language, join cms_organizationalunits_publications_map on ct_publication_bundles.bundle_id = cms_organizationalunits_publications_map.publication_id
ct_publications.reviewed where cms_organizationalunits_publications_map.orgaunit_id in :orgaunitIds
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
} map { } map {
publicationId = cms_pages.item_id; publicationId =ct_publication_bundles.bundle_id;
objectType = acs_objects.object_type; orgaunitId = cms_organizationalunits_publications_map.orgaunit_id;
orgaunitId = cms_organizationalunits.organizationalunit_id; name = cms_items.name;
title = cms_pages.title;
year = ct_publications.year;
authors = ct_publications.authors;
language = cms_items.language;
reviewed = ct_publications.reviewed;
} }
} }
@ -172,128 +113,18 @@ query getIdsOfPublicationsForOrgaUnit {
query getPublicationsForAuthor { query getPublicationsForAuthor {
BigDecimal publicationId; BigDecimal publicationId;
BigDecimal authorId; BigDecimal authorId;
String objectType; String name;
String title;
Integer year;
String language;
Boolean reviewed;
String authors;
BigDecimal parent;
do { do {
select cms_pages.item_id, select ct_publication_bundles.bundle_id,
acs_objects.object_type,
cms_pages.title,
ct_publications_authorship.person_id, ct_publications_authorship.person_id,
ct_publications.year, cms_items.name
cms_items.language, from ct_publication_bundles.bundle_id,
ct_publications.reviewed, join cms_items on ct_publication_bundles.bundle_id = cms_items.item_id
ct_publications.authors, join ct_publications_authorship on ct_publication_bundles.bundle_id = ct_publications_authorship.publication_id
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
} map { } map {
publicationId = cms_pages.item_id; publicationId = ct_publication_bundles.bundle_id;
objectType = acs_objects.object_type;
authorId = ct_publications_authorship.person_id; authorId = ct_publications_authorship.person_id;
title = cms_pages.title; name = cms_items.name;
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;
} }
} }

View File

@ -39,13 +39,11 @@ public class PublicationExtraXmlGenerator implements ExtraXMLGenerator {
final Publication publication = (Publication) item; final Publication publication = (Publication) item;
createAuthorsXml(publication, element, state); createAuthorsXml(publication, element, state);
createOrgaUnitsXml(publication, element, state);
if (!listMode) { if (!listMode) {
createOrgaUnitsXml(publication, element, state);
createSeriesXml(publication, element, state); createSeriesXml(publication, element, state);
final List<PublicationFormat> formats = SciPublicationsExporters. final List<PublicationFormat> formats = SciPublicationsExporters.getInstance().getSupportedFormats();
getInstance().getSupportedFormats();
for (PublicationFormat format : formats) { for (PublicationFormat format : formats) {
@ -89,8 +87,7 @@ public class PublicationExtraXmlGenerator implements ExtraXMLGenerator {
final Element parent, final Element parent,
final PageState state) { final PageState state) {
final PublicationGenericOrganizationalsUnitCollection orgaunits = final PublicationGenericOrganizationalsUnitCollection orgaunits =
publication. publication.getOrganizationalUnits();
getOrganizationalUnits();
if ((orgaunits == null) || orgaunits.isEmpty()) { if ((orgaunits == null) || orgaunits.isEmpty()) {
return; return;
} }
@ -98,8 +95,7 @@ public class PublicationExtraXmlGenerator implements ExtraXMLGenerator {
final Element orgaunitsElem = parent.newChildElement( final Element orgaunitsElem = parent.newChildElement(
"organizationalunits"); "organizationalunits");
while (orgaunits.next()) { while (orgaunits.next()) {
createOrgaUnitXml(orgaunits.getOrganizationalUnit(GlobalizationHelper. createOrgaUnitXml(orgaunits.getOrganizationalUnit(GlobalizationHelper.getNegotiatedLocale().getLanguage()),
getNegotiatedLocale().getLanguage()),
orgaunitsElem, orgaunitsElem,
state); state);
} }
@ -123,8 +119,7 @@ public class PublicationExtraXmlGenerator implements ExtraXMLGenerator {
final Element seriesElem = parent.newChildElement("series"); final Element seriesElem = parent.newChildElement("series");
while (series.next()) { while (series.next()) {
createSeriesElemXml(series.getSeries(GlobalizationHelper. createSeriesElemXml(series.getSeries(GlobalizationHelper.getNegotiatedLocale().getLanguage()),
getNegotiatedLocale().getLanguage()),
seriesElem, seriesElem,
state); state);
} }
@ -177,5 +172,6 @@ public class PublicationExtraXmlGenerator implements ExtraXMLGenerator {
protected ContentItem getContentItem(final PageState state) { protected ContentItem getContentItem(final PageState state) {
return item; return item;
} }
} }
} }

View File

@ -162,7 +162,7 @@ public class SciDepartmentMembersTab implements GenericOrgaUnitTab {
final StringBuilder filterBuilder = new StringBuilder(); final StringBuilder filterBuilder = new StringBuilder();
while (personBundlesQuery.next()) { while (personBundlesQuery.next()) {
if (filterBuilder.length() > 0) { if (filterBuilder.length() > 0) {
filterBuilder.append(","); filterBuilder.append(',');
} }
filterBuilder.append(personBundlesQuery.get("memberId").toString()); filterBuilder.append(personBundlesQuery.get("memberId").toString());
} }
@ -171,10 +171,10 @@ public class SciDepartmentMembersTab implements GenericOrgaUnitTab {
if (filterBuilder.length() == 0) { if (filterBuilder.length() == 0) {
//No member return null to indicate //No member return null to indicate
return null; 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.SURNAME);
membersQuery.addOrder(GenericPerson.GIVENNAME); membersQuery.addOrder(GenericPerson.GIVENNAME);

View File

@ -225,7 +225,7 @@ public class SciDepartmentProjectsTab implements GenericOrgaUnitTab {
final StringBuilder filterBuilder = new StringBuilder(); final StringBuilder filterBuilder = new StringBuilder();
while (projectBundlesQuery.next()) { while (projectBundlesQuery.next()) {
if (filterBuilder.length() > 0) { if (filterBuilder.length() > 0) {
filterBuilder.append(","); filterBuilder.append(',');
} }
filterBuilder.append(projectBundlesQuery.get("projectId").toString()); filterBuilder.append(projectBundlesQuery.get("projectId").toString());
} }
@ -235,10 +235,10 @@ public class SciDepartmentProjectsTab implements GenericOrgaUnitTab {
if (filterBuilder.length() == 0) { if (filterBuilder.length() == 0) {
//No Projects, return null to indicate //No Projects, return null to indicate
return null; 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()) { if (Kernel.getConfig().languageIndependentItems()) {
final FilterFactory filterFactory = projectsQuery.getFilterFactory(); final FilterFactory filterFactory = projectsQuery.getFilterFactory();
final Filter filter = filterFactory.or(). final Filter filter = filterFactory.or().

View File

@ -13,7 +13,12 @@ import com.arsdigita.cms.contenttypes.ui.panels.TextFilter;
import com.arsdigita.cms.dispatcher.SimpleXMLGenerator; import com.arsdigita.cms.dispatcher.SimpleXMLGenerator;
import com.arsdigita.domain.DomainObjectFactory; import com.arsdigita.domain.DomainObjectFactory;
import com.arsdigita.globalization.Globalization; 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.DataQuery;
import com.arsdigita.persistence.Filter;
import com.arsdigita.persistence.FilterFactory;
import com.arsdigita.persistence.OID; import com.arsdigita.persistence.OID;
import com.arsdigita.persistence.SessionManager; import com.arsdigita.persistence.SessionManager;
import com.arsdigita.xml.Element; import com.arsdigita.xml.Element;
@ -34,15 +39,10 @@ public class SciDepartmentPublicationsTab implements GenericOrgaUnitTab {
SciDepartmentPublicationsTab.class); SciDepartmentPublicationsTab.class);
private static final SciDepartmentPublicationsTabConfig config = private static final SciDepartmentPublicationsTabConfig config =
new SciDepartmentPublicationsTabConfig(); 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 TITLE_PARAM = "title";
private static final String AUTHOR_PARAM = "author"; private static final String AUTHOR_PARAM = "author";
/*private static final String SORT_PARAM = "sortBy"; private final SelectFilter yearFilter = new SelectFilter("year",
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,
YEAR_PARAM, YEAR_PARAM,
true, true,
true, true,
@ -60,17 +60,14 @@ public class SciDepartmentPublicationsTab implements GenericOrgaUnitTab {
public SciDepartmentPublicationsTab() { public SciDepartmentPublicationsTab() {
super(); super();
if (config.getOneRowPerAuthor()) { authorFilter = new TextFilter(AUTHOR_PARAM, "authorsStr");
authorFilter = new TextFilter(AUTHOR_PARAM, "authorSurname");
} else {
authorFilter = new TextFilter(AUTHOR_PARAM, "authors");
}
} }
public boolean hasData(final GenericOrganizationalUnit orgaunit, public boolean hasData(final GenericOrganizationalUnit orgaunit,
final PageState state) { final PageState state) {
final long start = System.currentTimeMillis(); final long start = System.currentTimeMillis();
//Check if ccm-sci-publications is installed
final ContentTypeCollection types = ContentType.getAllContentTypes(); final ContentTypeCollection types = ContentType.getAllContentTypes();
types.addFilter( types.addFilter(
"associatedObjectType = 'com.arsdigita.cms.contenttypes.Publication'"); "associatedObjectType = 'com.arsdigita.cms.contenttypes.Publication'");
@ -80,7 +77,8 @@ public class SciDepartmentPublicationsTab implements GenericOrgaUnitTab {
} }
types.close(); 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 " logger.debug(String.format("Needed %d ms to determine if department "
+ "'%s' has publications.", + "'%s' has publications.",
@ -93,7 +91,7 @@ public class SciDepartmentPublicationsTab implements GenericOrgaUnitTab {
final Element parent, final Element parent,
final PageState state) { final PageState state) {
final long start = System.currentTimeMillis(); final long start = System.currentTimeMillis();
final DataQuery publications = getData(orgaunit); final DataCollection publications = getData(orgaunit);
final HttpServletRequest request = state.getRequest(); final HttpServletRequest request = state.getRequest();
final Element depPublicationsElem = parent.newChildElement( final Element depPublicationsElem = parent.newChildElement(
@ -102,7 +100,6 @@ public class SciDepartmentPublicationsTab implements GenericOrgaUnitTab {
final String yearValue = Globalization.decodeParameter(request, YEAR_PARAM); final String yearValue = Globalization.decodeParameter(request, YEAR_PARAM);
final String titleValue = Globalization.decodeParameter(request, TITLE_PARAM); final String titleValue = Globalization.decodeParameter(request, TITLE_PARAM);
final String authorValue = Globalization.decodeParameter(request, AUTHOR_PARAM); final String authorValue = Globalization.decodeParameter(request, AUTHOR_PARAM);
//final String sortValue = Globalization.decodeParameter(request, SORT_PARAM);
final Element filtersElem = depPublicationsElem.newChildElement( final Element filtersElem = depPublicationsElem.newChildElement(
"filters"); "filters");
@ -114,27 +111,17 @@ public class SciDepartmentPublicationsTab implements GenericOrgaUnitTab {
depPublicationsElem.newChildElement("greeting"); depPublicationsElem.newChildElement("greeting");
publications.addOrder("year desc"); publications.addOrder("yearOfPublication desc");
if (config.getOneRowPerAuthor()) { publications.addOrder("case when (authorsStr is null) "
publications.addOrder("case when (authorSurname is null) " + "then 'zzzz' "
+ "then 'zzzz' " + "else authorsStr "
+ "else authorSurname " + "end asc");
+ "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("title asc"); publications.addOrder("title asc");
publications.setRange(1, config.getGreetingSize() + 1); publications.setRange(1, config.getGreetingSize() + 1);
yearFilter.setDataQuery(publications, "year"); yearFilter.setDataQuery(publications, YEAR_PARAM);
yearFilter.generateXml(filtersElem); yearFilter.generateXml(filtersElem);
titleFilter.generateXml(filtersElem); titleFilter.generateXml(filtersElem);
@ -142,64 +129,11 @@ public class SciDepartmentPublicationsTab implements GenericOrgaUnitTab {
} else { } else {
/*if (SORT_BY_AUTHOR.equals(sortValue)) { publications.addOrder("yearOfPublication desc");
if (config.getOneRowPerAuthor()) { publications.addOrder("case when (authorsStr is null) "
publications.addOrder("surname"); + "then 'zzzz' "
} else { + "else authorsStr "
publications.addOrder("authors"); + "end asc");
}
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("title"); publications.addOrder("title");
final DataQuery yearQuery = getData(orgaunit); final DataQuery yearQuery = getData(orgaunit);
@ -220,7 +154,6 @@ public class SciDepartmentPublicationsTab implements GenericOrgaUnitTab {
depPublicationsElem.newChildElement("noPublications"); depPublicationsElem.newChildElement("noPublications");
return; return;
} }
final Paginator paginator = new Paginator(request, final Paginator paginator = new Paginator(request,
@ -244,22 +177,9 @@ public class SciDepartmentPublicationsTab implements GenericOrgaUnitTab {
paginator.generateXml(depPublicationsElem); 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()) { while (publications.next()) {
generatePublicationXml( generatePublicationXml(
(BigDecimal) publications.get("publicationId"), (BigDecimal) publications.get("id"),
(String) publications.get("objectType"), (String) publications.get("objectType"),
depPublicationsElem, depPublicationsElem,
state); state);
@ -271,7 +191,7 @@ public class SciDepartmentPublicationsTab implements GenericOrgaUnitTab {
System.currentTimeMillis() - start)); System.currentTimeMillis() - start));
} }
protected DataQuery getData(final GenericOrganizationalUnit orgaunit) { protected DataCollection getData(final GenericOrganizationalUnit orgaunit) {
final long start = System.currentTimeMillis(); final long start = System.currentTimeMillis();
if (!(orgaunit instanceof SciDepartment)) { if (!(orgaunit instanceof SciDepartment)) {
@ -282,20 +202,11 @@ public class SciDepartmentPublicationsTab implements GenericOrgaUnitTab {
orgaunit.getClass().getName())); orgaunit.getClass().getName()));
} }
final DataQuery publicationBundlesQuery;
final DataQuery publicationsQuery; publicationBundlesQuery =
if (config.getOneRowPerAuthor()) { SessionManager.getSession().retrieveQuery(
publicationsQuery = "com.arsdigita.cms.contenttypes.getIdsOfPublicationsForOrgaUnit");
SessionManager.getSession().
retrieveQuery(
"com.arsdigita.cms.contenttypes.getIdsOfPublicationsForOrgaUnitOneRowPerAuthor");
} else {
publicationsQuery =
SessionManager.getSession().
retrieveQuery(
"com.arsdigita.cms.contenttypes.getIdsOfPublicationsForOrgaUnit");
}
//final StringBuffer publicationsFilter = new StringBuffer();
final List<String> orgaunitIds = new ArrayList<String>(); final List<String> orgaunitIds = new ArrayList<String>();
if (config.isMergingPublications()) { if (config.isMergingPublications()) {
@ -303,26 +214,47 @@ public class SciDepartmentPublicationsTab implements GenericOrgaUnitTab {
SessionManager.getSession().retrieveQuery( SessionManager.getSession().retrieveQuery(
"com.arsdigita.cms.contenttypes.getIdsOfSubordinateOrgaUnitsRecursivlyWithAssocType"); "com.arsdigita.cms.contenttypes.getIdsOfSubordinateOrgaUnitsRecursivlyWithAssocType");
subDepartmentsQuery.setParameter("orgaunitId", subDepartmentsQuery.setParameter("orgaunitId",
orgaunit.getID().toString()); orgaunit.getContentBundle().getID().toString());
subDepartmentsQuery.setParameter("assocType", subDepartmentsQuery.setParameter("assocType",
SciDepartmentSubDepartmentsStep.ASSOC_TYPE); SciDepartmentSubDepartmentsStep.ASSOC_TYPE);
while (subDepartmentsQuery.next()) { 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()); orgaunitIds.add(subDepartmentsQuery.get("orgaunitId").toString());
} }
} else { } else {
//publicationsFilter.append(String.format("orgaunitId = %s",
// orgaunit.getID().toString()));
orgaunitIds.add(orgaunit.getID().toString()); orgaunitIds.add(orgaunit.getID().toString());
} }
//publicationsQuery.addFilter(publicationsFilter.toString()); publicationBundlesQuery.setParameter("orgaunitIds", orgaunitIds);
publicationsQuery.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( logger.debug(String.format(
"Got publications of department '%s'" "Got publications of department '%s'"
@ -377,8 +309,8 @@ public class SciDepartmentPublicationsTab implements GenericOrgaUnitTab {
final Element parent, final Element parent,
final PageState state) { final PageState state) {
final long start = System.currentTimeMillis(); final long start = System.currentTimeMillis();
final ContentPage publication = (ContentPage) DomainObjectFactory. final ContentPage publication =
newInstance(new OID(objectType, publicationId)); (ContentPage) DomainObjectFactory.newInstance(new OID(objectType, publicationId));
logger.debug(String.format("Got domain object for publication '%s' " logger.debug(String.format("Got domain object for publication '%s' "
+ "in %d ms.", + "in %d ms.",
publication.getName(), publication.getName(),
@ -391,7 +323,7 @@ public class SciDepartmentPublicationsTab implements GenericOrgaUnitTab {
final PageState state) { final PageState state) {
final long start = System.currentTimeMillis(); final long start = System.currentTimeMillis();
final XmlGenerator generator = new XmlGenerator(publication); final XmlGenerator generator = new XmlGenerator(publication);
generator.setUseExtraXml(false); generator.setListMode(true);
generator.setItemElemName("publications", ""); generator.setItemElemName("publications", "");
generator.generateXML(state, parent, ""); generator.generateXML(state, parent, "");
logger.debug(String.format( logger.debug(String.format(
@ -413,5 +345,6 @@ public class SciDepartmentPublicationsTab implements GenericOrgaUnitTab {
protected ContentItem getContentItem(final PageState state) { protected ContentItem getContentItem(final PageState state) {
return item; return item;
} }
} }
} }

View File

@ -16,7 +16,6 @@ public class SciDepartmentPublicationsTabConfig extends AbstractConfig {
private final Parameter pageSize; private final Parameter pageSize;
private final Parameter enableSearchLimit; private final Parameter enableSearchLimit;
private final Parameter mergePublications; private final Parameter mergePublications;
private final Parameter oneRowPerAuthor;
public SciDepartmentPublicationsTabConfig() { public SciDepartmentPublicationsTabConfig() {
greetingSize = greetingSize =
@ -43,17 +42,10 @@ public class SciDepartmentPublicationsTabConfig extends AbstractConfig {
Parameter.REQUIRED, Parameter.REQUIRED,
Boolean.TRUE); Boolean.TRUE);
oneRowPerAuthor =
new BooleanParameter(
"com.arsdigita.cms.contenttypes.scidepartment.tabs.publications.one_row_per_author",
Parameter.REQUIRED,
Boolean.FALSE);
register(greetingSize); register(greetingSize);
register(pageSize); register(pageSize);
register(enableSearchLimit); register(enableSearchLimit);
register(mergePublications); register(mergePublications);
register(oneRowPerAuthor);
loadInfo(); loadInfo();
} }
@ -73,8 +65,4 @@ public class SciDepartmentPublicationsTabConfig extends AbstractConfig {
public final boolean isMergingPublications() { public final boolean isMergingPublications() {
return (Boolean) get(mergePublications); return (Boolean) get(mergePublications);
} }
public final boolean getOneRowPerAuthor() {
return (Boolean) get(oneRowPerAuthor);
}
} }

View File

@ -34,7 +34,7 @@ query getIdsOfProjectsOfOrgaUnit {
cms_items.name, cms_items.name,
cms_organizationalunits_hierarchy_map.superior_orgaunit_id cms_organizationalunits_hierarchy_map.superior_orgaunit_id
from ct_sci_project_bundles 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 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' where cms_organizationalunits_hierarchy_map.assoc_type = 'ProjectOf'
and cms_organizationalunits_hierarchy_map.superior_orgaunit_id in :orgaunitIds and cms_organizationalunits_hierarchy_map.superior_orgaunit_id in :orgaunitIds