From 5e10791debb20e54ef951bcdd8da5d3d6632e613 Mon Sep 17 00:00:00 2001 From: Oscar Gustafsson Date: Thu, 25 Aug 2016 17:55:03 +0200 Subject: [PATCH 1/2] Removed Globals from BibDatabaseContext --- .../net/sf/jabref/BibDatabaseContext.java | 18 +++------- .../sf/jabref/FileDirectoryPreferences.java | 33 +++++++++++++++++++ .../net/sf/jabref/cli/ArgumentProcessor.java | 3 +- .../net/sf/jabref/external/AutoSetLinks.java | 2 +- .../jabref/external/DownloadExternalFile.java | 2 +- .../jabref/external/DroppedFileHandler.java | 24 ++++++++++---- .../jabref/external/FindFullTextAction.java | 4 ++- .../sf/jabref/external/MoveFileAction.java | 3 +- .../jabref/external/SynchronizeFileField.java | 5 +-- .../TransferableFileLinkSelection.java | 4 ++- .../sf/jabref/external/WriteXMPAction.java | 13 +++++--- .../external/WriteXMPEntryEditorAction.java | 11 +++++-- .../java/net/sf/jabref/gui/BasePanel.java | 12 +++---- .../sf/jabref/gui/FileListEntryEditor.java | 4 +-- .../sf/jabref/gui/actions/CleanupAction.java | 3 +- .../sf/jabref/gui/desktop/JabRefDesktop.java | 2 +- .../sf/jabref/gui/exporter/ExportAction.java | 2 +- .../gui/exporter/ExportToClipboardAction.java | 2 +- .../gui/fieldeditors/FileListEditor.java | 5 +-- .../gui/importer/EntryFromFileCreator.java | 4 ++- .../gui/importer/UnlinkedPDFFileFilter.java | 3 +- .../jabref/gui/worker/SendAsEMailAction.java | 4 +-- .../jabref/logic/cleanup/CleanupWorker.java | 13 +++++--- .../logic/cleanup/MoveFilesCleanup.java | 8 +++-- .../logic/cleanup/RelativePathsCleanup.java | 9 +++-- .../logic/cleanup/RenamePdfCleanup.java | 11 +++++-- .../logic/util/io/DatabaseFileLookup.java | 6 ++-- .../net/sf/jabref/logic/util/io/FileUtil.java | 6 ++-- .../migrations/FileLinksUpgradeWarning.java | 9 ++--- .../net/sf/jabref/pdfimport/PdfImporter.java | 3 +- .../jabref/preferences/JabRefPreferences.java | 11 +++++++ .../net/sf/jabref/BibDatabaseContextTest.java | 7 ---- .../logic/cleanup/CleanupWorkerTest.java | 6 ++-- .../jabref/logic/cleanup/ISSNCleanupTest.java | 4 ++- .../logic/cleanup/MoveFilesCleanupTest.java | 5 +-- .../logic/cleanup/RenamePdfCleanupTest.java | 14 ++++---- .../exporter/BibtexDatabaseWriterTest.java | 17 +++++----- .../logic/exporter/ExportFormatTest.java | 9 +++-- .../logic/exporter/HtmlExportFormatTest.java | 9 +++-- .../logic/integrity/IntegrityCheckTest.java | 2 ++ 40 files changed, 196 insertions(+), 116 deletions(-) create mode 100644 src/main/java/net/sf/jabref/FileDirectoryPreferences.java diff --git a/src/main/java/net/sf/jabref/BibDatabaseContext.java b/src/main/java/net/sf/jabref/BibDatabaseContext.java index dd0d805f0c9..3bffe4178b3 100644 --- a/src/main/java/net/sf/jabref/BibDatabaseContext.java +++ b/src/main/java/net/sf/jabref/BibDatabaseContext.java @@ -6,13 +6,10 @@ import java.util.Objects; import java.util.Optional; -import net.sf.jabref.logic.layout.format.FileLinkPreferences; import net.sf.jabref.model.database.BibDatabase; import net.sf.jabref.model.database.BibDatabaseMode; import net.sf.jabref.model.database.BibDatabaseModeDetection; import net.sf.jabref.model.database.DatabaseLocation; -import net.sf.jabref.model.entry.FieldName; -import net.sf.jabref.preferences.JabRefPreferences; import net.sf.jabref.shared.DBMSSynchronizer; /** @@ -136,11 +133,11 @@ public boolean isBiblatexMode() { * @param fieldName The field type * @return The default directory for this field type. */ - public List getFileDirectory(String fieldName) { + public List getFileDirectory(FileDirectoryPreferences preferences) { List fileDirs = new ArrayList<>(); // 1. metadata user-specific directory - Optional userFileDirectory = metaData.getUserFileDirectory(Globals.prefs.getUser()); + Optional userFileDirectory = metaData.getUserFileDirectory(preferences.getUser()); if(userFileDirectory.isPresent()) { fileDirs.add(getFileDirectoryPath(userFileDirectory.get())); } @@ -152,16 +149,13 @@ public List getFileDirectory(String fieldName) { } // 3. preferences directory - String dir = Globals.prefs.get(fieldName + FileLinkPreferences.DIR_SUFFIX); // FILE_DIR - if (dir != null) { - fileDirs.add(dir); - } + preferences.getFieldDirectory().ifPresent(fileDirs::add); // 4. BIB file directory if (getDatabaseFile() != null) { String parentDir = getDatabaseFile().getParent(); // Check if we should add it as primary file dir (first in the list) or not: - if (Globals.prefs.getBoolean(JabRefPreferences.BIB_LOC_AS_PRIMARY_DIR)) { + if (preferences.isBibLocationAsPrimary()) { fileDirs.add(0, parentDir); } else { fileDirs.add(parentDir); @@ -192,10 +186,6 @@ private String getFileDirectoryPath(String directoryName) { return dir; } - public List getFileDirectory() { - return getFileDirectory(FieldName.FILE); - } - public DBMSSynchronizer getDBSynchronizer() { return this.dbmsSynchronizer; } diff --git a/src/main/java/net/sf/jabref/FileDirectoryPreferences.java b/src/main/java/net/sf/jabref/FileDirectoryPreferences.java new file mode 100644 index 00000000000..11be77dedb5 --- /dev/null +++ b/src/main/java/net/sf/jabref/FileDirectoryPreferences.java @@ -0,0 +1,33 @@ +package net.sf.jabref; + +import java.util.Optional; + +public class FileDirectoryPreferences { + private final String user; + private final String fieldDirectory; + private final boolean bibLocationAsPrimary; + private final String fieldName; + + public FileDirectoryPreferences(String fieldName, String user, String fieldDirectory, boolean bibLocationAsPrimary) { + this.fieldName = fieldName; + this.user = user; + this.fieldDirectory = fieldDirectory; + this.bibLocationAsPrimary = bibLocationAsPrimary; + } + + public String getUser() { + return user; + } + + public Optional getFieldDirectory() { + return Optional.ofNullable(fieldDirectory); + } + + public boolean isBibLocationAsPrimary() { + return bibLocationAsPrimary; + } + + public String getFieldName() { + return fieldName; + } +} diff --git a/src/main/java/net/sf/jabref/cli/ArgumentProcessor.java b/src/main/java/net/sf/jabref/cli/ArgumentProcessor.java index bdc772b0a04..ce2e7e10e16 100644 --- a/src/main/java/net/sf/jabref/cli/ArgumentProcessor.java +++ b/src/main/java/net/sf/jabref/cli/ArgumentProcessor.java @@ -372,7 +372,8 @@ private void exportFile(List loaded, String[] data) { } BibDatabaseContext databaseContext = pr.getDatabaseContext(); databaseContext.setDatabaseFile(theFile); - Globals.prefs.fileDirForDatabase = databaseContext.getFileDirectory(); + Globals.prefs.fileDirForDatabase = databaseContext + .getFileDirectory(Globals.prefs.getFileDirectoryPreferences()); System.out.println(Localization.lang("Exporting") + ": " + data[0]); IExportFormat format = ExportFormats.getExportFormat(data[1]); if (format == null) { diff --git a/src/main/java/net/sf/jabref/external/AutoSetLinks.java b/src/main/java/net/sf/jabref/external/AutoSetLinks.java index 57fd67e4238..461e67bb891 100644 --- a/src/main/java/net/sf/jabref/external/AutoSetLinks.java +++ b/src/main/java/net/sf/jabref/external/AutoSetLinks.java @@ -92,7 +92,7 @@ public static Runnable autoSetLinks(final List entries, final NamedCom public void run() { // determine directories to search in List dirs = new ArrayList<>(); - List dirsS = databaseContext.getFileDirectory(); + List dirsS = databaseContext.getFileDirectory(Globals.prefs.getFileDirectoryPreferences()); dirs.addAll(dirsS.stream().map(File::new).collect(Collectors.toList())); // determine extensions diff --git a/src/main/java/net/sf/jabref/external/DownloadExternalFile.java b/src/main/java/net/sf/jabref/external/DownloadExternalFile.java index 812a6c2d576..7e706df26b4 100644 --- a/src/main/java/net/sf/jabref/external/DownloadExternalFile.java +++ b/src/main/java/net/sf/jabref/external/DownloadExternalFile.java @@ -147,7 +147,7 @@ public void download(URL url, final DownloadCallback callback) throws IOExceptio } String suggestedName = getSuggestedFileName(suffix); - List fDirectory = databaseContext.getFileDirectory(); + List fDirectory = databaseContext.getFileDirectory(Globals.prefs.getFileDirectoryPreferences()); String directory; if (fDirectory.isEmpty()) { directory = null; diff --git a/src/main/java/net/sf/jabref/external/DroppedFileHandler.java b/src/main/java/net/sf/jabref/external/DroppedFileHandler.java index 0a18dbe99b1..c3198246ca5 100644 --- a/src/main/java/net/sf/jabref/external/DroppedFileHandler.java +++ b/src/main/java/net/sf/jabref/external/DroppedFileHandler.java @@ -140,7 +140,10 @@ public void handleDroppedfile(String fileName, ExternalFileType fileType, BibEnt String destFilename; if (linkInPlace.isSelected()) { - destFilename = FileUtil.shortenFileName(new File(fileName), panel.getBibDatabaseContext().getFileDirectory()).toString(); + destFilename = FileUtil + .shortenFileName(new File(fileName), + panel.getBibDatabaseContext().getFileDirectory(Globals.prefs.getFileDirectoryPreferences())) + .toString(); } else { destFilename = renameCheckBox.isSelected() ? renameToTextBox.getText() : new File(fileName).getName(); if (copyRadioButton.isSelected()) { @@ -190,7 +193,10 @@ public void linkPdfToEntry(String fileName, BibEntry entry) { NamedCompound edits = new NamedCompound(Localization.lang("Drop %0", fileType.getExtension())); if (linkInPlace.isSelected()) { - destFilename = FileUtil.shortenFileName(new File(fileName), panel.getBibDatabaseContext().getFileDirectory()).toString(); + destFilename = FileUtil + .shortenFileName(new File(fileName), + panel.getBibDatabaseContext().getFileDirectory(Globals.prefs.getFileDirectoryPreferences())) + .toString(); } else { destFilename = renameCheckBox.isSelected() ? renameToTextBox.getText() : new File(fileName).getName(); if (copyRadioButton.isSelected()) { @@ -264,7 +270,10 @@ private boolean tryXmpImport(String fileName, ExternalFileType fileType, NamedCo String destFilename; if (linkInPlace.isSelected()) { - destFilename = FileUtil.shortenFileName(new File(fileName), panel.getBibDatabaseContext().getFileDirectory()).toString(); + destFilename = FileUtil + .shortenFileName(new File(fileName), + panel.getBibDatabaseContext().getFileDirectory(Globals.prefs.getFileDirectoryPreferences())) + .toString(); } else { if (renameCheckBox.isSelected()) { destFilename = fileName; @@ -301,7 +310,7 @@ private boolean showLinkMoveCopyRenameDialog(String linkFileName, ExternalFileTy BibDatabase database) { String dialogTitle = Localization.lang("Link to file %0", linkFileName); - List dirs = panel.getBibDatabaseContext().getFileDirectory(); + List dirs = panel.getBibDatabaseContext().getFileDirectory(Globals.prefs.getFileDirectoryPreferences()); int found = -1; for (int i = 0; i < dirs.size(); i++) { if (new File(dirs.get(i)).exists()) { @@ -388,7 +397,8 @@ private void doLink(BibEntry entry, ExternalFileType fileType, String filename, // If avoidDuplicate==true, we should check if this file is already linked: if (avoidDuplicate) { // For comparison, find the absolute filename: - List dirs = panel.getBibDatabaseContext().getFileDirectory(); + List dirs = panel.getBibDatabaseContext() + .getFileDirectory(Globals.prefs.getFileDirectoryPreferences()); String absFilename; if (new File(filename).isAbsolute() || dirs.isEmpty()) { absFilename = filename; @@ -448,7 +458,7 @@ private void doLink(BibEntry entry, ExternalFileType fileType, String filename, */ private boolean doMove(String fileName, String destFilename, NamedCompound edits) { - List dirs = panel.getBibDatabaseContext().getFileDirectory(); + List dirs = panel.getBibDatabaseContext().getFileDirectory(Globals.prefs.getFileDirectoryPreferences()); int found = -1; for (int i = 0; i < dirs.size(); i++) { if (new File(dirs.get(i)).exists()) { @@ -498,7 +508,7 @@ private boolean doMove(String fileName, String destFilename, */ private boolean doCopy(String fileName, String toFile, NamedCompound edits) { - List dirs = panel.getBibDatabaseContext().getFileDirectory(); + List dirs = panel.getBibDatabaseContext().getFileDirectory(Globals.prefs.getFileDirectoryPreferences()); int found = -1; for (int i = 0; i < dirs.size(); i++) { if (new File(dirs.get(i)).exists()) { diff --git a/src/main/java/net/sf/jabref/external/FindFullTextAction.java b/src/main/java/net/sf/jabref/external/FindFullTextAction.java index 50ae73b5d86..dd51e90269f 100644 --- a/src/main/java/net/sf/jabref/external/FindFullTextAction.java +++ b/src/main/java/net/sf/jabref/external/FindFullTextAction.java @@ -7,6 +7,7 @@ import javax.swing.JOptionPane; +import net.sf.jabref.Globals; import net.sf.jabref.gui.BasePanel; import net.sf.jabref.gui.FileListTableModel; import net.sf.jabref.gui.undo.UndoableFieldChange; @@ -53,7 +54,8 @@ public void run() { @Override public void update() { if (result.isPresent()) { - List dirs = basePanel.getBibDatabaseContext().getFileDirectory(); + List dirs = basePanel.getBibDatabaseContext() + .getFileDirectory(Globals.prefs.getFileDirectoryPreferences()); if (dirs.isEmpty()) { JOptionPane.showMessageDialog(basePanel.frame(), Localization.lang("Main file directory not set!") + " " + Localization.lang("Preferences") diff --git a/src/main/java/net/sf/jabref/external/MoveFileAction.java b/src/main/java/net/sf/jabref/external/MoveFileAction.java index 59f4f245ec9..75372c8b63d 100644 --- a/src/main/java/net/sf/jabref/external/MoveFileAction.java +++ b/src/main/java/net/sf/jabref/external/MoveFileAction.java @@ -69,7 +69,8 @@ public void actionPerformed(ActionEvent event) { } // Get an absolute path representation: - List dirs = frame.getCurrentBasePanel().getBibDatabaseContext().getFileDirectory(); + List dirs = frame.getCurrentBasePanel().getBibDatabaseContext() + .getFileDirectory(Globals.prefs.getFileDirectoryPreferences()); int found = -1; for (int i = 0; i < dirs.size(); i++) { if (new File(dirs.get(i)).exists()) { diff --git a/src/main/java/net/sf/jabref/external/SynchronizeFileField.java b/src/main/java/net/sf/jabref/external/SynchronizeFileField.java index 6931b462b96..3d038fecaf7 100644 --- a/src/main/java/net/sf/jabref/external/SynchronizeFileField.java +++ b/src/main/java/net/sf/jabref/external/SynchronizeFileField.java @@ -137,7 +137,8 @@ public void run() { tableModel.setContentDontGuessTypes(old.get()); // We need to specify which directories to search in for Util.expandFilename: - List dirsS = panel.getBibDatabaseContext().getFileDirectory(); + List dirsS = panel.getBibDatabaseContext() + .getFileDirectory(Globals.prefs.getFileDirectoryPreferences()); List dirs = new ArrayList<>(); for (String dirs1 : dirsS) { dirs.add(new File(dirs1)); @@ -365,7 +366,7 @@ public void setVisible(boolean visible) { canceled = true; } - List dirs = databaseContext.getFileDirectory(); + List dirs = databaseContext.getFileDirectory(Globals.prefs.getFileDirectoryPreferences()); if (dirs.isEmpty()) { autoSetNone.setSelected(true); autoSetNone.setEnabled(false); diff --git a/src/main/java/net/sf/jabref/external/TransferableFileLinkSelection.java b/src/main/java/net/sf/jabref/external/TransferableFileLinkSelection.java index a80706b7a5d..1e461be5d63 100644 --- a/src/main/java/net/sf/jabref/external/TransferableFileLinkSelection.java +++ b/src/main/java/net/sf/jabref/external/TransferableFileLinkSelection.java @@ -8,6 +8,7 @@ import java.util.ArrayList; import java.util.List; +import net.sf.jabref.Globals; import net.sf.jabref.gui.BasePanel; import net.sf.jabref.gui.FileListTableModel; import net.sf.jabref.logic.util.io.FileUtil; @@ -32,7 +33,8 @@ public TransferableFileLinkSelection(BasePanel panel, List selection) selection.get(0).getFieldOptional(FieldName.FILE).ifPresent(tm::setContent); if (tm.getRowCount() > 0) { // Find the default directory for this field type, if any: - List dirs = panel.getBibDatabaseContext().getFileDirectory(); + List dirs = panel.getBibDatabaseContext() + .getFileDirectory(Globals.prefs.getFileDirectoryPreferences()); FileUtil.expandFilename(tm.getEntry(0).link, dirs).ifPresent(fileList::add); } diff --git a/src/main/java/net/sf/jabref/external/WriteXMPAction.java b/src/main/java/net/sf/jabref/external/WriteXMPAction.java index f23bf8840b0..361c931060f 100644 --- a/src/main/java/net/sf/jabref/external/WriteXMPAction.java +++ b/src/main/java/net/sf/jabref/external/WriteXMPAction.java @@ -121,11 +121,16 @@ public void run() { List files = new ArrayList<>(); // First check the (legacy) "pdf" field: - entry.getFieldOptional(FieldName.PDF).ifPresent(pdf -> - FileUtil.expandFilename(pdf, panel.getBibDatabaseContext().getFileDirectory("pdf")) - .ifPresent(files::add)); + entry.getFieldOptional(FieldName.PDF) + .ifPresent( + pdf -> FileUtil + .expandFilename(pdf, + panel.getBibDatabaseContext().getFileDirectory( + Globals.prefs.getFileDirectoryPreferences(FieldName.PDF))) + .ifPresent(files::add)); // Then check the "file" field: - List dirs = panel.getBibDatabaseContext().getFileDirectory(); + List dirs = panel.getBibDatabaseContext() + .getFileDirectory(Globals.prefs.getFileDirectoryPreferences()); if (entry.hasField(FieldName.FILE)) { FileListTableModel tm = new FileListTableModel(); entry.getFieldOptional(FieldName.FILE).ifPresent(tm::setContent); diff --git a/src/main/java/net/sf/jabref/external/WriteXMPEntryEditorAction.java b/src/main/java/net/sf/jabref/external/WriteXMPEntryEditorAction.java index 90bc368c5e9..43c8829dd64 100644 --- a/src/main/java/net/sf/jabref/external/WriteXMPEntryEditorAction.java +++ b/src/main/java/net/sf/jabref/external/WriteXMPEntryEditorAction.java @@ -55,11 +55,16 @@ public void actionPerformed(ActionEvent actionEvent) { List files = new ArrayList<>(); // First check the (legacy) "pdf" field: - entry.getFieldOptional(FieldName.PDF).ifPresent(pdf -> FileUtil - .expandFilename(pdf, panel.getBibDatabaseContext().getFileDirectory("pdf")).ifPresent(files::add)); + entry.getFieldOptional(FieldName.PDF) + .ifPresent( + pdf -> FileUtil + .expandFilename(pdf, + panel.getBibDatabaseContext().getFileDirectory( + Globals.prefs.getFileDirectoryPreferences(FieldName.PDF))) + .ifPresent(files::add)); // Then check the "file" field: - List dirs = panel.getBibDatabaseContext().getFileDirectory(); + List dirs = panel.getBibDatabaseContext().getFileDirectory(Globals.prefs.getFileDirectoryPreferences()); if (entry.hasField(FieldName.FILE)) { FileListTableModel tm = new FileListTableModel(); entry.getFieldOptional(FieldName.FILE).ifPresent(tm::setContent); diff --git a/src/main/java/net/sf/jabref/gui/BasePanel.java b/src/main/java/net/sf/jabref/gui/BasePanel.java index dffaa873f3a..7ec65636b9c 100644 --- a/src/main/java/net/sf/jabref/gui/BasePanel.java +++ b/src/main/java/net/sf/jabref/gui/BasePanel.java @@ -538,7 +538,7 @@ public void update() { actions.put(Actions.OPEN_FOLDER, (BaseAction) () -> JabRefExecutorService.INSTANCE.execute(() -> { final List files = FileUtil.getListOfLinkedFiles(mainTable.getSelectedEntries(), - bibDatabaseContext.getFileDirectory()); + bibDatabaseContext.getFileDirectory(Globals.prefs.getFileDirectoryPreferences())); for (final File f : files) { try { JabRefDesktop.openFolderAndSelectFile(f.getAbsolutePath()); @@ -2358,12 +2358,10 @@ public Optional searchAndOpen() { final Set types = ExternalFileTypes.getInstance().getExternalFileTypeSelection(); final List dirs = new ArrayList<>(); - if (!basePanel.getBibDatabaseContext().getFileDirectory().isEmpty()) { - final List mdDirs = basePanel.getBibDatabaseContext().getFileDirectory(); - for (final String mdDir : mdDirs) { - dirs.add(new File(mdDir)); - - } + final List mdDirs = basePanel.getBibDatabaseContext() + .getFileDirectory(Globals.prefs.getFileDirectoryPreferences()); + for (final String mdDir : mdDirs) { + dirs.add(new File(mdDir)); } final List extensions = new ArrayList<>(); for (final ExternalFileType type : types) { diff --git a/src/main/java/net/sf/jabref/gui/FileListEntryEditor.java b/src/main/java/net/sf/jabref/gui/FileListEntryEditor.java index 6e16806aba2..8dcd1d45946 100644 --- a/src/main/java/net/sf/jabref/gui/FileListEntryEditor.java +++ b/src/main/java/net/sf/jabref/gui/FileListEntryEditor.java @@ -295,7 +295,7 @@ private void storeSettings(FileListEntry entry) { String link = ""; // See if we should trim the file link to be relative to the file directory: try { - List dirs = databaseContext.getFileDirectory(); + List dirs = databaseContext.getFileDirectory(Globals.prefs.getFileDirectoryPreferences()); if (dirs.isEmpty()) { link = this.link.getText().trim(); } else { @@ -352,7 +352,7 @@ public boolean okPressed() { Globals.prefs.put(JabRefPreferences.FILE_WORKING_DIRECTORY, newFile.getPath()); // If the file is below the file directory, make the path relative: - List fileDirs = this.databaseContext.getFileDirectory(); + List fileDirs = this.databaseContext.getFileDirectory(Globals.prefs.getFileDirectoryPreferences()); newFile = FileUtil.shortenFileName(newFile, fileDirs); link.setText(newFile.getPath()); diff --git a/src/main/java/net/sf/jabref/gui/actions/CleanupAction.java b/src/main/java/net/sf/jabref/gui/actions/CleanupAction.java index 80d2cad1dbc..48f55512ce8 100644 --- a/src/main/java/net/sf/jabref/gui/actions/CleanupAction.java +++ b/src/main/java/net/sf/jabref/gui/actions/CleanupAction.java @@ -149,7 +149,8 @@ private void doCleanup(CleanupPreset preset, BibEntry entry, NamedCompound ce) { BibDatabaseContext bibDatabaseContext = panel.getBibDatabaseContext(); CleanupWorker cleaner = new CleanupWorker(bibDatabaseContext, Globals.prefs.get(JabRefPreferences.IMPORT_FILENAMEPATTERN), - LayoutFormatterPreferences.fromPreferences(Globals.prefs, Globals.journalAbbreviationLoader)); + LayoutFormatterPreferences.fromPreferences(Globals.prefs, Globals.journalAbbreviationLoader), + Globals.prefs.getFileDirectoryPreferences()); List changes = cleaner.cleanup(preset, entry); unsuccessfulRenames = cleaner.getUnsuccessfulRenames(); diff --git a/src/main/java/net/sf/jabref/gui/desktop/JabRefDesktop.java b/src/main/java/net/sf/jabref/gui/desktop/JabRefDesktop.java index 45a2012ecaa..32b73779aa8 100644 --- a/src/main/java/net/sf/jabref/gui/desktop/JabRefDesktop.java +++ b/src/main/java/net/sf/jabref/gui/desktop/JabRefDesktop.java @@ -61,7 +61,7 @@ public static void openExternalViewer(BibDatabaseContext databaseContext, String String fieldName = initialFieldName; if (FieldName.PS.equals(fieldName) || FieldName.PDF.equals(fieldName)) { // Find the default directory for this field type: - List dir = databaseContext.getFileDirectory(fieldName); + List dir = databaseContext.getFileDirectory(Globals.prefs.getFileDirectoryPreferences(fieldName)); Optional file = FileUtil.expandFilename(link, dir); diff --git a/src/main/java/net/sf/jabref/gui/exporter/ExportAction.java b/src/main/java/net/sf/jabref/gui/exporter/ExportAction.java index 6d3aeb8881c..0c942cf5102 100644 --- a/src/main/java/net/sf/jabref/gui/exporter/ExportAction.java +++ b/src/main/java/net/sf/jabref/gui/exporter/ExportAction.java @@ -105,7 +105,7 @@ public void actionPerformed(ActionEvent e) { // so formatters can resolve linked files correctly. // (This is an ugly hack!) Globals.prefs.fileDirForDatabase = frame.getCurrentBasePanel().getBibDatabaseContext() - .getFileDirectory(); + .getFileDirectory(Globals.prefs.getFileDirectoryPreferences()); // Make sure we remember which filter was used, to set // the default for next time: diff --git a/src/main/java/net/sf/jabref/gui/exporter/ExportToClipboardAction.java b/src/main/java/net/sf/jabref/gui/exporter/ExportToClipboardAction.java index 5c54cd42c06..c0d3a4dbdcd 100644 --- a/src/main/java/net/sf/jabref/gui/exporter/ExportToClipboardAction.java +++ b/src/main/java/net/sf/jabref/gui/exporter/ExportToClipboardAction.java @@ -90,7 +90,7 @@ public void run() { // so formatters can resolve linked files correctly. // (This is an ugly hack!) Globals.prefs.fileDirForDatabase = frame.getCurrentBasePanel().getBibDatabaseContext() - .getFileDirectory(); + .getFileDirectory(Globals.prefs.getFileDirectoryPreferences()); File tmp = null; try { diff --git a/src/main/java/net/sf/jabref/gui/fieldeditors/FileListEditor.java b/src/main/java/net/sf/jabref/gui/fieldeditors/FileListEditor.java index 172cb0d958c..6db5556ae92 100644 --- a/src/main/java/net/sf/jabref/gui/fieldeditors/FileListEditor.java +++ b/src/main/java/net/sf/jabref/gui/fieldeditors/FileListEditor.java @@ -190,7 +190,8 @@ public void actionPerformed(ActionEvent actionEvent) { path = Paths.get(entry.link).toString(); } else { // relative to file folder - for (String folder : databaseContext.getFileDirectory()) { + for (String folder : databaseContext + .getFileDirectory(Globals.prefs.getFileDirectoryPreferences())) { Path file = Paths.get(folder, entry.link); if (Files.exists(file)) { path = file.toString(); @@ -353,7 +354,7 @@ private void addEntry(String initialLink) { } private void addEntry() { - List defaultDirectory = databaseContext.getFileDirectory(); + List defaultDirectory = databaseContext.getFileDirectory(Globals.prefs.getFileDirectoryPreferences()); if (defaultDirectory.isEmpty() || (defaultDirectory.get(0) == null)) { addEntry(""); } else { diff --git a/src/main/java/net/sf/jabref/gui/importer/EntryFromFileCreator.java b/src/main/java/net/sf/jabref/gui/importer/EntryFromFileCreator.java index 9adb7e5ce4f..1fbeb8b1576 100644 --- a/src/main/java/net/sf/jabref/gui/importer/EntryFromFileCreator.java +++ b/src/main/java/net/sf/jabref/gui/importer/EntryFromFileCreator.java @@ -6,6 +6,7 @@ import java.util.Optional; import java.util.StringTokenizer; +import net.sf.jabref.Globals; import net.sf.jabref.JabRefGUI; import net.sf.jabref.external.ExternalFileType; import net.sf.jabref.external.ExternalFileTypes; @@ -140,7 +141,8 @@ private void addFileInfo(BibEntry entry, File file) { Optional fileType = ExternalFileTypes.getInstance() .getExternalFileTypeByExt(externalFileType.getFieldName()); - List possibleFilePaths = JabRefGUI.getMainFrame().getCurrentBasePanel().getBibDatabaseContext().getFileDirectory(); + List possibleFilePaths = JabRefGUI.getMainFrame().getCurrentBasePanel().getBibDatabaseContext() + .getFileDirectory(Globals.prefs.getFileDirectoryPreferences()); File shortenedFileName = FileUtil.shortenFileName(file, possibleFilePaths); FileListEntry fileListEntry = new FileListEntry("", shortenedFileName.getPath(), fileType); diff --git a/src/main/java/net/sf/jabref/gui/importer/UnlinkedPDFFileFilter.java b/src/main/java/net/sf/jabref/gui/importer/UnlinkedPDFFileFilter.java index acee2571bce..b1905a29102 100644 --- a/src/main/java/net/sf/jabref/gui/importer/UnlinkedPDFFileFilter.java +++ b/src/main/java/net/sf/jabref/gui/importer/UnlinkedPDFFileFilter.java @@ -4,6 +4,7 @@ import java.io.FileFilter; import net.sf.jabref.BibDatabaseContext; +import net.sf.jabref.Globals; import net.sf.jabref.logic.util.io.DatabaseFileLookup; import net.sf.jabref.model.database.BibDatabase; @@ -28,7 +29,7 @@ public class UnlinkedPDFFileFilter implements FileFilter { public UnlinkedPDFFileFilter(FileFilter fileFilter, BibDatabaseContext databaseContext) { this.fileFilter = fileFilter; - this.lookup = new DatabaseFileLookup(databaseContext); + this.lookup = new DatabaseFileLookup(databaseContext, Globals.prefs.getFileDirectoryPreferences()); } @Override diff --git a/src/main/java/net/sf/jabref/gui/worker/SendAsEMailAction.java b/src/main/java/net/sf/jabref/gui/worker/SendAsEMailAction.java index e73b705d885..f2b18863d11 100644 --- a/src/main/java/net/sf/jabref/gui/worker/SendAsEMailAction.java +++ b/src/main/java/net/sf/jabref/gui/worker/SendAsEMailAction.java @@ -83,8 +83,8 @@ public void run() { // the unofficial "mailto:attachment" property boolean openFolders = JabRefPreferences.getInstance().getBoolean(JabRefPreferences.OPEN_FOLDERS_OF_ATTACHED_FILES); - List fileList = FileUtil.getListOfLinkedFiles(bes, - frame.getCurrentBasePanel().getBibDatabaseContext().getFileDirectory()); + List fileList = FileUtil.getListOfLinkedFiles(bes, frame.getCurrentBasePanel().getBibDatabaseContext() + .getFileDirectory(Globals.prefs.getFileDirectoryPreferences())); for (File f : fileList) { attachments.add(f.getPath()); if (openFolders) { diff --git a/src/main/java/net/sf/jabref/logic/cleanup/CleanupWorker.java b/src/main/java/net/sf/jabref/logic/cleanup/CleanupWorker.java index cbb03bdab87..90d61b726da 100644 --- a/src/main/java/net/sf/jabref/logic/cleanup/CleanupWorker.java +++ b/src/main/java/net/sf/jabref/logic/cleanup/CleanupWorker.java @@ -6,6 +6,7 @@ import java.util.Objects; import net.sf.jabref.BibDatabaseContext; +import net.sf.jabref.FileDirectoryPreferences; import net.sf.jabref.logic.layout.LayoutFormatterPreferences; import net.sf.jabref.model.FieldChange; import net.sf.jabref.model.entry.BibEntry; @@ -16,14 +17,16 @@ public class CleanupWorker { private final BibDatabaseContext databaseContext; private final String fileNamePattern; private final LayoutFormatterPreferences prefs; + private final FileDirectoryPreferences fileDirectoryPreferences; private int unsuccessfulRenames; - public CleanupWorker(BibDatabaseContext databaseContext, String fileNamePattern, - LayoutFormatterPreferences prefs) { + public CleanupWorker(BibDatabaseContext databaseContext, String fileNamePattern, LayoutFormatterPreferences prefs, + FileDirectoryPreferences fileDirectoryPreferences) { this.databaseContext = databaseContext; this.fileNamePattern = fileNamePattern; this.prefs = prefs; + this.fileDirectoryPreferences = fileDirectoryPreferences; } public int getUnsuccessfulRenames() { @@ -60,14 +63,14 @@ private List determineCleanupActions(CleanupPreset preset) { jobs.add(new FileLinksCleanup()); } if (preset.isMovePDF()) { - jobs.add(new MoveFilesCleanup(databaseContext)); + jobs.add(new MoveFilesCleanup(databaseContext, fileDirectoryPreferences)); } if (preset.isMakePathsRelative()) { - jobs.add(new RelativePathsCleanup(databaseContext)); + jobs.add(new RelativePathsCleanup(databaseContext, fileDirectoryPreferences)); } if (preset.isRenamePDF()) { RenamePdfCleanup cleaner = new RenamePdfCleanup(preset.isRenamePdfOnlyRelativePaths(), databaseContext, - fileNamePattern, prefs); + fileNamePattern, prefs, fileDirectoryPreferences); jobs.add(cleaner); unsuccessfulRenames += cleaner.getUnsuccessfulRenames(); } diff --git a/src/main/java/net/sf/jabref/logic/cleanup/MoveFilesCleanup.java b/src/main/java/net/sf/jabref/logic/cleanup/MoveFilesCleanup.java index 80d468408b2..8ddbb8635e0 100644 --- a/src/main/java/net/sf/jabref/logic/cleanup/MoveFilesCleanup.java +++ b/src/main/java/net/sf/jabref/logic/cleanup/MoveFilesCleanup.java @@ -8,6 +8,7 @@ import java.util.Optional; import net.sf.jabref.BibDatabaseContext; +import net.sf.jabref.FileDirectoryPreferences; import net.sf.jabref.logic.TypedBibEntry; import net.sf.jabref.logic.util.io.FileUtil; import net.sf.jabref.model.FieldChange; @@ -17,9 +18,12 @@ public class MoveFilesCleanup implements CleanupJob { private final BibDatabaseContext databaseContext; + private final FileDirectoryPreferences fileDirectoryPreferences; - public MoveFilesCleanup(BibDatabaseContext databaseContext) { + + public MoveFilesCleanup(BibDatabaseContext databaseContext, FileDirectoryPreferences fileDirectoryPreferences) { this.databaseContext = Objects.requireNonNull(databaseContext); + this.fileDirectoryPreferences = Objects.requireNonNull(fileDirectoryPreferences); } @Override @@ -28,7 +32,7 @@ public List cleanup(BibEntry entry) { return Collections.emptyList(); } - List paths = databaseContext.getFileDirectory(); + List paths = databaseContext.getFileDirectory(fileDirectoryPreferences); String defaultFileDirectory = databaseContext.getMetaData().getDefaultFileDirectory().get(); Optional targetDirectory = FileUtil.expandFilename(defaultFileDirectory, paths); if(!targetDirectory.isPresent()) { diff --git a/src/main/java/net/sf/jabref/logic/cleanup/RelativePathsCleanup.java b/src/main/java/net/sf/jabref/logic/cleanup/RelativePathsCleanup.java index a1a617d8b9f..8f1feb1f183 100644 --- a/src/main/java/net/sf/jabref/logic/cleanup/RelativePathsCleanup.java +++ b/src/main/java/net/sf/jabref/logic/cleanup/RelativePathsCleanup.java @@ -8,6 +8,7 @@ import java.util.Optional; import net.sf.jabref.BibDatabaseContext; +import net.sf.jabref.FileDirectoryPreferences; import net.sf.jabref.logic.TypedBibEntry; import net.sf.jabref.logic.util.io.FileUtil; import net.sf.jabref.model.FieldChange; @@ -17,9 +18,12 @@ public class RelativePathsCleanup implements CleanupJob { private final BibDatabaseContext databaseContext; + private final FileDirectoryPreferences fileDirectoryPreferences; - public RelativePathsCleanup(BibDatabaseContext databaseContext) { + + public RelativePathsCleanup(BibDatabaseContext databaseContext, FileDirectoryPreferences fileDirectoryPreferences) { this.databaseContext = Objects.requireNonNull(databaseContext); + this.fileDirectoryPreferences = Objects.requireNonNull(fileDirectoryPreferences); } @Override @@ -31,7 +35,8 @@ public List cleanup(BibEntry entry) { for (ParsedFileField fileEntry : fileList) { String oldFileName = fileEntry.getLink(); - String newFileName = FileUtil.shortenFileName(new File(oldFileName), databaseContext.getFileDirectory()) + String newFileName = FileUtil + .shortenFileName(new File(oldFileName), databaseContext.getFileDirectory(fileDirectoryPreferences)) .toString(); ParsedFileField newFileEntry = fileEntry; diff --git a/src/main/java/net/sf/jabref/logic/cleanup/RenamePdfCleanup.java b/src/main/java/net/sf/jabref/logic/cleanup/RenamePdfCleanup.java index def724b6488..bcb371bf1e8 100644 --- a/src/main/java/net/sf/jabref/logic/cleanup/RenamePdfCleanup.java +++ b/src/main/java/net/sf/jabref/logic/cleanup/RenamePdfCleanup.java @@ -8,6 +8,7 @@ import java.util.Optional; import net.sf.jabref.BibDatabaseContext; +import net.sf.jabref.FileDirectoryPreferences; import net.sf.jabref.logic.TypedBibEntry; import net.sf.jabref.logic.layout.LayoutFormatterPreferences; import net.sf.jabref.logic.util.OS; @@ -22,16 +23,19 @@ public class RenamePdfCleanup implements CleanupJob { private final boolean onlyRelativePaths; private final String fileNamePattern; private final LayoutFormatterPreferences prefs; + private final FileDirectoryPreferences fileDirectoryPreferences; private int unsuccessfulRenames; public RenamePdfCleanup(boolean onlyRelativePaths, BibDatabaseContext databaseContext, - String fileNamePattern, LayoutFormatterPreferences prefs) { + String fileNamePattern, + LayoutFormatterPreferences prefs, FileDirectoryPreferences fileDirectoryPreferences) { this.databaseContext = Objects.requireNonNull(databaseContext); this.onlyRelativePaths = onlyRelativePaths; this.fileNamePattern = Objects.requireNonNull(fileNamePattern); this.prefs = Objects.requireNonNull(prefs); + this.fileDirectoryPreferences = fileDirectoryPreferences; } @Override @@ -58,7 +62,7 @@ public List cleanup(BibEntry entry) { //get new Filename with path //Create new Path based on old Path and new filename Optional expandedOldFile = FileUtil.expandFilename(realOldFilename, - databaseContext.getFileDirectory()); + databaseContext.getFileDirectory(fileDirectoryPreferences)); if ((!expandedOldFile.isPresent()) || (expandedOldFile.get().getParent() == null)) { // something went wrong. Just skip this entry newFileList.add(flEntry); @@ -91,7 +95,8 @@ public List cleanup(BibEntry entry) { // we cannot use "newPath" to generate a FileListEntry as newPath is absolute, but we want to keep relative paths whenever possible File parent = (new File(realOldFilename)).getParentFile(); String newFileEntryFileName; - if ((parent == null) || databaseContext.getFileDirectory().contains(parent.getAbsolutePath())) { + if ((parent == null) || databaseContext.getFileDirectory(fileDirectoryPreferences) + .contains(parent.getAbsolutePath())) { newFileEntryFileName = newFilename.toString(); } else { newFileEntryFileName = parent.toString().concat(OS.FILE_SEPARATOR).concat(newFilename.toString()); diff --git a/src/main/java/net/sf/jabref/logic/util/io/DatabaseFileLookup.java b/src/main/java/net/sf/jabref/logic/util/io/DatabaseFileLookup.java index ec7d7d8c7e7..d2e83b48791 100644 --- a/src/main/java/net/sf/jabref/logic/util/io/DatabaseFileLookup.java +++ b/src/main/java/net/sf/jabref/logic/util/io/DatabaseFileLookup.java @@ -9,6 +9,7 @@ import java.util.Set; import net.sf.jabref.BibDatabaseContext; +import net.sf.jabref.FileDirectoryPreferences; import net.sf.jabref.model.database.BibDatabase; import net.sf.jabref.model.entry.BibEntry; import net.sf.jabref.model.entry.FieldName; @@ -34,9 +35,10 @@ public class DatabaseFileLookup { * * @param database A {@link BibDatabase}. */ - public DatabaseFileLookup(BibDatabaseContext databaseContext) { + public DatabaseFileLookup(BibDatabaseContext databaseContext, FileDirectoryPreferences fileDirectoryPreferences) { Objects.requireNonNull(databaseContext); - possibleFilePaths = Optional.ofNullable(databaseContext.getFileDirectory()).orElse(new ArrayList<>()); + possibleFilePaths = Optional.ofNullable(databaseContext.getFileDirectory(fileDirectoryPreferences)) + .orElse(new ArrayList<>()); for (BibEntry entry : databaseContext.getDatabase().getEntries()) { fileCache.addAll(parseFileField(entry)); diff --git a/src/main/java/net/sf/jabref/logic/util/io/FileUtil.java b/src/main/java/net/sf/jabref/logic/util/io/FileUtil.java index 65cf990ef16..073b68833aa 100644 --- a/src/main/java/net/sf/jabref/logic/util/io/FileUtil.java +++ b/src/main/java/net/sf/jabref/logic/util/io/FileUtil.java @@ -21,6 +21,7 @@ import java.util.regex.Pattern; import net.sf.jabref.BibDatabaseContext; +import net.sf.jabref.Globals; import net.sf.jabref.logic.layout.Layout; import net.sf.jabref.logic.layout.LayoutFormatterPreferences; import net.sf.jabref.logic.layout.LayoutHelper; @@ -168,9 +169,10 @@ public static boolean renameFile(String fileName, String destFilename) { public static Optional expandFilename(final BibDatabaseContext databaseContext, String name) { Optional extension = getFileExtension(name); // Find the default directory for this field type, if any: - List directories = databaseContext.getFileDirectory(extension.orElse(null)); + List directories = databaseContext + .getFileDirectory(Globals.prefs.getFileDirectoryPreferences(extension.orElse(null))); // Include the standard "file" directory: - List fileDir = databaseContext.getFileDirectory(); + List fileDir = databaseContext.getFileDirectory(Globals.prefs.getFileDirectoryPreferences()); // Include the directory of the BIB file: List al = new ArrayList<>(); for (String dir : directories) { diff --git a/src/main/java/net/sf/jabref/migrations/FileLinksUpgradeWarning.java b/src/main/java/net/sf/jabref/migrations/FileLinksUpgradeWarning.java index 11af25cc27a..f64807b73ac 100644 --- a/src/main/java/net/sf/jabref/migrations/FileLinksUpgradeWarning.java +++ b/src/main/java/net/sf/jabref/migrations/FileLinksUpgradeWarning.java @@ -65,7 +65,8 @@ public boolean isActionNecessary(ParserResult pr) { offerChangeDatabase = linksFound(pr.getDatabase(), FileLinksUpgradeWarning.FIELDS_TO_LOOK_FOR); // If the "file" directory is not set, offer to migrate pdf/ps dir: offerSetFileDir = !Globals.prefs.hasKey(FieldName.FILE + FileLinkPreferences.DIR_SUFFIX) - && (Globals.prefs.hasKey("pdfDirectory") || Globals.prefs.hasKey("psDirectory")); + && (Globals.prefs.hasKey(FieldName.PDF + FileLinkPreferences.DIR_SUFFIX) + || Globals.prefs.hasKey(FieldName.PS + FileLinkPreferences.DIR_SUFFIX)); // First check if this warning is disabled: return Globals.prefs.getBoolean(JabRefPreferences.SHOW_FILE_LINKS_UPGRADE_WARNING) && isThereSomethingToBeDone(); @@ -114,10 +115,10 @@ public void performAction(BasePanel panel, ParserResult parserResult) { formBuilder.add(changeDatabase).xy(1, row); } if (offerSetFileDir) { - if (Globals.prefs.hasKey("pdfDirectory")) { - fileDir.setText(Globals.prefs.get("pdfDirectory")); + if (Globals.prefs.hasKey(FieldName.PDF + FileLinkPreferences.DIR_SUFFIX)) { + fileDir.setText(Globals.prefs.get(FieldName.PDF + FileLinkPreferences.DIR_SUFFIX)); } else { - fileDir.setText(Globals.prefs.get("psDirectory")); + fileDir.setText(Globals.prefs.get(FieldName.PS + FileLinkPreferences.DIR_SUFFIX)); } JPanel builderPanel = new JPanel(); builderPanel.add(setFileDir); diff --git a/src/main/java/net/sf/jabref/pdfimport/PdfImporter.java b/src/main/java/net/sf/jabref/pdfimport/PdfImporter.java index b828236824c..824474a8beb 100644 --- a/src/main/java/net/sf/jabref/pdfimport/PdfImporter.java +++ b/src/main/java/net/sf/jabref/pdfimport/PdfImporter.java @@ -199,7 +199,8 @@ private void doXMPImport(String fileName, List res) { FileListTableModel tm = new FileListTableModel(); File toLink = new File(fileName); // Get a list of file directories: - List dirsS = panel.getBibDatabaseContext().getFileDirectory(); + List dirsS = panel.getBibDatabaseContext() + .getFileDirectory(Globals.prefs.getFileDirectoryPreferences()); tm.addEntry(0, new FileListEntry(toLink.getName(), FileUtil.shortenFileName(toLink, dirsS).getPath(), ExternalFileTypes.getInstance().getExternalFileTypeByName("PDF"))); diff --git a/src/main/java/net/sf/jabref/preferences/JabRefPreferences.java b/src/main/java/net/sf/jabref/preferences/JabRefPreferences.java index 06a9fd21014..a2c0a12f7bc 100644 --- a/src/main/java/net/sf/jabref/preferences/JabRefPreferences.java +++ b/src/main/java/net/sf/jabref/preferences/JabRefPreferences.java @@ -31,6 +31,7 @@ import javax.swing.JTable; import javax.swing.UIManager; +import net.sf.jabref.FileDirectoryPreferences; import net.sf.jabref.JabRefException; import net.sf.jabref.JabRefMain; import net.sf.jabref.gui.desktop.JabRefDesktop; @@ -50,6 +51,7 @@ import net.sf.jabref.logic.formatter.bibtexfields.UnitsToLatexFormatter; import net.sf.jabref.logic.formatter.casechanger.ProtectTermsFormatter; import net.sf.jabref.logic.l10n.Localization; +import net.sf.jabref.logic.layout.format.FileLinkPreferences; import net.sf.jabref.logic.openoffice.OpenOfficePreferences; import net.sf.jabref.logic.openoffice.StyleLoader; import net.sf.jabref.logic.protectedterms.ProtectedTermsLoader; @@ -1375,6 +1377,15 @@ public void storeFileHistory(FileHistory history) { } } + public FileDirectoryPreferences getFileDirectoryPreferences() { + return getFileDirectoryPreferences(FieldName.FILE); + } + + public FileDirectoryPreferences getFileDirectoryPreferences(String fieldName) { + return new FileDirectoryPreferences(fieldName, getUser(), get(fieldName + FileLinkPreferences.DIR_SUFFIX), + getBoolean(JabRefPreferences.BIB_LOC_AS_PRIMARY_DIR)); + } + public UpdateFieldPreferences getUpdateFieldPreferences() { return new UpdateFieldPreferences(getBoolean(USE_OWNER), getBoolean(OVERWRITE_OWNER), get(DEFAULT_OWNER), getBoolean(USE_TIME_STAMP), getBoolean(OVERWRITE_TIME_STAMP), get(TIME_STAMP_FIELD), diff --git a/src/test/java/net/sf/jabref/BibDatabaseContextTest.java b/src/test/java/net/sf/jabref/BibDatabaseContextTest.java index ae29817ac26..df40d64b4d3 100644 --- a/src/test/java/net/sf/jabref/BibDatabaseContextTest.java +++ b/src/test/java/net/sf/jabref/BibDatabaseContextTest.java @@ -2,20 +2,13 @@ import net.sf.jabref.model.database.BibDatabase; import net.sf.jabref.model.database.BibDatabaseMode; -import net.sf.jabref.preferences.JabRefPreferences; -import org.junit.Before; import org.junit.Test; import static org.junit.Assert.assertEquals; public class BibDatabaseContextTest { - @Before - public void setUp() throws Exception { - Globals.prefs = JabRefPreferences.getInstance(); - } - @Test public void testTypeBasedOnDefaultBibtex() { BibDatabaseContext bibDatabaseContext = new BibDatabaseContext(new BibDatabase(), new MetaData(), new Defaults(BibDatabaseMode.BIBTEX)); diff --git a/src/test/java/net/sf/jabref/logic/cleanup/CleanupWorkerTest.java b/src/test/java/net/sf/jabref/logic/cleanup/CleanupWorkerTest.java index 404e6885b63..3554c218835 100644 --- a/src/test/java/net/sf/jabref/logic/cleanup/CleanupWorkerTest.java +++ b/src/test/java/net/sf/jabref/logic/cleanup/CleanupWorkerTest.java @@ -49,6 +49,7 @@ public class CleanupWorkerTest { @Before public void setUp() throws IOException { + // Needed for ExternalFileTypes if (Globals.prefs == null) { Globals.prefs = JabRefPreferences.getInstance(); } @@ -58,8 +59,9 @@ public void setUp() throws IOException { MetaData metaData = new MetaData(); metaData.setDefaultFileDirectory(pdfFolder.getAbsolutePath()); BibDatabaseContext context = new BibDatabaseContext(new BibDatabase(), metaData, bibFolder.newFile("test.bib")); - worker = new CleanupWorker(context, Globals.prefs.get(JabRefPreferences.IMPORT_FILENAMEPATTERN), - mock(LayoutFormatterPreferences.class)); + worker = new CleanupWorker(context, + JabRefPreferences.getInstance().get(JabRefPreferences.IMPORT_FILENAMEPATTERN), + mock(LayoutFormatterPreferences.class), JabRefPreferences.getInstance().getFileDirectoryPreferences()); } @Test(expected = NullPointerException.class) diff --git a/src/test/java/net/sf/jabref/logic/cleanup/ISSNCleanupTest.java b/src/test/java/net/sf/jabref/logic/cleanup/ISSNCleanupTest.java index 6fce1cb5c2d..dfca8f9e021 100644 --- a/src/test/java/net/sf/jabref/logic/cleanup/ISSNCleanupTest.java +++ b/src/test/java/net/sf/jabref/logic/cleanup/ISSNCleanupTest.java @@ -3,6 +3,7 @@ import java.util.Optional; import net.sf.jabref.BibDatabaseContext; +import net.sf.jabref.FileDirectoryPreferences; import net.sf.jabref.logic.layout.LayoutFormatterPreferences; import net.sf.jabref.model.entry.BibEntry; @@ -19,7 +20,8 @@ public class ISSNCleanupTest { @Before public void setUp() { - worker = new CleanupWorker(mock(BibDatabaseContext.class), "", mock(LayoutFormatterPreferences.class)); + worker = new CleanupWorker(mock(BibDatabaseContext.class), "", mock(LayoutFormatterPreferences.class), + mock(FileDirectoryPreferences.class)); } @Test diff --git a/src/test/java/net/sf/jabref/logic/cleanup/MoveFilesCleanupTest.java b/src/test/java/net/sf/jabref/logic/cleanup/MoveFilesCleanupTest.java index 071969e2ebd..1c8950da6da 100644 --- a/src/test/java/net/sf/jabref/logic/cleanup/MoveFilesCleanupTest.java +++ b/src/test/java/net/sf/jabref/logic/cleanup/MoveFilesCleanupTest.java @@ -6,7 +6,6 @@ import java.util.Optional; import net.sf.jabref.BibDatabaseContext; -import net.sf.jabref.Globals; import net.sf.jabref.MetaData; import net.sf.jabref.model.database.BibDatabase; import net.sf.jabref.model.entry.BibEntry; @@ -34,14 +33,12 @@ public class MoveFilesCleanupTest { @Before public void setUp() throws IOException { - Globals.prefs = JabRefPreferences.getInstance(); - pdfFolder = bibFolder.newFolder(); MetaData metaData = new MetaData(); metaData.setDefaultFileDirectory(pdfFolder.getAbsolutePath()); databaseContext = new BibDatabaseContext(new BibDatabase(), metaData, bibFolder.newFile("test.bib")); - cleanup = new MoveFilesCleanup(databaseContext); + cleanup = new MoveFilesCleanup(databaseContext, JabRefPreferences.getInstance().getFileDirectoryPreferences()); } @Test diff --git a/src/test/java/net/sf/jabref/logic/cleanup/RenamePdfCleanupTest.java b/src/test/java/net/sf/jabref/logic/cleanup/RenamePdfCleanupTest.java index 20365a203bd..03b27fcf131 100644 --- a/src/test/java/net/sf/jabref/logic/cleanup/RenamePdfCleanupTest.java +++ b/src/test/java/net/sf/jabref/logic/cleanup/RenamePdfCleanupTest.java @@ -7,7 +7,6 @@ import net.sf.jabref.BibDatabaseContext; import net.sf.jabref.Defaults; -import net.sf.jabref.Globals; import net.sf.jabref.MetaData; import net.sf.jabref.logic.journals.JournalAbbreviationLoader; import net.sf.jabref.logic.layout.LayoutFormatterPreferences; @@ -31,11 +30,11 @@ public class RenamePdfCleanupTest { public TemporaryFolder testFolder = new TemporaryFolder(); private BibDatabaseContext context; private BibEntry entry; + private JabRefPreferences prefs; @Before public void setUp() throws Exception { - Globals.prefs = mock(JabRefPreferences.class); - + prefs = JabRefPreferences.getInstance(); MetaData metaData = new MetaData(); context = new BibDatabaseContext(new BibDatabase(), metaData, new Defaults()); context.setDatabaseFile(testFolder.newFile("test.bib")); @@ -55,7 +54,7 @@ public void cleanupRenamePdfRenamesFileEvenIfOnlyDifferenceIsCase() throws IOExc entry.setField("file", FileField.getStringRepresentation(fileField)); RenamePdfCleanup cleanup = new RenamePdfCleanup(false, context, fileNamePattern, - mock(LayoutFormatterPreferences.class)); + mock(LayoutFormatterPreferences.class), prefs.getFileDirectoryPreferences()); cleanup.cleanup(entry); ParsedFileField newFileField = new ParsedFileField("", "Toot.tmp", ""); @@ -72,7 +71,7 @@ public void cleanupRenamePdfRenamesWithMultipleFiles() throws IOException { new ParsedFileField("", tempFile.getAbsolutePath(), ""), new ParsedFileField("","","")))); RenamePdfCleanup cleanup = new RenamePdfCleanup(false, context, fileNamePattern, - mock(LayoutFormatterPreferences.class)); + mock(LayoutFormatterPreferences.class), prefs.getFileDirectoryPreferences()); cleanup.cleanup(entry); assertEquals( @@ -90,7 +89,7 @@ public void cleanupRenamePdfRenamesFileStartingWithBibtexKey() throws IOExceptio entry.setField("title", "test title"); RenamePdfCleanup cleanup = new RenamePdfCleanup(false, context, fileNamePattern, - mock(LayoutFormatterPreferences.class)); + mock(LayoutFormatterPreferences.class), prefs.getFileDirectoryPreferences()); cleanup.cleanup(entry); ParsedFileField newFileField = new ParsedFileField("", "Toot - test title.tmp", ""); @@ -106,7 +105,8 @@ public void cleanupRenamePdfRenamesFileInSameFolder() throws IOException { entry.setField("title", "test title"); RenamePdfCleanup cleanup = new RenamePdfCleanup(false, context, fileNamePattern, - LayoutFormatterPreferences.fromPreferences(Globals.prefs, mock(JournalAbbreviationLoader.class))); + LayoutFormatterPreferences.fromPreferences(prefs, mock(JournalAbbreviationLoader.class)), + prefs.getFileDirectoryPreferences()); cleanup.cleanup(entry); ParsedFileField newFileField = new ParsedFileField("", "Toot - test title.pdf", "PDF"); diff --git a/src/test/java/net/sf/jabref/logic/exporter/BibtexDatabaseWriterTest.java b/src/test/java/net/sf/jabref/logic/exporter/BibtexDatabaseWriterTest.java index e096de1008c..762459a3a2c 100644 --- a/src/test/java/net/sf/jabref/logic/exporter/BibtexDatabaseWriterTest.java +++ b/src/test/java/net/sf/jabref/logic/exporter/BibtexDatabaseWriterTest.java @@ -10,7 +10,6 @@ import net.sf.jabref.BibDatabaseContext; import net.sf.jabref.Defaults; -import net.sf.jabref.Globals; import net.sf.jabref.MetaData; import net.sf.jabref.logic.cleanup.FieldFormatterCleanup; import net.sf.jabref.logic.config.SaveOrderConfig; @@ -49,10 +48,11 @@ public class BibtexDatabaseWriterTest { private MetaData metaData; private BibDatabaseContext bibtexContext; private ImportFormatPreferences importFormatPreferences; + private JabRefPreferences prefs; @Before public void setUp() { - Globals.prefs = JabRefPreferences.getInstance(); + prefs = JabRefPreferences.getInstance(); // Write to a string instead of to a file databaseWriter = new BibtexDatabaseWriter<>(StringSaveSession::new); @@ -60,7 +60,7 @@ public void setUp() { database = new BibDatabase(); metaData = new MetaData(); bibtexContext = new BibDatabaseContext(database, metaData, new Defaults(BibDatabaseMode.BIBTEX)); - importFormatPreferences = ImportFormatPreferences.fromPreferences(Globals.prefs); + importFormatPreferences = ImportFormatPreferences.fromPreferences(prefs); } @Test(expected = NullPointerException.class) @@ -159,7 +159,7 @@ public void writeEpilogueAndEncoding() throws Exception { @Test public void writeMetadata() throws Exception { - DatabaseBibtexKeyPattern bibtexKeyPattern = new DatabaseBibtexKeyPattern(Globals.prefs.getKeyPattern()); + DatabaseBibtexKeyPattern bibtexKeyPattern = new DatabaseBibtexKeyPattern(prefs.getKeyPattern()); bibtexKeyPattern.setDefaultValue("test"); metaData.setBibtexKeyPattern(bibtexKeyPattern); @@ -172,7 +172,7 @@ public void writeMetadata() throws Exception { @Test public void writeMetadataAndEncoding() throws Exception { SavePreferences preferences = new SavePreferences().withEncoding(Charsets.US_ASCII); - DatabaseBibtexKeyPattern bibtexKeyPattern = new DatabaseBibtexKeyPattern(Globals.prefs.getKeyPattern()); + DatabaseBibtexKeyPattern bibtexKeyPattern = new DatabaseBibtexKeyPattern(prefs.getKeyPattern()); bibtexKeyPattern.setDefaultValue("test"); metaData.setBibtexKeyPattern(bibtexKeyPattern); @@ -186,7 +186,7 @@ public void writeMetadataAndEncoding() throws Exception { @Test public void writeGroups() throws Exception { GroupTreeNode groupRoot = GroupTreeNode.fromGroup(new AllEntriesGroup()); - groupRoot.addSubgroup(new ExplicitGroup("test", GroupHierarchyType.INCLUDING, Globals.prefs)); + groupRoot.addSubgroup(new ExplicitGroup("test", GroupHierarchyType.INCLUDING, prefs)); metaData.setGroups(groupRoot); StringSaveSession session = databaseWriter.savePartOfDatabase(bibtexContext, Collections.emptyList(), new SavePreferences()); @@ -205,8 +205,7 @@ public void writeGroupsAndEncoding() throws Exception { SavePreferences preferences = new SavePreferences().withEncoding(Charsets.US_ASCII); GroupTreeNode groupRoot = GroupTreeNode.fromGroup(new AllEntriesGroup()); - groupRoot.addChild( - GroupTreeNode.fromGroup(new ExplicitGroup("test", GroupHierarchyType.INCLUDING, Globals.prefs))); + groupRoot.addChild(GroupTreeNode.fromGroup(new ExplicitGroup("test", GroupHierarchyType.INCLUDING, prefs))); metaData.setGroups(groupRoot); StringSaveSession session = databaseWriter.savePartOfDatabase(bibtexContext, Collections.emptyList(), preferences); @@ -429,7 +428,7 @@ public void writeSaveOrderConfig() throws Exception { @Test public void writeCustomKeyPattern() throws Exception { - AbstractBibtexKeyPattern pattern = new DatabaseBibtexKeyPattern(Globals.prefs.getKeyPattern()); + AbstractBibtexKeyPattern pattern = new DatabaseBibtexKeyPattern(prefs.getKeyPattern()); pattern.setDefaultValue("test"); pattern.addBibtexKeyPattern("article", "articleTest"); metaData.setBibtexKeyPattern(pattern); diff --git a/src/test/java/net/sf/jabref/logic/exporter/ExportFormatTest.java b/src/test/java/net/sf/jabref/logic/exporter/ExportFormatTest.java index 9a531b78fab..dbebf6138ec 100644 --- a/src/test/java/net/sf/jabref/logic/exporter/ExportFormatTest.java +++ b/src/test/java/net/sf/jabref/logic/exporter/ExportFormatTest.java @@ -10,7 +10,6 @@ import java.util.Map; import net.sf.jabref.BibDatabaseContext; -import net.sf.jabref.Globals; import net.sf.jabref.logic.journals.JournalAbbreviationLoader; import net.sf.jabref.logic.layout.LayoutFormatterPreferences; import net.sf.jabref.model.entry.BibEntry; @@ -76,14 +75,14 @@ public void testExportingNullEntriesThrowsNPE() throws Exception { @Parameterized.Parameters(name = "{index}: {1}") public static Collection exportFormats() { Collection result = new ArrayList<>(); - Globals.prefs = JabRefPreferences.getInstance(); + JabRefPreferences prefs = JabRefPreferences.getInstance(); JournalAbbreviationLoader journalAbbreviationLoader = new JournalAbbreviationLoader(); - Map customFormats = Globals.prefs.customExports.getCustomExportFormats(Globals.prefs, + Map customFormats = prefs.customExports.getCustomExportFormats(prefs, journalAbbreviationLoader); - LayoutFormatterPreferences layoutPreferences = LayoutFormatterPreferences.fromPreferences(Globals.prefs, + LayoutFormatterPreferences layoutPreferences = LayoutFormatterPreferences.fromPreferences(prefs, journalAbbreviationLoader); - SavePreferences savePreferences = SavePreferences.loadForExportFromPreferences(Globals.prefs); + SavePreferences savePreferences = SavePreferences.loadForExportFromPreferences(prefs); ExportFormats.initAllExports(customFormats, layoutPreferences, savePreferences); for (IExportFormat format : ExportFormats.getExportFormats().values()) { diff --git a/src/test/java/net/sf/jabref/logic/exporter/HtmlExportFormatTest.java b/src/test/java/net/sf/jabref/logic/exporter/HtmlExportFormatTest.java index 3e56fc58409..7448730859a 100644 --- a/src/test/java/net/sf/jabref/logic/exporter/HtmlExportFormatTest.java +++ b/src/test/java/net/sf/jabref/logic/exporter/HtmlExportFormatTest.java @@ -8,7 +8,6 @@ import java.util.Map; import net.sf.jabref.BibDatabaseContext; -import net.sf.jabref.Globals; import net.sf.jabref.logic.journals.JournalAbbreviationLoader; import net.sf.jabref.logic.layout.LayoutFormatterPreferences; import net.sf.jabref.model.entry.BibEntry; @@ -34,13 +33,13 @@ public class HtmlExportFormatTest { @Before public void setUp() { - Globals.prefs = JabRefPreferences.getInstance(); + JabRefPreferences prefs = JabRefPreferences.getInstance(); JournalAbbreviationLoader journalAbbreviationLoader = new JournalAbbreviationLoader(); - Map customFormats = Globals.prefs.customExports.getCustomExportFormats(Globals.prefs, + Map customFormats = prefs.customExports.getCustomExportFormats(prefs, journalAbbreviationLoader); - LayoutFormatterPreferences layoutPreferences = LayoutFormatterPreferences.fromPreferences(Globals.prefs, + LayoutFormatterPreferences layoutPreferences = LayoutFormatterPreferences.fromPreferences(prefs, journalAbbreviationLoader); - SavePreferences savePreferences = SavePreferences.loadForExportFromPreferences(Globals.prefs); + SavePreferences savePreferences = SavePreferences.loadForExportFromPreferences(prefs); ExportFormats.initAllExports(customFormats, layoutPreferences, savePreferences); exportFormat = ExportFormats.getExportFormat("html"); diff --git a/src/test/java/net/sf/jabref/logic/integrity/IntegrityCheckTest.java b/src/test/java/net/sf/jabref/logic/integrity/IntegrityCheckTest.java index 354d2a65bd1..875dd6dbb31 100644 --- a/src/test/java/net/sf/jabref/logic/integrity/IntegrityCheckTest.java +++ b/src/test/java/net/sf/jabref/logic/integrity/IntegrityCheckTest.java @@ -32,8 +32,10 @@ public class IntegrityCheckTest { @Rule public TemporaryFolder testFolder = new TemporaryFolder(); + @Before public void setUp() { + // Needed for FileUtil.expandFilename Globals.prefs = JabRefPreferences.getInstance(); } From b821a4eb38171a541cb95691663eac7da06590ff Mon Sep 17 00:00:00 2001 From: Oscar Gustafsson Date: Fri, 26 Aug 2016 13:09:00 +0200 Subject: [PATCH 2/2] Removed the temporarily introduced Globals dependency in logic --- CHANGELOG.md | 2 +- .../net/sf/jabref/BibDatabaseContext.java | 40 +++++++++++-------- .../sf/jabref/FileDirectoryPreferences.java | 25 +++++++----- .../sf/jabref/external/WriteXMPAction.java | 4 +- .../external/WriteXMPEntryEditorAction.java | 9 ++--- .../sf/jabref/gui/FileListEntryEditor.java | 3 +- .../gui/actions/IntegrityCheckAction.java | 4 +- .../sf/jabref/gui/desktop/JabRefDesktop.java | 5 ++- .../gui/fieldeditors/FileListEditor.java | 3 +- .../logic/integrity/IntegrityCheck.java | 13 ++++-- .../net/sf/jabref/logic/util/io/FileUtil.java | 10 ++--- .../jabref/preferences/JabRefPreferences.java | 11 ++--- .../logic/integrity/IntegrityCheckTest.java | 16 +++----- 13 files changed, 78 insertions(+), 67 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 9e79d0b8748..d49af39adfa 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -16,7 +16,7 @@ We refer to [GitHub issues](https://github.com/JabRef/jabref/issues) by using `# ### Fixed ### Removed - +- The non-supported feature of being able to define file directories for any extension is removed. Still, it should work for older databases using the legacy `ps` and `pdf` fields, although we strongly encourage using the `file` field. diff --git a/src/main/java/net/sf/jabref/BibDatabaseContext.java b/src/main/java/net/sf/jabref/BibDatabaseContext.java index 3bffe4178b3..ec0fd26cf07 100644 --- a/src/main/java/net/sf/jabref/BibDatabaseContext.java +++ b/src/main/java/net/sf/jabref/BibDatabaseContext.java @@ -10,6 +10,7 @@ import net.sf.jabref.model.database.BibDatabaseMode; import net.sf.jabref.model.database.BibDatabaseModeDetection; import net.sf.jabref.model.database.DatabaseLocation; +import net.sf.jabref.model.entry.FieldName; import net.sf.jabref.shared.DBMSSynchronizer; /** @@ -117,23 +118,28 @@ public boolean isBiblatexMode() { return getMode() == BibDatabaseMode.BIBLATEX; } - /** - * Look up the directory set up for the given field type for this database. - * If no directory is set up, return that defined in global preferences. - * There can be up to three directory definitions for these files: - * the database's metadata can specify a general directory and/or a user-specific directory - * or the preferences can specify one. - *

- * The settings are prioritized in the following order and the first defined setting is used: - * 1. metadata user-specific directory - * 2. metadata general directory - * 3. preferences directory - * 4. BIB file directory - * - * @param fieldName The field type - * @return The default directory for this field type. - */ public List getFileDirectory(FileDirectoryPreferences preferences) { + return getFileDirectory(FieldName.FILE, preferences); + } + + /** + * Look up the directory set up for the given field type for this database. + * If no directory is set up, return that defined in global preferences. + * There can be up to three directory definitions for these files: + * the database's metadata can specify a general directory and/or a user-specific directory + * or the preferences can specify one. + *

+ * The settings are prioritized in the following order and the first defined setting is used: + * 1. metadata user-specific directory + * 2. metadata general directory + * 3. preferences directory + * 4. BIB file directory + * + * @param + * @param fieldName The field type + * @return The default directory for this field type. + */ + public List getFileDirectory(String fieldName, FileDirectoryPreferences preferences) { List fileDirs = new ArrayList<>(); // 1. metadata user-specific directory @@ -149,7 +155,7 @@ public List getFileDirectory(FileDirectoryPreferences preferences) { } // 3. preferences directory - preferences.getFieldDirectory().ifPresent(fileDirs::add); + preferences.getFileDirectory(fieldName).ifPresent(fileDirs::add); // 4. BIB file directory if (getDatabaseFile() != null) { diff --git a/src/main/java/net/sf/jabref/FileDirectoryPreferences.java b/src/main/java/net/sf/jabref/FileDirectoryPreferences.java index 11be77dedb5..edec342bf64 100644 --- a/src/main/java/net/sf/jabref/FileDirectoryPreferences.java +++ b/src/main/java/net/sf/jabref/FileDirectoryPreferences.java @@ -1,17 +1,20 @@ package net.sf.jabref; +import java.util.Map; import java.util.Optional; +import net.sf.jabref.model.entry.FieldName; + public class FileDirectoryPreferences { private final String user; - private final String fieldDirectory; + private final Map fieldFileDirectories; private final boolean bibLocationAsPrimary; - private final String fieldName; - public FileDirectoryPreferences(String fieldName, String user, String fieldDirectory, boolean bibLocationAsPrimary) { - this.fieldName = fieldName; + + public FileDirectoryPreferences(String user, Map fieldFileDirectories, + boolean bibLocationAsPrimary) { this.user = user; - this.fieldDirectory = fieldDirectory; + this.fieldFileDirectories = fieldFileDirectories; this.bibLocationAsPrimary = bibLocationAsPrimary; } @@ -19,15 +22,15 @@ public String getUser() { return user; } - public Optional getFieldDirectory() { - return Optional.ofNullable(fieldDirectory); + public Optional getFileDirectory(String field) { + return Optional.ofNullable(fieldFileDirectories.get(field)); } - public boolean isBibLocationAsPrimary() { - return bibLocationAsPrimary; + public Optional getFileDirectory() { + return getFileDirectory(FieldName.FILE); } - public String getFieldName() { - return fieldName; + public boolean isBibLocationAsPrimary() { + return bibLocationAsPrimary; } } diff --git a/src/main/java/net/sf/jabref/external/WriteXMPAction.java b/src/main/java/net/sf/jabref/external/WriteXMPAction.java index 361c931060f..de7021d607c 100644 --- a/src/main/java/net/sf/jabref/external/WriteXMPAction.java +++ b/src/main/java/net/sf/jabref/external/WriteXMPAction.java @@ -125,8 +125,8 @@ public void run() { .ifPresent( pdf -> FileUtil .expandFilename(pdf, - panel.getBibDatabaseContext().getFileDirectory( - Globals.prefs.getFileDirectoryPreferences(FieldName.PDF))) + panel.getBibDatabaseContext().getFileDirectory(FieldName.PDF, + Globals.prefs.getFileDirectoryPreferences())) .ifPresent(files::add)); // Then check the "file" field: List dirs = panel.getBibDatabaseContext() diff --git a/src/main/java/net/sf/jabref/external/WriteXMPEntryEditorAction.java b/src/main/java/net/sf/jabref/external/WriteXMPEntryEditorAction.java index 43c8829dd64..4866915b2be 100644 --- a/src/main/java/net/sf/jabref/external/WriteXMPEntryEditorAction.java +++ b/src/main/java/net/sf/jabref/external/WriteXMPEntryEditorAction.java @@ -56,12 +56,9 @@ public void actionPerformed(ActionEvent actionEvent) { // First check the (legacy) "pdf" field: entry.getFieldOptional(FieldName.PDF) - .ifPresent( - pdf -> FileUtil - .expandFilename(pdf, - panel.getBibDatabaseContext().getFileDirectory( - Globals.prefs.getFileDirectoryPreferences(FieldName.PDF))) - .ifPresent(files::add)); + .ifPresent(pdf -> FileUtil.expandFilename(pdf, panel.getBibDatabaseContext() + .getFileDirectory(FieldName.PDF, Globals.prefs.getFileDirectoryPreferences())) + .ifPresent(files::add)); // Then check the "file" field: List dirs = panel.getBibDatabaseContext().getFileDirectory(Globals.prefs.getFileDirectoryPreferences()); diff --git a/src/main/java/net/sf/jabref/gui/FileListEntryEditor.java b/src/main/java/net/sf/jabref/gui/FileListEntryEditor.java index 8dcd1d45946..ad8e9faddfc 100644 --- a/src/main/java/net/sf/jabref/gui/FileListEntryEditor.java +++ b/src/main/java/net/sf/jabref/gui/FileListEntryEditor.java @@ -335,7 +335,8 @@ public boolean okPressed() { private final ActionListener browsePressed = e -> { String filePath = link.getText().trim(); - Optional file = FileUtil.expandFilename(this.databaseContext, filePath); + Optional file = FileUtil.expandFilename(this.databaseContext, filePath, + Globals.prefs.getFileDirectoryPreferences()); String workingDir; // no file set yet or found if (file.isPresent()) { diff --git a/src/main/java/net/sf/jabref/gui/actions/IntegrityCheckAction.java b/src/main/java/net/sf/jabref/gui/actions/IntegrityCheckAction.java index 2df02dcf318..1de64821366 100644 --- a/src/main/java/net/sf/jabref/gui/actions/IntegrityCheckAction.java +++ b/src/main/java/net/sf/jabref/gui/actions/IntegrityCheckAction.java @@ -19,6 +19,7 @@ import javax.swing.table.TableModel; import javax.swing.table.TableRowSorter; +import net.sf.jabref.Globals; import net.sf.jabref.gui.JabRefFrame; import net.sf.jabref.gui.util.GUIUtil; import net.sf.jabref.logic.integrity.IntegrityCheck; @@ -43,7 +44,8 @@ public IntegrityCheckAction(JabRefFrame frame) { @Override public void actionPerformed(ActionEvent e) { - IntegrityCheck check = new IntegrityCheck(frame.getCurrentBasePanel().getBibDatabaseContext()); + IntegrityCheck check = new IntegrityCheck(frame.getCurrentBasePanel().getBibDatabaseContext(), + Globals.prefs.getFileDirectoryPreferences()); List messages = check.checkBibtexDatabase(); if (messages.isEmpty()) { diff --git a/src/main/java/net/sf/jabref/gui/desktop/JabRefDesktop.java b/src/main/java/net/sf/jabref/gui/desktop/JabRefDesktop.java index 32b73779aa8..9e9b2efb50f 100644 --- a/src/main/java/net/sf/jabref/gui/desktop/JabRefDesktop.java +++ b/src/main/java/net/sf/jabref/gui/desktop/JabRefDesktop.java @@ -61,7 +61,7 @@ public static void openExternalViewer(BibDatabaseContext databaseContext, String String fieldName = initialFieldName; if (FieldName.PS.equals(fieldName) || FieldName.PDF.equals(fieldName)) { // Find the default directory for this field type: - List dir = databaseContext.getFileDirectory(Globals.prefs.getFileDirectoryPreferences(fieldName)); + List dir = databaseContext.getFileDirectory(fieldName, Globals.prefs.getFileDirectoryPreferences()); Optional file = FileUtil.expandFilename(link, dir); @@ -144,7 +144,8 @@ public static boolean openExternalFileAnyFormat(final BibDatabaseContext databas File file = new File(link); if (!httpLink) { - Optional tmp = FileUtil.expandFilename(databaseContext, link); + Optional tmp = FileUtil.expandFilename(databaseContext, link, + Globals.prefs.getFileDirectoryPreferences()); if (tmp.isPresent()) { file = tmp.get(); } diff --git a/src/main/java/net/sf/jabref/gui/fieldeditors/FileListEditor.java b/src/main/java/net/sf/jabref/gui/fieldeditors/FileListEditor.java index 6db5556ae92..71d8fe3701a 100644 --- a/src/main/java/net/sf/jabref/gui/fieldeditors/FileListEditor.java +++ b/src/main/java/net/sf/jabref/gui/fieldeditors/FileListEditor.java @@ -230,7 +230,8 @@ public void actionPerformed(ActionEvent actionEvent) { FileListEntry entry = tableModel.getEntry(row); // null if file does not exist - Optional file = FileUtil.expandFilename(databaseContext, entry.link); + Optional file = FileUtil.expandFilename(databaseContext, entry.link, + Globals.prefs.getFileDirectoryPreferences()); // transactional delete and unlink try { diff --git a/src/main/java/net/sf/jabref/logic/integrity/IntegrityCheck.java b/src/main/java/net/sf/jabref/logic/integrity/IntegrityCheck.java index 5ffd007cc12..2e1ea74d605 100644 --- a/src/main/java/net/sf/jabref/logic/integrity/IntegrityCheck.java +++ b/src/main/java/net/sf/jabref/logic/integrity/IntegrityCheck.java @@ -14,6 +14,7 @@ import java.util.stream.Collectors; import net.sf.jabref.BibDatabaseContext; +import net.sf.jabref.FileDirectoryPreferences; import net.sf.jabref.logic.l10n.Localization; import net.sf.jabref.logic.util.io.FileUtil; import net.sf.jabref.model.entry.BibEntry; @@ -28,9 +29,11 @@ public class IntegrityCheck { private final BibDatabaseContext bibDatabaseContext; + private final FileDirectoryPreferences fileDirectoryPreferences; - public IntegrityCheck(BibDatabaseContext bibDatabaseContext) { + public IntegrityCheck(BibDatabaseContext bibDatabaseContext, FileDirectoryPreferences fileDirectoryPreferences) { this.bibDatabaseContext = Objects.requireNonNull(bibDatabaseContext); + this.fileDirectoryPreferences = Objects.requireNonNull(fileDirectoryPreferences); } public List checkBibtexDatabase() { @@ -64,7 +67,7 @@ private List checkBibtexEntry(BibEntry entry) { result.addAll(new BracketChecker(FieldName.TITLE).check(entry)); result.addAll(new YearChecker().check(entry)); result.addAll(new UrlChecker().check(entry)); - result.addAll(new FileChecker(bibDatabaseContext).check(entry)); + result.addAll(new FileChecker(bibDatabaseContext, fileDirectoryPreferences).check(entry)); result.addAll(new TypeChecker().check(entry)); for (String journalField : InternalBibtexFields.getJournalNameFields()) { result.addAll(new AbbreviationChecker(journalField).check(entry)); @@ -148,9 +151,11 @@ public List check(BibEntry entry) { private static class FileChecker implements Checker { private final BibDatabaseContext context; + private final FileDirectoryPreferences fileDirectoryPreferences; - private FileChecker(BibDatabaseContext context) { + private FileChecker(BibDatabaseContext context, FileDirectoryPreferences fileDirectoryPreferences) { this.context = context; + this.fileDirectoryPreferences = fileDirectoryPreferences; } @Override @@ -165,7 +170,7 @@ public List check(BibEntry entry) { .collect(Collectors.toList()); for (ParsedFileField p : parsedFileFields) { - Optional file = FileUtil.expandFilename(context, p.getLink()); + Optional file = FileUtil.expandFilename(context, p.getLink(), fileDirectoryPreferences); if ((!file.isPresent()) || !file.get().exists()) { return Collections.singletonList( new IntegrityMessage(Localization.lang("link should refer to a correct file path"), entry, diff --git a/src/main/java/net/sf/jabref/logic/util/io/FileUtil.java b/src/main/java/net/sf/jabref/logic/util/io/FileUtil.java index 073b68833aa..afe612ec0ac 100644 --- a/src/main/java/net/sf/jabref/logic/util/io/FileUtil.java +++ b/src/main/java/net/sf/jabref/logic/util/io/FileUtil.java @@ -21,7 +21,7 @@ import java.util.regex.Pattern; import net.sf.jabref.BibDatabaseContext; -import net.sf.jabref.Globals; +import net.sf.jabref.FileDirectoryPreferences; import net.sf.jabref.logic.layout.Layout; import net.sf.jabref.logic.layout.LayoutFormatterPreferences; import net.sf.jabref.logic.layout.LayoutHelper; @@ -166,13 +166,13 @@ public static boolean renameFile(String fileName, String destFilename) { * @param databaseContext The database this file belongs to. * @param name The filename, may also be a relative path to the file */ - public static Optional expandFilename(final BibDatabaseContext databaseContext, String name) { + public static Optional expandFilename(final BibDatabaseContext databaseContext, String name, + FileDirectoryPreferences fileDirectoryPreferences) { Optional extension = getFileExtension(name); // Find the default directory for this field type, if any: - List directories = databaseContext - .getFileDirectory(Globals.prefs.getFileDirectoryPreferences(extension.orElse(null))); + List directories = databaseContext.getFileDirectory(extension.orElse(null), fileDirectoryPreferences); // Include the standard "file" directory: - List fileDir = databaseContext.getFileDirectory(Globals.prefs.getFileDirectoryPreferences()); + List fileDir = databaseContext.getFileDirectory(fileDirectoryPreferences); // Include the directory of the BIB file: List al = new ArrayList<>(); for (String dir : directories) { diff --git a/src/main/java/net/sf/jabref/preferences/JabRefPreferences.java b/src/main/java/net/sf/jabref/preferences/JabRefPreferences.java index a2c0a12f7bc..733b2d1823b 100644 --- a/src/main/java/net/sf/jabref/preferences/JabRefPreferences.java +++ b/src/main/java/net/sf/jabref/preferences/JabRefPreferences.java @@ -1377,12 +1377,13 @@ public void storeFileHistory(FileHistory history) { } } - public FileDirectoryPreferences getFileDirectoryPreferences() { - return getFileDirectoryPreferences(FieldName.FILE); - } - public FileDirectoryPreferences getFileDirectoryPreferences(String fieldName) { - return new FileDirectoryPreferences(fieldName, getUser(), get(fieldName + FileLinkPreferences.DIR_SUFFIX), + public FileDirectoryPreferences getFileDirectoryPreferences() { + List fields = Arrays.asList(FieldName.FILE, FieldName.PDF, FieldName.PS); + Map fieldDirectories = new HashMap<>(); + fields.stream() + .forEach(fieldName -> fieldDirectories.put(fieldName, get(fieldName + FileLinkPreferences.DIR_SUFFIX))); + return new FileDirectoryPreferences(getUser(), fieldDirectories, getBoolean(JabRefPreferences.BIB_LOC_AS_PRIMARY_DIR)); } diff --git a/src/test/java/net/sf/jabref/logic/integrity/IntegrityCheckTest.java b/src/test/java/net/sf/jabref/logic/integrity/IntegrityCheckTest.java index 875dd6dbb31..434bce90d6c 100644 --- a/src/test/java/net/sf/jabref/logic/integrity/IntegrityCheckTest.java +++ b/src/test/java/net/sf/jabref/logic/integrity/IntegrityCheckTest.java @@ -9,7 +9,6 @@ import net.sf.jabref.BibDatabaseContext; import net.sf.jabref.Defaults; -import net.sf.jabref.Globals; import net.sf.jabref.MetaData; import net.sf.jabref.model.database.BibDatabase; import net.sf.jabref.model.database.BibDatabaseMode; @@ -17,7 +16,6 @@ import net.sf.jabref.model.entry.InternalBibtexFields; import net.sf.jabref.preferences.JabRefPreferences; -import org.junit.Before; import org.junit.Rule; import org.junit.Test; import org.junit.rules.TemporaryFolder; @@ -32,13 +30,6 @@ public class IntegrityCheckTest { @Rule public TemporaryFolder testFolder = new TemporaryFolder(); - - @Before - public void setUp() { - // Needed for FileUtil.expandFilename - Globals.prefs = JabRefPreferences.getInstance(); - } - @Test public void testUrlChecks() { assertCorrect(createContext("url", "http://www.google.com")); @@ -244,12 +235,15 @@ private BibDatabaseContext createContext(String field, String value) { } private void assertWrong(BibDatabaseContext context) { - List messages = new IntegrityCheck(context).checkBibtexDatabase(); + List messages = new IntegrityCheck(context, + JabRefPreferences.getInstance().getFileDirectoryPreferences()) + .checkBibtexDatabase(); assertFalse(messages.toString(), messages.isEmpty()); } private void assertCorrect(BibDatabaseContext context) { - List messages = new IntegrityCheck(context).checkBibtexDatabase(); + List messages = new IntegrityCheck(context, + JabRefPreferences.getInstance().getFileDirectoryPreferences()).checkBibtexDatabase(); assertEquals(Collections.emptyList(), messages); }