diff --git a/src/PLUGIN-INF/metadata_DnxMoveFileOriginalPath.xml b/src/PLUGIN-INF/metadata_DnxMoveFileOriginalPath.xml index 07789d73b95a4cdd378e56acef9d8a63f4c2ff37..e9b8e4bea06943a42c2cec3ec0e849fc6cca073c 100644 --- a/src/PLUGIN-INF/metadata_DnxMoveFileOriginalPath.xml +++ b/src/PLUGIN-INF/metadata_DnxMoveFileOriginalPath.xml @@ -7,7 +7,7 @@ </fr:x_form> </pl:initParameters> <pl:description>repairs broken file original paths</pl:description> - <pl:version>1.08</pl:version> + <pl:version>1.09</pl:version> <pl:materialType>DIGITAL</pl:materialType> <pl:module>Repository</pl:module> <pl:generalType>TASK</pl:generalType> diff --git a/src/org/slub/rosetta/plugins/repositoryTask/DnxMoveFileOriginalPath.java b/src/org/slub/rosetta/plugins/repositoryTask/DnxMoveFileOriginalPath.java index 0ac50c6dcd56acdf7401040d765032cff102dc88..e7500a66678f3b4a8035a9b2c600b4b50d1134bb 100644 --- a/src/org/slub/rosetta/plugins/repositoryTask/DnxMoveFileOriginalPath.java +++ b/src/org/slub/rosetta/plugins/repositoryTask/DnxMoveFileOriginalPath.java @@ -11,58 +11,62 @@ import java.time.LocalDateTime; import java.time.format.DateTimeFormatter; import java.util.List; import java.util.Map; +import java.util.regex.Matcher; +import java.util.regex.Pattern; public class DnxMoveFileOriginalPath implements RepositoryTaskPlugin { private ExLogger log = ExLogger.getExLogger(DnxMoveFileOriginalPath.class); - private boolean success = true; + public DnxMoveFileOriginalPath() { super(); } + public TaskResults execute(IEEditor ieEditor, Map<String, String> initParams, TaskResults taskResults) { log.info("Executing DnxMoveFileOriginalPath for " + ieEditor.getIEPid()); init(initParams); - // get all rep pids - List<String> repPids; - try { - repPids = ieEditor.getReps(); - } catch (DigitoolException e) { - success = false; - e.printStackTrace(); - taskResults.addResult(ieEditor.getIEPid(), null, false, "no RepPids found!"); - return taskResults; - } + boolean IEsuccess = true; int countFiles=0; int countSuccess=0; - // get all file pids - for (String repPid: repPids) { - List<String> filePids; - try { - filePids = ieEditor.getFilesForRep( repPid ); - } catch (DigitoolException e) { - success = false; - e.printStackTrace(); - taskResults.addResult(ieEditor.getIEPid(), null, false, "no FilePids found for RepPid=" + repPid + " !"); - return taskResults; - } - for (String filePid: filePids) { + // get all rep pids + try { + List<String> repPids = ieEditor.getReps(); + for (String repPid: repPids) { + // get all file pids try { - countFiles++; - if (replaceFileOriginalPath(ieEditor, repPid, filePid)) { countSuccess++; } - taskResults.addResult(ieEditor.getIEPid(), null, true, "filepid=" + filePid + " processed"); + List<String> filePids = ieEditor.getFilesForRep(repPid); + for (String filePid: filePids) { + try { + countFiles++; + if (replaceFileOriginalPath(ieEditor, repPid, filePid)) { countSuccess++; } + taskResults.addResult(ieEditor.getIEPid(), null, true, "filepid=" + filePid + " processed"); + } catch (DigitoolException e) { + IEsuccess = false; + String err = "unknown Digitool exception: " + e; + log.error( err ); + e.printStackTrace(); + taskResults.addResult(ieEditor.getIEPid(), null, false, err); + } + } } catch (DigitoolException e) { - success = false; - e.printStackTrace(); - taskResults.addResult(ieEditor.getIEPid(), null, false, "unknown Digitool exception: " + e); - return taskResults; + IEsuccess = false; + String err = "no FilePids found for RepPid=" + repPid + ", Digitool exception: " + e; + log.warn( err ); + taskResults.addResult(ieEditor.getIEPid(), null, false, err); } + } - } + } catch (DigitoolException e) { + IEsuccess = false; + String err = "no RepPids found, Digitool exception: " + e; + log.warn( err ); + taskResults.addResult(ieEditor.getIEPid(), null, false, err); + } + // now add an event try { DnxDocumentHelper ieDnxH = ieEditor.getDnxHelperForIE(); - List<DnxDocumentHelper.Event> eventList = ieDnxH.getEvents(); DnxDocumentHelper.Event event = ieDnxH.new Event(); event.setEventIdentifierType("Rosetta-SupportCase"); @@ -71,7 +75,7 @@ public class DnxMoveFileOriginalPath implements RepositoryTaskPlugin { DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss"); event.setEventDateTime(date.format(formatter)); event.setEventType("external repair using DnxMoveFileOriginalPath plugin"); - if (success) { + if (IEsuccess) { event.setEventOutcome1("success"); } else { event.setEventOutcome1("fail"); @@ -82,12 +86,13 @@ public class DnxMoveFileOriginalPath implements RepositoryTaskPlugin { event.setLinkingAgentIdentifierValue1("plugin programmed by Andreas Romeyke (SLUB Dresden), code available at https://github.com/SLUB-digitalpreservation/fileoriginalpath_plugin4rosetta"); eventList.add( event ); ieDnxH.setEvents( eventList ); - ieEditor.setDnxForIE( ieDnxH ); + ieEditor.setDnxForIE( ieDnxH ); /* necessary to commit changes on IEpid */ } catch (DigitoolException e) { + String err = "unknown Digitool exception: " + e; + log.error( err ); e.printStackTrace(); } return taskResults; - } @@ -96,23 +101,15 @@ public class DnxMoveFileOriginalPath implements RepositoryTaskPlugin { DnxDocumentHelper ieDnxH = ieEditor.getDnxHelper(filePid); DnxDocumentHelper.GeneralFileCharacteristics ieGfs = ieDnxH.getGeneralFileCharacteristics(); String currentFileOriginalPath = ieGfs.getFileOriginalPath(); - String updatedFileOriginalPath = currentFileOriginalPath; + String updatedFileOriginalPath = currentFileOriginalPath; /* default to current to avoid empty string */ boolean updated = false; - if (currentFileOriginalPath.startsWith("file://data/")) { - updatedFileOriginalPath=currentFileOriginalPath.replaceFirst("^file://data/", "file://"); - updated = true; - } - else if (currentFileOriginalPath.startsWith("data/")) { - updatedFileOriginalPath=currentFileOriginalPath.replaceFirst("^data/", "file://"); - updated = true; - } - else if (currentFileOriginalPath.startsWith("/data/")) { - updatedFileOriginalPath=currentFileOriginalPath.replaceFirst("^/data/", "file://"); - updated = true; - } + final String replacement = "file://"; + Pattern pattern = Pattern.compile("^(file://|/)?data/"); + Matcher matcher = pattern.matcher( currentFileOriginalPath ); /* if something is updated */ - if (updated) { - // update it + if (matcher.matches()) { // update it + updatedFileOriginalPath = matcher.replaceFirst( replacement ); + updated = true; log.info("update needed for IE " + ieEditor.getIEPid() + " RepPid " + repPid + " FilePid " + filePid + " (old file_original_path='" + currentFileOriginalPath + "') to new file_original_path='" + updatedFileOriginalPath + "'" @@ -124,7 +121,7 @@ public class DnxMoveFileOriginalPath implements RepositoryTaskPlugin { } ieGfs.setFileOriginalPath(updatedFileOriginalPath); ieDnxH.setGeneralFileCharacteristics(ieGfs); - ieEditor.setDnx(ieDnxH, filePid); + ieEditor.setDnx(ieDnxH, filePid); /* necessary to commit changes on filePID */ return updated; }