package org.jabref.logic.importer.fileformat;
import java.io.BufferedReader;
import java.io.IOException;
import java.util.Objects;
import javax.xml.parsers.DocumentBuilder;
import javax.xml.parsers.DocumentBuilderFactory;
import org.jabref.logic.importer.Importer;
import org.jabref.logic.importer.ParserResult;
import org.jabref.logic.msbib.MSBibDatabase;
import org.jabref.logic.util.FileExtensions;
import org.w3c.dom.Document;
import org.xml.sax.InputSource;
/**
* Importer for the MS Office 2007 XML bibliography format
* By S. M. Mahbub Murshed
*
* ...
*/
public class MsBibImporter extends Importer {
@Override
public boolean isRecognizedFormat(BufferedReader reader) throws IOException {
Objects.requireNonNull(reader);
/*
The correct behaviour is to return false if it is certain that the file is
not of the MsBib type, and true otherwise. Returning true is the safe choice
if not certain.
*/
Document docin;
try {
DocumentBuilder dbuild = DocumentBuilderFactory.newInstance().newDocumentBuilder();
docin = dbuild.parse(new InputSource(reader));
} catch (Exception e) {
return false;
}
return (docin == null) || docin.getDocumentElement().getTagName().contains("Sources");
}
@Override
public ParserResult importDatabase(BufferedReader reader) throws IOException {
Objects.requireNonNull(reader);
MSBibDatabase dbase = new MSBibDatabase();
return new ParserResult(dbase.importEntriesFromXml(reader));
}
@Override
public String getName() {
return "MSBib";
}
@Override
public FileExtensions getExtensions() {
return FileExtensions.MSBIB;
}
@Override
public String getDescription() {
return "Importer for the MS Office 2007 XML bibliography format.";
}
}