package org.jabref.preferences;
import java.util.List;
import java.util.TreeSet;
import org.jabref.Globals;
import org.jabref.logic.importer.Importer;
import org.jabref.logic.importer.fileformat.CustomImporter;
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
/**
* Collection of user defined custom import formats.
*
* <p>The collection can be stored and retrieved from Preferences. It is sorted by the default
* order of {@link Importer}.</p>
*/
public class CustomImportList extends TreeSet<CustomImporter> {
private static final Log LOGGER = LogFactory.getLog(CustomImportList.class);
private final JabRefPreferences prefs;
public CustomImportList(JabRefPreferences prefs) {
super();
this.prefs = prefs;
readPrefs();
}
private void readPrefs() {
int i = 0;
List<String> s;
while (!((s = prefs.getStringList(JabRefPreferences.CUSTOM_IMPORT_FORMAT + i)).isEmpty())) {
try {
if (s.size() == 2) {
// New format: basePath, className
super.add(new CustomImporter(s.get(0), s.get(1)));
} else {
// Old format: name, cliId, className, basePath
super.add(new CustomImporter(s.get(3), s.get(2)));
}
} catch (Exception e) {
LOGGER.warn("Could not load " + s.get(0) + " from preferences. Will ignore.", e);
}
i++;
}
}
private void addImporter(CustomImporter customImporter) {
super.add(customImporter);
}
/**
* Adds an importer.
*
* <p>If an old one equal to the new one was contained, the old
* one is replaced.</p>
*
* @param customImporter new (version of an) importer
* @return if the importer was contained
*/
public boolean replaceImporter(CustomImporter customImporter) {
boolean wasContained = this.remove(customImporter);
this.addImporter(customImporter);
return wasContained;
}
public void store() {
purgeAll();
CustomImporter[] importers = this.toArray(new CustomImporter[this.size()]);
for (int i = 0; i < importers.length; i++) {
Globals.prefs.putStringList(JabRefPreferences.CUSTOM_IMPORT_FORMAT + i, importers[i].getAsStringList());
}
}
private void purgeAll() {
for (int i = 0; !(Globals.prefs.getStringList(JabRefPreferences.CUSTOM_IMPORT_FORMAT + i).isEmpty()); i++) {
Globals.prefs.remove(JabRefPreferences.CUSTOM_IMPORT_FORMAT + i);
}
}
}