From e5ea3598868a25837ab4856246fa239c0a63c8a3 Mon Sep 17 00:00:00 2001 From: Carl Christian Snethlage Date: Sat, 22 Aug 2020 10:58:27 +0200 Subject: [PATCH 01/15] Refactored for same basic clean-up and naming consistency --- src/main/java/org/jabref/JabRefMain.java | 7 +- .../org/jabref/cli/ArgumentProcessor.java | 14 +- .../CreateModifyExporterDialogViewModel.java | 2 +- .../jabref/gui/exporter/ExportCommand.java | 2 +- .../gui/exporter/SaveDatabaseAction.java | 6 +- .../org/jabref/gui/menus/FileHistoryMenu.java | 6 +- .../PreferencesDialogViewModel.java | 2 +- .../autosaveandbackup/BackupManager.java | 7 +- .../logic/exporter/BibDatabaseWriter.java | 2 +- .../logic/exporter/BibtexDatabaseWriter.java | 4 +- .../logic/exporter/SavePreferences.java | 41 +++- .../jabref/preferences/JabRefPreferences.java | 227 +++++++++--------- .../preferences/PreferencesService.java | 9 +- .../gui/exporter/SaveDatabaseActionTest.java | 2 +- .../exporter/BibtexDatabaseWriterTest.java | 20 +- 15 files changed, 190 insertions(+), 161 deletions(-) diff --git a/src/main/java/org/jabref/JabRefMain.java b/src/main/java/org/jabref/JabRefMain.java index e004d0e1627..369190d5cb5 100644 --- a/src/main/java/org/jabref/JabRefMain.java +++ b/src/main/java/org/jabref/JabRefMain.java @@ -11,6 +11,7 @@ import org.jabref.cli.JabRefCLI; import org.jabref.gui.FXDialog; import org.jabref.gui.remote.JabRefMessageHandler; +import org.jabref.logic.exporter.ExporterFactory; import org.jabref.logic.journals.JournalAbbreviationLoader; import org.jabref.logic.l10n.Localization; import org.jabref.logic.net.ProxyAuthenticator; @@ -168,7 +169,11 @@ private static void applyPreferences(JabRefPreferences preferences) { Globals.prefs.getXMPPreferences(), Globals.getFileUpdateMonitor()); Globals.entryTypesManager.addCustomOrModifiedTypes(preferences.loadBibEntryTypes(BibDatabaseMode.BIBTEX), preferences.loadBibEntryTypes(BibDatabaseMode.BIBLATEX)); - Globals.exportFactory = Globals.prefs.getExporterFactory(Globals.journalAbbreviationRepository); + Globals.exportFactory = ExporterFactory.create( + Globals.prefs.getCustomExportFormats(Globals.journalAbbreviationRepository), + Globals.prefs.getLayoutFormatterPreferences(Globals.journalAbbreviationRepository), + Globals.prefs.getSavePreferencesForExport(), + Globals.prefs.getXMPPreferences()); // Initialize protected terms loader Globals.protectedTermsLoader = new ProtectedTermsLoader(Globals.prefs.getProtectedTermsPreferences()); diff --git a/src/main/java/org/jabref/cli/ArgumentProcessor.java b/src/main/java/org/jabref/cli/ArgumentProcessor.java index a5d723cfcdb..35ec633ed30 100644 --- a/src/main/java/org/jabref/cli/ArgumentProcessor.java +++ b/src/main/java/org/jabref/cli/ArgumentProcessor.java @@ -273,7 +273,7 @@ private boolean exportMatches(List loaded) { // export new database Optional exporter = Globals.exportFactory.getExporterByName(formatName); - if (!exporter.isPresent()) { + if (exporter.isEmpty()) { System.err.println(Localization.lang("Unknown export format") + ": " + formatName); } else { // We have an TemplateExporter instance: @@ -387,7 +387,7 @@ private boolean generateAux(List loaded, String[] data) { private void saveDatabase(BibDatabase newBase, String subName) { try { System.out.println(Localization.lang("Saving") + ": " + subName); - SavePreferences prefs = Globals.prefs.loadForSaveFromPreferences(); + SavePreferences prefs = Globals.prefs.getSavePreferences(); AtomicFileWriter fileWriter = new AtomicFileWriter(Path.of(subName), prefs.getEncoding()); BibDatabaseWriter databaseWriter = new BibtexDatabaseWriter(fileWriter, prefs, Globals.entryTypesManager); databaseWriter.saveDatabase(new BibDatabaseContext(newBase)); @@ -435,7 +435,7 @@ private void exportFile(List loaded, String[] data) { .getFileDirectories(Globals.prefs.getFilePreferences()); System.out.println(Localization.lang("Exporting") + ": " + data[0]); Optional exporter = Globals.exportFactory.getExporterByName(data[1]); - if (!exporter.isPresent()) { + if (exporter.isEmpty()) { System.err.println(Localization.lang("Unknown export format") + ": " + data[1]); } else { // We have an exporter: @@ -458,9 +458,9 @@ private void importPreferences() { Globals.entryTypesManager.addCustomOrModifiedTypes(Globals.prefs.loadBibEntryTypes(BibDatabaseMode.BIBTEX), Globals.prefs.loadBibEntryTypes(BibDatabaseMode.BIBLATEX)); List customExporters = Globals.prefs.getCustomExportFormats(Globals.journalAbbreviationRepository); - LayoutFormatterPreferences layoutPreferences = Globals.prefs - .getLayoutFormatterPreferences(Globals.journalAbbreviationRepository); - SavePreferences savePreferences = Globals.prefs.loadForExportFromPreferences(); + LayoutFormatterPreferences layoutPreferences = + Globals.prefs.getLayoutFormatterPreferences(Globals.journalAbbreviationRepository); + SavePreferences savePreferences = Globals.prefs.getSavePreferencesForExport(); XmpPreferences xmpPreferences = Globals.prefs.getXMPPreferences(); Globals.exportFactory = ExporterFactory.create(customExporters, layoutPreferences, savePreferences, xmpPreferences); } catch (JabRefException ex) { @@ -534,7 +534,7 @@ private Optional fetch(String fetchCommand) { Optional selectedFetcher = fetchers.stream() .filter(fetcher -> fetcher.getName().equalsIgnoreCase(engine)) .findFirst(); - if (!selectedFetcher.isPresent()) { + if (selectedFetcher.isEmpty()) { System.out.println(Localization.lang("Could not find fetcher '%0'", engine)); System.out.println(Localization.lang("The following fetchers are available:")); diff --git a/src/main/java/org/jabref/gui/exporter/CreateModifyExporterDialogViewModel.java b/src/main/java/org/jabref/gui/exporter/CreateModifyExporterDialogViewModel.java index 924adeacbc3..116c84e14c7 100644 --- a/src/main/java/org/jabref/gui/exporter/CreateModifyExporterDialogViewModel.java +++ b/src/main/java/org/jabref/gui/exporter/CreateModifyExporterDialogViewModel.java @@ -70,7 +70,7 @@ public ExporterViewModel saveExporter() { // Create a new exporter to be returned to ExportCustomizationDialogViewModel, which requested it LayoutFormatterPreferences layoutPreferences = preferences.getLayoutFormatterPreferences(repository); - SavePreferences savePreferences = preferences.loadForExportFromPreferences(); + SavePreferences savePreferences = preferences.getSavePreferencesForExport(); TemplateExporter format = new TemplateExporter(name.get(), layoutFile.get(), extension.get(), layoutPreferences, savePreferences); format.setCustomExport(true); diff --git a/src/main/java/org/jabref/gui/exporter/ExportCommand.java b/src/main/java/org/jabref/gui/exporter/ExportCommand.java index 3a9534fcf65..010708dc30d 100644 --- a/src/main/java/org/jabref/gui/exporter/ExportCommand.java +++ b/src/main/java/org/jabref/gui/exporter/ExportCommand.java @@ -53,7 +53,7 @@ public ExportCommand(JabRefFrame frame, boolean selectedOnly, JabRefPreferences public void execute() { List customExporters = preferences.getCustomExportFormats(Globals.journalAbbreviationRepository); LayoutFormatterPreferences layoutPreferences = preferences.getLayoutFormatterPreferences(Globals.journalAbbreviationRepository); - SavePreferences savePreferences = preferences.loadForExportFromPreferences(); + SavePreferences savePreferences = preferences.getSavePreferencesForExport(); XmpPreferences xmpPreferences = preferences.getXMPPreferences(); // Get list of exporters and sort before adding to file dialog diff --git a/src/main/java/org/jabref/gui/exporter/SaveDatabaseAction.java b/src/main/java/org/jabref/gui/exporter/SaveDatabaseAction.java index 8abfc0dfc18..871d0acfdcd 100644 --- a/src/main/java/org/jabref/gui/exporter/SaveDatabaseAction.java +++ b/src/main/java/org/jabref/gui/exporter/SaveDatabaseAction.java @@ -166,7 +166,7 @@ private Optional askForSavePath() { private boolean save(BibDatabaseContext bibDatabaseContext, SaveDatabaseMode mode) { Optional databasePath = bibDatabaseContext.getDatabasePath(); - if (!databasePath.isPresent()) { + if (databasePath.isEmpty()) { Optional savePath = askForSavePath(); if (!savePath.isPresent()) { return false; @@ -216,10 +216,10 @@ private boolean save(Path targetPath, SaveDatabaseMode mode) { } private boolean saveDatabase(Path file, boolean selectedOnly, Charset encoding, SavePreferences.DatabaseSaveType saveType) throws SaveException { - SavePreferences preferences = this.preferences.loadForSaveFromPreferences() + SavePreferences preferences = this.preferences.getSavePreferences() .withEncoding(encoding) .withSaveType(saveType); - try (AtomicFileWriter fileWriter = new AtomicFileWriter(file, preferences.getEncoding(), preferences.makeBackup())) { + try (AtomicFileWriter fileWriter = new AtomicFileWriter(file, preferences.getEncoding(), preferences.shouldMakeBackup())) { BibtexDatabaseWriter databaseWriter = new BibtexDatabaseWriter(fileWriter, preferences, entryTypesManager); if (selectedOnly) { diff --git a/src/main/java/org/jabref/gui/menus/FileHistoryMenu.java b/src/main/java/org/jabref/gui/menus/FileHistoryMenu.java index 426bbbe516a..7029505ac20 100644 --- a/src/main/java/org/jabref/gui/menus/FileHistoryMenu.java +++ b/src/main/java/org/jabref/gui/menus/FileHistoryMenu.java @@ -11,16 +11,16 @@ import org.jabref.gui.importer.actions.OpenDatabaseAction; import org.jabref.logic.l10n.Localization; import org.jabref.logic.util.io.FileHistory; -import org.jabref.preferences.JabRefPreferences; +import org.jabref.preferences.PreferencesService; public class FileHistoryMenu extends Menu { private final FileHistory history; - private final JabRefPreferences preferences; + private final PreferencesService preferences; private final DialogService dialogService; private final OpenDatabaseAction openDatabaseAction; - public FileHistoryMenu(JabRefPreferences preferences, DialogService dialogService, OpenDatabaseAction openDatabaseAction) { + public FileHistoryMenu(PreferencesService preferences, DialogService dialogService, OpenDatabaseAction openDatabaseAction) { setText(Localization.lang("Recent libraries")); this.preferences = preferences; diff --git a/src/main/java/org/jabref/gui/preferences/PreferencesDialogViewModel.java b/src/main/java/org/jabref/gui/preferences/PreferencesDialogViewModel.java index 34fbcfc9822..849eaa198a5 100644 --- a/src/main/java/org/jabref/gui/preferences/PreferencesDialogViewModel.java +++ b/src/main/java/org/jabref/gui/preferences/PreferencesDialogViewModel.java @@ -143,7 +143,7 @@ private void updateAfterPreferenceChanges() { List customExporters = preferences.getCustomExportFormats(Globals.journalAbbreviationRepository); LayoutFormatterPreferences layoutPreferences = preferences.getLayoutFormatterPreferences(Globals.journalAbbreviationRepository); - SavePreferences savePreferences = preferences.loadForExportFromPreferences(); + SavePreferences savePreferences = preferences.getSavePreferencesForExport(); XmpPreferences xmpPreferences = preferences.getXMPPreferences(); Globals.exportFactory = ExporterFactory.create(customExporters, layoutPreferences, savePreferences, xmpPreferences); diff --git a/src/main/java/org/jabref/logic/autosaveandbackup/BackupManager.java b/src/main/java/org/jabref/logic/autosaveandbackup/BackupManager.java index 9970dc32730..80d9e48d80d 100644 --- a/src/main/java/org/jabref/logic/autosaveandbackup/BackupManager.java +++ b/src/main/java/org/jabref/logic/autosaveandbackup/BackupManager.java @@ -131,10 +131,9 @@ private Optional determineBackupPath() { private void performBackup(Path backupPath) { try { Charset charset = bibDatabaseContext.getMetaData().getEncoding().orElse(preferences.getDefaultEncoding()); - SavePreferences savePreferences = preferences - .loadForSaveFromPreferences() - .withEncoding(charset) - .withMakeBackup(false); + SavePreferences savePreferences = preferences.getSavePreferences() + .withEncoding(charset) + .withMakeBackup(false); new BibtexDatabaseWriter(new AtomicFileWriter(backupPath, savePreferences.getEncoding()), savePreferences, entryTypesManager) .saveDatabase(bibDatabaseContext); } catch (IOException e) { diff --git a/src/main/java/org/jabref/logic/exporter/BibDatabaseWriter.java b/src/main/java/org/jabref/logic/exporter/BibDatabaseWriter.java index 3d28b2cb195..f848f4edaa3 100644 --- a/src/main/java/org/jabref/logic/exporter/BibDatabaseWriter.java +++ b/src/main/java/org/jabref/logic/exporter/BibDatabaseWriter.java @@ -139,7 +139,7 @@ private static Optional getSaveOrder(MetaData metaData, SavePre * 3. order specified in preferences */ - if (preferences.isSaveInOriginalOrder()) { + if (preferences.shouldSaveInOriginalOrder()) { return Optional.empty(); } diff --git a/src/main/java/org/jabref/logic/exporter/BibtexDatabaseWriter.java b/src/main/java/org/jabref/logic/exporter/BibtexDatabaseWriter.java index e120cf44327..9e455cf6def 100644 --- a/src/main/java/org/jabref/logic/exporter/BibtexDatabaseWriter.java +++ b/src/main/java/org/jabref/logic/exporter/BibtexDatabaseWriter.java @@ -64,7 +64,7 @@ protected void writePreamble(String preamble) throws IOException { @Override protected void writeString(BibtexString bibtexString, boolean isFirstString, int maxKeyLength) throws IOException { // If the string has not been modified, write it back as it was - if (!preferences.isReformatFile() && !bibtexString.hasChanged()) { + if (!preferences.shouldReformatFile() && !bibtexString.hasChanged()) { writer.write(bibtexString.getParsedSerialization()); return; } @@ -130,6 +130,6 @@ protected void writeDatabaseID(String sharedDatabaseID) throws IOException { @Override protected void writeEntry(BibEntry entry, BibDatabaseMode mode) throws IOException { BibEntryWriter bibtexEntryWriter = new BibEntryWriter(new FieldWriter(preferences.getFieldWriterPreferences()), entryTypesManager); - bibtexEntryWriter.write(entry, writer, mode, preferences.isReformatFile()); + bibtexEntryWriter.write(entry, writer, mode, preferences.shouldReformatFile()); } } diff --git a/src/main/java/org/jabref/logic/exporter/SavePreferences.java b/src/main/java/org/jabref/logic/exporter/SavePreferences.java index bba28c2c3bf..5415c2cdc5c 100644 --- a/src/main/java/org/jabref/logic/exporter/SavePreferences.java +++ b/src/main/java/org/jabref/logic/exporter/SavePreferences.java @@ -8,6 +8,8 @@ public class SavePreferences { + public enum DatabaseSaveType { ALL, PLAIN_BIBTEX } + // Encoding written at the top of the .bib file. public static final String ENCODING_PREFIX = "Encoding: "; @@ -62,15 +64,41 @@ public SavePreferences(Boolean saveInOriginalOrder, citationKeyPatternPreferences); } - public Boolean takeMetadataSaveOrderInAccount() { + public boolean takeMetadataSaveOrderInAccount() { return takeMetadataSaveOrderInAccount; } + public SavePreferences withTakeMetadataSaveOrderInAccount(boolean newTakeMetadataSaveOrderInAccount) { + return new SavePreferences( + this.saveInOriginalOrder, + this.saveOrder, + this.encoding, + this.makeBackup, + this.saveType, + newTakeMetadataSaveOrderInAccount, + this.reformatFile, + this.fieldWriterPreferences, + this.citationKeyPatternPreferences); + } + public SaveOrderConfig getSaveOrder() { return saveOrder; } - public boolean isSaveInOriginalOrder() { + public SavePreferences withSaveOrder(SaveOrderConfig newSaveOrder) { + return new SavePreferences( + this.saveInOriginalOrder, + newSaveOrder, + this.encoding, + this.makeBackup, + this.saveType, + this.takeMetadataSaveOrderInAccount, + this.reformatFile, + this.fieldWriterPreferences, + this.citationKeyPatternPreferences); + } + + public boolean shouldSaveInOriginalOrder() { return saveInOriginalOrder; } @@ -87,7 +115,7 @@ public SavePreferences withSaveInOriginalOrder(Boolean newSaveInOriginalOrder) { this.citationKeyPatternPreferences); } - public boolean makeBackup() { + public boolean shouldMakeBackup() { return makeBackup; } @@ -143,7 +171,7 @@ public SavePreferences withSaveType(DatabaseSaveType newSaveType) { this.citationKeyPatternPreferences); } - public Boolean isReformatFile() { + public boolean shouldReformatFile() { return reformatFile; } @@ -167,9 +195,4 @@ public FieldWriterPreferences getFieldWriterPreferences() { public CitationKeyPatternPreferences getCitationKeyPatternPreferences() { return citationKeyPatternPreferences; } - - public enum DatabaseSaveType { - ALL, - PLAIN_BIBTEX - } } diff --git a/src/main/java/org/jabref/preferences/JabRefPreferences.java b/src/main/java/org/jabref/preferences/JabRefPreferences.java index ffacd6968ea..cf23a5c7f48 100644 --- a/src/main/java/org/jabref/preferences/JabRefPreferences.java +++ b/src/main/java/org/jabref/preferences/JabRefPreferences.java @@ -64,7 +64,6 @@ import org.jabref.logic.cleanup.CleanupPreferences; import org.jabref.logic.cleanup.CleanupPreset; import org.jabref.logic.cleanup.Cleanups; -import org.jabref.logic.exporter.ExporterFactory; import org.jabref.logic.exporter.SavePreferences; import org.jabref.logic.exporter.TemplateExporter; import org.jabref.logic.importer.ImportFormatPreferences; @@ -1125,7 +1124,7 @@ public void exportPreferences(String filename) throws JabRefException { } public void exportPreferences(Path file) throws JabRefException { - LOGGER.debug("Exporting preferences ", file.toAbsolutePath()); + LOGGER.debug("Exporting preferences {}", file.toAbsolutePath()); try (OutputStream os = Files.newOutputStream(file)) { prefs.exportSubtree(os); } catch (BackingStoreException | IOException ex) { @@ -1168,109 +1167,12 @@ public String getWrappedUsername() { return '[' + get(DEFAULT_OWNER) + ']'; } - public FileHistory getFileHistory() { - return new FileHistory(getStringList(RECENT_DATABASES).stream().map(Path::of).collect(Collectors.toList())); - } - - public void storeFileHistory(FileHistory history) { - if (!history.isEmpty()) { - putStringList(RECENT_DATABASES, history.getHistory().stream().map(Path::toAbsolutePath).map(Path::toString).collect(Collectors.toList())); - } - } - - @Override - public FilePreferences getFilePreferences() { - return new FilePreferences( - getUser(), - get(MAIN_FILE_DIRECTORY), - getBoolean(BIB_LOC_AS_PRIMARY_DIR), - get(IMPORT_FILENAMEPATTERN), - get(IMPORT_FILEDIRPATTERN), - getBoolean(DOWNLOAD_LINKED_FILES)); - } - - @Override - public void storeFilePreferences(FilePreferences filePreferences) { - put(JabRefPreferences.MAIN_FILE_DIRECTORY, filePreferences.getFileDirectory().map(Path::toString).orElse("")); - putBoolean(JabRefPreferences.BIB_LOC_AS_PRIMARY_DIR, filePreferences.isBibLocationAsPrimary()); - put(JabRefPreferences.IMPORT_FILENAMEPATTERN, filePreferences.getFileNamePattern()); - put(JabRefPreferences.IMPORT_FILEDIRPATTERN, filePreferences.getFileDirPattern()); - putBoolean(JabRefPreferences.DOWNLOAD_LINKED_FILES, filePreferences.shouldDownloadLinkedFiles()); - } - - @Override - public FieldWriterPreferences getFieldWriterPreferences() { - return new FieldWriterPreferences( - getBoolean(RESOLVE_STRINGS_ALL_FIELDS), - getStringList(DO_NOT_RESOLVE_STRINGS_FOR).stream().map(FieldFactory::parseField).collect(Collectors.toList()), - getFieldContentParserPreferences()); - } - - @Override - public FieldContentFormatterPreferences getFieldContentParserPreferences() { - return new FieldContentFormatterPreferences(getStringList(NON_WRAPPABLE_FIELDS).stream().map(FieldFactory::parseField).collect(Collectors.toList())); - } - @Override public boolean isKeywordSyncEnabled() { return getBoolean(JabRefPreferences.SPECIALFIELDSENABLED) && getBoolean(JabRefPreferences.AUTOSYNCSPECIALFIELDSTOKEYWORDS); } - @Override - public ImportFormatPreferences getImportFormatPreferences() { - return new ImportFormatPreferences( - customImports, - getDefaultEncoding(), - getKeywordDelimiter(), - getCitationKeyPatternPreferences(), - getFieldContentParserPreferences(), - getXMPPreferences(), - isKeywordSyncEnabled()); - } - - @Override - public SavePreferences loadForExportFromPreferences() { - Boolean saveInOriginalOrder = this.getBoolean(JabRefPreferences.EXPORT_IN_ORIGINAL_ORDER); - SaveOrderConfig saveOrder = null; - if (!saveInOriginalOrder) { - if (this.getBoolean(JabRefPreferences.EXPORT_IN_SPECIFIED_ORDER)) { - saveOrder = this.loadExportSaveOrder(); - } else { - saveOrder = this.loadTableSaveOrder(); - } - } - return new SavePreferences( - saveInOriginalOrder, - saveOrder, - this.getDefaultEncoding(), - SavePreferences.DatabaseSaveType.ALL, - false, - this.getBoolean(JabRefPreferences.REFORMAT_FILE_ON_SAVE_AND_EXPORT), - this.getFieldWriterPreferences(), - getCitationKeyPatternPreferences()); - } - - public SavePreferences loadForSaveFromPreferences() { - return new SavePreferences( - false, - null, - this.getDefaultEncoding(), - SavePreferences.DatabaseSaveType.ALL, - true, - this.getBoolean(JabRefPreferences.REFORMAT_FILE_ON_SAVE_AND_EXPORT), - this.getFieldWriterPreferences(), - getCitationKeyPatternPreferences()); - } - - public ExporterFactory getExporterFactory(JournalAbbreviationRepository abbreviationRepository) { - List customFormats = getCustomExportFormats(abbreviationRepository); - LayoutFormatterPreferences layoutPreferences = this.getLayoutFormatterPreferences(abbreviationRepository); - SavePreferences savePreferences = this.loadForExportFromPreferences(); - XmpPreferences xmpPreferences = this.getXMPPreferences(); - return ExporterFactory.create(customFormats, layoutPreferences, savePreferences, xmpPreferences); - } - @Override public LayoutFormatterPreferences getLayoutFormatterPreferences(JournalAbbreviationRepository repository) { return new LayoutFormatterPreferences( @@ -1316,12 +1218,6 @@ private NameFormatterPreferences getNameFormatterPreferences() { return new NameFormatterPreferences(getStringList(NAME_FORMATER_KEY), getStringList(NAME_FORMATTER_VALUE)); } - private FileLinkPreferences getFileLinkPreferences() { - return new FileLinkPreferences( - get(MAIN_FILE_DIRECTORY), - fileDirForDatabase); - } - public JabRefPreferences storeVersionPreferences(VersionPreferences versionPreferences) { put(VERSION_IGNORED_UPDATE, versionPreferences.getIgnoredVersion().toString()); return this; @@ -1546,16 +1442,6 @@ public void storeSidePanePreferredPositions(Map preferred putStringList(SIDE_PANE_COMPONENT_PREFERRED_POSITIONS, positions); } - @Override - public Path getWorkingDir() { - return Path.of(get(WORKING_DIRECTORY)); - } - - @Override - public void setWorkingDir(Path dir) { - put(WORKING_DIRECTORY, dir.toString()); - } - public void setPreviewStyle(String previewStyle) { put(PREVIEW_STYLE, previewStyle); } @@ -1596,7 +1482,7 @@ public List getCustomExportFormats(JournalAbbreviationReposito String filename; String extension; LayoutFormatterPreferences layoutPreferences = getLayoutFormatterPreferences(abbreviationRepository); - SavePreferences savePreferences = loadForExportFromPreferences(); + SavePreferences savePreferences = getSavePreferencesForExport(); List formatData; while (!((formatData = getStringList(CUSTOM_EXPORT_FORMAT + i)).isEmpty())) { exporterName = formatData.get(EXPORTER_NAME_INDEX); @@ -2319,6 +2205,115 @@ public void storeMainTableNameFormatPreferences(MainTableNameFormatPreferences p putBoolean(JabRefPreferences.NAMES_LAST_ONLY, preferences.getAbbreviationStyle() == AbbreviationStyle.LASTNAME_ONLY); } + //************************************************************************************************************* + // File preferences + //************************************************************************************************************* + + @Override + public ImportFormatPreferences getImportFormatPreferences() { + return new ImportFormatPreferences( + customImports, + getDefaultEncoding(), + getKeywordDelimiter(), + getCitationKeyPatternPreferences(), + getFieldContentParserPreferences(), + getXMPPreferences(), + isKeywordSyncEnabled()); + } + + @Override + public SavePreferences getSavePreferencesForExport() { + Boolean saveInOriginalOrder = this.getBoolean(JabRefPreferences.EXPORT_IN_ORIGINAL_ORDER); + SaveOrderConfig saveOrder = null; + if (!saveInOriginalOrder) { + if (this.getBoolean(JabRefPreferences.EXPORT_IN_SPECIFIED_ORDER)) { + saveOrder = this.loadExportSaveOrder(); + } else { + saveOrder = this.loadTableSaveOrder(); + } + } + + return getSavePreferences() + .withSaveInOriginalOrder(saveInOriginalOrder) + .withSaveOrder(saveOrder) + .withTakeMetadataSaveOrderInAccount(false); + } + + @Override + public SavePreferences getSavePreferences() { + return new SavePreferences( + false, + null, + this.getDefaultEncoding(), + SavePreferences.DatabaseSaveType.ALL, + true, + this.getBoolean(JabRefPreferences.REFORMAT_FILE_ON_SAVE_AND_EXPORT), + this.getFieldWriterPreferences(), + getCitationKeyPatternPreferences()); + } + + @Override + public FieldWriterPreferences getFieldWriterPreferences() { + return new FieldWriterPreferences( + getBoolean(RESOLVE_STRINGS_ALL_FIELDS), + getStringList(DO_NOT_RESOLVE_STRINGS_FOR).stream().map(FieldFactory::parseField).collect(Collectors.toList()), + getFieldContentParserPreferences()); + } + + @Override + public FieldContentFormatterPreferences getFieldContentParserPreferences() { + return new FieldContentFormatterPreferences( + getStringList(NON_WRAPPABLE_FIELDS).stream().map(FieldFactory::parseField).collect(Collectors.toList())); + } + + @Override + public FileHistory getFileHistory() { + return new FileHistory(getStringList(RECENT_DATABASES).stream().map(Path::of).collect(Collectors.toList())); + } + + @Override + public void storeFileHistory(FileHistory history) { + if (!history.isEmpty()) { + putStringList(RECENT_DATABASES, history.getHistory().stream().map(Path::toAbsolutePath).map(Path::toString).collect(Collectors.toList())); + } + } + + private FileLinkPreferences getFileLinkPreferences() { + return new FileLinkPreferences( + get(MAIN_FILE_DIRECTORY), + fileDirForDatabase); + } + + @Override + public Path getWorkingDir() { + return Path.of(get(WORKING_DIRECTORY)); + } + + @Override + public void setWorkingDir(Path dir) { + put(WORKING_DIRECTORY, dir.toString()); + } + + @Override + public FilePreferences getFilePreferences() { + return new FilePreferences( + getUser(), + get(MAIN_FILE_DIRECTORY), + getBoolean(BIB_LOC_AS_PRIMARY_DIR), + get(IMPORT_FILENAMEPATTERN), + get(IMPORT_FILEDIRPATTERN), + getBoolean(DOWNLOAD_LINKED_FILES)); + } + + @Override + public void storeFilePreferences(FilePreferences filePreferences) { + put(JabRefPreferences.MAIN_FILE_DIRECTORY, filePreferences.getFileDirectory().map(Path::toString).orElse("")); + putBoolean(JabRefPreferences.BIB_LOC_AS_PRIMARY_DIR, filePreferences.isBibLocationAsPrimary()); + put(JabRefPreferences.IMPORT_FILENAMEPATTERN, filePreferences.getFileNamePattern()); + put(JabRefPreferences.IMPORT_FILEDIRPATTERN, filePreferences.getFileDirPattern()); + putBoolean(JabRefPreferences.DOWNLOAD_LINKED_FILES, filePreferences.shouldDownloadLinkedFiles()); + } + //************************************************************************************************************* // ToDo: Misc preferences //************************************************************************************************************* diff --git a/src/main/java/org/jabref/preferences/PreferencesService.java b/src/main/java/org/jabref/preferences/PreferencesService.java index 410dab570c2..8fa8baf67b6 100644 --- a/src/main/java/org/jabref/preferences/PreferencesService.java +++ b/src/main/java/org/jabref/preferences/PreferencesService.java @@ -33,6 +33,7 @@ import org.jabref.logic.protectedterms.ProtectedTermsLoader; import org.jabref.logic.remote.RemotePreferences; import org.jabref.logic.util.io.AutoLinkPreferences; +import org.jabref.logic.util.io.FileHistory; import org.jabref.logic.xmp.XmpPreferences; import org.jabref.model.bibtexkeypattern.GlobalCitationKeyPattern; import org.jabref.model.database.BibDatabaseMode; @@ -62,6 +63,10 @@ public interface PreferencesService { FieldWriterPreferences getFieldWriterPreferences(); + FileHistory getFileHistory(); + + void storeFileHistory(FileHistory history); + FieldContentFormatterPreferences getFieldContentParserPreferences(); XmpPreferences getXMPPreferences(); @@ -88,7 +93,9 @@ public interface PreferencesService { boolean isKeywordSyncEnabled(); - SavePreferences loadForExportFromPreferences(); + SavePreferences getSavePreferencesForExport(); + + SavePreferences getSavePreferences(); String getExportWorkingDirectory(); diff --git a/src/test/java/org/jabref/gui/exporter/SaveDatabaseActionTest.java b/src/test/java/org/jabref/gui/exporter/SaveDatabaseActionTest.java index 3e54d4b06f7..691ac790eac 100644 --- a/src/test/java/org/jabref/gui/exporter/SaveDatabaseActionTest.java +++ b/src/test/java/org/jabref/gui/exporter/SaveDatabaseActionTest.java @@ -124,7 +124,7 @@ private SaveDatabaseAction createSaveDatabaseActionForBibDatabase(BibDatabase da when(preferences.getBoolean(JabRefPreferences.LOCAL_AUTO_SAVE)).thenReturn(false); when(preferences.getDefaultEncoding()).thenReturn(StandardCharsets.UTF_8); when(preferences.getFieldContentParserPreferences()).thenReturn(mock(FieldContentFormatterPreferences.class)); - when(preferences.loadForSaveFromPreferences()).thenReturn(savePreferences); + when(preferences.getSavePreferences()).thenReturn(savePreferences); when(basePanel.frame()).thenReturn(jabRefFrame); when(basePanel.getBibDatabaseContext()).thenReturn(dbContext); when(basePanel.getUndoManager()).thenReturn(mock(CountingUndoManager.class)); diff --git a/src/test/java/org/jabref/logic/exporter/BibtexDatabaseWriterTest.java b/src/test/java/org/jabref/logic/exporter/BibtexDatabaseWriterTest.java index 5f486594a6d..e112afedab5 100644 --- a/src/test/java/org/jabref/logic/exporter/BibtexDatabaseWriterTest.java +++ b/src/test/java/org/jabref/logic/exporter/BibtexDatabaseWriterTest.java @@ -330,7 +330,7 @@ void roundtripWithArticleMonths() throws Exception { ParserResult result = new BibtexParser(importFormatPreferences, fileMonitor).parse(Importer.getReader(testBibtexFile, encoding)); when(preferences.getEncoding()).thenReturn(encoding); - when(preferences.isSaveInOriginalOrder()).thenReturn(true); + when(preferences.shouldSaveInOriginalOrder()).thenReturn(true); BibDatabaseContext context = new BibDatabaseContext(result.getDatabase(), result.getMetaData()); databaseWriter.savePartOfDatabase(context, result.getDatabase().getEntries()); @@ -344,7 +344,7 @@ void roundtripWithComplexBib() throws Exception { ParserResult result = new BibtexParser(importFormatPreferences, fileMonitor).parse(Importer.getReader(testBibtexFile, encoding)); when(preferences.getEncoding()).thenReturn(encoding); - when(preferences.isSaveInOriginalOrder()).thenReturn(true); + when(preferences.shouldSaveInOriginalOrder()).thenReturn(true); BibDatabaseContext context = new BibDatabaseContext(result.getDatabase(), result.getMetaData()); databaseWriter.savePartOfDatabase(context, result.getDatabase().getEntries()); @@ -358,7 +358,7 @@ void roundtripWithUserComment() throws Exception { ParserResult result = new BibtexParser(importFormatPreferences, fileMonitor).parse(Importer.getReader(testBibtexFile, encoding)); when(preferences.getEncoding()).thenReturn(encoding); - when(preferences.isSaveInOriginalOrder()).thenReturn(true); + when(preferences.shouldSaveInOriginalOrder()).thenReturn(true); BibDatabaseContext context = new BibDatabaseContext(result.getDatabase(), result.getMetaData()); databaseWriter.savePartOfDatabase(context, result.getDatabase().getEntries()); @@ -375,7 +375,7 @@ void roundtripWithUserCommentAndEntryChange() throws Exception { entry.setField(StandardField.AUTHOR, "Mr. Author"); when(preferences.getEncoding()).thenReturn(encoding); - when(preferences.isSaveInOriginalOrder()).thenReturn(true); + when(preferences.shouldSaveInOriginalOrder()).thenReturn(true); BibDatabaseContext context = new BibDatabaseContext(result.getDatabase(), result.getMetaData()); databaseWriter.savePartOfDatabase(context, result.getDatabase().getEntries()); @@ -394,7 +394,7 @@ void roundtripWithUserCommentBeforeStringAndChange() throws Exception { } when(preferences.getEncoding()).thenReturn(encoding); - when(preferences.isSaveInOriginalOrder()).thenReturn(true); + when(preferences.shouldSaveInOriginalOrder()).thenReturn(true); BibDatabaseContext context = new BibDatabaseContext(result.getDatabase(), result.getMetaData()); databaseWriter.savePartOfDatabase(context, result.getDatabase().getEntries()); @@ -409,7 +409,7 @@ void roundtripWithUnknownMetaData() throws Exception { ParserResult result = new BibtexParser(importFormatPreferences, fileMonitor).parse(Importer.getReader(testBibtexFile, encoding)); when(preferences.getEncoding()).thenReturn(encoding); - when(preferences.isSaveInOriginalOrder()).thenReturn(true); + when(preferences.shouldSaveInOriginalOrder()).thenReturn(true); BibDatabaseContext context = new BibDatabaseContext(result.getDatabase(), result.getMetaData()); databaseWriter.savePartOfDatabase(context, result.getDatabase().getEntries()); @@ -439,7 +439,7 @@ void reformatEntryIfAskedToDoSo() throws Exception { entry.setChanged(false); database.insertEntry(entry); - when(preferences.isReformatFile()).thenReturn(true); + when(preferences.shouldReformatFile()).thenReturn(true); databaseWriter.savePartOfDatabase(bibtexContext, Collections.singletonList(entry)); assertEquals( @@ -466,7 +466,7 @@ void reformatStringIfAskedToDoSo() throws Exception { string.setParsedSerialization("wrong serialization"); database.addString(string); - when(preferences.isReformatFile()).thenReturn(true); + when(preferences.shouldReformatFile()).thenReturn(true); databaseWriter.savePartOfDatabase(bibtexContext, Collections.emptyList()); assertEquals(OS.NEWLINE + "@String{name = {content}}" + OS.NEWLINE, stringWriter.toString()); @@ -624,7 +624,7 @@ void writeEntriesInOriginalOrderWhenNoSaveOrderConfigIsSetInMetadata() throws Ex database.insertEntry(secondEntry); database.insertEntry(thirdEntry); - when(preferences.isSaveInOriginalOrder()).thenReturn(false); + when(preferences.shouldSaveInOriginalOrder()).thenReturn(false); databaseWriter.savePartOfDatabase(bibtexContext, database.getEntries()); assertEquals( @@ -685,7 +685,7 @@ void roundtripWithContentSelectorsAndUmlauts() throws Exception { ParserResult firstParse = new BibtexParser(importFormatPreferences, fileMonitor).parse(new StringReader(fileContent)); when(preferences.getEncoding()).thenReturn(encoding); - when(preferences.isSaveInOriginalOrder()).thenReturn(true); + when(preferences.shouldSaveInOriginalOrder()).thenReturn(true); BibDatabaseContext context = new BibDatabaseContext(firstParse.getDatabase(), firstParse.getMetaData()); databaseWriter.savePartOfDatabase(context, firstParse.getDatabase().getEntries()); From fac9f9907cb6d1e0443cc211001e840e50e2c562 Mon Sep 17 00:00:00 2001 From: Carl Christian Snethlage Date: Sat, 22 Aug 2020 19:02:56 +0200 Subject: [PATCH 02/15] Refactored for more clean-ups and naming consistency --- .../org/jabref/cli/ArgumentProcessor.java | 6 +- .../externalfiles/AutoLinkFilesAction.java | 8 ++- .../LinkedFilesEditorViewModel.java | 56 ++++++++++++++++-- .../gui/preferences/FileTabViewModel.java | 8 ++- .../PreferencesDialogViewModel.java | 6 +- .../jabref/preferences/JabRefPreferences.java | 57 +++++++++++-------- .../preferences/PreferencesService.java | 12 ++++ 7 files changed, 114 insertions(+), 39 deletions(-) diff --git a/src/main/java/org/jabref/cli/ArgumentProcessor.java b/src/main/java/org/jabref/cli/ArgumentProcessor.java index 35ec633ed30..9aaecfc92de 100644 --- a/src/main/java/org/jabref/cli/ArgumentProcessor.java +++ b/src/main/java/org/jabref/cli/ArgumentProcessor.java @@ -495,7 +495,11 @@ private void automaticallySetFileLinks(List loaded) { for (ParserResult parserResult : loaded) { BibDatabase database = parserResult.getDatabase(); LOGGER.info(Localization.lang("Automatically setting file links")); - AutoSetFileLinksUtil util = new AutoSetFileLinksUtil(parserResult.getDatabaseContext(), Globals.prefs.getFilePreferences(), Globals.prefs.getAutoLinkPreferences(), ExternalFileTypes.getInstance()); + AutoSetFileLinksUtil util = new AutoSetFileLinksUtil( + parserResult.getDatabaseContext(), + Globals.prefs.getFilePreferences(), + Globals.prefs.getAutoLinkPreferences(), + ExternalFileTypes.getInstance()); util.linkAssociatedFiles(database.getEntries(), new NamedCompound("")); } } diff --git a/src/main/java/org/jabref/gui/externalfiles/AutoLinkFilesAction.java b/src/main/java/org/jabref/gui/externalfiles/AutoLinkFilesAction.java index 505137edc35..487e9250a33 100644 --- a/src/main/java/org/jabref/gui/externalfiles/AutoLinkFilesAction.java +++ b/src/main/java/org/jabref/gui/externalfiles/AutoLinkFilesAction.java @@ -52,8 +52,12 @@ public void execute() { List entries = stateManager.getSelectedEntries(); final NamedCompound nc = new NamedCompound(Localization.lang("Automatically set file links")); - AutoSetFileLinksUtil util = new AutoSetFileLinksUtil(database, preferences.getFilePreferences(), preferences.getAutoLinkPreferences(), ExternalFileTypes.getInstance()); - Task> linkFilesTask = new Task>() { + AutoSetFileLinksUtil util = new AutoSetFileLinksUtil( + database, + preferences.getFilePreferences(), + preferences.getAutoLinkPreferences(), + ExternalFileTypes.getInstance()); + Task> linkFilesTask = new Task<>() { @Override protected List call() { diff --git a/src/main/java/org/jabref/gui/fieldeditors/LinkedFilesEditorViewModel.java b/src/main/java/org/jabref/gui/fieldeditors/LinkedFilesEditorViewModel.java index 23b8c6b7dc5..50f69c0c0d5 100644 --- a/src/main/java/org/jabref/gui/fieldeditors/LinkedFilesEditorViewModel.java +++ b/src/main/java/org/jabref/gui/fieldeditors/LinkedFilesEditorViewModel.java @@ -101,7 +101,15 @@ public LinkedFileViewModel fromFile(Path file) { List fileDirectories = databaseContext.getFileDirectoriesAsPaths(preferences.getFilePreferences()); LinkedFile linkedFile = fromFile(file, fileDirectories, externalFileTypes); - return new LinkedFileViewModel(linkedFile, entry, databaseContext, taskExecutor, dialogService, preferences.getXMPPreferences(), preferences.getFilePreferences(), externalFileTypes); + return new LinkedFileViewModel( + linkedFile, + entry, + databaseContext, + taskExecutor, + dialogService, + preferences.getXMPPreferences(), + preferences.getFilePreferences(), + externalFileTypes); } public boolean isFulltextLookupInProgress() { @@ -114,7 +122,15 @@ public BooleanProperty fulltextLookupInProgressProperty() { private List parseToFileViewModel(String stringValue) { return FileFieldParser.parse(stringValue).stream() - .map(linkedFile -> new LinkedFileViewModel(linkedFile, entry, databaseContext, taskExecutor, dialogService, preferences.getXMPPreferences(), preferences.getFilePreferences(), externalFileTypes)) + .map(linkedFile -> new LinkedFileViewModel( + linkedFile, + entry, + databaseContext, + taskExecutor, + dialogService, + preferences.getXMPPreferences(), + preferences.getFilePreferences(), + externalFileTypes)) .collect(Collectors.toList()); } @@ -137,7 +153,15 @@ public void addNewFile() { List fileDirectories = databaseContext.getFileDirectoriesAsPaths(preferences.getFilePreferences()); dialogService.showFileOpenDialog(fileDialogConfiguration).ifPresent(newFile -> { LinkedFile newLinkedFile = fromFile(newFile, fileDirectories, externalFileTypes); - files.add(new LinkedFileViewModel(newLinkedFile, entry, databaseContext, taskExecutor, dialogService, preferences.getXMPPreferences(), preferences.getFilePreferences(), externalFileTypes)); + files.add(new LinkedFileViewModel( + newLinkedFile, + entry, + databaseContext, + taskExecutor, + dialogService, + preferences.getXMPPreferences(), + preferences.getFilePreferences(), + externalFileTypes)); }); } @@ -159,11 +183,23 @@ public void bindToEntry(BibEntry entry) { private List findAssociatedNotLinkedFiles(BibEntry entry) { List result = new ArrayList<>(); - AutoSetFileLinksUtil util = new AutoSetFileLinksUtil(databaseContext, preferences.getFilePreferences(), preferences.getAutoLinkPreferences(), ExternalFileTypes.getInstance()); + AutoSetFileLinksUtil util = new AutoSetFileLinksUtil( + databaseContext, + preferences.getFilePreferences(), + preferences.getAutoLinkPreferences(), + ExternalFileTypes.getInstance()); try { List linkedFiles = util.findAssociatedNotLinkedFiles(entry); for (LinkedFile linkedFile : linkedFiles) { - LinkedFileViewModel newLinkedFile = new LinkedFileViewModel(linkedFile, entry, databaseContext, taskExecutor, dialogService, preferences.getXMPPreferences(), preferences.getFilePreferences(), externalFileTypes); + LinkedFileViewModel newLinkedFile = new LinkedFileViewModel( + linkedFile, + entry, + databaseContext, + taskExecutor, + dialogService, + preferences.getXMPPreferences(), + preferences.getFilePreferences(), + externalFileTypes); newLinkedFile.markAsAutomaticallyFound(); result.add(newLinkedFile); } @@ -206,7 +242,15 @@ public void addFromURL() { } private void addFromURL(URL url) { - LinkedFileViewModel onlineFile = new LinkedFileViewModel(new LinkedFile(url, ""), entry, databaseContext, taskExecutor, dialogService, preferences.getXMPPreferences(), preferences.getFilePreferences(), externalFileTypes); + LinkedFileViewModel onlineFile = new LinkedFileViewModel( + new LinkedFile(url, ""), + entry, + databaseContext, + taskExecutor, + dialogService, + preferences.getXMPPreferences(), + preferences.getFilePreferences(), + externalFileTypes); files.add(onlineFile); onlineFile.download(); } diff --git a/src/main/java/org/jabref/gui/preferences/FileTabViewModel.java b/src/main/java/org/jabref/gui/preferences/FileTabViewModel.java index ad26e3d1966..820050c1674 100644 --- a/src/main/java/org/jabref/gui/preferences/FileTabViewModel.java +++ b/src/main/java/org/jabref/gui/preferences/FileTabViewModel.java @@ -102,6 +102,8 @@ public void setValues() { @Override public void storeSettings() { + + // NO TITLE preferences.putBoolean(JabRefPreferences.OPEN_LAST_EDITED, openLastStartupProperty.getValue()); if (!noWrapFilesProperty.getValue().trim().equals(preferences.get(JabRefPreferences.NON_WRAPPABLE_FIELDS))) { preferences.put(JabRefPreferences.NON_WRAPPABLE_FIELDS, noWrapFilesProperty.getValue()); @@ -112,16 +114,18 @@ public void storeSettings() { if (autolinkUseRegexProperty.getValue()) { preferences.put(JabRefPreferences.AUTOLINK_REG_EXP_SEARCH_EXPRESSION_KEY, autolinkRegexKeyProperty.getValue()); } - preferences.setNewLineSeparator(selectedNewLineSeparatorProperty.getValue()); + preferences.storeNewLineSeparator(selectedNewLineSeparatorProperty.getValue()); preferences.putBoolean(JabRefPreferences.REFORMAT_FILE_ON_SAVE_AND_EXPORT, alwaysReformatBibProperty.getValue()); + // EXTERNAL FILE LINKS preferences.put(JabRefPreferences.MAIN_FILE_DIRECTORY, mainFileDirProperty.getValue()); preferences.putBoolean(JabRefPreferences.BIB_LOC_AS_PRIMARY_DIR, useBibLocationAsPrimaryProperty.getValue()); preferences.putBoolean(JabRefPreferences.AUTOLINK_USE_REG_EXP_SEARCH_KEY, autolinkUseRegexProperty.getValue()); - preferences.putBoolean(JabRefPreferences.AUTOLINK_EXACT_KEY_ONLY, autolinkFileExactBibtexProperty.getValue()); + preferences.putBoolean(JabRefPreferences.RUN_AUTOMATIC_FILE_SEARCH, searchFilesOnOpenProperty.getValue()); preferences.putBoolean(JabRefPreferences.ALLOW_FILE_AUTO_OPEN_BROWSE, openBrowseOnCreateProperty.getValue()); + // Autosave preferences.putBoolean(JabRefPreferences.LOCAL_AUTO_SAVE, autosaveLocalLibraries.getValue()); } diff --git a/src/main/java/org/jabref/gui/preferences/PreferencesDialogViewModel.java b/src/main/java/org/jabref/gui/preferences/PreferencesDialogViewModel.java index 849eaa198a5..6d1d7f4a77c 100644 --- a/src/main/java/org/jabref/gui/preferences/PreferencesDialogViewModel.java +++ b/src/main/java/org/jabref/gui/preferences/PreferencesDialogViewModel.java @@ -69,7 +69,7 @@ public void importPreferences() { FileDialogConfiguration fileDialogConfiguration = new FileDialogConfiguration.Builder() .addExtensionFilter(StandardFileType.XML) .withDefaultExtension(StandardFileType.XML) - .withInitialDirectory(preferences.setLastPreferencesExportPath()).build(); + .withInitialDirectory(preferences.getLastPreferencesExportPath()).build(); dialogService.showFileOpenDialog(fileDialogConfiguration).ifPresent(file -> { try { @@ -89,7 +89,7 @@ public void exportPreferences() { FileDialogConfiguration fileDialogConfiguration = new FileDialogConfiguration.Builder() .addExtensionFilter(StandardFileType.XML) .withDefaultExtension(StandardFileType.XML) - .withInitialDirectory(preferences.setLastPreferencesExportPath()) + .withInitialDirectory(preferences.getLastPreferencesExportPath()) .build(); dialogService.showFileSaveDialog(fileDialogConfiguration) @@ -97,7 +97,7 @@ public void exportPreferences() { try { storeAllSettings(); preferences.exportPreferences(exportFile); - preferences.setLastPreferencesExportPath(exportFile); + preferences.storeLastPreferencesExportPath(exportFile); } catch (JabRefException ex) { LOGGER.warn(ex.getMessage(), ex); dialogService.showErrorDialogAndWait(Localization.lang("Export preferences"), ex); diff --git a/src/main/java/org/jabref/preferences/JabRefPreferences.java b/src/main/java/org/jabref/preferences/JabRefPreferences.java index cf23a5c7f48..bef713e6e90 100644 --- a/src/main/java/org/jabref/preferences/JabRefPreferences.java +++ b/src/main/java/org/jabref/preferences/JabRefPreferences.java @@ -1458,14 +1458,6 @@ public Optional getFontSize() { } } - public String setLastPreferencesExportPath() { - return get(PREFS_EXPORT_PATH); - } - - public void setLastPreferencesExportPath(Path exportFile) { - put(PREFS_EXPORT_PATH, exportFile.toString()); - } - public void setIdBasedFetcherForEntryGenerator(String fetcherName) { put(ID_ENTRY_GENERATOR, fetcherName); } @@ -1554,18 +1546,6 @@ private void saveCustomEntryTypes(BibDatabaseMode bibDatabaseMode, BibEntryTypes storeBibEntryTypes(customBiblatexBibTexTypes, bibDatabaseMode); } - public NewLineSeparator getNewLineSeparator() { - return NewLineSeparator.parse(get(JabRefPreferences.NEWLINE)); - } - - public void setNewLineSeparator(NewLineSeparator newLineSeparator) { - String escapeChars = newLineSeparator.toString(); - put(JabRefPreferences.NEWLINE, escapeChars); - - // we also have to change Globals variable as globals is not a getter, but a constant - OS.NEWLINE = escapeChars; - } - //************************************************************************************************************* // GeneralPreferences //************************************************************************************************************* @@ -2209,6 +2189,17 @@ public void storeMainTableNameFormatPreferences(MainTableNameFormatPreferences p // File preferences //************************************************************************************************************* + @Override + public String getLastPreferencesExportPath() { + return get(PREFS_EXPORT_PATH); + } + + @Override + public void storeLastPreferencesExportPath(Path exportFile) { + put(PREFS_EXPORT_PATH, exportFile.toString()); + } + + // ToDo: Can this be disbanded? @Override public ImportFormatPreferences getImportFormatPreferences() { return new ImportFormatPreferences( @@ -2252,12 +2243,20 @@ public SavePreferences getSavePreferences() { getCitationKeyPatternPreferences()); } + @Override - public FieldWriterPreferences getFieldWriterPreferences() { - return new FieldWriterPreferences( - getBoolean(RESOLVE_STRINGS_ALL_FIELDS), - getStringList(DO_NOT_RESOLVE_STRINGS_FOR).stream().map(FieldFactory::parseField).collect(Collectors.toList()), - getFieldContentParserPreferences()); + public NewLineSeparator getNewLineSeparator() { + return NewLineSeparator.parse(get(JabRefPreferences.NEWLINE)); + } + + // ToDo: Can this be disbanded? + @Override + public void storeNewLineSeparator(NewLineSeparator newLineSeparator) { + String escapeChars = newLineSeparator.toString(); + put(JabRefPreferences.NEWLINE, escapeChars); + + // we also have to change Globals variable as globals is not a getter, but a constant + OS.NEWLINE = escapeChars; } @Override @@ -2266,6 +2265,14 @@ public FieldContentFormatterPreferences getFieldContentParserPreferences() { getStringList(NON_WRAPPABLE_FIELDS).stream().map(FieldFactory::parseField).collect(Collectors.toList())); } + @Override + public FieldWriterPreferences getFieldWriterPreferences() { + return new FieldWriterPreferences( + getBoolean(RESOLVE_STRINGS_ALL_FIELDS), + getStringList(DO_NOT_RESOLVE_STRINGS_FOR).stream().map(FieldFactory::parseField).collect(Collectors.toList()), + getFieldContentParserPreferences()); + } + @Override public FileHistory getFileHistory() { return new FileHistory(getStringList(RECENT_DATABASES).stream().map(Path::of).collect(Collectors.toList())); diff --git a/src/main/java/org/jabref/preferences/PreferencesService.java b/src/main/java/org/jabref/preferences/PreferencesService.java index 8fa8baf67b6..24882c38d9c 100644 --- a/src/main/java/org/jabref/preferences/PreferencesService.java +++ b/src/main/java/org/jabref/preferences/PreferencesService.java @@ -237,6 +237,18 @@ public interface PreferencesService { void storeMainTableNameFormatPreferences(MainTableNameFormatPreferences preferences); + //************************************************************************************************************* + // File preferences + //************************************************************************************************************* + + NewLineSeparator getNewLineSeparator(); + + void storeNewLineSeparator(NewLineSeparator newLineSeparator); + + void storeLastPreferencesExportPath(Path exportFile); + + String getLastPreferencesExportPath(); + //************************************************************************************************************* // ToDo: Misc preferences //************************************************************************************************************* From 1fb6e7a3ae9d3cac58f8488ac6bdaaa72e3263a3 Mon Sep 17 00:00:00 2001 From: Carl Christian Snethlage Date: Sat, 22 Aug 2020 20:25:59 +0200 Subject: [PATCH 03/15] Refactored and extended AutoLinkPreferences --- .../gui/preferences/FileTabViewModel.java | 48 +++++++++----- .../logic/util/io/AutoLinkPreferences.java | 39 +++++++---- .../org/jabref/logic/util/io/FileFinders.java | 12 ++-- .../jabref/preferences/JabRefPreferences.java | 64 ++++++++++++++----- .../preferences/PreferencesService.java | 6 +- .../AutoSetFileLinksUtilTest.java | 7 +- 6 files changed, 128 insertions(+), 48 deletions(-) diff --git a/src/main/java/org/jabref/gui/preferences/FileTabViewModel.java b/src/main/java/org/jabref/gui/preferences/FileTabViewModel.java index 820050c1674..b139a1d8fc2 100644 --- a/src/main/java/org/jabref/gui/preferences/FileTabViewModel.java +++ b/src/main/java/org/jabref/gui/preferences/FileTabViewModel.java @@ -18,6 +18,7 @@ import org.jabref.gui.DialogService; import org.jabref.gui.util.DirectoryDialogConfiguration; import org.jabref.logic.l10n.Localization; +import org.jabref.logic.util.io.AutoLinkPreferences; import org.jabref.preferences.JabRefPreferences; import org.jabref.preferences.NewLineSeparator; @@ -52,10 +53,12 @@ public class FileTabViewModel implements PreferenceTabViewModel { private final DialogService dialogService; private final JabRefPreferences preferences; + private final AutoLinkPreferences initialAutoLinkPreferences; public FileTabViewModel(DialogService dialogService, JabRefPreferences preferences) { this.dialogService = dialogService; this.preferences = preferences; + this.initialAutoLinkPreferences = preferences.getAutoLinkPreferences(); mainFileDirValidator = new FunctionBasedValidator<>( mainFileDirProperty, @@ -86,16 +89,23 @@ public void setValues() { mainFileDirProperty.setValue(preferences.getAsOptional(JabRefPreferences.MAIN_FILE_DIRECTORY).orElse("")); useBibLocationAsPrimaryProperty.setValue(preferences.getBoolean(JabRefPreferences.BIB_LOC_AS_PRIMARY_DIR)); - if (preferences.getBoolean(JabRefPreferences.AUTOLINK_USE_REG_EXP_SEARCH_KEY)) { // Flipped around - autolinkUseRegexProperty.setValue(true); - } else if (preferences.getBoolean(JabRefPreferences.AUTOLINK_EXACT_KEY_ONLY)) { - autolinkFileExactBibtexProperty.setValue(true); - } else { - autolinkFileStartsBibtexProperty.setValue(true); + + // Autolink preferences + switch (initialAutoLinkPreferences.getCitationKeyDependency()) { + default: + case START: + autolinkFileStartsBibtexProperty.setValue(true); + break; + case EXACT: + autolinkFileExactBibtexProperty.setValue(true); + break; + case REGEX: + autolinkUseRegexProperty.setValue(true); + break; } - autolinkRegexKeyProperty.setValue(preferences.get(JabRefPreferences.AUTOLINK_REG_EXP_SEARCH_EXPRESSION_KEY)); - searchFilesOnOpenProperty.setValue(preferences.getBoolean(JabRefPreferences.RUN_AUTOMATIC_FILE_SEARCH)); - openBrowseOnCreateProperty.setValue(preferences.getBoolean(JabRefPreferences.ALLOW_FILE_AUTO_OPEN_BROWSE)); + autolinkRegexKeyProperty.setValue(initialAutoLinkPreferences.getRegularExpression()); + searchFilesOnOpenProperty.setValue(initialAutoLinkPreferences.shouldSearchFilesOnOpen()); + openBrowseOnCreateProperty.setValue(initialAutoLinkPreferences.shouldOpenBrowseOnCreate()); autosaveLocalLibraries.setValue(preferences.getBoolean(JabRefPreferences.LOCAL_AUTO_SAVE)); } @@ -111,19 +121,27 @@ public void storeSettings() { preferences.putBoolean(JabRefPreferences.RESOLVE_STRINGS_ALL_FIELDS, resolveStringsAllProperty.getValue()); preferences.put(JabRefPreferences.DO_NOT_RESOLVE_STRINGS_FOR, resolveStringsExceptProperty.getValue().trim()); resolveStringsExceptProperty.setValue(preferences.get(JabRefPreferences.DO_NOT_RESOLVE_STRINGS_FOR)); - if (autolinkUseRegexProperty.getValue()) { - preferences.put(JabRefPreferences.AUTOLINK_REG_EXP_SEARCH_EXPRESSION_KEY, autolinkRegexKeyProperty.getValue()); - } preferences.storeNewLineSeparator(selectedNewLineSeparatorProperty.getValue()); preferences.putBoolean(JabRefPreferences.REFORMAT_FILE_ON_SAVE_AND_EXPORT, alwaysReformatBibProperty.getValue()); // EXTERNAL FILE LINKS preferences.put(JabRefPreferences.MAIN_FILE_DIRECTORY, mainFileDirProperty.getValue()); preferences.putBoolean(JabRefPreferences.BIB_LOC_AS_PRIMARY_DIR, useBibLocationAsPrimaryProperty.getValue()); - preferences.putBoolean(JabRefPreferences.AUTOLINK_USE_REG_EXP_SEARCH_KEY, autolinkUseRegexProperty.getValue()); - preferences.putBoolean(JabRefPreferences.RUN_AUTOMATIC_FILE_SEARCH, searchFilesOnOpenProperty.getValue()); - preferences.putBoolean(JabRefPreferences.ALLOW_FILE_AUTO_OPEN_BROWSE, openBrowseOnCreateProperty.getValue()); + // Autolink preferences + AutoLinkPreferences.CitationKeyDependency citationKeyDependency = AutoLinkPreferences.CitationKeyDependency.START; + if (autolinkFileExactBibtexProperty.getValue()) { + citationKeyDependency = AutoLinkPreferences.CitationKeyDependency.EXACT; + } else if (autolinkUseRegexProperty.getValue()) { + citationKeyDependency = AutoLinkPreferences.CitationKeyDependency.REGEX; + } + + preferences.storeAutoLinkPreferences(new AutoLinkPreferences( + citationKeyDependency, + autolinkRegexKeyProperty.getValue(), + searchFilesOnOpenProperty.getValue(), + openBrowseOnCreateProperty.getValue(), + preferences.getKeywordDelimiter())); // Autosave preferences.putBoolean(JabRefPreferences.LOCAL_AUTO_SAVE, autosaveLocalLibraries.getValue()); diff --git a/src/main/java/org/jabref/logic/util/io/AutoLinkPreferences.java b/src/main/java/org/jabref/logic/util/io/AutoLinkPreferences.java index 4e18ebd253e..5ee186812b2 100644 --- a/src/main/java/org/jabref/logic/util/io/AutoLinkPreferences.java +++ b/src/main/java/org/jabref/logic/util/io/AutoLinkPreferences.java @@ -1,28 +1,45 @@ package org.jabref.logic.util.io; public class AutoLinkPreferences { - boolean useRegularExpression; - String regularExpression; - Character keywordDelimiter; - boolean onlyFindByExactCiteKey; - public AutoLinkPreferences(boolean useRegularExpression, String regularExpression, boolean onlyFindByExactCiteKey, Character keywordDelimiter) { - this.useRegularExpression = useRegularExpression; + public enum CitationKeyDependency { + START, // Filenames starting with the citation key + EXACT, // Filenames exactly matching the citation key + REGEX // Filenames matching a regular expression pattern + } + + private final CitationKeyDependency citationKeyDependency; + private final String regularExpression; + private final boolean shouldSearchFilesOnOpen; + private final boolean shouldOpenBrowseOnCreate; + private final Character keywordDelimiter; + + public AutoLinkPreferences(CitationKeyDependency citationKeyDependency, + String regularExpression, + boolean shouldSearchFilesOnOpen, + boolean shouldOpenBrowseOnCreate, + Character keywordDelimiter) { + this.citationKeyDependency = citationKeyDependency; this.regularExpression = regularExpression; - this.onlyFindByExactCiteKey = onlyFindByExactCiteKey; + this.shouldSearchFilesOnOpen = shouldSearchFilesOnOpen; + this.shouldOpenBrowseOnCreate = shouldOpenBrowseOnCreate; this.keywordDelimiter = keywordDelimiter; } - public boolean isUseRegularExpression() { - return useRegularExpression; + public CitationKeyDependency getCitationKeyDependency() { + return citationKeyDependency; } public String getRegularExpression() { return regularExpression; } - public boolean isOnlyFindByExactCiteKey() { - return onlyFindByExactCiteKey; + public boolean shouldSearchFilesOnOpen() { + return shouldSearchFilesOnOpen; + } + + public boolean shouldOpenBrowseOnCreate() { + return shouldOpenBrowseOnCreate; } public Character getKeywordDelimiter() { diff --git a/src/main/java/org/jabref/logic/util/io/FileFinders.java b/src/main/java/org/jabref/logic/util/io/FileFinders.java index 4cccc269936..535a516e885 100644 --- a/src/main/java/org/jabref/logic/util/io/FileFinders.java +++ b/src/main/java/org/jabref/logic/util/io/FileFinders.java @@ -5,10 +5,14 @@ public class FileFinders { * Creates a preconfigurated file finder based on the given AutoLink preferences. */ public static FileFinder constructFromConfiguration(AutoLinkPreferences autoLinkPreferences) { - if (autoLinkPreferences.isUseRegularExpression()) { - return new RegExpBasedFileFinder(autoLinkPreferences.getRegularExpression(), autoLinkPreferences.getKeywordDelimiter()); - } else { - return new CitationKeyBasedFileFinder(autoLinkPreferences.isOnlyFindByExactCiteKey()); + switch (autoLinkPreferences.getCitationKeyDependency()) { + default: + case START: + return new CitationKeyBasedFileFinder(false); + case EXACT: + return new CitationKeyBasedFileFinder(true); + case REGEX: + return new RegExpBasedFileFinder(autoLinkPreferences.getRegularExpression(), autoLinkPreferences.getKeywordDelimiter()); } } } diff --git a/src/main/java/org/jabref/preferences/JabRefPreferences.java b/src/main/java/org/jabref/preferences/JabRefPreferences.java index bef713e6e90..f5f3b3f0bf6 100644 --- a/src/main/java/org/jabref/preferences/JabRefPreferences.java +++ b/src/main/java/org/jabref/preferences/JabRefPreferences.java @@ -1173,6 +1173,12 @@ public boolean isKeywordSyncEnabled() { && getBoolean(JabRefPreferences.AUTOSYNCSPECIALFIELDSTOKEYWORDS); } + private FileLinkPreferences getFileLinkPreferences() { + return new FileLinkPreferences( + get(MAIN_FILE_DIRECTORY), // REALLY HERE? + fileDirForDatabase); + } + @Override public LayoutFormatterPreferences getLayoutFormatterPreferences(JournalAbbreviationRepository repository) { return new LayoutFormatterPreferences( @@ -1419,15 +1425,6 @@ public void storeJournalAbbreviationPreferences(JournalAbbreviationPreferences a putStringList(JabRefPreferences.EXTERNAL_JOURNAL_LISTS, abbreviationsPreferences.getExternalJournalLists()); } - @Override - public AutoLinkPreferences getAutoLinkPreferences() { - return new AutoLinkPreferences( - getBoolean(JabRefPreferences.AUTOLINK_USE_REG_EXP_SEARCH_KEY), - get(JabRefPreferences.AUTOLINK_REG_EXP_SEARCH_EXPRESSION_KEY), - getBoolean(JabRefPreferences.AUTOLINK_EXACT_KEY_ONLY), - getKeywordDelimiter()); - } - public void storeSidePanePreferredPositions(Map preferredPositions) { // Split the map into a pair of parallel String lists suitable for storage List names = preferredPositions.keySet().stream() @@ -2285,12 +2282,6 @@ public void storeFileHistory(FileHistory history) { } } - private FileLinkPreferences getFileLinkPreferences() { - return new FileLinkPreferences( - get(MAIN_FILE_DIRECTORY), - fileDirForDatabase); - } - @Override public Path getWorkingDir() { return Path.of(get(WORKING_DIRECTORY)); @@ -2321,6 +2312,49 @@ public void storeFilePreferences(FilePreferences filePreferences) { putBoolean(JabRefPreferences.DOWNLOAD_LINKED_FILES, filePreferences.shouldDownloadLinkedFiles()); } + @Override + public AutoLinkPreferences getAutoLinkPreferences() { + + AutoLinkPreferences.CitationKeyDependency citationKeyDependency = + AutoLinkPreferences.CitationKeyDependency.START; // default + if (getBoolean(AUTOLINK_EXACT_KEY_ONLY)) { + citationKeyDependency = AutoLinkPreferences.CitationKeyDependency.EXACT; + } else if (getBoolean(AUTOLINK_USE_REG_EXP_SEARCH_KEY)) { + citationKeyDependency = AutoLinkPreferences.CitationKeyDependency.REGEX; + } + + return new AutoLinkPreferences( + citationKeyDependency, + get(AUTOLINK_REG_EXP_SEARCH_EXPRESSION_KEY), + getBoolean(RUN_AUTOMATIC_FILE_SEARCH), + getBoolean(ALLOW_FILE_AUTO_OPEN_BROWSE), + getKeywordDelimiter()); + } + + @Override + public void storeAutoLinkPreferences(AutoLinkPreferences autoLinkPreferences) { + // Should be an enum + // Starts bibtex only omitted, as it is not being saved + switch (autoLinkPreferences.getCitationKeyDependency()) { + default: + case START: + putBoolean(AUTOLINK_EXACT_KEY_ONLY, false); + putBoolean(AUTOLINK_USE_REG_EXP_SEARCH_KEY, false); + break; + case EXACT: + putBoolean(AUTOLINK_EXACT_KEY_ONLY, true); + putBoolean(AUTOLINK_USE_REG_EXP_SEARCH_KEY, false); + break; + case REGEX: + putBoolean(AUTOLINK_EXACT_KEY_ONLY, false); + putBoolean(AUTOLINK_USE_REG_EXP_SEARCH_KEY, true); + break; + } + put(JabRefPreferences.AUTOLINK_REG_EXP_SEARCH_EXPRESSION_KEY, autoLinkPreferences.getRegularExpression()); + putBoolean(RUN_AUTOMATIC_FILE_SEARCH, autoLinkPreferences.shouldSearchFilesOnOpen()); + putBoolean(ALLOW_FILE_AUTO_OPEN_BROWSE, autoLinkPreferences.shouldOpenBrowseOnCreate()); + } + //************************************************************************************************************* // ToDo: Misc preferences //************************************************************************************************************* diff --git a/src/main/java/org/jabref/preferences/PreferencesService.java b/src/main/java/org/jabref/preferences/PreferencesService.java index 24882c38d9c..187f3f0191b 100644 --- a/src/main/java/org/jabref/preferences/PreferencesService.java +++ b/src/main/java/org/jabref/preferences/PreferencesService.java @@ -71,8 +71,6 @@ public interface PreferencesService { XmpPreferences getXMPPreferences(); - AutoLinkPreferences getAutoLinkPreferences(); - Path getWorkingDir(); void setWorkingDir(Path dir); @@ -249,6 +247,10 @@ public interface PreferencesService { String getLastPreferencesExportPath(); + AutoLinkPreferences getAutoLinkPreferences(); + + void storeAutoLinkPreferences(AutoLinkPreferences autoLinkPreferences); + //************************************************************************************************************* // ToDo: Misc preferences //************************************************************************************************************* diff --git a/src/test/java/org/jabref/gui/externalfiles/AutoSetFileLinksUtilTest.java b/src/test/java/org/jabref/gui/externalfiles/AutoSetFileLinksUtilTest.java index a56080661ed..6b640dee8e7 100644 --- a/src/test/java/org/jabref/gui/externalfiles/AutoSetFileLinksUtilTest.java +++ b/src/test/java/org/jabref/gui/externalfiles/AutoSetFileLinksUtilTest.java @@ -26,7 +26,12 @@ public class AutoSetFileLinksUtilTest { private final FilePreferences fileDirPrefs = mock(FilePreferences.class); - private final AutoLinkPreferences autoLinkPrefs = new AutoLinkPreferences(false, "", true, ';'); + private final AutoLinkPreferences autoLinkPrefs = new AutoLinkPreferences( + AutoLinkPreferences.CitationKeyDependency.REGEX, + "", + false, + false, + ';'); private final BibDatabaseContext databaseContext = mock(BibDatabaseContext.class); private final ExternalFileTypes externalFileTypes = mock(ExternalFileTypes.class); private final BibEntry entry = new BibEntry(StandardEntryType.Article); From 4147133a8049a66141f2194623def131a70e03a0 Mon Sep 17 00:00:00 2001 From: Carl Christian Snethlage Date: Sat, 22 Aug 2020 20:44:51 +0200 Subject: [PATCH 04/15] Refactored FilePreferences to immutable class --- .../gui/importer/ImportEntriesViewModel.java | 19 +++++++++++++------ .../model/metadata/FilePreferences.java | 12 +++++++++--- 2 files changed, 22 insertions(+), 9 deletions(-) diff --git a/src/main/java/org/jabref/gui/importer/ImportEntriesViewModel.java b/src/main/java/org/jabref/gui/importer/ImportEntriesViewModel.java index 2c12cd4cda4..a41d4371d9b 100644 --- a/src/main/java/org/jabref/gui/importer/ImportEntriesViewModel.java +++ b/src/main/java/org/jabref/gui/importer/ImportEntriesViewModel.java @@ -61,7 +61,14 @@ public class ImportEntriesViewModel extends AbstractViewModel { * @param databaseContext the database to import into * @param task the task executed for parsing the selected files(s). */ - public ImportEntriesViewModel(BackgroundTask task, TaskExecutor taskExecutor, BibDatabaseContext databaseContext, DialogService dialogService, UndoManager undoManager, PreferencesService preferences, StateManager stateManager, FileUpdateMonitor fileUpdateMonitor) { + public ImportEntriesViewModel(BackgroundTask task, + TaskExecutor taskExecutor, + BibDatabaseContext databaseContext, + DialogService dialogService, + UndoManager undoManager, + PreferencesService preferences, + StateManager stateManager, + FileUpdateMonitor fileUpdateMonitor) { this.taskExecutor = taskExecutor; this.databaseContext = databaseContext; this.dialogService = dialogService; @@ -94,9 +101,9 @@ public ObservableList getEntries() { } public boolean hasDuplicate(BibEntry entry) { - return findInternalDuplicate(entry).isPresent() - || - new DuplicateCheck(Globals.entryTypesManager).containsDuplicate(databaseContext.getDatabase(), entry, databaseContext.getMode()).isPresent(); + return findInternalDuplicate(entry).isPresent() || + new DuplicateCheck(Globals.entryTypesManager) + .containsDuplicate(databaseContext.getDatabase(), entry, databaseContext.getMode()).isPresent(); } /** @@ -132,8 +139,8 @@ public void importEntries(List entriesToImport, boolean shouldDownload } // Remember the selection in the dialog - FilePreferences filePreferences = preferences.getFilePreferences(); - filePreferences.setShouldDownloadLinkedFiles(shouldDownloadFiles); + FilePreferences filePreferences = preferences.getFilePreferences() + .withShouldDownloadLinkedFiles(shouldDownloadFiles); preferences.storeFilePreferences(filePreferences); if (shouldDownloadFiles) { diff --git a/src/main/java/org/jabref/model/metadata/FilePreferences.java b/src/main/java/org/jabref/model/metadata/FilePreferences.java index 462fec70cdf..0d8d17f7e56 100644 --- a/src/main/java/org/jabref/model/metadata/FilePreferences.java +++ b/src/main/java/org/jabref/model/metadata/FilePreferences.java @@ -12,7 +12,7 @@ public class FilePreferences { private final boolean bibLocationAsPrimary; private final String fileNamePattern; private final String fileDirPattern; - private boolean shouldDownloadLinkedFiles; + private final boolean shouldDownloadLinkedFiles; public FilePreferences(String user, String mainFileDirectory, @@ -56,7 +56,13 @@ public boolean shouldDownloadLinkedFiles() { return shouldDownloadLinkedFiles; } - public void setShouldDownloadLinkedFiles(boolean shouldDownloadLinkedFiles) { - this.shouldDownloadLinkedFiles = shouldDownloadLinkedFiles; + public FilePreferences withShouldDownloadLinkedFiles(boolean newShouldDownloadLinkedFiles) { + return new FilePreferences( + this.user, + this.mainFileDirectory, + this.bibLocationAsPrimary, + this.fileNamePattern, + this.fileDirPattern, + newShouldDownloadLinkedFiles); } } From fd159fdbba7720351bcf8519a5ca6c55dd52414c Mon Sep 17 00:00:00 2001 From: Carl Christian Snethlage Date: Mon, 24 Aug 2020 13:09:22 +0200 Subject: [PATCH 05/15] Refactored two preferences from AutoLinkPreferences to FilePreferences --- .../gui/preferences/FileTabViewModel.java | 10 +++++---- .../logic/util/io/AutoLinkPreferences.java | 16 ++------------ .../model/metadata/FilePreferences.java | 20 +++++++++++++++-- .../jabref/preferences/JabRefPreferences.java | 22 +++++++++---------- .../AutoSetFileLinksUtilTest.java | 8 ++----- 5 files changed, 38 insertions(+), 38 deletions(-) diff --git a/src/main/java/org/jabref/gui/preferences/FileTabViewModel.java b/src/main/java/org/jabref/gui/preferences/FileTabViewModel.java index b139a1d8fc2..f28d84ef563 100644 --- a/src/main/java/org/jabref/gui/preferences/FileTabViewModel.java +++ b/src/main/java/org/jabref/gui/preferences/FileTabViewModel.java @@ -104,8 +104,9 @@ public void setValues() { break; } autolinkRegexKeyProperty.setValue(initialAutoLinkPreferences.getRegularExpression()); - searchFilesOnOpenProperty.setValue(initialAutoLinkPreferences.shouldSearchFilesOnOpen()); - openBrowseOnCreateProperty.setValue(initialAutoLinkPreferences.shouldOpenBrowseOnCreate()); + + searchFilesOnOpenProperty.setValue(preferences.getBoolean(JabRefPreferences.RUN_AUTOMATIC_FILE_SEARCH)); + openBrowseOnCreateProperty.setValue(preferences.getBoolean(JabRefPreferences.ALLOW_FILE_AUTO_OPEN_BROWSE)); autosaveLocalLibraries.setValue(preferences.getBoolean(JabRefPreferences.LOCAL_AUTO_SAVE)); } @@ -139,10 +140,11 @@ public void storeSettings() { preferences.storeAutoLinkPreferences(new AutoLinkPreferences( citationKeyDependency, autolinkRegexKeyProperty.getValue(), - searchFilesOnOpenProperty.getValue(), - openBrowseOnCreateProperty.getValue(), preferences.getKeywordDelimiter())); + preferences.putBoolean(JabRefPreferences.RUN_AUTOMATIC_FILE_SEARCH, searchFilesOnOpenProperty.getValue()); + preferences.putBoolean(JabRefPreferences.ALLOW_FILE_AUTO_OPEN_BROWSE, openBrowseOnCreateProperty.getValue()); + // Autosave preferences.putBoolean(JabRefPreferences.LOCAL_AUTO_SAVE, autosaveLocalLibraries.getValue()); } diff --git a/src/main/java/org/jabref/logic/util/io/AutoLinkPreferences.java b/src/main/java/org/jabref/logic/util/io/AutoLinkPreferences.java index 5ee186812b2..48d938d843f 100644 --- a/src/main/java/org/jabref/logic/util/io/AutoLinkPreferences.java +++ b/src/main/java/org/jabref/logic/util/io/AutoLinkPreferences.java @@ -10,19 +10,15 @@ public enum CitationKeyDependency { private final CitationKeyDependency citationKeyDependency; private final String regularExpression; - private final boolean shouldSearchFilesOnOpen; - private final boolean shouldOpenBrowseOnCreate; + private final Character keywordDelimiter; public AutoLinkPreferences(CitationKeyDependency citationKeyDependency, String regularExpression, - boolean shouldSearchFilesOnOpen, - boolean shouldOpenBrowseOnCreate, + Character keywordDelimiter) { this.citationKeyDependency = citationKeyDependency; this.regularExpression = regularExpression; - this.shouldSearchFilesOnOpen = shouldSearchFilesOnOpen; - this.shouldOpenBrowseOnCreate = shouldOpenBrowseOnCreate; this.keywordDelimiter = keywordDelimiter; } @@ -34,14 +30,6 @@ public String getRegularExpression() { return regularExpression; } - public boolean shouldSearchFilesOnOpen() { - return shouldSearchFilesOnOpen; - } - - public boolean shouldOpenBrowseOnCreate() { - return shouldOpenBrowseOnCreate; - } - public Character getKeywordDelimiter() { return keywordDelimiter; } diff --git a/src/main/java/org/jabref/model/metadata/FilePreferences.java b/src/main/java/org/jabref/model/metadata/FilePreferences.java index 0d8d17f7e56..8c645b08aad 100644 --- a/src/main/java/org/jabref/model/metadata/FilePreferences.java +++ b/src/main/java/org/jabref/model/metadata/FilePreferences.java @@ -13,19 +13,25 @@ public class FilePreferences { private final String fileNamePattern; private final String fileDirPattern; private final boolean shouldDownloadLinkedFiles; + private final boolean shouldSearchFilesOnOpen; + private final boolean shouldOpenBrowseOnCreate; public FilePreferences(String user, String mainFileDirectory, boolean bibLocationAsPrimary, String fileNamePattern, String fileDirPattern, - boolean shouldDownloadLinkedFiles) { + boolean shouldDownloadLinkedFiles, + boolean shouldSearchFilesOnOpen, + boolean shouldOpenBrowseOnCreate) { this.user = user; this.mainFileDirectory = mainFileDirectory; this.bibLocationAsPrimary = bibLocationAsPrimary; this.fileNamePattern = fileNamePattern; this.fileDirPattern = fileDirPattern; this.shouldDownloadLinkedFiles = shouldDownloadLinkedFiles; + this.shouldSearchFilesOnOpen = shouldSearchFilesOnOpen; + this.shouldOpenBrowseOnCreate = shouldOpenBrowseOnCreate; } public String getUser() { @@ -63,6 +69,16 @@ public FilePreferences withShouldDownloadLinkedFiles(boolean newShouldDownloadLi this.bibLocationAsPrimary, this.fileNamePattern, this.fileDirPattern, - newShouldDownloadLinkedFiles); + newShouldDownloadLinkedFiles, + this.shouldSearchFilesOnOpen, + this.shouldOpenBrowseOnCreate); + } + + public boolean shouldSearchFilesOnOpen() { + return shouldSearchFilesOnOpen; + } + + public boolean shouldOpenBrowseOnCreate() { + return shouldOpenBrowseOnCreate; } } diff --git a/src/main/java/org/jabref/preferences/JabRefPreferences.java b/src/main/java/org/jabref/preferences/JabRefPreferences.java index f5f3b3f0bf6..23264f26d25 100644 --- a/src/main/java/org/jabref/preferences/JabRefPreferences.java +++ b/src/main/java/org/jabref/preferences/JabRefPreferences.java @@ -2300,21 +2300,24 @@ public FilePreferences getFilePreferences() { getBoolean(BIB_LOC_AS_PRIMARY_DIR), get(IMPORT_FILENAMEPATTERN), get(IMPORT_FILEDIRPATTERN), - getBoolean(DOWNLOAD_LINKED_FILES)); + getBoolean(DOWNLOAD_LINKED_FILES), + getBoolean(RUN_AUTOMATIC_FILE_SEARCH), + getBoolean(ALLOW_FILE_AUTO_OPEN_BROWSE)); } @Override public void storeFilePreferences(FilePreferences filePreferences) { - put(JabRefPreferences.MAIN_FILE_DIRECTORY, filePreferences.getFileDirectory().map(Path::toString).orElse("")); - putBoolean(JabRefPreferences.BIB_LOC_AS_PRIMARY_DIR, filePreferences.isBibLocationAsPrimary()); - put(JabRefPreferences.IMPORT_FILENAMEPATTERN, filePreferences.getFileNamePattern()); - put(JabRefPreferences.IMPORT_FILEDIRPATTERN, filePreferences.getFileDirPattern()); - putBoolean(JabRefPreferences.DOWNLOAD_LINKED_FILES, filePreferences.shouldDownloadLinkedFiles()); + put(MAIN_FILE_DIRECTORY, filePreferences.getFileDirectory().map(Path::toString).orElse("")); + putBoolean(BIB_LOC_AS_PRIMARY_DIR, filePreferences.isBibLocationAsPrimary()); + put(IMPORT_FILENAMEPATTERN, filePreferences.getFileNamePattern()); + put(IMPORT_FILEDIRPATTERN, filePreferences.getFileDirPattern()); + putBoolean(DOWNLOAD_LINKED_FILES, filePreferences.shouldDownloadLinkedFiles()); + putBoolean(RUN_AUTOMATIC_FILE_SEARCH, filePreferences.shouldSearchFilesOnOpen()); + putBoolean(ALLOW_FILE_AUTO_OPEN_BROWSE, filePreferences.shouldOpenBrowseOnCreate()); } @Override public AutoLinkPreferences getAutoLinkPreferences() { - AutoLinkPreferences.CitationKeyDependency citationKeyDependency = AutoLinkPreferences.CitationKeyDependency.START; // default if (getBoolean(AUTOLINK_EXACT_KEY_ONLY)) { @@ -2326,14 +2329,11 @@ public AutoLinkPreferences getAutoLinkPreferences() { return new AutoLinkPreferences( citationKeyDependency, get(AUTOLINK_REG_EXP_SEARCH_EXPRESSION_KEY), - getBoolean(RUN_AUTOMATIC_FILE_SEARCH), - getBoolean(ALLOW_FILE_AUTO_OPEN_BROWSE), getKeywordDelimiter()); } @Override public void storeAutoLinkPreferences(AutoLinkPreferences autoLinkPreferences) { - // Should be an enum // Starts bibtex only omitted, as it is not being saved switch (autoLinkPreferences.getCitationKeyDependency()) { default: @@ -2351,8 +2351,6 @@ public void storeAutoLinkPreferences(AutoLinkPreferences autoLinkPreferences) { break; } put(JabRefPreferences.AUTOLINK_REG_EXP_SEARCH_EXPRESSION_KEY, autoLinkPreferences.getRegularExpression()); - putBoolean(RUN_AUTOMATIC_FILE_SEARCH, autoLinkPreferences.shouldSearchFilesOnOpen()); - putBoolean(ALLOW_FILE_AUTO_OPEN_BROWSE, autoLinkPreferences.shouldOpenBrowseOnCreate()); } //************************************************************************************************************* diff --git a/src/test/java/org/jabref/gui/externalfiles/AutoSetFileLinksUtilTest.java b/src/test/java/org/jabref/gui/externalfiles/AutoSetFileLinksUtilTest.java index 6b640dee8e7..2a331035c64 100644 --- a/src/test/java/org/jabref/gui/externalfiles/AutoSetFileLinksUtilTest.java +++ b/src/test/java/org/jabref/gui/externalfiles/AutoSetFileLinksUtilTest.java @@ -26,12 +26,8 @@ public class AutoSetFileLinksUtilTest { private final FilePreferences fileDirPrefs = mock(FilePreferences.class); - private final AutoLinkPreferences autoLinkPrefs = new AutoLinkPreferences( - AutoLinkPreferences.CitationKeyDependency.REGEX, - "", - false, - false, - ';'); + private final AutoLinkPreferences autoLinkPrefs = + new AutoLinkPreferences(AutoLinkPreferences.CitationKeyDependency.REGEX, "", ';'); private final BibDatabaseContext databaseContext = mock(BibDatabaseContext.class); private final ExternalFileTypes externalFileTypes = mock(ExternalFileTypes.class); private final BibEntry entry = new BibEntry(StandardEntryType.Article); From c90d6216f2e064f71d3ffa9a8c48f679624396db Mon Sep 17 00:00:00 2001 From: Carl Christian Snethlage Date: Mon, 24 Aug 2020 13:42:46 +0200 Subject: [PATCH 06/15] Moved import linked file patterns preferences to FilePreferencesTab --- .../org/jabref/gui/preferences/FileTab.fxml | 32 ++++++++++-- .../jabref/gui/preferences/FileTabView.java | 16 ++++-- .../gui/preferences/FileTabViewModel.java | 49 +++++++++++++------ .../org/jabref/gui/preferences/ImportTab.fxml | 23 --------- .../jabref/gui/preferences/ImportTabView.java | 11 ----- .../gui/preferences/ImportTabViewModel.java | 30 +----------- .../model/metadata/FilePreferences.java | 2 + .../jabref/preferences/JabRefPreferences.java | 3 +- 8 files changed, 77 insertions(+), 89 deletions(-) diff --git a/src/main/java/org/jabref/gui/preferences/FileTab.fxml b/src/main/java/org/jabref/gui/preferences/FileTab.fxml index c3c5e78ee23..62a3bcddb58 100644 --- a/src/main/java/org/jabref/gui/preferences/FileTab.fxml +++ b/src/main/java/org/jabref/gui/preferences/FileTab.fxml @@ -10,6 +10,9 @@ + + + @@ -37,6 +40,12 @@ +