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-94f89814c4dfmaster
parent
4010761c1a
commit
a504a36666
|
|
@ -69,6 +69,7 @@ public class PublicationsConfig extends AbstractConfig {
|
|||
private final Parameter defaultArticlesInJournalFolderPath;
|
||||
private final Parameter defaultPublicationsFolderID;
|
||||
private final Parameter defaultPublicationsFolderPath;
|
||||
private final Parameter seriesVolumesOrder;
|
||||
private final Parameter orgaType;
|
||||
private final Parameter orgaBundleType;
|
||||
private final Parameter enableFirstPublishedProperty;
|
||||
|
|
@ -245,6 +246,11 @@ public class PublicationsConfig extends AbstractConfig {
|
|||
Parameter.OPTIONAL,
|
||||
null);
|
||||
|
||||
seriesVolumesOrder = new StringParameter(
|
||||
"com.arsdigita.cms.contenttypes.publications.series.volumes_order",
|
||||
Parameter.REQUIRED,
|
||||
"desc");
|
||||
|
||||
orgaType = new StringParameter(
|
||||
"com.arsdigita.cms.contenttypes.publications.organization_type",
|
||||
Parameter.OPTIONAL,
|
||||
|
|
@ -296,6 +302,7 @@ public class PublicationsConfig extends AbstractConfig {
|
|||
register(defaultArticlesInJournalFolderPath);
|
||||
register(defaultPublicationsFolderID);
|
||||
register(defaultPublicationsFolderPath);
|
||||
register(seriesVolumesOrder);
|
||||
register(orgaType);
|
||||
register(orgaBundleType);
|
||||
register(enableFirstPublishedProperty);
|
||||
|
|
@ -657,7 +664,7 @@ public class PublicationsConfig extends AbstractConfig {
|
|||
return (Integer) get(defaultInProceedingsFolderID);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
public String getDefaultInProceedingsFolderPath() {
|
||||
if (get(defaultInProceedingsFolderPath) == null) {
|
||||
return null;
|
||||
|
|
@ -665,7 +672,7 @@ public class PublicationsConfig extends AbstractConfig {
|
|||
return (String) get(defaultInProceedingsFolderPath);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
public Folder getDefaultInProceedingsFolder() {
|
||||
return getDefaultFolder(getDefaultInProceedingsFolderPath(),
|
||||
getDefaultInProceedingsFolderID());
|
||||
|
|
@ -710,7 +717,7 @@ public class PublicationsConfig extends AbstractConfig {
|
|||
return (Integer) get(defaultPublicationsFolderID);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
public String getDefaultPublicationsFolderPath() {
|
||||
if (get(defaultPublicationsFolderPath) == null) {
|
||||
return null;
|
||||
|
|
@ -718,12 +725,16 @@ public class PublicationsConfig extends AbstractConfig {
|
|||
return (String) get(defaultPublicationsFolderPath);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
public Folder getDefaultPublicationsFolder() {
|
||||
return getDefaultFolder(getDefaultPublicationsFolderPath(),
|
||||
getDefaultPublicationsFolderID());
|
||||
}
|
||||
|
||||
public String getSeriesVolumeOrder() {
|
||||
return (String) get(seriesVolumesOrder);
|
||||
}
|
||||
|
||||
public String getOrganizationType() {
|
||||
return (String) get(orgaType);
|
||||
}
|
||||
|
|
@ -739,4 +750,5 @@ public class PublicationsConfig extends AbstractConfig {
|
|||
public Boolean getEnableLanguageProperty() {
|
||||
return (Boolean) get(enableLanguageProperty);
|
||||
}
|
||||
|
||||
}
|
||||
|
|
|
|||
|
|
@ -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.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.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
|
||||
|
|
|
|||
|
|
@ -43,8 +43,12 @@ import com.arsdigita.persistence.SessionManager;
|
|||
import com.arsdigita.xml.Element;
|
||||
import java.math.BigDecimal;
|
||||
import java.text.DateFormat;
|
||||
import java.util.ArrayList;
|
||||
import java.util.Calendar;
|
||||
import java.util.Collections;
|
||||
import java.util.Comparator;
|
||||
import java.util.Date;
|
||||
import java.util.List;
|
||||
import java.util.Locale;
|
||||
import javax.servlet.http.HttpServletRequest;
|
||||
|
||||
|
|
@ -159,11 +163,11 @@ public class SeriesExtraXmlGenerator implements ExtraXMLGenerator {
|
|||
|
||||
final Element filtersElem = parent.newChildElement("filters");
|
||||
|
||||
yearFilter.setDataQuery(volumes, YEAR_PARAM);
|
||||
yearFilter.setDataQuery(volumes, YEAR_PARAM);
|
||||
applyYearFilter(volumes, request);
|
||||
applyTitleFilter(volumes, request);
|
||||
applyAuthorFilter(volumes, request);
|
||||
|
||||
|
||||
yearFilter.generateXml(filtersElem);
|
||||
titleFilter.generateXml(filtersElem);
|
||||
authorFilter.generateXml(filtersElem);
|
||||
|
|
@ -172,20 +176,55 @@ public class SeriesExtraXmlGenerator implements ExtraXMLGenerator {
|
|||
return;
|
||||
}
|
||||
|
||||
final Element volumesElem = parent.newChildElement("volumes");
|
||||
final List<VolumeEntry> volumeList = new ArrayList<VolumeEntry>();
|
||||
while (volumes.next()) {
|
||||
// createVolumeXml(volumes.getPublication(GlobalizationHelper.
|
||||
// getNegotiatedLocale().getLanguage()),
|
||||
// volumes.getVolumeOfSeries(),
|
||||
volumeList.add(createVolumeEntry((BigDecimal) volumes.get("id"),
|
||||
series.getSeriesBundle().getID(),
|
||||
(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,
|
||||
// state);
|
||||
createVolumeXml((BigDecimal) volumes.get("id"),
|
||||
series.getSeriesBundle().getID(),
|
||||
(String) volumes.get("objectType"),
|
||||
volumesElem,
|
||||
state);
|
||||
|
||||
}
|
||||
//
|
||||
// }
|
||||
}
|
||||
|
||||
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,
|
||||
final BigDecimal seriesId,
|
||||
final String objectType,
|
||||
|
|
@ -302,7 +365,8 @@ public class SeriesExtraXmlGenerator implements ExtraXMLGenerator {
|
|||
final DataQuery publicationBundlesQuery = SessionManager.getSession().retrieveQuery(
|
||||
"com.arsdigita.cms.contenttypes.getIdsOfPublicationsForSeries");
|
||||
|
||||
publicationBundlesQuery.setParameter("seriesId", series.getSeriesBundle().getID().toString());
|
||||
publicationBundlesQuery.
|
||||
setParameter("seriesId", series.getSeriesBundle().getID().toString());
|
||||
|
||||
final StringBuilder filterBuilder = new StringBuilder();
|
||||
while (publicationBundlesQuery.next()) {
|
||||
|
|
@ -311,7 +375,8 @@ public class SeriesExtraXmlGenerator implements ExtraXMLGenerator {
|
|||
}
|
||||
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) {
|
||||
//No publications return null to indicate
|
||||
|
|
@ -323,14 +388,18 @@ public class SeriesExtraXmlGenerator implements ExtraXMLGenerator {
|
|||
if (Kernel.getConfig().languageIndependentItems()) {
|
||||
final FilterFactory filterFactory = publicationsQuery.getFilterFactory();
|
||||
final Filter filter = filterFactory.or().
|
||||
addFilter(filterFactory.equals("language", GlobalizationHelper.getNegotiatedLocale().getLanguage())).
|
||||
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(
|
||||
addFilter(filterFactory.notIn("parent",
|
||||
"com.arsdigita.navigation.getParentIDsOfMatchedItems").
|
||||
set(
|
||||
"language", GlobalizationHelper.getNegotiatedLocale().getLanguage())));
|
||||
publicationsQuery.addFilter(filter);
|
||||
} else {
|
||||
publicationsQuery.addEqualsFilter("language", GlobalizationHelper.getNegotiatedLocale().getLanguage());
|
||||
publicationsQuery.addEqualsFilter("language", GlobalizationHelper.getNegotiatedLocale().
|
||||
getLanguage());
|
||||
}
|
||||
|
||||
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;
|
||||
}
|
||||
|
||||
}
|
||||
}
|
||||
|
|
|
|||
Loading…
Reference in New Issue