package net.sf.jabref.imports;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStream;
import java.util.ArrayList;
import java.util.List;
import java.util.regex.Pattern;
import javax.xml.parsers.SAXParser;
import javax.xml.parsers.SAXParserFactory;
import net.sf.jabref.BibtexEntry;
/**
* Importer for the Refer/Endnote format.
*
* check here for details on the format
* http://www.ecst.csuchico.edu/~jacobsd/bib/formats/endnote.html
*/
public class BibteXMLImporter extends ImportFormat {
/**
* Return the name of this import format.
*/
public String getFormatName() {
return "BibTeXML";
}
/*
* (non-Javadoc)
* @see net.sf.jabref.imports.ImportFormat#getCLIId()
*/
public String getCLIId() {
return "bibtexml";
}
/**
* Check whether the source is in the correct format for this importer.
*/
public boolean isRecognizedFormat(InputStream stream) throws IOException {
// Our strategy is to look for the "<bibtex:file *" line.
BufferedReader in = new BufferedReader(ImportFormatReader.getReaderDefaultEncoding(stream));
Pattern pat1 = Pattern
.compile("<bibtex:file .*");
String str;
while ((str = in.readLine()) != null){
if (pat1.matcher(str).find())
return true;
}
return false;
}
/**
* Parse the entries in the source, and return a List of BibtexEntry
* objects.
*/
public List<BibtexEntry> importEntries(InputStream stream) throws IOException {
ArrayList<BibtexEntry> bibItems = new ArrayList<BibtexEntry>();
// Obtain a factory object for creating SAX parsers
SAXParserFactory parserFactory = SAXParserFactory.newInstance();
// Configure the factory object to specify attributes of the parsers it
// creates
// parserFactory.setValidating(true);
parserFactory.setNamespaceAware(true);
// Now create a SAXParser object
try{
SAXParser parser = parserFactory.newSAXParser(); //May throw exceptions
BibTeXMLHandler handler = new BibTeXMLHandler();
// Start the parser. It reads the file and calls methods of the handler.
parser.parse(stream, handler);
// When you're done, report the results stored by your handler object
bibItems = handler.getItems();
}catch (javax.xml.parsers.ParserConfigurationException e1){
e1.printStackTrace();
}catch (org.xml.sax.SAXException e2){
e2.printStackTrace();
}catch (java.io.IOException e3){
e3.printStackTrace();
}
return bibItems;
}
}