diff --git a/src/org/slub/rosetta/plugins/repositoryTask/DnxMoveFileOriginalPathDublettesClean.java b/src/org/slub/rosetta/plugins/repositoryTask/DnxMoveFileOriginalPathDublettesClean.java index d44c07c36b1f4fbc58235d8ceb770d30b5ffa704..e4fa1f977b708b324fe9ca911a093d09e89acb6c 100644 --- a/src/org/slub/rosetta/plugins/repositoryTask/DnxMoveFileOriginalPathDublettesClean.java +++ b/src/org/slub/rosetta/plugins/repositoryTask/DnxMoveFileOriginalPathDublettesClean.java @@ -9,10 +9,7 @@ import com.exlibris.digitool.repository.api.RepositoryTaskPlugin; import java.time.LocalDateTime; import java.time.format.DateTimeFormatter; -import java.util.HashSet; -import java.util.List; -import java.util.Map; -import java.util.Set; +import java.util.*; import java.util.regex.Matcher; import java.util.regex.Pattern; @@ -44,18 +41,20 @@ public class DnxMoveFileOriginalPathDublettesClean implements RepositoryTaskPlug try { List<String> filePids = ieEditor.getFilesForRep(repPid); // for each rep pid mark all fileoriginalpaths to detect copies - Set<String> filePaths = new HashSet<>(); + Map<String, String> filePathsWithModificationDate = new HashMap<>(); for (String filePid : filePids) { try { DnxDocumentHelper ieDnxH = ieEditor.getDnxHelper(filePid); DnxDocumentHelper.GeneralFileCharacteristics ieGfs = ieDnxH.getGeneralFileCharacteristics(); + String currentUpdateDate = ieGfs.getFileModificationDate(); String currentFileOriginalPath = ieGfs.getFileOriginalPath(); // workaround to check if fileOriginalPath has no "file://" because the replacement // always(!) starts with "file://" if (currentFileOriginalPath.startsWith("file://") ) { - filePaths.add( currentFileOriginalPath ); + filePathsWithModificationDate.put(currentFileOriginalPath, currentUpdateDate); + } else { - filePaths.add( "file://" + currentFileOriginalPath); + filePathsWithModificationDate.put("file://" + currentFileOriginalPath, currentUpdateDate); } } catch (DigitoolException e) { IEsuccess = false; @@ -70,7 +69,7 @@ public class DnxMoveFileOriginalPathDublettesClean implements RepositoryTaskPlug for (String filePid : filePids) { try { - if (replaceFileOriginalPath(ieEditor, repPid, filePid, filePaths)) { + if (replaceFileOriginalPath(ieEditor, repPid, filePid, filePathsWithModificationDate)) { countSuccess++; } taskResults.addResult(ieEditor.getIEPid(), null, true, "filepid=" + filePid + " processed"); @@ -136,10 +135,11 @@ public class DnxMoveFileOriginalPathDublettesClean implements RepositoryTaskPlug /* replace file original path if it starts with "file://data/" or "/data/" */ - private boolean replaceFileOriginalPath(IEEditor ieEditor, String repPid, String filePid, Set<String> filePaths) throws DigitoolException, FileOriginalPathCollisionException { + private boolean replaceFileOriginalPath(IEEditor ieEditor, String repPid, String filePid, Map<String, String> filePathsWithModificationDate) throws DigitoolException, FileOriginalPathCollisionException { DnxDocumentHelper ieDnxH = ieEditor.getDnxHelper(filePid); DnxDocumentHelper.GeneralFileCharacteristics ieGfs = ieDnxH.getGeneralFileCharacteristics(); String currentFileOriginalPath = ieGfs.getFileOriginalPath(); + String currentModificationDate = ieGfs.getFileModificationDate(); String updatedFileOriginalPath = currentFileOriginalPath; /* default to current to avoid empty string */ boolean updated = false; final String replacement = "file://"; @@ -148,7 +148,8 @@ public class DnxMoveFileOriginalPathDublettesClean implements RepositoryTaskPlug /* if something is updated */ if (matcher.lookingAt()) { // update it updatedFileOriginalPath = matcher.replaceFirst( replacement ); - if (filePaths.contains( updatedFileOriginalPath )) { + if (filePathsWithModificationDate.containsKey( updatedFileOriginalPath )) { + // TODO: check Date! throw new FileOriginalPathCollisionException("update needed for IE " + ieEditor.getIEPid() + " RepPid " + repPid + " FilePid " + filePid + " (old file_original_path='" + currentFileOriginalPath + "') to new file_original_path='" + updatedFileOriginalPath + "', but new file_original_path already exists!" @@ -164,6 +165,7 @@ public class DnxMoveFileOriginalPathDublettesClean implements RepositoryTaskPlug log.info("No update needed for IE " + ieEditor.getIEPid() + " RepPid " + repPid + " FilePid " + filePid + " (file_original_path='" + currentFileOriginalPath + "')"); } + // TODO: delete old entry! ieGfs.setFileOriginalPath(updatedFileOriginalPath); ieDnxH.setGeneralFileCharacteristics(ieGfs); ieEditor.setDnx(ieDnxH, filePid); /* necessary to commit changes on filePID */