diff --git a/Kitodo/src/main/java/org/kitodo/production/forms/dataeditor/DataEditorForm.java b/Kitodo/src/main/java/org/kitodo/production/forms/dataeditor/DataEditorForm.java index 8698d88670e..f53bfd38942 100644 --- a/Kitodo/src/main/java/org/kitodo/production/forms/dataeditor/DataEditorForm.java +++ b/Kitodo/src/main/java/org/kitodo/production/forms/dataeditor/DataEditorForm.java @@ -414,7 +414,7 @@ private boolean openMetsFile() throws IOException, InvalidImagesException, Media workpiece.setId(process.getId().toString()); } metadataFileLoadingError = ""; - return ServiceManager.getFileService().searchForMedia(process, workpiece); + return ServiceManager.getFileService().searchForMedia(process, workpiece, false); } private void init() { diff --git a/Kitodo/src/main/java/org/kitodo/production/forms/dataeditor/PaginationPanel.java b/Kitodo/src/main/java/org/kitodo/production/forms/dataeditor/PaginationPanel.java index c53bd6cc7fa..e1915cfc96b 100644 --- a/Kitodo/src/main/java/org/kitodo/production/forms/dataeditor/PaginationPanel.java +++ b/Kitodo/src/main/java/org/kitodo/production/forms/dataeditor/PaginationPanel.java @@ -78,7 +78,7 @@ public void updateMediaReferences() { boolean mediaReferencesChanged = false; try { mediaReferencesChanged = ServiceManager.getFileService().searchForMedia(dataEditor.getProcess(), - dataEditor.getWorkpiece()); + dataEditor.getWorkpiece(), false); } catch (InvalidImagesException e) { Helper.setErrorMessage(e.getLocalizedMessage()); } catch (MediaNotFoundException e) { diff --git a/Kitodo/src/main/java/org/kitodo/production/forms/dataeditor/UploadFileDialog.java b/Kitodo/src/main/java/org/kitodo/production/forms/dataeditor/UploadFileDialog.java index 4548c0f44dc..f9d733f3664 100644 --- a/Kitodo/src/main/java/org/kitodo/production/forms/dataeditor/UploadFileDialog.java +++ b/Kitodo/src/main/java/org/kitodo/production/forms/dataeditor/UploadFileDialog.java @@ -388,7 +388,7 @@ public void updateWorkpiece() throws InvalidImagesException, NoSuchMetadataField } private void addMediaToWorkpiece() throws InvalidImagesException, MediaNotFoundException { - ServiceManager.getFileService().searchForMedia(dataEditor.getProcess(), dataEditor.getWorkpiece()); + ServiceManager.getFileService().searchForMedia(dataEditor.getProcess(), dataEditor.getWorkpiece(), false); List views = selectedMedia.stream() .map(v -> MetadataEditor.createUnrestrictedViewOn(v.getKey())) diff --git a/Kitodo/src/main/java/org/kitodo/production/services/command/ImportingProcess.java b/Kitodo/src/main/java/org/kitodo/production/services/command/ImportingProcess.java index 12164defda5..1593f37fd7a 100644 --- a/Kitodo/src/main/java/org/kitodo/production/services/command/ImportingProcess.java +++ b/Kitodo/src/main/java/org/kitodo/production/services/command/ImportingProcess.java @@ -504,7 +504,7 @@ private void copyAndAdjustMetsFile(Process process) link.setUri(processService.getProcessURI(importedChildProcess.processId)); addLinkInDatabase(process, importedChildProcess.processId); } - fileService.searchForMedia(process, workpiece); + fileService.searchForMedia(process, workpiece, false); Path outputMetsFile = outputDir.resolve(META_FILE_NAME); metsService.saveWorkpiece(workpiece, outputMetsFile.toUri()); logger.info("Wrote METS file " + outputMetsFile); diff --git a/Kitodo/src/main/java/org/kitodo/production/services/command/KitodoScriptService.java b/Kitodo/src/main/java/org/kitodo/production/services/command/KitodoScriptService.java index 81e89d30804..8c95ef35eed 100644 --- a/Kitodo/src/main/java/org/kitodo/production/services/command/KitodoScriptService.java +++ b/Kitodo/src/main/java/org/kitodo/production/services/command/KitodoScriptService.java @@ -228,7 +228,9 @@ private boolean executeRemainingScript(List processes, String script) generateImages(processes, mode, foldersList); break; case "searchForMedia": - searchForMedia(processes); + String subfolders = parameters.get("subfolders"); + boolean configuredOnly = "configured".equals(subfolders); + searchForMedia(processes, configuredOnly); break; case "importProcesses": String indir = parameters.get("indir"); @@ -438,7 +440,7 @@ private void generateImages(List processes, GenerationMode generationMo } } - private void searchForMedia(List processes) + private void searchForMedia(List processes, boolean configuredFoldersOnly) throws IOException, InvalidImagesException, MediaNotFoundException { FileService fileService = ServiceManager.getFileService(); MetsService metsService = ServiceManager.getMetsService(); @@ -447,7 +449,7 @@ private void searchForMedia(List processes) for (Process process : processes) { URI metadataFileUri = processService.getMetadataFileUri(process); Workpiece workpiece = metsService.loadWorkpiece(metadataFileUri); - fileService.searchForMedia(process, workpiece); + fileService.searchForMedia(process, workpiece, configuredFoldersOnly); metsService.saveWorkpiece(workpiece, metadataFileUri); } } diff --git a/Kitodo/src/main/java/org/kitodo/production/services/file/FileService.java b/Kitodo/src/main/java/org/kitodo/production/services/file/FileService.java index 6e0e68ddd3d..bca00cf8e53 100644 --- a/Kitodo/src/main/java/org/kitodo/production/services/file/FileService.java +++ b/Kitodo/src/main/java/org/kitodo/production/services/file/FileService.java @@ -56,6 +56,7 @@ import org.kitodo.data.database.beans.Process; import org.kitodo.data.database.beans.Ruleset; import org.kitodo.data.database.beans.User; +import org.kitodo.data.database.enums.LinkingMode; import org.kitodo.data.database.exceptions.DAOException; import org.kitodo.exceptions.CommandException; import org.kitodo.exceptions.InvalidImagesException; @@ -1093,8 +1094,10 @@ public URI getSourceDirectory(Process process) { * Process in which folders should be searched for media * @param workpiece * Workpiece to which the media are to be added + * @param searchInConfiguredFoldersOnly + * Flag controlling whether media should only be searched in folders configured correspondingly in project settings */ - public boolean searchForMedia(Process process, Workpiece workpiece) + public boolean searchForMedia(Process process, Workpiece workpiece, boolean searchInConfiguredFoldersOnly) throws InvalidImagesException, MediaNotFoundException { final long begin = System.nanoTime(); List folders = process.getProject().getFolders(); @@ -1105,9 +1108,11 @@ public boolean searchForMedia(Process process, Workpiece workpiece) } Map> currentMedia = new TreeMap<>(metadataImageComparator); for (Subfolder subfolder : subfolders.values()) { - for (Entry element : subfolder.listContents(false).entrySet()) { - currentMedia.computeIfAbsent(element.getKey(), any -> new HashMap<>(mapCapacity)); - currentMedia.get(element.getKey()).put(subfolder, element.getValue()); + if (!(searchInConfiguredFoldersOnly && LinkingMode.NO.equals(subfolder.getFolder().getLinkingMode()))) { + for (Entry element : subfolder.listContents(false).entrySet()) { + currentMedia.computeIfAbsent(element.getKey(), any -> new HashMap<>(mapCapacity)); + currentMedia.get(element.getKey()).put(subfolder, element.getValue()); + } } } diff --git a/Kitodo/src/test/java/org/kitodo/production/services/file/FileServiceTest.java b/Kitodo/src/test/java/org/kitodo/production/services/file/FileServiceTest.java index 3cf8475a2b7..2b06f8c6751 100644 --- a/Kitodo/src/test/java/org/kitodo/production/services/file/FileServiceTest.java +++ b/Kitodo/src/test/java/org/kitodo/production/services/file/FileServiceTest.java @@ -178,7 +178,7 @@ public void testSearchForMedia() throws IOException, URISyntaxException { URI testmeta = Paths.get("./src/test/resources/metadata/metadataFiles/testmeta.xml").toUri(); Workpiece workpiece = ServiceManager.getMetsService().loadWorkpiece(testmeta); - assertThrows(MediaNotFoundException.class, () -> fileService.searchForMedia(process, workpiece)); + assertThrows(MediaNotFoundException.class, () -> fileService.searchForMedia(process, workpiece, false)); } @Test