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 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);
|
||||||
|
|
@ -724,6 +731,10 @@ public class PublicationsConfig extends AbstractConfig {
|
||||||
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);
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -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
|
||||||
|
|
|
||||||
|
|
@ -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;
|
||||||
|
|
||||||
|
|
@ -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;
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue