From 13b66bd4674a274ff390adb5c7bd20cbbdfc2426 Mon Sep 17 00:00:00 2001 From: Steffen Hankiewicz Date: Tue, 14 May 2024 11:16:17 +0200 Subject: [PATCH] extended the plugin for magazines --- install/plugin_intranda_export_adm_bsme.xml | 23 +++++----- .../goobi/plugins/AdmBsmeExportHelper.java | 29 +++++++++++++ .../goobi/plugins/MagazineExporter.java | 25 ++++++++--- .../goobi/plugins/NewspaperExporter.java | 34 ++++++++++++--- .../goobi/plugins/NewspaperMetsCreator.java | 42 +++++-------------- 5 files changed, 99 insertions(+), 54 deletions(-) diff --git a/install/plugin_intranda_export_adm_bsme.xml b/install/plugin_intranda_export_adm_bsme.xml index 7575794..e0295cb 100644 --- a/install/plugin_intranda_export_adm_bsme.xml +++ b/install/plugin_intranda_export_adm_bsme.xml @@ -1,7 +1,8 @@ - - /opt/digiverso/viewer/hotfolder/ + + /opt/digiverso/viewer/hotfolderMagazines/ + /opt/digiverso/viewer/hotfolderNewspapers/ https://adm.goobi.cloud/viewer/> @@ -11,16 +12,15 @@ - $(meta.CatalogIDDigital) - $(meta.topstruct.TitleDocMain) - $(process.Template) --> - $(process.rightsToUse) - $(process.rightsDetails) - $(process.source) - $(process.mediaType) - $(process.mediaGroup) - $(process.sourceOrganisation) - $(process.frequency) - $(process.technicalNotes) + $(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= @@ -53,6 +53,7 @@ _purl CatalogIDDigital DateIssued + DateOfOrigin CurrentNoSorting TitleDocMain MainTitle 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 4878ab1..958fc4a 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 @@ -5,6 +5,8 @@ import java.nio.file.Paths; import java.util.Map; +import org.apache.commons.lang.StringUtils; + import de.sub.goobi.helper.StorageProvider; import ugh.dl.DocStruct; import ugh.dl.Metadata; @@ -43,6 +45,33 @@ public static String getMetdata(DocStruct ds, String field) { return ""; } + /** + * extremely simple translation method to convert German issue labes into pseudo english labels + * + * @param value + * @return + */ + public static String getTranslatedIssueLabels(String value) { + String copy = value; + copy = copy.replace("Ausgabe vom", ""); + copy = copy.replace("Issue from", ""); + return copy; + } + + /** + * get English part of a metadata that is separated from Arabic part + * + * @param value + * @return + */ + public static String getEnglishPartOfString(String value) { + String copy = value.replace("–", "-"); + if (copy.contains("-")) { + copy = StringUtils.substringAfter(copy, "-").trim(); + } + return copy; + } + /** * get the language from metadata * 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 5af2dc9..7a8ae73 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 @@ -11,6 +11,7 @@ import org.apache.commons.configuration.XMLConfiguration; import org.apache.commons.configuration.tree.xpath.XPathExpressionEngine; +import org.goobi.beans.JournalEntry; import org.goobi.beans.Process; import org.jdom2.Document; import org.jdom2.Element; @@ -69,7 +70,7 @@ public MagazineExporter(XMLConfiguration config, Process process, Prefs prefs, D this.prefs = prefs; this.dd = dd; viewerUrl = config.getString("viewerUrl", "https://viewer.goobi.io"); - targetFolder = config.getString("targetDirectory", "/opt/digiverso/goobi/output/"); + targetFolder = config.getString("targetDirectoryMagazines", "/opt/digiverso/goobi/output/"); } /** @@ -111,21 +112,33 @@ public boolean startExport() { String mediaType = vr.replace(config.getString("/mediaType")); String mediaGroup = vr.replace(config.getString("/mediaGroup")); String sourceOrganisation = vr.replace(config.getString("/sourceOrganisation")); - String technicalNotes = vr.replace(config.getString("/technicalNotes")); volume.addContent(new Element("Rights_to_Use").setText(rightsToUse)); volume.addContent(new Element("Right_Details").setText(rightsDetails)); volume.addContent(new Element("Media_Source").setText(source)); volume.addContent(new Element("Media_type").setText(mediaType)); volume.addContent(new Element("Media_Group").setText(mediaGroup)); - volume.addContent(new Element("Publication_ID").setText(volumeId)); + // not needed anymore + // volume.addContent(new Element("Publication_ID").setText(volumeId)); volume.addContent(new Element("Publication_Name") .setText(AdmBsmeExportHelper.getMetdata(anchor, config.getString("/metadata/titleLabel")))); volume.addContent(new Element("Language") - .setText(AdmBsmeExportHelper.getLanguageFullname(anchor, config.getString("/metadata/DocLanguage")))); + .setText(AdmBsmeExportHelper.getLanguageFullname(anchor, config.getString("/metadata/language")))); volume.addContent( new Element("Source_Organization").setText(sourceOrganisation)); - volume.addContent(new Element("Technical_Notes").setText(technicalNotes)); + + // add all journal entries as technical notes + if (process.getJournal() != null) { + Element technicalNotes = new Element("Technical_Notes"); + for (JournalEntry je : process.getJournal()) { + technicalNotes.addContent(new Element("Entry").setAttribute("date", je.getFormattedCreationDate()) + .setAttribute("type", je.getType().getTitle()) + .setText(je.getFormattedContent())); + } + volume.addContent(technicalNotes); + } else { + volume.addContent(new Element("Technical_Notes").setText("- no entry available -")); + } // add issue information Element issue = new Element("issueInfo"); @@ -133,7 +146,7 @@ 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/issueDate")))); + issue.addContent(new Element("issueDate").setText(AdmBsmeExportHelper.getMetdata(topStruct, config.getString("/metadata/dateOfOrigin")))); issue.addContent(new Element("Open_In_Viewer").setText(viewerUrl + volumeId)); volume.addContent(new Element("Barcode").setText(volumeId)); issue.addContent(new Element("issueFile").setText(volumeId + ".pdf").setAttribute("Format", "application/pdf")); 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 9b2787a..9eddd91 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 @@ -10,6 +10,7 @@ import org.apache.commons.configuration.XMLConfiguration; import org.apache.commons.configuration.tree.xpath.XPathExpressionEngine; +import org.goobi.beans.JournalEntry; import org.goobi.beans.Process; import org.jdom2.Document; import org.jdom2.Element; @@ -73,7 +74,7 @@ public NewspaperExporter(XMLConfiguration config, Process process, Prefs prefs, this.prefs = prefs; this.dd = dd; viewerUrl = config.getString("viewerUrl", "https://viewer.goobi.io"); - targetFolder = config.getString("targetDirectory", "/opt/digiverso/goobi/output/"); + targetFolder = config.getString("targetDirectoryNewspapers", "/opt/digiverso/goobi/output/"); pdfIssues = new ArrayList<>(); } @@ -121,21 +122,34 @@ public boolean startExport() { String mediaGroup = vr.replace(config.getString("/mediaGroup")); String sourceOrganisation = vr.replace(config.getString("/sourceOrganisation")); String frequency = vr.replace(config.getString("/frequency")); - String technicalNotes = vr.replace(config.getString("/technicalNotes")); volume.addContent(new Element("Rights_to_Use").setText(rightsToUse)); volume.addContent(new Element("Right_Details").setText(rightsDetails)); volume.addContent(new Element("Media_Source").setText(source)); volume.addContent(new Element("Media_type").setText(mediaType)); volume.addContent(new Element("Media_Group").setText(mediaGroup)); - volume.addContent(new Element("Publication_ID").setText(volumeId)); + // not needed anymore + // volume.addContent(new Element("Publication_ID").setText(volumeId)); volume.addContent(new Element("Publication_Name") .setText(AdmBsmeExportHelper.getMetdata(anchor, config.getString("/metadata/titleLabel")))); volume.addContent(new Element("Language") - .setText(AdmBsmeExportHelper.getLanguageFullname(topStruct, config.getString("/metadata/DocLanguage")))); + .setText(AdmBsmeExportHelper.getLanguageFullname(topStruct, config.getString("/metadata/language")))); volume.addContent( new Element("Source_Organization").setText(sourceOrganisation)); - volume.addContent(new Element("Technical_Notes").setText(technicalNotes)); + + // add all journal entries as technical notes + if (process.getJournal() != null) { + Element technicalNotes = new Element("Technical_Notes"); + for (JournalEntry je : process.getJournal()) { + technicalNotes.addContent(new Element("Entry").setAttribute("date", je.getFormattedCreationDate()) + .setAttribute("type", je.getType().getTitle()) + .setText(je.getFormattedContent())); + } + volume.addContent(technicalNotes); + } else { + volume.addContent(new Element("Technical_Notes").setText("- no entry available -")); + } + volume.addContent(new Element("Barcode").setText(volumeId)); volume.addContent(new Element("MetadataMetsFile").setText(volumeId + ".xml").setAttribute("Format", "application/xml")); @@ -146,6 +160,16 @@ public boolean startExport() { new Element("issueNumber").setText(AdmBsmeExportHelper.getMetdata(ds, config.getString("/metadata/issueNumber")))); issue.addContent(new Element("issueID").setText(volumeId + "-" + simpleDate)); issue.addContent(new Element("issueFrequency").setText(frequency)); + + // get the anchor title and leave the english part of the title + String issueTitlePrefix = AdmBsmeExportHelper.getMetdata(anchor, config.getString("/metadata/titleLabel")); + issueTitlePrefix = AdmBsmeExportHelper.getEnglishPartOfString(issueTitlePrefix); + // get the issue title + String issueTitle = + AdmBsmeExportHelper.getTranslatedIssueLabels(AdmBsmeExportHelper.getMetdata(ds, config.getString("/metadata/titleLabel"))); + // put prefix and title together + issue.addContent(new Element("issueTitle").setText(issueTitlePrefix + issueTitle)); + issue.addContent(new Element("issueDate").setText(AdmBsmeExportHelper.getMetdata(ds, config.getString("/metadata/issueDate")))); issue.addContent(new Element("Open_In_Viewer").setText(viewerUrl + volumeId + "-" + simpleDate)); issue.addContent(new Element("issueFile").setText(volumeId + "-" + simpleDate + ".pdf").setAttribute("Format", "application/pdf")); diff --git a/module-base/src/main/java/de/intranda/goobi/plugins/NewspaperMetsCreator.java b/module-base/src/main/java/de/intranda/goobi/plugins/NewspaperMetsCreator.java index f5581f6..747b2c4 100644 --- a/module-base/src/main/java/de/intranda/goobi/plugins/NewspaperMetsCreator.java +++ b/module-base/src/main/java/de/intranda/goobi/plugins/NewspaperMetsCreator.java @@ -85,7 +85,7 @@ public NewspaperMetsCreator(XMLConfiguration config, Process process, Prefs pref this.prefs = prefs; this.dd = dd; this.fileMap = fileMap; - targetFolder = config.getString("targetDirectory", "/opt/digiverso/goobi/output/"); + targetFolder = config.getString("targetDirectoryNewspapers", "/opt/digiverso/goobi/output/"); vr = new VariableReplacer(dd, prefs, process, null); } @@ -309,13 +309,18 @@ public boolean exportMetsFile() throws IOException, WriteException, PreferencesE issueIdentifier = md.getValue(); } if (md.getType().getName().equals(labelType.getName())) { - // add the anchor label as prefix in front of each issue - String englishNewspaperName = getEnglishPartOfString(titleLabel); - md.setValue(englishNewspaperName + " " + getTranslatedIssueLabels(md.getValue())); + + // EITHER: add the anchor label as prefix in front of each issue + String englishNewspaperName = AdmBsmeExportHelper.getEnglishPartOfString(titleLabel); + md.setValue(englishNewspaperName + " " + AdmBsmeExportHelper.getTranslatedIssueLabels(md.getValue())); + + // OR: use original title (incl. arabic font) + // md.setValue(titleLabel + " " + getTranslatedIssueLabels(md.getValue())); + issueLabel = md.getValue(); } if (md.getType().getName().equals(mainTitleType.getName())) { - md.setValue(getTranslatedIssueLabels(md.getValue())); + md.setValue(AdmBsmeExportHelper.getTranslatedIssueLabels(md.getValue())); issueTitle = md.getValue(); } if (md.getType().getName().equals(issueNumberType.getName())) { @@ -918,33 +923,6 @@ private static String padIdString(int logId) { return strId; } - /** - * extremely simple translation method to convert German issue labes into pseudo english labels - * - * @param value - * @return - */ - private static String getTranslatedIssueLabels(String value) { - String copy = value; - copy = copy.replace("Ausgabe vom", ""); - copy = copy.replace("Issue from", ""); - return copy; - } - - /** - * get English part of a metadata that is separated from Arabic part - * - * @param value - * @return - */ - private static String getEnglishPartOfString(String value) { - String copy = value.replace("–", "-"); - if (copy.contains("-")) { - copy = StringUtils.substringAfter(copy, "-").trim(); - } - return copy; - } - /** * simple comparator for volumes */