diff --git a/src/main/java/org/jabref/gui/exporter/ExportCustomizationDialog.java b/src/main/java/org/jabref/gui/exporter/ExportCustomizationDialog.java index 98f331f4bd6..148866ffc8a 100644 --- a/src/main/java/org/jabref/gui/exporter/ExportCustomizationDialog.java +++ b/src/main/java/org/jabref/gui/exporter/ExportCustomizationDialog.java @@ -4,7 +4,6 @@ import java.awt.Dimension; import java.awt.event.ActionEvent; import java.util.ArrayList; -import java.util.Arrays; import java.util.List; import javax.swing.AbstractAction; @@ -74,8 +73,7 @@ public ExportCustomizationDialog(final JabRefFrame frame) { CustomExportDialog ecd = new CustomExportDialog(frame); ecd.setVisible(true); if (ecd.okPressed()) { - List newFormat = Arrays.asList(ecd.name(), ecd.layoutFile(), ecd.extension()); - Globals.prefs.customExports.addFormat(newFormat, + Globals.prefs.customExports.addFormat(ecd.name(), ecd.layoutFile(), ecd.extension(), Globals.prefs.getLayoutFormatterPreferences(Globals.journalAbbreviationLoader), SavePreferences.loadForExportFromPreferences(Globals.prefs)); Globals.prefs.customExports.store(Globals.prefs); diff --git a/src/main/java/org/jabref/logic/util/FileType.java b/src/main/java/org/jabref/logic/util/FileType.java index 983ae509004..e75d164acbc 100644 --- a/src/main/java/org/jabref/logic/util/FileType.java +++ b/src/main/java/org/jabref/logic/util/FileType.java @@ -1,7 +1,9 @@ package org.jabref.logic.util; import java.util.Arrays; +import java.util.EnumSet; import java.util.List; +import java.util.Optional; import java.util.StringJoiner; import java.util.stream.Collectors; @@ -51,6 +53,7 @@ public enum FileType { CSV(Localization.lang("%0 file", "CSV"), "csv"), DEFAULT(Localization.lang("%0 file", "DEFAULT"), "default"); + private static final EnumSet ALL_FILE_TYPES = EnumSet.allOf(FileType.class); private final String[] extensions; private final String description; @@ -78,4 +81,9 @@ public String getFirstExtensionWithDot() { public List getExtensionsWithDot() { return getExtensions().stream().map(extension -> "." + extension).collect(Collectors.toList()); } + + public static FileType parse(String fileExtension) { + Optional fileType = ALL_FILE_TYPES.stream().filter(f -> f.getExtensionsWithDot().stream().anyMatch(fileExtension::equals)).findFirst(); + return fileType.orElse(FileType.DEFAULT); + } } diff --git a/src/main/java/org/jabref/preferences/CustomExportList.java b/src/main/java/org/jabref/preferences/CustomExportList.java index b6d90e916aa..d76b9025cd1 100644 --- a/src/main/java/org/jabref/preferences/CustomExportList.java +++ b/src/main/java/org/jabref/preferences/CustomExportList.java @@ -1,5 +1,6 @@ package org.jabref.preferences; +import java.util.Arrays; import java.util.Comparator; import java.util.List; import java.util.Map; @@ -7,8 +8,6 @@ import java.util.Optional; import java.util.TreeMap; -import org.jabref.Globals; -import org.jabref.logic.exporter.Exporter; import org.jabref.logic.exporter.SavePreferences; import org.jabref.logic.exporter.TemplateExporter; import org.jabref.logic.journals.JournalAbbreviationLoader; @@ -31,23 +30,21 @@ public class CustomExportList { + private static final int EXPORTER_NAME_INDEX = 0; + private static final int EXPORTER_FILENAME_INDEX = 1; + private static final int EXPORTER_EXTENSION_INDEX = 2; + private static final Log LOGGER = LogFactory.getLog(CustomExportList.class); private final EventList> list; private final SortedList> sorted; private final Map formats = new TreeMap<>(); - public CustomExportList(Comparator> comp) { list = new BasicEventList<>(); sorted = new SortedList<>(list, comp); } - private static FileType getFileExtension(String consoleName) { - Optional exporter = Globals.exportFactory.getExporterByName(consoleName); - return exporter.map(Exporter::getFileType).orElse(FileType.DEFAULT); - } - public int size() { return list.size(); } @@ -57,7 +54,7 @@ public EventList> getSortedList() { } public Map getCustomExportFormats(JabRefPreferences prefs, - JournalAbbreviationLoader loader) { + JournalAbbreviationLoader loader) { Objects.requireNonNull(prefs); Objects.requireNonNull(loader); formats.clear(); @@ -75,7 +72,7 @@ private void readPrefs(JabRefPreferences prefs, JournalAbbreviationLoader loader LayoutFormatterPreferences layoutPreferences = prefs.getLayoutFormatterPreferences(loader); SavePreferences savePreferences = SavePreferences.loadForExportFromPreferences(prefs); while (!((s = prefs.getStringList(JabRefPreferences.CUSTOM_EXPORT_FORMAT + i)).isEmpty())) { - Optional format = createFormat(s, layoutPreferences, savePreferences); + Optional format = createFormat(s.get(EXPORTER_NAME_INDEX), s.get(EXPORTER_FILENAME_INDEX), s.get(EXPORTER_EXTENSION_INDEX), layoutPreferences, savePreferences); if (format.isPresent()) { formats.put(format.get().getId(), format.get()); list.add(s); @@ -87,30 +84,21 @@ private void readPrefs(JabRefPreferences prefs, JournalAbbreviationLoader loader } } - private Optional createFormat(List s, LayoutFormatterPreferences layoutPreferences, - SavePreferences savePreferences) { - if (s.size() < 3) { - return Optional.empty(); - } + private Optional createFormat(String exporterName, String filename, String extension, LayoutFormatterPreferences layoutPreferences, + SavePreferences savePreferences) { + String lfFileName; - if (s.get(1).endsWith(".layout")) { - lfFileName = s.get(1).substring(0, s.get(1).length() - 7); + if (extension.endsWith(".layout")) { + lfFileName = filename.substring(0, filename.length() - ".layout".length()); } else { - lfFileName = s.get(1); + lfFileName = filename; } - TemplateExporter format = new TemplateExporter(s.get(0), s.get(0), lfFileName, null, getFileExtension(s.get(2)), layoutPreferences, + TemplateExporter format = new TemplateExporter(exporterName, filename, lfFileName, null, FileType.parse(extension), layoutPreferences, savePreferences); format.setCustomExport(true); return Optional.of(format); } - public void addFormat(List s, LayoutFormatterPreferences layoutPreferences, SavePreferences savePreferences) { - createFormat(s, layoutPreferences, savePreferences).ifPresent(format -> { - formats.put(format.getId(), format); - list.add(s); - }); - } - public void store(JabRefPreferences prefs) { if (list.isEmpty()) { @@ -132,10 +120,18 @@ private void purge(int from, JabRefPreferences prefs) { } public void remove(List toRemove, LayoutFormatterPreferences layoutPreferences, - SavePreferences savePreferences) { - createFormat(toRemove, layoutPreferences, savePreferences).ifPresent(format -> { + SavePreferences savePreferences) { + createFormat(toRemove.get(EXPORTER_NAME_INDEX), toRemove.get(EXPORTER_FILENAME_INDEX), toRemove.get(EXPORTER_EXTENSION_INDEX), layoutPreferences, savePreferences).ifPresent(format -> { formats.remove(format.getId()); list.remove(toRemove); }); } + + public void addFormat(String name, String layoutFile, String extension, LayoutFormatterPreferences layoutPreferences, SavePreferences savePreferences) { + createFormat(name, layoutFile, extension, layoutPreferences, savePreferences).ifPresent(format -> { + formats.put(format.getId(), format); + list.add(Arrays.asList(name, layoutFile, extension)); + }); + + } }