001: package com.xoetrope.io;
002:
003: import java.io.IOException;
004:
005: /**
006: * Export XML
007: *
008: * <p> Copyright (c) Xoetrope Ltd., 2001-2006, This software is licensed under
009: * the GNU Public License (GPL), please see license.txt for more details. If
010: * you make commercial use of this software you must purchase a commercial
011: * license from Xoetrope.</p>
012: * <p> $Revision: 1.6 $</p>
013: * @deprecated use the com.xoetrope.export classes instead
014: */
015: public class XmlExportHelper extends XExportHelper {
016: /**
017: * Setup an new exporter for XML
018: */
019: public XmlExportHelper() {
020: setOutputElementNames(true);
021: setOutputFieldNames(true);
022: beginElement = "<";
023: endElement = ">";
024: leftDelimiter = rightDelimiter = "\"";
025: fieldSeparator = " ";
026: fieldNameSeparator = "=";
027: elementClosure = "/";
028: defaultExtension = ".xml";
029: }
030:
031: /**
032: * Write the opening of a document
033: * @throws IOException thrown if the stream is not ready or if it is in an invalid state
034: */
035: public void startDocument() throws IOException {
036: writer.write("<?xml version=\"1.0\" encoding=\"UTF-8\"?>");
037: }
038:
039: /**
040: * Write the ending of a document
041: * @throws IOException thrown if the stream is not ready or if it is in an invalid state
042: */
043: public void endDocument() throws IOException {
044: }
045:
046: /**
047: * Write a field
048: * @param name the field name
049: * @param value the field value
050: * @throws IOException thrown if the stream is not ready or if it is in an invalid state
051: */
052: public void writeField(String name, String value)
053: throws IOException {
054: if (!firstField)
055: writer.write(fieldSeparator);
056: else
057: firstField = false;
058:
059: writer.write(prepareFieldName(name));
060: writer.write(fieldNameSeparator);
061:
062: writer.write(leftDelimiter);
063: if (value != null)
064: writer.write(value);
065: writer.write(rightDelimiter);
066: }
067:
068: /**
069: * Write the section title and terminate with a line feed, new line as appropriate
070: * @param text the text to output
071: * @throws IOException thrown if the stream is not ready or if it is in an invalid state
072: */
073: public void writeSectionTitle(String text) throws IOException {
074: startElement(prepareFieldName(text));
075: endElement();
076: }
077:
078: /**
079: * Write the begining/opening of an element
080: * @param elementName the element name
081: * @throws IOException thrown if the stream is not ready or if it is in an invalid state
082: */
083: public void startElement(String elementName) throws IOException {
084: writer.write(beginElement);
085: writer.write(elementName);
086: writer.write(fieldSeparator);
087: elementNames.push(lastElementName = elementName);
088: firstField = true;
089: }
090:
091: /**
092: * Write the matching ending element
093: * @throws IOException thrown if the stream is not ready or if it is in an invalid state
094: */
095: public void matchElement() throws IOException {
096: if (elementNames.size() > 0) {
097: String startElementName = elementNames.pop().toString();
098: writer.write(beginElement);
099: writer.write(elementClosure);
100: writer.write(startElementName);
101: writer.write(endElement);
102: writer.write(lineFeed);
103: }
104: }
105:
106: /**
107: * Write the end of an element opening
108: * @throws IOException thrown if the stream is not ready or if it is in an invalid state
109: */
110: public void endElement() throws IOException {
111: writer.write(endElement);
112: writer.write(lineFeed);
113: }
114:
115: /**
116: * Write the closing of an element
117: * @throws IOException thrown if the stream is not ready or if it is in an invalid state
118: */
119: public void closeElement() throws IOException {
120: elementNames.pop().toString(); // Discard the last element
121: writer.write(elementClosure);
122: writer.write(endElement);
123: writer.write(lineFeed);
124: }
125:
126: /**
127: * Write the end of a section
128: * @throws IOException thrown if the stream is not ready or if it is in an invalid state
129: */
130: public void writeSectionEnd() throws IOException {
131: matchElement();
132: }
133:
134: /**
135: * Flushes and closes any existing stream
136: * @throws java.io.IOException thrown if the stream is not ready or if it is in an invalid state
137: */
138: public void close() throws IOException {
139: if (writer != null) {
140: while (!elementNames.isEmpty())
141: matchElement();
142:
143: writer.flush();
144: writer.close();
145: }
146: }
147:
148: /**
149: * Prepare the field name for export
150: * @param name the raw name
151: * @return the prepared value
152: */
153: protected String prepareFieldName(String name) {
154: String targets = ":. ;&";
155: for (int i = 0; i < targets.length(); i++) {
156: char target = targets.charAt(i);
157: if (name.indexOf(target) > 0)
158: name = name.replace(target, '_');
159: }
160: return name;
161: }
162: }
|