Skip to content

Commit

Permalink
Observable Preferences W (CustomExportFormats) (#10001)
Browse files Browse the repository at this point in the history
* Small rewording

* Moved customExportFormats to new prefs pattern

* Fixed tests
  • Loading branch information
calixtus authored Jun 11, 2023
1 parent 27a22af commit b2b4aba
Show file tree
Hide file tree
Showing 13 changed files with 53 additions and 42 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -30,7 +30,7 @@ public CustomExporterTabViewModel(PreferencesService preferences, DialogService

@Override
public void setValues() {
List<TemplateExporter> exportersLogic = preferences.getCustomExportFormats();
List<TemplateExporter> exportersLogic = preferences.getExportPreferences().getCustomExporters();
for (TemplateExporter exporter : exportersLogic) {
exporters.add(new ExporterViewModel(exporter));
}
Expand All @@ -41,7 +41,7 @@ public void storeSettings() {
List<TemplateExporter> exportersLogic = exporters.stream()
.map(ExporterViewModel::getLogic)
.collect(Collectors.toList());
preferences.storeCustomExportFormats(exportersLogic);
preferences.getExportPreferences().setCustomExporters(exportersLogic);
}

public void addExporter() {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -42,18 +42,17 @@ public CustomImporterTabViewModel(PreferencesService preferences, DialogService

@Override
public void setValues() {
Set<CustomImporter> importersLogic = preferences.getImporterPreferences().getCustomImportList();
Set<CustomImporter> importersLogic = preferences.getImporterPreferences().getCustomImporters();
for (CustomImporter importer : importersLogic) {
importers.add(new ImporterViewModel(importer));
}
}

@Override
public void storeSettings() {
preferences.getImporterPreferences().getCustomImportList().clear();
preferences.getImporterPreferences().getCustomImportList().addAll(importers.stream()
.map(ImporterViewModel::getLogic)
.collect(Collectors.toSet()));
preferences.getImporterPreferences().setCustomImporters(importers.stream()
.map(ImporterViewModel::getLogic)
.collect(Collectors.toSet()));
}

/**
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -26,7 +26,7 @@ private ExporterFactory(List<Exporter> exporters) {
public static ExporterFactory create(PreferencesService preferencesService,
BibEntryTypesManager entryTypesManager) {

List<TemplateExporter> customFormats = preferencesService.getCustomExportFormats();
List<TemplateExporter> customFormats = preferencesService.getExportPreferences().getCustomExporters();
LayoutFormatterPreferences layoutPreferences = preferencesService.getLayoutFormatterPreferences();
SaveConfiguration saveConfiguration = preferencesService.getExportConfiguration();
XmpPreferences xmpPreferences = preferencesService.getXmpPreferences();
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -88,7 +88,7 @@ public void reset() {
formats.add(new CitaviXmlImporter());

// Get custom import formats
formats.addAll(importerPreferences.getCustomImportList());
formats.addAll(importerPreferences.getCustomImporters());
}

/**
Expand Down
15 changes: 10 additions & 5 deletions src/main/java/org/jabref/logic/importer/ImporterPreferences.java
Original file line number Diff line number Diff line change
Expand Up @@ -19,17 +19,17 @@ public class ImporterPreferences {
private final BooleanProperty warnAboutDuplicatesOnImport;
private final ObjectProperty<Path> importWorkingDirectory;
private final ObservableSet<FetcherApiKey> apiKeys;
private final ObservableSet<CustomImporter> customImportList;
private final ObservableSet<CustomImporter> customImporters;

public ImporterPreferences(boolean generateNewKeyOnImport,
Path importWorkingDirectory,
boolean warnAboutDuplicatesOnImport,
Set<CustomImporter> customImportList,
Set<CustomImporter> customImporters,
Set<FetcherApiKey> apiKeys) {
this.generateNewKeyOnImport = new SimpleBooleanProperty(generateNewKeyOnImport);
this.importWorkingDirectory = new SimpleObjectProperty<>(importWorkingDirectory);
this.warnAboutDuplicatesOnImport = new SimpleBooleanProperty(warnAboutDuplicatesOnImport);
this.customImportList = FXCollections.observableSet(customImportList);
this.customImporters = FXCollections.observableSet(customImporters);
this.apiKeys = FXCollections.observableSet(apiKeys);
}

Expand Down Expand Up @@ -73,7 +73,12 @@ public ObservableSet<FetcherApiKey> getApiKeys() {
return apiKeys;
}

public ObservableSet<CustomImporter> getCustomImportList() {
return customImportList;
public ObservableSet<CustomImporter> getCustomImporters() {
return customImporters;
}

public void setCustomImporters(Set<CustomImporter> importers) {
customImporters.clear();
customImporters.addAll(importers);
}
}
18 changes: 17 additions & 1 deletion src/main/java/org/jabref/preferences/ExportPreferences.java
Original file line number Diff line number Diff line change
@@ -1,27 +1,34 @@
package org.jabref.preferences;

import java.nio.file.Path;
import java.util.List;

import javafx.beans.property.ObjectProperty;
import javafx.beans.property.SimpleObjectProperty;
import javafx.beans.property.SimpleStringProperty;
import javafx.beans.property.StringProperty;
import javafx.collections.FXCollections;
import javafx.collections.ObservableList;

import org.jabref.logic.exporter.TemplateExporter;
import org.jabref.model.metadata.SaveOrder;

public class ExportPreferences {

private final StringProperty lastExportExtension;
private final ObjectProperty<Path> exportWorkingDirectory;
private final ObjectProperty<SaveOrder> exportSaveOrder;
private final ObservableList<TemplateExporter> customExporters;

public ExportPreferences(String lastExportExtension,
Path exportWorkingDirectory,
SaveOrder exportSaveOrder) {
SaveOrder exportSaveOrder,
List<TemplateExporter> customExporters) {

this.lastExportExtension = new SimpleStringProperty(lastExportExtension);
this.exportWorkingDirectory = new SimpleObjectProperty<>(exportWorkingDirectory);
this.exportSaveOrder = new SimpleObjectProperty<>(exportSaveOrder);
this.customExporters = FXCollections.observableList(customExporters);
}

public String getLastExportExtension() {
Expand Down Expand Up @@ -59,4 +66,13 @@ public ObjectProperty<SaveOrder> exportSaveOrderProperty() {
public void setExportSaveOrder(SaveOrder exportSaveOrder) {
this.exportSaveOrder.set(exportSaveOrder);
}

public ObservableList<TemplateExporter> getCustomExporters() {
return customExporters;
}

public void setCustomExporters(List<TemplateExporter> exporters) {
customExporters.clear();
customExporters.addAll(exporters);
}
}
21 changes: 9 additions & 12 deletions src/main/java/org/jabref/preferences/JabRefPreferences.java
Original file line number Diff line number Diff line change
Expand Up @@ -2181,11 +2181,13 @@ public ExportPreferences getExportPreferences() {
exportPreferences = new ExportPreferences(
get(LAST_USED_EXPORT),
Path.of(get(EXPORT_WORKING_DIRECTORY)),
getExportSaveOrder());
getExportSaveOrder(),
getCustomExportFormats());

EasyBind.listen(exportPreferences.lastExportExtensionProperty(), (obs, oldValue, newValue) -> put(LAST_USED_EXPORT, newValue));
EasyBind.listen(exportPreferences.exportWorkingDirectoryProperty(), (obs, oldValue, newValue) -> put(EXPORT_WORKING_DIRECTORY, newValue.toString()));
EasyBind.listen(exportPreferences.exportSaveOrderProperty(), (obs, oldValue, newValue) -> storeExportSaveOrder(newValue));
exportPreferences.getCustomExporters().addListener((InvalidationListener) c -> storeCustomExportFormats(exportPreferences.getCustomExporters()));

return exportPreferences;
}
Expand Down Expand Up @@ -2215,7 +2217,7 @@ private void storeExportSaveOrder(SaveOrder saveOrder) {
putBoolean(EXPORT_TERTIARY_SORT_DESCENDING, saveOrder.getSortCriteria().get(2).descending);
}

private SaveOrder loadTableSaveOrder() {
private SaveOrder getTableSaveOrder() {
List<MainTableColumnModel> sortOrder = mainTableColumnPreferences.getColumnSortOrder();
List<SaveOrder.SortCriterion> criteria = new ArrayList<>();

Expand All @@ -2231,11 +2233,8 @@ private SaveOrder loadTableSaveOrder() {

@Override
public SaveConfiguration getExportConfiguration() {
SaveOrder.OrderType orderType = SaveOrder.OrderType.fromBooleans(
getBoolean(EXPORT_IN_SPECIFIED_ORDER),
getBoolean(EXPORT_IN_ORIGINAL_ORDER));
SaveOrder saveOrder = switch (orderType) {
case TABLE -> this.loadTableSaveOrder();
SaveOrder saveOrder = switch (getExportSaveOrder().getOrderType()) {
case TABLE -> this.getTableSaveOrder();
case SPECIFIED -> this.getExportSaveOrder();
case ORIGINAL -> SaveOrder.getDefaultSaveOrder();
};
Expand All @@ -2246,8 +2245,7 @@ public SaveConfiguration getExportConfiguration() {
.withReformatOnSave(getLibraryPreferences().shouldAlwaysReformatOnSave());
}

@Override
public List<TemplateExporter> getCustomExportFormats() {
private List<TemplateExporter> getCustomExportFormats() {
LayoutFormatterPreferences layoutPreferences = getLayoutFormatterPreferences();
SaveConfiguration saveConfiguration = getExportConfiguration();
List<TemplateExporter> formats = new ArrayList<>();
Expand All @@ -2266,8 +2264,7 @@ public List<TemplateExporter> getCustomExportFormats() {
return formats;
}

@Override
public void storeCustomExportFormats(List<TemplateExporter> exporters) {
private void storeCustomExportFormats(List<TemplateExporter> exporters) {
if (exporters.isEmpty()) {
purgeSeries(CUSTOM_EXPORT_FORMAT, 0);
} else {
Expand Down Expand Up @@ -2756,7 +2753,7 @@ public ImporterPreferences getImporterPreferences() {
EasyBind.listen(importerPreferences.importWorkingDirectoryProperty(), (obs, oldValue, newValue) -> put(IMPORT_WORKING_DIRECTORY, newValue.toString()));
EasyBind.listen(importerPreferences.warnAboutDuplicatesOnImportProperty(), (obs, oldValue, newValue) -> putBoolean(WARN_ABOUT_DUPLICATES_IN_INSPECTION, newValue));
importerPreferences.getApiKeys().addListener((InvalidationListener) c -> storeFetcherKeys(importerPreferences.getApiKeys()));
importerPreferences.getCustomImportList().addListener((InvalidationListener) c -> storeCustomImportFormats(importerPreferences.getCustomImportList()));
importerPreferences.getCustomImporters().addListener((InvalidationListener) c -> storeCustomImportFormats(importerPreferences.getCustomImporters()));

return importerPreferences;
}
Expand Down
5 changes: 0 additions & 5 deletions src/main/java/org/jabref/preferences/PreferencesService.java
Original file line number Diff line number Diff line change
Expand Up @@ -18,7 +18,6 @@
import org.jabref.logic.bibtex.FieldPreferences;
import org.jabref.logic.citationkeypattern.CitationKeyPatternPreferences;
import org.jabref.logic.exporter.SaveConfiguration;
import org.jabref.logic.exporter.TemplateExporter;
import org.jabref.logic.importer.ImportFormatPreferences;
import org.jabref.logic.importer.ImporterPreferences;
import org.jabref.logic.importer.fetcher.GrobidPreferences;
Expand Down Expand Up @@ -128,10 +127,6 @@ public interface PreferencesService {

ExportPreferences getExportPreferences();

List<TemplateExporter> getCustomExportFormats();

void storeCustomExportFormats(List<TemplateExporter> exporters);

ImporterPreferences getImporterPreferences();

GrobidPreferences getGrobidPreferences();
Expand Down
2 changes: 1 addition & 1 deletion src/test/java/org/jabref/cli/ArgumentProcessorTest.java
Original file line number Diff line number Diff line change
Expand Up @@ -39,7 +39,7 @@ class ArgumentProcessorTest {

@BeforeEach()
void setup() {
when(importerPreferences.getCustomImportList()).thenReturn(FXCollections.emptyObservableSet());
when(importerPreferences.getCustomImporters()).thenReturn(FXCollections.emptyObservableSet());
when(preferencesService.getSearchPreferences()).thenReturn(
new SearchPreferences(null, EnumSet.noneOf(SearchRules.SearchFlags.class), false)
);
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -23,7 +23,6 @@
import org.jabref.model.entry.field.StandardField;
import org.jabref.model.entry.types.StandardEntryType;
import org.jabref.model.metadata.MetaData;
import org.jabref.preferences.ExportPreferences;
import org.jabref.preferences.FilePreferences;
import org.jabref.preferences.LibraryPreferences;
import org.jabref.preferences.PreferencesService;
Expand All @@ -47,8 +46,7 @@ public class ExportToClipboardActionTest {
private final DialogService dialogService = spy(DialogService.class);
private final ClipBoardManager clipBoardManager = mock(ClipBoardManager.class);
private final BibDatabaseContext databaseContext = mock(BibDatabaseContext.class);
private final PreferencesService preferences = mock(PreferencesService.class);
private final ExportPreferences importExportPrefs = mock(ExportPreferences.class);
private final PreferencesService preferences = mock(PreferencesService.class, Answers.RETURNS_DEEP_STUBS);
private final StateManager stateManager = mock(StateManager.class);

private TaskExecutor taskExecutor;
Expand All @@ -67,7 +65,7 @@ public void setUp() {
when(stateManager.getSelectedEntries()).thenReturn(selectedEntries);

taskExecutor = new CurrentThreadTaskExecutor();
when(preferences.getCustomExportFormats()).thenReturn(List.of());
when(preferences.getExportPreferences().getCustomExporters()).thenReturn(FXCollections.observableList(List.of()));
when(preferences.getExportConfiguration()).thenReturn(mock(SaveConfiguration.class));
when(preferences.getXmpPreferences()).thenReturn(mock(XmpPreferences.class));
exportToClipboardAction = new ExportToClipboardAction(dialogService, stateManager, clipBoardManager, taskExecutor, preferences);
Expand All @@ -89,12 +87,11 @@ public void export(BibDatabaseContext databaseContext, Path file, List<BibEntry>
}
};

when(importExportPrefs.getLastExportExtension()).thenReturn("HTML");
when(preferences.getExportPreferences()).thenReturn(importExportPrefs);
LibraryPreferences libraryPreferences = mock(LibraryPreferences.class, Answers.RETURNS_DEEP_STUBS);
FilePreferences filePreferences = mock(FilePreferences.class, Answers.RETURNS_DEEP_STUBS);
when(preferences.getFilePreferences()).thenReturn(filePreferences);
when(preferences.getLibraryPreferences()).thenReturn(libraryPreferences);
when(preferences.getExportPreferences().getLastExportExtension()).thenReturn("HTML");
when(stateManager.getSelectedEntries()).thenReturn(selectedEntries);
when(stateManager.getActiveDatabase()).thenReturn(Optional.ofNullable(databaseContext));
// noinspection ConstantConditions since databaseContext is mocked
Expand Down
4 changes: 3 additions & 1 deletion src/test/java/org/jabref/logic/exporter/ExporterTest.java
Original file line number Diff line number Diff line change
Expand Up @@ -8,6 +8,8 @@
import java.util.List;
import java.util.stream.Stream;

import javafx.collections.FXCollections;

import org.jabref.model.database.BibDatabaseContext;
import org.jabref.model.entry.BibEntry;
import org.jabref.model.entry.BibEntryTypesManager;
Expand Down Expand Up @@ -39,7 +41,7 @@ public void setUp() {
private static Stream<Object[]> exportFormats() {
PreferencesService preferencesService = mock(PreferencesService.class, Answers.RETURNS_DEEP_STUBS);
when(preferencesService.getExportPreferences().getExportSaveOrder()).thenReturn(SaveOrder.getDefaultSaveOrder());
when(preferencesService.getCustomExportFormats()).thenReturn(new ArrayList<>());
when(preferencesService.getExportPreferences().getCustomExporters()).thenReturn(FXCollections.emptyObservableList());

ExporterFactory exporterFactory = ExporterFactory.create(
preferencesService,
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -26,7 +26,7 @@ class ImportFormatReaderIntegrationTest {
@BeforeEach
void setUp() {
ImporterPreferences importerPreferences = mock(ImporterPreferences.class, Answers.RETURNS_DEEP_STUBS);
when(importerPreferences.getCustomImportList()).thenReturn(FXCollections.emptyObservableSet());
when(importerPreferences.getCustomImporters()).thenReturn(FXCollections.emptyObservableSet());
reader = new ImportFormatReader(
importerPreferences,
mock(ImportFormatPreferences.class, Answers.RETURNS_DEEP_STUBS),
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -23,7 +23,7 @@ class ImportFormatReaderParameterlessTest {
@BeforeEach
void setUp() {
ImporterPreferences importerPreferences = mock(ImporterPreferences.class, Answers.RETURNS_DEEP_STUBS);
when(importerPreferences.getCustomImportList()).thenReturn(FXCollections.emptyObservableSet());
when(importerPreferences.getCustomImporters()).thenReturn(FXCollections.emptyObservableSet());
ImportFormatPreferences importFormatPreferences = mock(ImportFormatPreferences.class, Answers.RETURNS_DEEP_STUBS);
reader = new ImportFormatReader(importerPreferences, importFormatPreferences, fileMonitor);
}
Expand Down

0 comments on commit b2b4aba

Please sign in to comment.