Skip to content

Commit 0a18cef

Browse files
committed
Skip metadata assignment for untyped divisions
Prevent metadata from being written to structural container nodes of type page without a TYPE. Recursion is preserved, but only semantic divisions receive metadata. Fixes unintended DMDSEC creation.
1 parent 46ee97e commit 0a18cef

1 file changed

Lines changed: 11 additions & 10 deletions

File tree

Kitodo/src/main/java/org/kitodo/production/helper/ProcessHelper.java

Lines changed: 11 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -460,14 +460,17 @@ public static void setMetadataDomain(Metadata metadata, RulesetManagementInterfa
460460
public static void addAllowedMetadataRecursive(Division<?> division, Collection<String> keys, String value,
461461
RulesetManagementInterface rulesetManagement, String acquisitionStage,
462462
List<Locale.LanguageRange> priorityList) {
463-
StructuralElementViewInterface divisionView = rulesetManagement.getStructuralElementView(division.getType(),
464-
acquisitionStage, priorityList);
465-
for (MetadataViewInterface metadataView : divisionView.getAllowedMetadata()) {
466-
if (metadataView instanceof SimpleMetadataViewInterface && keys.contains(metadataView.getId())
467-
&& division.getMetadata().parallelStream()
468-
.filter(metadata -> metadataView.getId().equals(metadata.getKey()))
469-
.count() < metadataView.getMaxOccurs()) {
470-
MetadataEditor.writeMetadataEntry(division, (SimpleMetadataViewInterface) metadataView, value);
463+
String type = division.getType();
464+
if (Objects.nonNull(type) && !type.isEmpty()) {
465+
StructuralElementViewInterface divisionView = rulesetManagement.getStructuralElementView(type,
466+
acquisitionStage, priorityList);
467+
for (MetadataViewInterface metadataView : divisionView.getAllowedMetadata()) {
468+
if (metadataView instanceof SimpleMetadataViewInterface && keys.contains(metadataView.getId())
469+
&& division.getMetadata().parallelStream()
470+
.filter(metadata -> metadataView.getId().equals(metadata.getKey()))
471+
.count() < metadataView.getMaxOccurs()) {
472+
MetadataEditor.writeMetadataEntry(division, (SimpleMetadataViewInterface) metadataView, value);
473+
}
471474
}
472475
}
473476
for (Division<?> child : division.getChildren()) {
@@ -510,8 +513,6 @@ private static void setProcessTitleMetadata(Workpiece workpiece, String processT
510513
if (!processTitleKeys.isEmpty()) {
511514
ProcessHelper.addAllowedMetadataRecursive(workpiece.getLogicalStructure(), processTitleKeys, processTitle,
512515
rulesetManagement, acquisitionStage, priorityList);
513-
ProcessHelper.addAllowedMetadataRecursive(workpiece.getPhysicalStructure(), processTitleKeys, processTitle,
514-
rulesetManagement, acquisitionStage, priorityList);
515516
}
516517
}
517518

0 commit comments

Comments
 (0)