Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
Expand Up @@ -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() {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -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) {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -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<View> views = selectedMedia.stream()
.map(v -> MetadataEditor.createUnrestrictedViewOn(v.getKey()))
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -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);
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -228,7 +228,9 @@ private boolean executeRemainingScript(List<Process> 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");
Expand Down Expand Up @@ -438,7 +440,7 @@ private void generateImages(List<Process> processes, GenerationMode generationMo
}
}

private void searchForMedia(List<Process> processes)
private void searchForMedia(List<Process> processes, boolean configuredFoldersOnly)
throws IOException, InvalidImagesException, MediaNotFoundException {
FileService fileService = ServiceManager.getFileService();
MetsService metsService = ServiceManager.getMetsService();
Expand All @@ -447,7 +449,7 @@ private void searchForMedia(List<Process> 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);
}
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -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;
Expand Down Expand Up @@ -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<Folder> folders = process.getProject().getFolders();
Expand All @@ -1105,9 +1108,11 @@ public boolean searchForMedia(Process process, Workpiece workpiece)
}
Map<String, Map<Subfolder, URI>> currentMedia = new TreeMap<>(metadataImageComparator);
for (Subfolder subfolder : subfolders.values()) {
for (Entry<String, URI> 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<String, URI> element : subfolder.listContents(false).entrySet()) {
currentMedia.computeIfAbsent(element.getKey(), any -> new HashMap<>(mapCapacity));
currentMedia.get(element.getKey()).put(subfolder, element.getValue());
}
}
}

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -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
Expand Down