package net.sf.jabref.export; import java.util.TreeSet; import java.util.Comparator; import java.util.TreeMap; import net.sf.jabref.Globals; import net.sf.jabref.JabRefPreferences; import ca.odell.glazedlists.EventList; import ca.odell.glazedlists.SortedList; import ca.odell.glazedlists.BasicEventList; /** * This class handles user defined custom export formats. They are initially * read from Preferences, and kept alphabetically (sorted by name). Formats can * be added or removed. When modified, the sort() method must be called to make * sure the formats stay properly sorted. When the method store() is called, * export formats are written to Preferences. */ public class CustomExportList { private EventList<String[]> list; private SortedList<String[]> sorted; private TreeMap<String, ExportFormat> formats = new TreeMap<String, ExportFormat>(); private Object[] array; public CustomExportList(Comparator<String[]> comp) { list = new BasicEventList<String[]>(); sorted = new SortedList<String[]>(list, comp); } public TreeMap<String, ExportFormat> getCustomExportFormats() { formats.clear(); readPrefs(); return formats; } public int size() { return list.size(); } public EventList<String[]> getSortedList() { return sorted; } private void readPrefs() { formats.clear(); list.clear(); int i = 0; String[] s; while ((s = Globals.prefs.getStringArray("customExportFormat" + i)) != null) { ExportFormat format = createFormat(s); if (format != null) { formats.put(format.getConsoleName(), format); list.add(s); } else { System.out.println(Globals.lang("Error initializing custom export format from string '%0'", Globals.prefs.get("customExportFormat" + i))); } i++; } } private ExportFormat createFormat(String[] s) { if (s.length < 3) return null; String lfFileName; if (s[1].endsWith(".layout")) lfFileName = s[1].substring(0, s[1].length() - 7); else lfFileName = s[1]; ExportFormat format = new ExportFormat(s[0], s[0], lfFileName, null, s[2]); format.setCustomExport(true); return format; } public String[] getElementAt(int pos) { return (String[]) (array[pos]); } public void addFormat(String[] s) { list.add(s); ExportFormat format = createFormat(s); formats.put(format.getConsoleName(), format); } public void remove(String[] toRemove) { ExportFormat format = createFormat(toRemove); formats.remove(format.getConsoleName()); list.remove(toRemove); } public void store() { if (list.size() == 0) purge(0); else { for (int i = 0; i < list.size(); i++) { // System.out.println(i+".."); Globals.prefs.putStringArray("customExportFormat" + i, list.get(i)); } purge(list.size()); } } private void purge(int from) { int i = from; while (Globals.prefs.getStringArray("customExportFormat" + i) != null) { Globals.prefs.remove("customExportFormat" + i); i++; } } }