8f84386761da795d8bd1d40cbdaa2ea3ead50fca
[debian/jabref.git] / src / java / net / sf / jabref / export / ModsExportFormat.java
1 package net.sf.jabref.export;
2
3 import net.sf.jabref.Globals;
4 import net.sf.jabref.BibtexDatabase;
5 import net.sf.jabref.mods.MODSDatabase;
6
7 import javax.xml.transform.dom.DOMSource;
8 import javax.xml.transform.stream.StreamResult;
9 import javax.xml.transform.Transformer;
10 import javax.xml.transform.TransformerFactory;
11 import javax.xml.transform.OutputKeys;
12 import java.util.Set;
13 import java.io.IOException;
14 import java.io.File;
15
16 /**
17  * ExportFormat for exporting in MODS XML format.
18  */
19 class ModsExportFormat extends ExportFormat {
20     public ModsExportFormat() {
21         super(Globals.lang("MODS"), "mods", null, null, ".xml");
22
23     }
24
25     public void performExport(final BibtexDatabase database, final String file, final String encoding, Set keySet) throws IOException {
26         SaveSession ss = getSaveSession("UTF8", new File(file));
27         VerifyingWriter ps = ss.getWriter();
28         MODSDatabase md = new MODSDatabase(database, keySet);
29
30         // PS: DOES NOT SUPPORT EXPORTING ONLY A SET OF ENTRIES
31
32         try {
33             DOMSource source = new DOMSource(md.getDOMrepresentation());
34             StreamResult result = new StreamResult(ps);
35             Transformer trans = TransformerFactory.newInstance().newTransformer();
36             trans.setOutputProperty(OutputKeys.INDENT, "yes");
37             trans.transform(source, result);
38         }
39         catch (Exception e) {
40             throw new Error(e);
41         }
42
43         try {
44             finalizeSaveSession(ss);
45         } catch (SaveException ex) {
46             throw new IOException(ex.getMessage());
47         } catch (Exception e) {
48             throw new IOException(e.getMessage());
49         }
50         return;
51     }
52 }