diff --git a/Kitodo/src/main/java/org/kitodo/production/forms/dataeditor/AddDocStrucTypeDialog.java b/Kitodo/src/main/java/org/kitodo/production/forms/dataeditor/AddDocStrucTypeDialog.java index ebbcf0cf41a..5a16e7b4bf2 100644 --- a/Kitodo/src/main/java/org/kitodo/production/forms/dataeditor/AddDocStrucTypeDialog.java +++ b/Kitodo/src/main/java/org/kitodo/production/forms/dataeditor/AddDocStrucTypeDialog.java @@ -136,8 +136,6 @@ public void addDocStruc(boolean preview) { dataEditor.getGalleryPanel().setGalleryViewMode(LIST_MODE); } try { - dataEditor.getStructurePanel().preserve(); - dataEditor.refreshStructurePanel(); dataEditor.getPaginationPanel().show(); } catch (UnknownTreeNodeDataException e) { Helper.setErrorMessage(e.getMessage()); diff --git a/Kitodo/src/main/java/org/kitodo/production/forms/dataeditor/StructurePanel.java b/Kitodo/src/main/java/org/kitodo/production/forms/dataeditor/StructurePanel.java index 39e18de7d1e..d5bcbb5e67c 100644 --- a/Kitodo/src/main/java/org/kitodo/production/forms/dataeditor/StructurePanel.java +++ b/Kitodo/src/main/java/org/kitodo/production/forms/dataeditor/StructurePanel.java @@ -1488,6 +1488,14 @@ private LogicalDivision preserveLogicalAndPhysicalRecursive(TreeNode treeNode) t } } } + /* + PhysicalDivisions assigned to multiple LogicalDivisions may lead to wrong order value. The order will be + incremented for each occurrence and not just the last one. The LogicalDivisions containing those + PhysicalDivisions must be set to the order value of their first PhysicalDivision. + */ + if (!structure.getViews().isEmpty()) { + structure.setOrder(structure.getViews().getFirst().getPhysicalDivision().getOrder()); + } return structure; } 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 2350339b1e2..d15447e5e0a 100644 --- a/Kitodo/src/main/java/org/kitodo/production/metadata/MetadataEditor.java +++ b/Kitodo/src/main/java/org/kitodo/production/metadata/MetadataEditor.java @@ -329,8 +329,8 @@ private static void handlePosition(Workpiece workpiece, LogicalDivision logicalD List siblingOrderValues = Stream.concat(logicalDivision.getChildren().stream() .map(Division::getOrder), Stream.of(structureOrder)).sorted().collect(Collectors.toList()); - // new order must be set at correction location between existing siblings - logicalDivision.getChildren().add(siblingOrderValues.indexOf(structureOrder), newStructure); + // new order must be set at correct location between existing siblings + logicalDivision.getChildren().add(siblingOrderValues.lastIndexOf(structureOrder), newStructure); } break; case FIRST_CHILD_OF_CURRENT_ELEMENT: