From: <le...@us...> - 2007-10-17 14:57:20
|
Revision: 15 http://rochat.svn.sourceforge.net/rochat/?rev=15&view=rev Author: levia Date: 2007-10-17 07:55:46 -0700 (Wed, 17 Oct 2007) Log Message: ----------- - Completed configuration manager, now parses and writes a XML file. Modified Paths: -------------- trunk/src/net/sensiva/rochat/core/config/ConfigurationManager.java trunk/src/net/sensiva/rochat/ui/main/MainFrame.java Modified: trunk/src/net/sensiva/rochat/core/config/ConfigurationManager.java =================================================================== --- trunk/src/net/sensiva/rochat/core/config/ConfigurationManager.java 2007-10-17 14:23:58 UTC (rev 14) +++ trunk/src/net/sensiva/rochat/core/config/ConfigurationManager.java 2007-10-17 14:55:46 UTC (rev 15) @@ -53,11 +53,13 @@ { public void run() { + Logger.getInstance().info("ROChat shutting down, executing listeners.."); for (Iterator<ShutdownListener> it = m_Listeners.iterator(); it.hasNext();) { ShutdownListener entry = it.next(); entry.onShutdown(); } + Logger.getInstance().info("Listeners execution completed."); saveToFile(); } }); @@ -111,38 +113,53 @@ */ public boolean loadFile(String file) { + Logger logger = Logger.getInstance(); try { if (!m_KeyMap.isEmpty()) { m_KeyMap.clear(); } - Properties p = new Properties(); + m_File = new File(file); if (!m_File.exists()) { m_File.createNewFile(); return false; } - p.load(new FileInputStream(file)); - Iterator<Map.Entry<Object, Object>> it = p.entrySet().iterator(); - for (; it.hasNext();) + logger.info("Settings file parsing started: " + file); + + DocumentBuilder builder = DocumentBuilderFactory.newInstance().newDocumentBuilder(); + Document doc = builder.parse(file); + NodeList nodes = doc.getElementsByTagName("Setting"); + + for (int i = 0; i < nodes.getLength(); i++) { - Map.Entry<Object, Object> entry = it.next(); - m_KeyMap.put((String)entry.getKey(), (String)entry.getValue()); + Element element = (Element)nodes.item(i); + + String key = element.getAttribute("key"); + if (key.isEmpty()) + { + logger.warning("Found a setting entry, but couldn't find a key. Skipping."); + continue; + } + + String value = element.getTextContent(); + value = value.trim(); + + System.out.println(key + " : " + value); + + m_KeyMap.put(key, value); } + logger.info("Successfully parsed settings file."); } - catch (FileNotFoundException fnfe) + catch (Exception ioe) { - Logger.getInstance().error(fnfe.getMessage()); + logger.error("Parsing of settings file failed."); + logger.error(ioe.getMessage()); return false; } - catch (IOException ioe) - { - Logger.getInstance().error(ioe.getMessage()); - return false; - } return true; } @@ -241,24 +258,54 @@ */ public boolean saveToFile(String file) { + Logger logger = Logger.getInstance(); try { File propertyFile = new File(file); - BufferedWriter bf = new BufferedWriter(new FileWriter(propertyFile)); + DocumentBuilder builder = DocumentBuilderFactory.newInstance().newDocumentBuilder(); + DOMImplementation impl = builder.getDOMImplementation(); + Document doc = impl.createDocument(null, null, null); + + logger.info("Saving settings file: " + file); - Iterator<Map.Entry<String, String>> it = m_KeyMap.entrySet().iterator(); - - for (; it.hasNext();) + Element root = doc.createElement("Settings"); + doc.appendChild(root); + + for (Iterator<Map.Entry<String, String>> it = m_KeyMap.entrySet().iterator(); it.hasNext();) { - Map.Entry<String, String> entry = it.next(); - bf.write(entry.getKey() + " = " + entry.getValue() + "\n"); + Map.Entry entry = it.next(); + String key = (String)entry.getKey(); + String value = (String)entry.getValue(); + + Element settingNode = doc.createElement("Setting"); + root.appendChild(settingNode); + settingNode.setAttribute("key", key); + + settingNode.setTextContent(value); } - bf.close(); + + FileOutputStream fos; + Transformer transformer; + fos = new FileOutputStream(file); + + TransformerFactory transformerFactory = TransformerFactory.newInstance(); + transformer = transformerFactory.newTransformer(); + + transformer.setOutputProperty(OutputKeys.METHOD, "xml"); + transformer.setOutputProperty(OutputKeys.ENCODING,"ISO-8859-1"); + transformer.setOutputProperty("{http://xml.apache.org/xslt}indent-amount", "4"); + transformer.setOutputProperty(OutputKeys.INDENT, "yes"); + + DOMSource source = new DOMSource(doc); + StreamResult result = new StreamResult(fos); + transformer.transform(source, result); + logger.info("Saving settings file completed successfully."); return true; } - catch (IOException ioe) + catch (Exception ioe) { - ioe.printStackTrace(); + logger.error("Saving of settings file failed."); + logger.error(ioe.getMessage()); return false; } } Modified: trunk/src/net/sensiva/rochat/ui/main/MainFrame.java =================================================================== --- trunk/src/net/sensiva/rochat/ui/main/MainFrame.java 2007-10-17 14:23:58 UTC (rev 14) +++ trunk/src/net/sensiva/rochat/ui/main/MainFrame.java 2007-10-17 14:55:46 UTC (rev 15) @@ -21,6 +21,7 @@ import net.sensiva.rochat.core.logging.*; import net.sensiva.rochat.ui.tabs.*; +import net.sensiva.rochat.core.config.*; import javax.swing.*; import java.awt.*; import java.awt.event.*; @@ -48,6 +49,8 @@ Logger.getInstance().error(e.getMessage()); } + ConfigurationManager.getInstance().loadFile("settings.xml"); + m_MainFrame = new JFrame("ROChat"); m_Tabs = new JTabbedPane(); This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |