From 1e1e8db0e877caeaf3f92b05675218adeeccf851 Mon Sep 17 00:00:00 2001 From: Robert Stephan Date: Mon, 20 Jul 2026 19:03:35 +0200 Subject: [PATCH 1/2] MCR-3771 set internal sourcepath of derivate to NULL on create --- .../org/mycore/datamodel/metadata/MCRMetadataManager.java | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/mycore-base/src/main/java/org/mycore/datamodel/metadata/MCRMetadataManager.java b/mycore-base/src/main/java/org/mycore/datamodel/metadata/MCRMetadataManager.java index 1c989be10a..2394be80c1 100644 --- a/mycore-base/src/main/java/org/mycore/datamodel/metadata/MCRMetadataManager.java +++ b/mycore-base/src/main/java/org/mycore/datamodel/metadata/MCRMetadataManager.java @@ -206,9 +206,11 @@ public static void create(final MCRDerivate mcrDerivate) throws MCRPersistenceEx setDerivateMetadata(mcrDerivate); - fireEvent(mcrDerivate, null, MCREvent.EventType.CREATE); - createDataInIFS(mcrDerivate, derivateId, objectId, objectBackup); + + handleFileSourceDirectory(mcrDerivate); + + fireEvent(mcrDerivate, null, MCREvent.EventType.CREATE); addLinkToMetadata(mcrDerivate, objectId, objectBackup); } From e35e874439d2d90e48c8ae7e7673536c3fdf2666 Mon Sep 17 00:00:00 2001 From: Robert Stephan Date: Tue, 21 Jul 2026 17:19:28 +0200 Subject: [PATCH 2/2] MCR-3771 remove sourcePath from internals --- .../metadata/MCRMetadataManager.java | 28 +++++++++---------- 1 file changed, 13 insertions(+), 15 deletions(-) diff --git a/mycore-base/src/main/java/org/mycore/datamodel/metadata/MCRMetadataManager.java b/mycore-base/src/main/java/org/mycore/datamodel/metadata/MCRMetadataManager.java index 2394be80c1..db611c1218 100644 --- a/mycore-base/src/main/java/org/mycore/datamodel/metadata/MCRMetadataManager.java +++ b/mycore-base/src/main/java/org/mycore/datamodel/metadata/MCRMetadataManager.java @@ -206,12 +206,12 @@ public static void create(final MCRDerivate mcrDerivate) throws MCRPersistenceEx setDerivateMetadata(mcrDerivate); - createDataInIFS(mcrDerivate, derivateId, objectId, objectBackup); - - handleFileSourceDirectory(mcrDerivate); - + Path sourcePath = removeSourcePathFromInternals(mcrDerivate); + fireEvent(mcrDerivate, null, MCREvent.EventType.CREATE); + createDataInIFS(mcrDerivate, derivateId, objectId, objectBackup, sourcePath); + addLinkToMetadata(mcrDerivate, objectId, objectBackup); } @@ -272,9 +272,9 @@ private static void setDerivateMetadata(MCRDerivate mcrDerivate) { } private static void createDataInIFS(MCRDerivate mcrDerivate, MCRObjectID derivateId, MCRObjectID objectId, - byte[] objectBackup) throws MCRPersistenceException { + byte[] objectBackup, Path sourcePath) throws MCRPersistenceException { try { - processDerivate(mcrDerivate, derivateId, objectBackup); + processDerivate(mcrDerivate, derivateId, objectBackup, sourcePath); } catch (Exception e) { restore(mcrDerivate, objectId, objectBackup); throw new MCRPersistenceException("Error during data creation in IFS.", e); @@ -296,11 +296,11 @@ private static void addLinkToMetadata(MCRDerivate mcrDerivate, MCRObjectID objec } private static void processDerivate(MCRDerivate mcrDerivate, MCRObjectID objectId, - byte[] objectBackup) { + byte[] objectBackup, final Path sourcePath) { MCRObjectID derivateId = mcrDerivate.getId(); if (mcrDerivate.getDerivate().getInternals() != null) { MCRPath rootPath = MCRPath.getPath(derivateId.toString(), "/"); - if (mcrDerivate.getDerivate().getInternals().getSourcePath() == null) { + if (sourcePath == null) { try { rootPath.getFileSystem().createRoot(rootPath.getOwner()); } catch (IOException ioExc) { @@ -308,14 +308,12 @@ private static void processDerivate(MCRDerivate mcrDerivate, MCRObjectID objectI "Cannot create root of '" + rootPath.getOwner() + "'.", ioExc); } } else { - final String sourcepath = mcrDerivate.getDerivate().getInternals().getSourcePath(); - final Path f = Paths.get(sourcepath); - if (Files.exists(f)) { + if (Files.exists(sourcePath)) { try { if (LOGGER.isDebugEnabled()) { LOGGER.debug("Starting File-Import"); } - importDerivate(derivateId.toString(), f); + importDerivate(derivateId.toString(), sourcePath); } catch (final Exception e) { if (Files.exists(rootPath)) { deleteDerivate(derivateId.toString()); @@ -324,7 +322,7 @@ private static void processDerivate(MCRDerivate mcrDerivate, MCRObjectID objectI throw new MCRPersistenceException("Can't add derivate to the IFS", e); } } else { - LOGGER.warn("Empty derivate, the File or Directory -->{}<-- was not found.", sourcepath); + LOGGER.warn("Empty derivate, the File or Directory -->{}<-- was not found.", sourcePath); } } } @@ -855,7 +853,7 @@ public static void update(final MCRDerivate mcrDerivate) throws MCRPersistenceEx checkUpdatePermission(derivateId); - Path fileSourceDirectory = handleFileSourceDirectory(mcrDerivate); + Path fileSourceDirectory = removeSourcePathFromInternals(mcrDerivate); MCRDerivate old = retrieveMCRDerivate(derivateId); @@ -868,7 +866,7 @@ public static void update(final MCRDerivate mcrDerivate) throws MCRPersistenceEx addLinkToMetadata(mcrDerivate); } - private static Path handleFileSourceDirectory(MCRDerivate mcrDerivate) { + private static Path removeSourcePathFromInternals(MCRDerivate mcrDerivate) { MCRMetaIFS internals = mcrDerivate.getDerivate().getInternals(); if (internals != null && internals.getSourcePath() != null) { Path fileSourceDirectory = Paths.get(internals.getSourcePath());