Sortierung der Bände einer Reihe in der Detailansicht einer Reihe

git-svn-id: https://svn.libreccm.org/ccm/trunk@2470 8810af33-2d31-482b-a856-94f89814c4df
master
jensp 2013-12-05 15:50:36 +00:00
parent 4010761c1a
commit a504a36666
3 changed files with 128 additions and 22 deletions

View File

@ -69,6 +69,7 @@ public class PublicationsConfig extends AbstractConfig {
private final Parameter defaultArticlesInJournalFolderPath; private final Parameter defaultArticlesInJournalFolderPath;
private final Parameter defaultPublicationsFolderID; private final Parameter defaultPublicationsFolderID;
private final Parameter defaultPublicationsFolderPath; private final Parameter defaultPublicationsFolderPath;
private final Parameter seriesVolumesOrder;
private final Parameter orgaType; private final Parameter orgaType;
private final Parameter orgaBundleType; private final Parameter orgaBundleType;
private final Parameter enableFirstPublishedProperty; private final Parameter enableFirstPublishedProperty;
@ -245,6 +246,11 @@ public class PublicationsConfig extends AbstractConfig {
Parameter.OPTIONAL, Parameter.OPTIONAL,
null); null);
seriesVolumesOrder = new StringParameter(
"com.arsdigita.cms.contenttypes.publications.series.volumes_order",
Parameter.REQUIRED,
"desc");
orgaType = new StringParameter( orgaType = new StringParameter(
"com.arsdigita.cms.contenttypes.publications.organization_type", "com.arsdigita.cms.contenttypes.publications.organization_type",
Parameter.OPTIONAL, Parameter.OPTIONAL,
@ -296,6 +302,7 @@ public class PublicationsConfig extends AbstractConfig {
register(defaultArticlesInJournalFolderPath); register(defaultArticlesInJournalFolderPath);
register(defaultPublicationsFolderID); register(defaultPublicationsFolderID);
register(defaultPublicationsFolderPath); register(defaultPublicationsFolderPath);
register(seriesVolumesOrder);
register(orgaType); register(orgaType);
register(orgaBundleType); register(orgaBundleType);
register(enableFirstPublishedProperty); register(enableFirstPublishedProperty);
@ -657,7 +664,7 @@ public class PublicationsConfig extends AbstractConfig {
return (Integer) get(defaultInProceedingsFolderID); return (Integer) get(defaultInProceedingsFolderID);
} }
} }
public String getDefaultInProceedingsFolderPath() { public String getDefaultInProceedingsFolderPath() {
if (get(defaultInProceedingsFolderPath) == null) { if (get(defaultInProceedingsFolderPath) == null) {
return null; return null;
@ -665,7 +672,7 @@ public class PublicationsConfig extends AbstractConfig {
return (String) get(defaultInProceedingsFolderPath); return (String) get(defaultInProceedingsFolderPath);
} }
} }
public Folder getDefaultInProceedingsFolder() { public Folder getDefaultInProceedingsFolder() {
return getDefaultFolder(getDefaultInProceedingsFolderPath(), return getDefaultFolder(getDefaultInProceedingsFolderPath(),
getDefaultInProceedingsFolderID()); getDefaultInProceedingsFolderID());
@ -710,7 +717,7 @@ public class PublicationsConfig extends AbstractConfig {
return (Integer) get(defaultPublicationsFolderID); return (Integer) get(defaultPublicationsFolderID);
} }
} }
public String getDefaultPublicationsFolderPath() { public String getDefaultPublicationsFolderPath() {
if (get(defaultPublicationsFolderPath) == null) { if (get(defaultPublicationsFolderPath) == null) {
return null; return null;
@ -718,12 +725,16 @@ public class PublicationsConfig extends AbstractConfig {
return (String) get(defaultPublicationsFolderPath); return (String) get(defaultPublicationsFolderPath);
} }
} }
public Folder getDefaultPublicationsFolder() { public Folder getDefaultPublicationsFolder() {
return getDefaultFolder(getDefaultPublicationsFolderPath(), return getDefaultFolder(getDefaultPublicationsFolderPath(),
getDefaultPublicationsFolderID()); getDefaultPublicationsFolderID());
} }
public String getSeriesVolumeOrder() {
return (String) get(seriesVolumesOrder);
}
public String getOrganizationType() { public String getOrganizationType() {
return (String) get(orgaType); return (String) get(orgaType);
} }
@ -739,4 +750,5 @@ public class PublicationsConfig extends AbstractConfig {
public Boolean getEnableLanguageProperty() { public Boolean getEnableLanguageProperty() {
return (Boolean) get(enableLanguageProperty); return (Boolean) get(enableLanguageProperty);
} }
} }

View File

@ -158,6 +158,11 @@ com.arsdigita.cms.contenttypes.publications.default_publications_folder_path.pur
com.arsdigita.cms.contenttypes.publications.default_publications_folder_path.example = main:/path/to/publications/folder com.arsdigita.cms.contenttypes.publications.default_publications_folder_path.example = main:/path/to/publications/folder
com.arsdigita.cms.contenttypes.publications.default_publications_folder_path.format = [String] com.arsdigita.cms.contenttypes.publications.default_publications_folder_path.format = [String]
com.arsdigita.cms.contenttypes.publications.series.volumes_order.title = Series Details view: Order of volumes
com.arsdigita.cms.contenttypes.publications.series.volumes_order.purpose = Determines in which order the volumes of a series are displayed in the detail view of a series (ascending or descending).
com.arsdigita.cms.contenttypes.publications.series.volumes_order.example = DESC
com.arsdigita.cms.contenttypes.publications.series.volumes_order.format = String
com.arsdigita.cms.contenttypes.publications.organization_type.title = Type for imported organizations com.arsdigita.cms.contenttypes.publications.organization_type.title = Type for imported organizations
com.arsdigita.cms.contenttypes.publications.organization_type.purpose = Sets the type used for imported organization. Must be a subtype of com.arsdigita.cms.contenttypes.GenericOrganizationalUnit com.arsdigita.cms.contenttypes.publications.organization_type.purpose = Sets the type used for imported organization. Must be a subtype of com.arsdigita.cms.contenttypes.GenericOrganizationalUnit
com.arsdigita.cms.contenttypes.publications.organization_type.example = com.arsdigita.cms.contenttypes.Publisher com.arsdigita.cms.contenttypes.publications.organization_type.example = com.arsdigita.cms.contenttypes.Publisher

View File

@ -43,8 +43,12 @@ import com.arsdigita.persistence.SessionManager;
import com.arsdigita.xml.Element; import com.arsdigita.xml.Element;
import java.math.BigDecimal; import java.math.BigDecimal;
import java.text.DateFormat; import java.text.DateFormat;
import java.util.ArrayList;
import java.util.Calendar; import java.util.Calendar;
import java.util.Collections;
import java.util.Comparator;
import java.util.Date; import java.util.Date;
import java.util.List;
import java.util.Locale; import java.util.Locale;
import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletRequest;
@ -159,11 +163,11 @@ public class SeriesExtraXmlGenerator implements ExtraXMLGenerator {
final Element filtersElem = parent.newChildElement("filters"); final Element filtersElem = parent.newChildElement("filters");
yearFilter.setDataQuery(volumes, YEAR_PARAM); yearFilter.setDataQuery(volumes, YEAR_PARAM);
applyYearFilter(volumes, request); applyYearFilter(volumes, request);
applyTitleFilter(volumes, request); applyTitleFilter(volumes, request);
applyAuthorFilter(volumes, request); applyAuthorFilter(volumes, request);
yearFilter.generateXml(filtersElem); yearFilter.generateXml(filtersElem);
titleFilter.generateXml(filtersElem); titleFilter.generateXml(filtersElem);
authorFilter.generateXml(filtersElem); authorFilter.generateXml(filtersElem);
@ -172,20 +176,55 @@ public class SeriesExtraXmlGenerator implements ExtraXMLGenerator {
return; return;
} }
final Element volumesElem = parent.newChildElement("volumes"); final List<VolumeEntry> volumeList = new ArrayList<VolumeEntry>();
while (volumes.next()) { while (volumes.next()) {
// createVolumeXml(volumes.getPublication(GlobalizationHelper. volumeList.add(createVolumeEntry((BigDecimal) volumes.get("id"),
// getNegotiatedLocale().getLanguage()), series.getSeriesBundle().getID(),
// volumes.getVolumeOfSeries(), (String) volumes.get("objectType")));
}
if ("asc".equals(Publication.getConfig().getSeriesVolumeOrder())) {
Collections.sort(volumeList, new Comparator<VolumeEntry>() {
@Override
public int compare(final VolumeEntry entry1,
final VolumeEntry entry2) {
if (entry1.getVolumeOfSeries() == null) {
return -1;
} else {
return entry1.getVolumeOfSeries().compareTo(entry2.getVolumeOfSeries());
}
}
});
} else {
Collections.sort(volumeList, new Comparator<VolumeEntry>() {
@Override
public int compare(final VolumeEntry entry1,
final VolumeEntry entry2) {
if (entry2.getVolumeOfSeries() == null) {
return -1;
} else {
return entry2.getVolumeOfSeries().compareTo(entry1.getVolumeOfSeries());
}
}
});
}
final Element volumesElem = parent.newChildElement("volumes");
for (VolumeEntry entry : volumeList) {
createVolumeXml(entry.getPublication(), entry.getVolumeOfSeries(), volumesElem, state);
}
// while (volumes.next()) {
// createVolumeXml((BigDecimal) volumes.get("id"),
// series.getSeriesBundle().getID(),
// (String) volumes.get("objectType"),
// volumesElem, // volumesElem,
// state); // state);
createVolumeXml((BigDecimal) volumes.get("id"), //
series.getSeriesBundle().getID(), // }
(String) volumes.get("objectType"),
volumesElem,
state);
}
} }
private void createDateAttr(final XmlGenerator generator, private void createDateAttr(final XmlGenerator generator,
@ -218,6 +257,30 @@ public class SeriesExtraXmlGenerator implements ExtraXMLGenerator {
} }
private VolumeEntry createVolumeEntry(final BigDecimal publicationId,
final BigDecimal seriesId,
final String objectType) {
final Publication publication = (Publication) DomainObjectFactory.
newInstance(new OID(objectType, publicationId));
final DataQuery query = SessionManager.getSession().retrieveQuery(
"com.arsdigita.cms.contenttypes.getVolumeOfSeries");
query.setParameter("seriesId", seriesId);
query.setParameter("publicationId", publication.getPublicationBundle().getID());
if (!query.next()) {
return null;
}
final String volume;
if (query.get("volumeOfSeries") == null) {
volume = null;
} else {
volume = (String) query.get("volumeOfSeries");
}
return new VolumeEntry(volume, publication);
}
private void createVolumeXml(final BigDecimal publicationId, private void createVolumeXml(final BigDecimal publicationId,
final BigDecimal seriesId, final BigDecimal seriesId,
final String objectType, final String objectType,
@ -302,7 +365,8 @@ public class SeriesExtraXmlGenerator implements ExtraXMLGenerator {
final DataQuery publicationBundlesQuery = SessionManager.getSession().retrieveQuery( final DataQuery publicationBundlesQuery = SessionManager.getSession().retrieveQuery(
"com.arsdigita.cms.contenttypes.getIdsOfPublicationsForSeries"); "com.arsdigita.cms.contenttypes.getIdsOfPublicationsForSeries");
publicationBundlesQuery.setParameter("seriesId", series.getSeriesBundle().getID().toString()); publicationBundlesQuery.
setParameter("seriesId", series.getSeriesBundle().getID().toString());
final StringBuilder filterBuilder = new StringBuilder(); final StringBuilder filterBuilder = new StringBuilder();
while (publicationBundlesQuery.next()) { while (publicationBundlesQuery.next()) {
@ -311,7 +375,8 @@ public class SeriesExtraXmlGenerator implements ExtraXMLGenerator {
} }
filterBuilder.append(publicationBundlesQuery.get("publicationId").toString()); filterBuilder.append(publicationBundlesQuery.get("publicationId").toString());
} }
final DataCollection publicationsQuery = SessionManager.getSession().retrieve(Publication.BASE_DATA_OBJECT_TYPE); final DataCollection publicationsQuery = SessionManager.getSession().retrieve(
Publication.BASE_DATA_OBJECT_TYPE);
if (filterBuilder.length() == 0) { if (filterBuilder.length() == 0) {
//No publications return null to indicate //No publications return null to indicate
@ -323,14 +388,18 @@ public class SeriesExtraXmlGenerator implements ExtraXMLGenerator {
if (Kernel.getConfig().languageIndependentItems()) { if (Kernel.getConfig().languageIndependentItems()) {
final FilterFactory filterFactory = publicationsQuery.getFilterFactory(); final FilterFactory filterFactory = publicationsQuery.getFilterFactory();
final Filter filter = filterFactory.or(). final Filter filter = filterFactory.or().
addFilter(filterFactory.equals("language", GlobalizationHelper.getNegotiatedLocale().getLanguage())). addFilter(filterFactory.equals("language", GlobalizationHelper.
getNegotiatedLocale().getLanguage())).
addFilter(filterFactory.and(). addFilter(filterFactory.and().
addFilter(filterFactory.equals("language", GlobalizationHelper.LANG_INDEPENDENT)). addFilter(filterFactory.equals("language", GlobalizationHelper.LANG_INDEPENDENT)).
addFilter(filterFactory.notIn("parent", "com.arsdigita.navigation.getParentIDsOfMatchedItems").set( addFilter(filterFactory.notIn("parent",
"com.arsdigita.navigation.getParentIDsOfMatchedItems").
set(
"language", GlobalizationHelper.getNegotiatedLocale().getLanguage()))); "language", GlobalizationHelper.getNegotiatedLocale().getLanguage())));
publicationsQuery.addFilter(filter); publicationsQuery.addFilter(filter);
} else { } else {
publicationsQuery.addEqualsFilter("language", GlobalizationHelper.getNegotiatedLocale().getLanguage()); publicationsQuery.addEqualsFilter("language", GlobalizationHelper.getNegotiatedLocale().
getLanguage());
} }
return publicationsQuery; return publicationsQuery;
@ -351,4 +420,24 @@ public class SeriesExtraXmlGenerator implements ExtraXMLGenerator {
} }
} }
private class VolumeEntry {
private final String volumeOfSeries;
private final Publication publication;
public VolumeEntry(final String volumeOfSeries, final Publication publication) {
this.volumeOfSeries = volumeOfSeries;
this.publication = publication;
}
public String getVolumeOfSeries() {
return volumeOfSeries;
}
public Publication getPublication() {
return publication;
}
}
} }