From f94e1246b291d44e0e5a694e410d4a6d1d868626 Mon Sep 17 00:00:00 2001 From: Steffen Hankiewicz Date: Sun, 26 May 2024 15:03:01 +0200 Subject: [PATCH] additional pdf export and adaptions for date generation --- install/plugin_intranda_export_adm_bsme.xml | 55 +++++++++++-------- .../goobi/plugins/AdmBsmeExportHelper.java | 40 ++++++++++++++ .../goobi/plugins/MagazineExporter.java | 15 ++++- .../goobi/plugins/NewspaperExporter.java | 20 ++++++- 4 files changed, 103 insertions(+), 27 deletions(-) diff --git a/install/plugin_intranda_export_adm_bsme.xml b/install/plugin_intranda_export_adm_bsme.xml index e0295cb..7684ded 100644 --- a/install/plugin_intranda_export_adm_bsme.xml +++ b/install/plugin_intranda_export_adm_bsme.xml @@ -1,30 +1,37 @@ - /opt/digiverso/viewer/hotfolderMagazines/ - /opt/digiverso/viewer/hotfolderNewspapers/ + /opt/digiverso/export/bsme/mnt/export/Newspapers/ + /opt/digiverso/export/bsme/mnt/export/Magazines/ + /opt/digiverso/export/bsme/mnt/export/Positives/ + /opt/digiverso/export/bsme/mnt/export/Negatives/ + /opt/digiverso/iexport/bsme/mnt/export/Slides/ + /opt/digiverso/export/bsme/mnt/export/Generic/ + + /opt/digiverso/export/bsme/mnt/pdf/Newspapers/ + /opt/digiverso/export/bsme/mnt/pdf/Magazines/ + - https://adm.goobi.cloud/viewer/> - - - $(template.Rights to Use) - $(template.Rights Details) - Goobi - $(template.Media Type) - $(template.Media Group) - $(template.Source Organization) - $(template.Issue Frequency) - - + $(template.Rights to Use) + $(template.Rights Details) + Goobi + $(template.Media Type) + $(template.Media Group) + $(template.Source Organization) + $(template.Issue Frequency) + - https://adm.goobi.cloud/viewer/sourcefile?id= - https://adm.goobi.cloud/viewer/piresolver?id= + https://adm.goobi.cloud/viewer/sourcefile?id= + + https://adm.goobi.cloud/viewer/piresolver?id= + https://adm.goobi.cloud/viewer/sourcefile?id=$(meta.topstruct.CatalogIDDigital).xml https://adm.goobi.cloud/viewer/sourcefile?id=$(meta.CatalogIDDigital).xml @@ -65,11 +72,11 @@ AnchorID AnchorTitle AccessConditionUse - AccessConditionDetails + AccessConditionDetails + Frequency - - + Newspaper Year @@ -78,5 +85,5 @@ NewspaperIssue NewspaperStub - - \ No newline at end of file + + diff --git a/module-base/src/main/java/de/intranda/goobi/plugins/AdmBsmeExportHelper.java b/module-base/src/main/java/de/intranda/goobi/plugins/AdmBsmeExportHelper.java index 1d953d3..149ff57 100644 --- a/module-base/src/main/java/de/intranda/goobi/plugins/AdmBsmeExportHelper.java +++ b/module-base/src/main/java/de/intranda/goobi/plugins/AdmBsmeExportHelper.java @@ -3,6 +3,8 @@ import java.io.IOException; import java.nio.file.Path; import java.nio.file.Paths; +import java.text.SimpleDateFormat; +import java.util.Date; import java.util.Map; import org.apache.commons.lang.StringUtils; @@ -107,4 +109,42 @@ public static String getLanguageFullname(DocStruct ds, String field) { } return lang; } + + /** + * convert the date from dd-mm-yyyy to format yyyy-mm-dd and give it back + * + * @param inputDate + * @return + */ + public static String convertDateFormatToDayMonthYear(String inputDate) { + return convertDateFormat(inputDate, "yyyy-MM-dd", "dd-MM-yyyy"); + } + + /** + * convert the date from yyyy-mm-dd to format dd-mm-yyyy and give it back + * + * @param inputDate + * @return + */ + public static String convertDateFormatToYearMonthDay(String inputDate) { + return convertDateFormat(inputDate, "dd-MM-yyyy", "yyyy-MM-dd"); + } + + /** + * convert the date from one format to the other + * + * @param inputDate + * @return + */ + private static String convertDateFormat(String inputDate, String inFormat, String outFormat) { + SimpleDateFormat inputFormatter = new SimpleDateFormat(inFormat); + SimpleDateFormat outputFormatter = new SimpleDateFormat(outFormat); + + try { + Date date = inputFormatter.parse(inputDate); + return outputFormatter.format(date); + } catch (Exception e) { + return inputDate; + } + } } diff --git a/module-base/src/main/java/de/intranda/goobi/plugins/MagazineExporter.java b/module-base/src/main/java/de/intranda/goobi/plugins/MagazineExporter.java index 01b7b07..418317a 100644 --- a/module-base/src/main/java/de/intranda/goobi/plugins/MagazineExporter.java +++ b/module-base/src/main/java/de/intranda/goobi/plugins/MagazineExporter.java @@ -12,6 +12,7 @@ import org.apache.commons.configuration.XMLConfiguration; import org.apache.commons.configuration.tree.xpath.XPathExpressionEngine; +import org.apache.commons.lang.StringUtils; import org.goobi.beans.JournalEntry; import org.goobi.beans.Process; import org.goobi.production.enums.LogType; @@ -49,6 +50,7 @@ public class MagazineExporter { private DigitalDocument dd; private String viewerUrl; private String targetFolder; + private String pdfCopyFolder; // keep a list of all image files as they need to be renamed private Map fileMap; @@ -74,6 +76,7 @@ public MagazineExporter(XMLConfiguration config, Process process, Prefs prefs, D this.dd = dd; viewerUrl = config.getString("viewerUrl", "https://viewer.goobi.io"); targetFolder = config.getString("targetDirectoryMagazines", "/opt/digiverso/goobi/output/"); + pdfCopyFolder = config.getString("pdfCopyMagazines"); } /** @@ -151,7 +154,11 @@ public boolean startExport() { issue.addContent( new Element("issueNumber").setText(AdmBsmeExportHelper.getMetdata(topStruct, config.getString("/metadata/issueNumber")))); issue.addContent(new Element("issueID").setText(volumeId)); - issue.addContent(new Element("issueDate").setText(AdmBsmeExportHelper.getMetdata(topStruct, config.getString("/metadata/dateOfOrigin")))); + + // get the date and transform it from dd-mm-yyyy to yyyy-mm-dd + String date = AdmBsmeExportHelper.getMetdata(topStruct, config.getString("/metadata/dateOfOrigin")); + date = AdmBsmeExportHelper.convertDateFormatToYearMonthDay(date); + issue.addContent(new Element("issueDate").setText(date)); // get all title information String anchorTitle = AdmBsmeExportHelper.getMetdata(anchor, config.getString("/metadata/titleLabel")); @@ -309,6 +316,12 @@ public boolean startExport() { fout = new FileOutputStream(pdfi.getName()); new GetPdfAction().writePdf(map, ContentServerConfiguration.getInstance(), fout); fout.close(); + + // if a separate PDF copy shall be stored + if (StringUtils.isNotBlank(pdfCopyFolder)) { + StorageProvider.getInstance().copyFile(Paths.get(pdfi.getName()), Paths.get(pdfCopyFolder, volumeId + ".pdf")); + } + } catch (IOException | ContentLibException e) { log.error("Error while generating PDF files", e); return false; diff --git a/module-base/src/main/java/de/intranda/goobi/plugins/NewspaperExporter.java b/module-base/src/main/java/de/intranda/goobi/plugins/NewspaperExporter.java index c51b132..b16de74 100644 --- a/module-base/src/main/java/de/intranda/goobi/plugins/NewspaperExporter.java +++ b/module-base/src/main/java/de/intranda/goobi/plugins/NewspaperExporter.java @@ -3,6 +3,7 @@ import java.io.File; import java.io.FileOutputStream; import java.io.IOException; +import java.nio.file.Paths; import java.util.ArrayList; import java.util.HashMap; import java.util.List; @@ -10,6 +11,7 @@ import org.apache.commons.configuration.XMLConfiguration; import org.apache.commons.configuration.tree.xpath.XPathExpressionEngine; +import org.apache.commons.lang.StringUtils; import org.goobi.beans.JournalEntry; import org.goobi.beans.Process; import org.goobi.production.enums.LogType; @@ -19,6 +21,7 @@ import org.jdom2.output.XMLOutputter; import de.sub.goobi.helper.Helper; +import de.sub.goobi.helper.StorageProvider; import de.sub.goobi.helper.VariableReplacer; import de.sub.goobi.helper.exceptions.DAOException; import de.sub.goobi.helper.exceptions.SwapException; @@ -50,6 +53,7 @@ public class NewspaperExporter { private DigitalDocument dd; private String viewerUrl; private String targetFolder; + private String pdfCopyFolder; // keep a list of all image files as they need to be renamed private Map fileMap; @@ -76,6 +80,7 @@ public NewspaperExporter(XMLConfiguration config, Process process, Prefs prefs, this.dd = dd; viewerUrl = config.getString("viewerUrl", "https://viewer.goobi.io"); targetFolder = config.getString("targetDirectoryNewspapers", "/opt/digiverso/goobi/output/"); + pdfCopyFolder = config.getString("pdfCopyNewspapers"); pdfIssues = new ArrayList<>(); } @@ -171,10 +176,14 @@ public boolean startExport() { String issueTitle = AdmBsmeExportHelper.getCleanIssueLabel(AdmBsmeExportHelper.getMetdata(ds, config.getString("/metadata/titleLabel"))); + // convert date from from yyyy-mm-dd to dd-mm-yyyy + String date = AdmBsmeExportHelper.getMetdata(ds, config.getString("/metadata/issueDate")); + date = AdmBsmeExportHelper.convertDateFormatToDayMonthYear(date); + // add an English title - issue.addContent(new Element("issueTitleENG").setText(anchorTitleEng + "-" + issueTitle)); + issue.addContent(new Element("issueTitleENG").setText(anchorTitleEng + "-" + date)); // add an Arabic title - issue.addContent(new Element("issueTitleARA").setText(issueTitle + "-" + anchorTitleAra)); + issue.addContent(new Element("issueTitleARA").setText(date + "-" + anchorTitleAra)); issue.addContent(new Element("issueDate").setText(AdmBsmeExportHelper.getMetdata(ds, config.getString("/metadata/issueDate")))); issue.addContent(new Element("Open_In_Viewer").setText(viewerUrl + volumeId + "-" + simpleDate)); @@ -320,6 +329,13 @@ public boolean startExport() { fout = new FileOutputStream(pi.getName()); new GetPdfAction().writePdf(map, ContentServerConfiguration.getInstance(), fout); fout.close(); + + // if a separate PDF copy shall be stored + if (StringUtils.isNotBlank(pdfCopyFolder)) { + StorageProvider.getInstance() + .copyFile(Paths.get(pi.getName()), Paths.get(pdfCopyFolder, Paths.get(pi.getName()).getFileName().toString())); + } + } catch (IOException | ContentLibException e) { log.error("Error while generating PDF files", e); return false;