diff --git a/Kitodo/src/main/java/org/kitodo/production/metadata/MetadataEditor.java b/Kitodo/src/main/java/org/kitodo/production/metadata/MetadataEditor.java index 4a5a33c5fbc..e1fe3b75f63 100644 --- a/Kitodo/src/main/java/org/kitodo/production/metadata/MetadataEditor.java +++ b/Kitodo/src/main/java/org/kitodo/production/metadata/MetadataEditor.java @@ -305,7 +305,7 @@ public static LogicalDivision addLogicalDivision(String type, Workpiece workpiec handlePosition(workpiece, logicalDivision, position, viewsToAdd, parents, siblings, newStructure); if (Objects.nonNull(viewsToAdd) && !viewsToAdd.isEmpty()) { - handleViewsToAdd(viewsToAdd, newStructure); + handleViewsToAdd(viewsToAdd, newStructure, workpiece.getLogicalStructure()); } return newStructure; } @@ -352,11 +352,18 @@ private static void handlePosition(Workpiece workpiece, LogicalDivision logicalD } } - private static void handleViewsToAdd(List viewsToAdd, LogicalDivision newStructure) { + private static void handleViewsToAdd(List viewsToAdd, LogicalDivision newStructure, + LogicalDivision rootStructure) { for (View viewToAdd : viewsToAdd) { List logicalDivisions = viewToAdd.getPhysicalDivision().getLogicalDivisions(); - for (LogicalDivision elementToUnassign : logicalDivisions) { - elementToUnassign.getViews().remove(viewToAdd); + if (logicalDivisions.isEmpty() && Objects.nonNull(rootStructure)) { + // In an unsaved process, unstructured media may not yet have + // the root logical division registered explicitly. + rootStructure.getViews().remove(viewToAdd); + } else { + for (LogicalDivision elementToUnassign : logicalDivisions) { + elementToUnassign.getViews().remove(viewToAdd); + } } logicalDivisions.clear(); logicalDivisions.add(newStructure);