View Javadoc
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 }