diff --git a/xta-adapter/src/main/java/de/ozgcloud/eingang/xdomea/XdomeaMessageDataMapper.java b/xta-adapter/src/main/java/de/ozgcloud/eingang/xdomea/XdomeaMessageDataMapper.java index 9f9f2f93c60d21fe2faa903601e1db37dd4206d4..e6d9f6836b5ef0d26087356de2545d512683b863 100644 --- a/xta-adapter/src/main/java/de/ozgcloud/eingang/xdomea/XdomeaMessageDataMapper.java +++ b/xta-adapter/src/main/java/de/ozgcloud/eingang/xdomea/XdomeaMessageDataMapper.java @@ -25,37 +25,54 @@ public class XdomeaMessageDataMapper { public XdomeaMessageData mapIncomingFilesToXdomeaMessageData(List<IncomingFile> incomingFileList) { var xdomeaXMLFile = findXdomeaXMLFile(incomingFileList); - var representationFileNames = valueReader.readRepresentationFileNames(xdomeaXMLFile); + var attachmentFileNames = getFileNamesExcluding( + incomingFileList, + Stream.concat(Stream.of(xdomeaXMLFile.getName()), representationFileNames.stream()) + ); - var fileNameToFileMap = incomingFileList.stream() - .collect(Collectors.toMap(IncomingFile::getName, file -> file)); + var fileNameToFileMap = createFileNameToIncomingFileMap(incomingFileList); return XdomeaMessageData.builder() .metadataFile(xdomeaXMLFile) - // Representations are incoming files which are referenced in the xdomea-xml in 'Dateiname' elements - .representations(getFilesByName( - movePrimaryRepresentationFileNameToFirstPosition(representationFileNames), - fileNameToFileMap - ) - ) - // Attachments are all incoming files which are neither the xdomea-xml nor representations - .attachments(Stream.of(IncomingFileGroup.builder() - .name(ATTACHMENT_GROUP_NAME) - .files(getFilesByName( - dropNames( - incomingFileList.stream().map(IncomingFile::getName), - Stream.concat(Stream.of(xdomeaXMLFile.getName()), representationFileNames.stream()) - .collect(Collectors.toSet()) - ), - fileNameToFileMap)) - .build()) - // Do not include empty attachment group - .filter(group -> !group.getFiles().isEmpty()) - .toList() - ) + .representations(getRepresentations(representationFileNames, fileNameToFileMap)) + .attachments(getAttachments(attachmentFileNames, fileNameToFileMap)) .build(); } + private Map<String, IncomingFile> createFileNameToIncomingFileMap(List<IncomingFile> incomingFileList) { + return incomingFileList.stream() + .collect(Collectors.toMap(IncomingFile::getName, file -> file)); + } + + private Stream<String> getFileNamesExcluding(List<IncomingFile> incomingFileList, Stream<String> excludedFileNames) { + return dropNames( + incomingFileList.stream().map(IncomingFile::getName), + excludedFileNames.collect(Collectors.toSet()) + ); + } + + private List<IncomingFile> getRepresentations(List<String> representationFileNames, Map<String, IncomingFile> fileNameToFileMap) { + return getFilesByName( + movePrimaryRepresentationFileNameToFirstPosition(representationFileNames), + fileNameToFileMap + ); + } + + private List<IncomingFileGroup> getAttachments(Stream<String> attachmentFileNames, Map<String, IncomingFile> fileNameToFileMap) { + return Stream.of(IncomingFileGroup.builder() + .name(ATTACHMENT_GROUP_NAME) + .files( + getFilesByName( + attachmentFileNames, + fileNameToFileMap + ) + ) + .build()) + // Do not include empty attachment group + .filter(group -> !group.getFiles().isEmpty()) + .toList(); + } + private Stream<String> movePrimaryRepresentationFileNameToFirstPosition(List<String> representationFileNames) { var primaryRepresentationFileName = findPrimaryRepresentationName(representationFileNames); return Stream.concat(