package org.jabref.logic.exporter; import java.nio.charset.StandardCharsets; import java.util.Collections; import java.util.Map; import java.util.TreeMap; import org.jabref.logic.l10n.Localization; import org.jabref.logic.layout.LayoutFormatterPreferences; public class ExportFormats { // Global variable that is used for counting output entries when exporting: public static int entryNumber; private static final Map<String, IExportFormat> EXPORT_FORMATS = new TreeMap<>(); private ExportFormats() { } public static void initAllExports(Map<String, ExportFormat> customFormats, LayoutFormatterPreferences layoutPreferences, SavePreferences savePreferences) { ExportFormats.EXPORT_FORMATS.clear(); // Initialize Build-In Export Formats ExportFormats .putFormat(new ExportFormat("HTML", "html", "html", null, ".html", layoutPreferences, savePreferences)); ExportFormats.putFormat(new ExportFormat(Localization.lang("Simple HTML"), "simplehtml", "simplehtml", null, ".html", layoutPreferences, savePreferences)); ExportFormats.putFormat(new ExportFormat("DocBook 4.4", "docbook", "docbook", null, ".xml", layoutPreferences, savePreferences)); ExportFormats.putFormat(new ExportFormat("DIN 1505", "din1505", "din1505winword", "din1505", ".rtf", layoutPreferences, savePreferences)); ExportFormats.putFormat( new ExportFormat("BibO RDF", "bibordf", "bibordf", null, ".rdf", layoutPreferences, savePreferences)); ExportFormats.putFormat(new ExportFormat(Localization.lang("HTML table"), "tablerefs", "tablerefs", "tablerefs", ".html", layoutPreferences, savePreferences)); ExportFormats.putFormat(new ExportFormat(Localization.lang("HTML list"), "listrefs", "listrefs", "listrefs", ".html", layoutPreferences, savePreferences)); ExportFormats.putFormat(new ExportFormat(Localization.lang("HTML table (with Abstract & BibTeX)"), "tablerefsabsbib", "tablerefsabsbib", "tablerefsabsbib", ".html", layoutPreferences, savePreferences)); ExportFormats.putFormat(new ExportFormat("Harvard RTF", "harvard", "harvard", "harvard", ".rtf", layoutPreferences, savePreferences)); ExportFormats.putFormat(new ExportFormat("ISO 690 RTF", "iso690rtf", "iso690RTF", "iso690rtf", ".rtf", layoutPreferences, savePreferences)); ExportFormats.putFormat(new ExportFormat("ISO 690", "iso690txt", "iso690", "iso690txt", ".txt", layoutPreferences, savePreferences)); ExportFormats.putFormat(new ExportFormat("Endnote", "endnote", "EndNote", "endnote", ".txt", layoutPreferences, savePreferences)); ExportFormats.putFormat(new ExportFormat("OpenOffice/LibreOffice CSV", "oocsv", "openoffice-csv", "openoffice", ".csv", layoutPreferences, savePreferences)); ExportFormat ef = new ExportFormat("RIS", "ris", "ris", "ris", ".ris", layoutPreferences, savePreferences); ef.setEncoding(StandardCharsets.UTF_8); ExportFormats.putFormat(ef); ExportFormats.putFormat( new ExportFormat("MIS Quarterly", "misq", "misq", "misq", ".rtf", layoutPreferences, savePreferences)); ExportFormats.putFormat(new BibTeXMLExportFormat()); ExportFormats.putFormat(new OpenOfficeDocumentCreator()); ExportFormats.putFormat(new OpenDocumentSpreadsheetCreator()); ExportFormats.putFormat(new MSBibExportFormat()); ExportFormats.putFormat(new ModsExportFormat()); // Now add custom export formats for (IExportFormat format : customFormats.values()) { ExportFormats.putFormat(format); } } /** * Build a string listing of all available export formats. * * @param maxLineLength * The max line length before a line break must be added. * @param linePrefix * If a line break is added, this prefix will be inserted at the * beginning of the next line. * @return The string describing available formats. */ public static String getConsoleExportList(int maxLineLength, int firstLineSubtr, String linePrefix) { StringBuilder sb = new StringBuilder(); int lastBreak = -firstLineSubtr; for (String name : ExportFormats.EXPORT_FORMATS.keySet()) { if (((sb.length() + 2 + name.length()) - lastBreak) > maxLineLength) { sb.append(",\n"); lastBreak = sb.length(); sb.append(linePrefix); } else if (sb.length() > 0) { sb.append(", "); } sb.append(name); } return sb.toString(); } /** * Get a Map of all export formats. * @return A Map containing all export formats, mapped to their console names. */ public static Map<String, IExportFormat> getExportFormats() { // It is perhaps overly paranoid to make a defensive copy in this case: return Collections.unmodifiableMap(ExportFormats.EXPORT_FORMATS); } /** * Look up the named export format. * * @param consoleName * The export name given in the JabRef console help information. * @return The ExportFormat, or null if no exportformat with that name is * registered. */ public static IExportFormat getExportFormat(String consoleName) { return ExportFormats.EXPORT_FORMATS.get(consoleName); } private static void putFormat(IExportFormat format) { ExportFormats.EXPORT_FORMATS.put(format.getConsoleName(), format); } }