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 }