From 4803219496ca0aa6d81cad559fb255cc0c7c6fda Mon Sep 17 00:00:00 2001 From: jensp Date: Sat, 1 Dec 2018 14:19:27 +0000 Subject: [PATCH] CLI Tool for exporting all publications git-svn-id: https://svn.libreccm.org/ccm/trunk@5762 8810af33-2d31-482b-a856-94f89814c4df --- .../ExportAllPublications.java | 143 ++++++++++++++++++ 1 file changed, 143 insertions(+) create mode 100644 ccm-sci-publications/src/com/arsdigita/cms/scipublications/ExportAllPublications.java diff --git a/ccm-sci-publications/src/com/arsdigita/cms/scipublications/ExportAllPublications.java b/ccm-sci-publications/src/com/arsdigita/cms/scipublications/ExportAllPublications.java new file mode 100644 index 000000000..2cf3adcb8 --- /dev/null +++ b/ccm-sci-publications/src/com/arsdigita/cms/scipublications/ExportAllPublications.java @@ -0,0 +1,143 @@ +package com.arsdigita.cms.scipublications; + +import com.arsdigita.cms.contenttypes.Publication; +import com.arsdigita.cms.scipublications.exporter.SciPublicationsExporter; +import com.arsdigita.cms.scipublications.exporter.SciPublicationsExporters; +import com.arsdigita.globalization.GlobalizationHelper; +import com.arsdigita.kernel.Kernel; +import com.arsdigita.persistence.DataCollection; +import com.arsdigita.persistence.Filter; +import com.arsdigita.persistence.FilterFactory; +import com.arsdigita.persistence.SessionManager; +import com.arsdigita.util.cmd.Program; + +import org.apache.commons.cli.CommandLine; +import org.apache.log4j.Logger; + +import java.io.BufferedWriter; +import java.io.IOException; +import java.nio.file.Files; +import java.nio.file.OpenOption; +import java.nio.file.Path; +import java.nio.file.Paths; +import java.nio.file.StandardOpenOption; +import java.util.logging.Level; + +/** + * + * @author Jens Pelzetter + */ +public class ExportAllPublications extends Program { + + private static final Logger LOGGER = Logger + .getLogger(ExportAllPublications.class); + + public ExportAllPublications() { + super("Export all publications", + "1.0.0", + "FORMAT TARGETFILE"); + } + + @Override + protected void doRun(final CommandLine cmdLine) { + + final String[] args = cmdLine.getArgs(); + + if (args.length != 2) { + help(System.err); + System.exit(1); + } + + System.out.printf("Exporting all publications to file %s as %s%n", + args[1], + args[0]); + + final DataCollection publications = SessionManager + .getSession() + .retrieve(Publication.BASE_DATA_OBJECT_TYPE); + + if (Kernel.getConfig().languageIndependentItems()) { + final FilterFactory filterFactory = publications.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()))); + publications.addFilter(filter); + + } else { + publications.addEqualsFilter("language", + GlobalizationHelper. + getNegotiatedLocale().getLanguage()); + } + + publications.addOrder("yearOfPublication desc"); + publications.addOrder("authorsStr"); + publications.addOrder("title"); + + System.out.printf("Found %d publications.", publications.size()); + + final SciPublicationsExporter exporter = SciPublicationsExporters + .getInstance() + .getExporterForFormat(args[0]); + + if (exporter == null) { + LOGGER.warn(String.format( + "The requested export format '%s' is not supported yet.%n", + args[0])); + System.err.printf( + "The requested export format '%s' is not supported yet.%n", + args[0]); + + return; + } + + final Path targetPath = Paths.get(args[1]); + try (BufferedWriter writer = Files + .newBufferedWriter(targetPath, StandardOpenOption.CREATE)) { + + writer.append(exporter.getPreamble()); + + long index = 1; + while (publications.next()) { + + System.out.printf("Exporting publication %d of %d...%n", + index, + publications.size()); + + final Publication publication = new Publication(publications + .getDataObject()); + writer.append(exporter.exportPublication(publication)); + index++; + } + + } catch (IOException ex) { + System.err.printf("Failed to use target file %s%n", args[1]); + ex.printStackTrace(System.out); + System.exit(1); + return; + } + + System.out.printf("Exported %d publications successfully.%n", + publications.size()); + + LOGGER.info(String.format( + "Exporting all publications to file %s as %s.", + args[1], + args[0])); + + } + + public static final void main(final String[] args) { + + new ExportAllPublications().run(args); + } + +}