Faster XML creation for Publications

git-svn-id: https://svn.libreccm.org/ccm/trunk@5486 8810af33-2d31-482b-a856-94f89814c4df
master
jensp 2018-06-06 09:24:42 +00:00
parent 289396315b
commit c9b802a317
1 changed files with 52 additions and 28 deletions

View File

@ -32,19 +32,23 @@ import com.arsdigita.cms.contenttypes.SeriesCollection;
import com.arsdigita.cms.dispatcher.SimpleXMLGenerator;
import com.arsdigita.cms.scipublications.imexporter.PublicationFormat;
import com.arsdigita.cms.scipublications.exporter.SciPublicationsExporters;
import com.arsdigita.cms.scipublications.importer.report.OrganizationalUnitImportReport;
import com.arsdigita.globalization.GlobalizationHelper;
import com.arsdigita.xml.Element;
import java.util.ArrayList;
import java.util.List;
/**
*
* @author Jens Pelzetter
* @version $Id$
* @version $Id: PublicationExtraXmlGenerator.java 4544 2017-01-30 20:34:53Z
* jensp $
*/
public class PublicationExtraXmlGenerator implements ExtraXMLGenerator {
private final static List<ExtraXMLGenerator> EXTENDING_GENERATORS = new ArrayList<ExtraXMLGenerator>();
private final static List<ExtraXMLGenerator> EXTENDING_GENERATORS
= new ArrayList<ExtraXMLGenerator>();
private boolean listMode;
public static void addExtendingGenerator(final ExtraXMLGenerator generator) {
@ -58,9 +62,9 @@ public class PublicationExtraXmlGenerator implements ExtraXMLGenerator {
// final long start = System.nanoTime();
if (!(item instanceof Publication)) {
throw new IllegalArgumentException(String.format(
"ExtraXMLGenerator '%s' only supports items of type '%s'.",
getClass().getName(),
Publication.class.getName()));
"ExtraXMLGenerator '%s' only supports items of type '%s'.",
getClass().getName(),
Publication.class.getName()));
}
final Publication publication = (Publication) item;
@ -75,7 +79,8 @@ public class PublicationExtraXmlGenerator implements ExtraXMLGenerator {
if (!listMode) {
createOrgaUnitsXml(publication, element, state);
final List<PublicationFormat> formats = SciPublicationsExporters.getInstance().getSupportedFormats();
final List<PublicationFormat> formats = SciPublicationsExporters
.getInstance().getSupportedFormats();
for (PublicationFormat format : formats) {
createExportLink(format, element, (Publication) item, state);
@ -137,18 +142,27 @@ public class PublicationExtraXmlGenerator implements ExtraXMLGenerator {
private void createOrgaUnitsXml(final Publication publication,
final Element parent,
final PageState state) {
final PublicationGenericOrganizationalsUnitCollection orgaunits =
publication.getOrganizationalUnits();
final PublicationGenericOrganizationalsUnitCollection orgaunits
= publication
.getOrganizationalUnits();
if ((orgaunits == null) || orgaunits.isEmpty()) {
return;
}
final Element orgaunitsElem = parent.newChildElement(
"organizationalunits");
"organizationalunits");
while (orgaunits.next()) {
createOrgaUnitXml(orgaunits.getOrganizationalUnit(GlobalizationHelper.getNegotiatedLocale().getLanguage()),
orgaunitsElem,
state);
// createOrgaUnitXml(orgaunits.getOrganizationalUnit(
// GlobalizationHelper.getNegotiatedLocale().getLanguage()),
// orgaunitsElem,
// state);
final GenericOrganizationalUnit orgaUnit = orgaunits
.getOrganizationalUnit();
final Element orgaUnitElem = orgaunitsElem.newChildElement("organizationalunit");
orgaUnitElem.addAttribute("oid", orgaUnit.getOID().toString());
final Element titleElem = orgaUnitElem.newChildElement("title");
titleElem.setText(orgaUnit.getTitle());
}
}
@ -170,7 +184,8 @@ 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()),
series.getVolumeOfSeries(),
seriesElem,
state);
@ -184,13 +199,21 @@ public class PublicationExtraXmlGenerator implements ExtraXMLGenerator {
if (series == null) {
return;
}
final XmlGenerator generator = new XmlGenerator(series);
generator.setItemElemName("series", "");
if (volumeOfSeries != null) {
generator.addItemAttribute("volume", volumeOfSeries);
}
generator.setListMode(listMode);
generator.generateXML(state, seriesElem, "");
final Element seriesItemElem = seriesElem.newChildElement("series");
seriesItemElem.addAttribute("oid", series.getOID().toString());
seriesItemElem.addAttribute("volume", volumeOfSeries);
final Element titleElem = seriesItemElem.newChildElement("title");
titleElem.setText(series.getTitle());
// final XmlGenerator generator = new XmlGenerator(series);
// generator.setItemElemName("series", "");
// if (volumeOfSeries != null) {
// generator.addItemAttribute("volume", volumeOfSeries);
// }
// generator.setListMode(listMode);
// generator.generateXML(state, seriesElem, "");
}
private void createExportLink(final PublicationFormat format,
@ -198,15 +221,15 @@ public class PublicationExtraXmlGenerator implements ExtraXMLGenerator {
final Publication publication,
final PageState state) {
final Element exportLinkElem = parent.newChildElement(
"publicationExportLink");
final Element formatKeyElem =
exportLinkElem.newChildElement("formatKey");
"publicationExportLink");
final Element formatKeyElem = exportLinkElem
.newChildElement("formatKey");
formatKeyElem.setText(format.getName().toLowerCase());
final Element formatNameElem = exportLinkElem.newChildElement(
"formatName");
"formatName");
formatNameElem.setText(format.getName());
final Element publicationIdElem = exportLinkElem.newChildElement(
"publicationId");
"publicationId");
publicationIdElem.setText(publication.getID().toString());
}
@ -235,4 +258,5 @@ public class PublicationExtraXmlGenerator implements ExtraXMLGenerator {
}
}
}