1 package de.surethingies.properties.io;
2
3 import static de.surethingies.properties.io.Elements.CONFIGURATION;
4 import static de.surethingies.properties.io.Elements.ENTRIES;
5 import static de.surethingies.properties.io.Elements.ENTRY;
6 import static de.surethingies.properties.io.Elements.SETTING;
7
8 import java.io.BufferedOutputStream;
9 import java.io.File;
10 import java.io.FileInputStream;
11 import java.io.FileOutputStream;
12 import java.io.OutputStream;
13
14 import javax.xml.parsers.DocumentBuilder;
15 import javax.xml.parsers.DocumentBuilderFactory;
16
17 import org.w3c.dom.DOMImplementation;
18 import org.w3c.dom.Document;
19 import org.w3c.dom.Element;
20 import org.w3c.dom.ls.DOMImplementationLS;
21 import org.w3c.dom.ls.LSOutput;
22 import org.w3c.dom.ls.LSSerializer;
23 import org.xml.sax.InputSource;
24 import org.xml.sax.XMLReader;
25 import org.xml.sax.helpers.XMLReaderFactory;
26
27 import de.surethingies.properties.plain.Configuration;
28 import de.surethingies.properties.plain.Entry;
29 import de.surethingies.properties.plain.Setting;
30
31 public class ConfigurationIO {
32
33 private static ConfigurationIO instance;
34
35 private ConfigurationIO () {}
36
37 public static synchronized ConfigurationIO instance() {
38 if (instance == null) {
39 instance = new ConfigurationIO();
40 }
41
42 return instance;
43 }
44
45 public Configuration load (File propertyFile) throws Exception {
46
47 InputSource inputSource = new InputSource (
48 new FileInputStream (propertyFile));
49
50 ConfigurationParser confParser = new ConfigurationParser();
51
52 XMLReader reader = XMLReaderFactory.createXMLReader();
53 reader.setContentHandler(confParser);
54 reader.parse(inputSource);
55
56 Configuration conf = confParser.getConfiguration();
57
58 return conf;
59 }
60
61 public void store (Configuration conf, File propertyFile) throws Exception {
62 Document doc = createDocument (conf);
63
64 DOMImplementation impl = doc.getImplementation();
65 DOMImplementationLS implLS = (DOMImplementationLS) impl.getFeature("LS","3.0");
66 LSSerializer writer = implLS.createLSSerializer();
67
68 OutputStream outStream = new BufferedOutputStream (new FileOutputStream (propertyFile));
69
70 LSOutput out = implLS.createLSOutput();
71 out.setByteStream(outStream);
72
73 writer.write(doc, out);
74
75 outStream.close();
76 }
77
78 private Document createDocument (Configuration conf) throws Exception {
79 DocumentBuilder builder = DocumentBuilderFactory.newInstance().newDocumentBuilder();
80
81 Document doc = builder.newDocument();
82 Element configuration = doc.createElement(CONFIGURATION.localName());
83 configuration.setAttribute("version", conf.version);
84 doc.appendChild(configuration);
85
86 for (Setting plainSetting: conf.settings) {
87 Element setting = doc.createElement(SETTING.localName());
88 setting.setAttribute("id", plainSetting.id);
89 setting.setAttribute("group", plainSetting.group);
90
91 Element entries = doc.createElement(ENTRIES.localName());
92 setting.appendChild(entries);
93
94 for (Entry plainEntry: plainSetting.entries) {
95 Element entry = doc.createElement(ENTRY.localName());
96 entry.setAttribute("key", plainEntry.key);
97 entry.setAttribute("value", plainEntry.value);
98
99 entries.appendChild(entry);
100 }
101 configuration.appendChild(setting);
102 }
103
104 return doc;
105 }
106 }