package org.jabref.logic.integrity; import java.nio.file.Files; import java.nio.file.Path; import java.util.List; import java.util.Optional; import java.util.stream.Collectors; import org.jabref.logic.l10n.Localization; import org.jabref.model.database.BibDatabaseContext; import org.jabref.model.entry.FileFieldParser; import org.jabref.model.entry.LinkedFile; import org.jabref.model.metadata.FileDirectoryPreferences; public class FileChecker implements ValueChecker { private final BibDatabaseContext context; private final FileDirectoryPreferences fileDirectoryPreferences; public FileChecker(BibDatabaseContext context, FileDirectoryPreferences fileDirectoryPreferences) { this.context = context; this.fileDirectoryPreferences = fileDirectoryPreferences; } @Override public Optional<String> checkValue(String value) { List<LinkedFile> linkedFiles = FileFieldParser.parse(value).stream() .filter(file -> !file.isOnlineLink()) .collect(Collectors.toList()); for (LinkedFile file : linkedFiles) { Optional<Path> linkedFile = file.findIn(context, fileDirectoryPreferences); if ((!linkedFile.isPresent()) || !Files.exists(linkedFile.get())) { return Optional.of(Localization.lang("link should refer to a correct file path")); } } return Optional.empty(); } }