/** * Copyright (C) IntelliBitz Technologies., Muthu Ramadoss * 168, Medavakkam Main Road, Madipakkam, Chennai 600091, Tamilnadu, India. * http://www.intellibitz.com * training@intellibitz.com * +91 44 2247 5106 * http://groups.google.com/group/etoe * http://sted.sourceforge.net * * This program is free software; you can redistribute it and/or * modify it under the terms of the GNU General Public License * as published by the Free Software Foundation; either version 2 * of the License, or (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. * * STED, Copyright (C) 2007 IntelliBitz Technologies * STED comes with ABSOLUTELY NO WARRANTY; * This is free software, and you are welcome * to redistribute it under the GNU GPL conditions; * * Visit http://www.gnu.org/ for GPL License terms. */ /** * $Id:SettingsXMLWriter.java 55 2007-05-19 05:55:34Z sushmu $ * $HeadURL: svn+ssh://sushmu@svn.code.sf.net/p/sted/code/FontTransliterator/trunk/src/intellibitz/sted/io/SettingsXMLWriter.java $ */ package intellibitz.sted.io; import intellibitz.sted.ui.STEDWindow; import intellibitz.sted.util.MenuHandler; import intellibitz.sted.util.Resources; import org.xml.sax.Attributes; import org.xml.sax.ContentHandler; import org.xml.sax.DTDHandler; import org.xml.sax.EntityResolver; import org.xml.sax.ErrorHandler; import org.xml.sax.InputSource; import org.xml.sax.SAXException; import org.xml.sax.SAXNotRecognizedException; import org.xml.sax.SAXNotSupportedException; import org.xml.sax.XMLReader; import org.xml.sax.helpers.AttributesImpl; import javax.xml.transform.Transformer; import javax.xml.transform.TransformerException; import javax.xml.transform.TransformerFactory; import javax.xml.transform.sax.SAXSource; import javax.xml.transform.stream.StreamResult; import java.io.BufferedReader; import java.io.File; import java.io.IOException; import java.io.StringReader; import java.util.StringTokenizer; public class SettingsXMLWriter { private SettingsXMLWriter() { } public static void writeUserSettings(STEDWindow stedWindow) throws TransformerException { final File file = new File(Resources.SETTINGS_FILE_PATH_USER); // Use the parser as a SAX source for input final StringBuffer stringBuffer = new StringBuffer(); stringBuffer.append(file.getName()); stringBuffer.append(Resources.NEWLINE_DELIMITER); stringBuffer.append(Resources.getVersion()); stringBuffer.append(Resources.NEWLINE_DELIMITER); // write all the options that were customizable by the user stringBuffer.append(MenuHandler.getUserOptions()); write(file, stringBuffer.toString()); } private static void write(File file, String fileContents) throws TransformerException { // Use a Transformer for output final Transformer transformer = TransformerFactory.newInstance().newTransformer(); final SAXSource source = new SAXSource(new SettingsXMLReader(), new InputSource( new BufferedReader( new StringReader( fileContents)))); transformer.transform(source, new StreamResult(file)); } /** * FontMapXMLReader reads the FontMap into an xml document format generates * sax events that can be used to transform fontmap to xml document */ static class SettingsXMLReader implements XMLReader { private ContentHandler contentHandler; // We're not doing namespaces, and we have no // attributes on our elements. private final String nsu = Resources.EMPTY_STRING; // NamespaceURI private final String indent = "\n"; // for readability SettingsXMLReader() { } /** * @param input * @throws java.io.IOException * @throws org.xml.sax.SAXException */ public void parse(InputSource input) throws IOException, SAXException { if (contentHandler == null) { throw new SAXException("No content contentHandler"); } final String rootElement = "settings"; // Get an efficient reader for the file final BufferedReader bufferedReader = new BufferedReader(input.getCharacterStream()); // Read the file and display it's contents. contentHandler.startDocument(); final AttributesImpl atts = new AttributesImpl(); atts.addAttribute(nsu, Resources.EMPTY_STRING, "name", "ID", bufferedReader.readLine()); atts.addAttribute(nsu, Resources.EMPTY_STRING, "version", "CDATA", bufferedReader.readLine()); contentHandler.startElement(nsu, rootElement, rootElement, atts); newLine(); String line; while ((line = bufferedReader.readLine()) != null) { writeOption(line); newLine(); } contentHandler.endElement(nsu, rootElement, rootElement); newLine(); contentHandler.endDocument(); } private void writeElement(String uri, String localName, String qName, Attributes atts) throws SAXException { contentHandler.startElement(uri, localName, qName, atts); contentHandler.endElement(uri, localName, qName); } private void newLine() throws SAXException { contentHandler.ignorableWhitespace(indent.toCharArray(), 0, // start index indent.length()); } /** * @param entry * @throws SAXException */ private void writeOption(String entry) throws SAXException { final StringTokenizer stringTokenizer = new StringTokenizer(entry, Resources.SYMBOL_ASTERISK); while (stringTokenizer.hasMoreElements()) { final AttributesImpl atts = new AttributesImpl(); final String name = stringTokenizer.nextToken(); final String value = stringTokenizer.nextToken(); atts.addAttribute(nsu, Resources.EMPTY_STRING, "name", "ID", name); atts.addAttribute(nsu, Resources.EMPTY_STRING, "value", "CDATA", value); writeElement(nsu, "option", "option", atts); } } public ContentHandler getContentHandler() { return contentHandler; //To change body of implemented methods use Options | File Templates. } public void setContentHandler(ContentHandler handler) { contentHandler = handler; //To change body of implemented methods use Options | File Templates. } public void parse(String systemId) throws IOException, SAXException { //To change body of implemented methods use Options | File Templates. } public boolean getFeature(String name) throws SAXNotRecognizedException, SAXNotSupportedException { return false; //To change body of implemented methods use Options | File Templates. } public void setFeature(String name, boolean value) throws SAXNotRecognizedException, SAXNotSupportedException { //To change body of implemented methods use Options | File Templates. } public DTDHandler getDTDHandler() { return null; //To change body of implemented methods use Options | File Templates. } public void setDTDHandler(DTDHandler handler) { //To change body of implemented methods use Options | File Templates. } public EntityResolver getEntityResolver() { return null; //To change body of implemented methods use Options | File Templates. } public void setEntityResolver(EntityResolver resolver) { //To change body of implemented methods use Options | File Templates. } public ErrorHandler getErrorHandler() { return null; //To change body of implemented methods use Options | File Templates. } public void setErrorHandler(ErrorHandler handler) { //To change body of implemented methods use Options | File Templates. } public Object getProperty(String name) throws SAXNotRecognizedException, SAXNotSupportedException { return null; //To change body of implemented methods use Options | File Templates. } public void setProperty(String name, Object value) throws SAXNotRecognizedException, SAXNotSupportedException { //To change body of implemented methods use Options | File Templates. } } }