package bib; import java.io.FileNotFoundException; import java.io.IOException; import java.io.StringReader; import java.util.List; import java.util.Map; import papers.Paper; import bibtex.dom.BibtexAbstractValue; import bibtex.dom.BibtexEntry; import bibtex.dom.BibtexFile; import bibtex.parser.BibtexMultipleFieldValuesPolicy; import bibtex.parser.BibtexParser; import bibtex.parser.ParseException; public class BibtexFileReader { public void readBibtext(String text, List<Paper> papers){ // System.err.println("Attempting to import file: " + fn); BibtexFile bibtexFile = new BibtexFile(); BibtexParser parser = new BibtexParser(false); parser.setMultipleFieldValuesPolicy(BibtexMultipleFieldValuesPolicy.KEEP_LAST); try { // parser.parse(bibtexFile, new FileReader(fn)); parser.parse(bibtexFile, new StringReader(text)); } catch (FileNotFoundException e) { System.err.println("Error finding bib file"); return; } catch (ParseException e) { System.err.println("Error parsing bib file"); return; } catch (IOException e) { System.err.println("Error reading bib file"); return; } Paper newPaper = null; for(Object entry : bibtexFile.getEntries()){ if(entry instanceof BibtexEntry){ // System.err.println("entry"); newPaper = new Paper(); newPaper.setType(((BibtexEntry) entry).getEntryType()); newPaper.setLabel(((BibtexEntry) entry).getEntryKey()); Map<String,BibtexAbstractValue> fields = ((BibtexEntry) entry).getFields(); for(Map.Entry<String, BibtexAbstractValue> mapping : fields.entrySet()){ String value = mapping.getValue().toString(); while(value.startsWith("{") && value.endsWith("}")){ value = value.substring(1, value.length()-1); } newPaper.setField(mapping.getKey(), value); } papers.add(newPaper); } } System.err.println("Done parsing file... examining bibtex file..."); } }