package org.jabref.logic.exporter; import java.io.IOException; import java.nio.charset.Charset; import java.nio.charset.StandardCharsets; import java.nio.file.Paths; import java.util.List; import java.util.Objects; import javax.xml.transform.OutputKeys; import javax.xml.transform.Transformer; import javax.xml.transform.TransformerException; import javax.xml.transform.TransformerFactory; import javax.xml.transform.TransformerFactoryConfigurationError; import javax.xml.transform.dom.DOMSource; import javax.xml.transform.stream.StreamResult; import org.jabref.logic.msbib.MSBibDatabase; import org.jabref.model.database.BibDatabaseContext; import org.jabref.model.entry.BibEntry; /** * ExportFormat for exporting in MSBIB XML format. */ class MSBibExportFormat extends ExportFormat { public MSBibExportFormat() { super("MS Office 2007", "MSBib", null, null, ".xml"); } @Override public void performExport(final BibDatabaseContext databaseContext, final String file, final Charset encoding, List<BibEntry> entries) throws SaveException { Objects.requireNonNull(databaseContext); Objects.requireNonNull(entries); if (entries.isEmpty()) { return; } // forcing to use UTF8 output format for some problems with xml export in other encodings SaveSession session = new FileSaveSession(StandardCharsets.UTF_8, false); MSBibDatabase msBibDatabase = new MSBibDatabase(databaseContext.getDatabase(), entries); try (VerifyingWriter ps = session.getWriter()) { try { DOMSource source = new DOMSource(msBibDatabase.getDomForExport()); StreamResult result = new StreamResult(ps); Transformer trans = TransformerFactory.newInstance().newTransformer(); trans.setOutputProperty(OutputKeys.INDENT, "yes"); trans.transform(source, result); } catch (TransformerException | IllegalArgumentException | TransformerFactoryConfigurationError e) { throw new Error(e); } finalizeSaveSession(session, Paths.get(file)); } catch (IOException ex) { throw new SaveException(ex); } } }