java/alt2xml-bin/src/cz/frantovo/alt2xml/výstup/EchoContentHandler.java
author František Kučera <franta-hg@frantovo.cz>
Thu, 05 Jun 2014 22:01:58 +0200
changeset 11 aaf6648af0aa
parent 7 9107f7df660c
permissions -rw-r--r--
licence
franta-hg@11
     1
/**
franta-hg@11
     2
 * Alt2XML
franta-hg@11
     3
 * Copyright © 2014 František Kučera (frantovo.cz)
franta-hg@11
     4
 *
franta-hg@11
     5
 * This program is free software: you can redistribute it and/or modify
franta-hg@11
     6
 * it under the terms of the GNU General Public License as published by
franta-hg@11
     7
 * the Free Software Foundation, either version 3 of the License, or
franta-hg@11
     8
 * (at your option) any later version.
franta-hg@11
     9
 *
franta-hg@11
    10
 * This program is distributed in the hope that it will be useful,
franta-hg@11
    11
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
franta-hg@11
    12
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
franta-hg@11
    13
 * GNU General Public License for more details.
franta-hg@11
    14
 *
franta-hg@11
    15
 * You should have received a copy of the GNU General Public License
franta-hg@11
    16
 * along with this program. If not, see <http://www.gnu.org/licenses/>.
franta-hg@11
    17
 */
franta-hg@3
    18
package cz.frantovo.alt2xml.výstup;
franta-hg@2
    19
franta-hg@2
    20
import javax.xml.stream.XMLStreamException;
franta-hg@2
    21
import javax.xml.stream.XMLStreamWriter;
franta-hg@2
    22
import org.xml.sax.Attributes;
franta-hg@2
    23
import org.xml.sax.SAXException;
franta-hg@2
    24
import org.xml.sax.helpers.DefaultHandler;
franta-hg@2
    25
franta-hg@2
    26
/**
franta-hg@2
    27
 * Slouží k převodu právě parsovaného XML zpět na XML.
franta-hg@2
    28
 * Určen pro testování a ladění a pro použití s neobvyklými „XML“ parsery,
franta-hg@2
    29
 * které nečtou XML ale jiný jazyk (např. JSON, INI atd.), ale používají stejné rozhraní (SAX).
franta-hg@2
    30
 * 
franta-hg@2
    31
 * TODO: další typy uzlů a jmenné prostory.
franta-hg@2
    32
 * @author fiki
franta-hg@2
    33
 */
franta-hg@2
    34
public class EchoContentHandler extends DefaultHandler {
franta-hg@2
    35
franta-hg@2
    36
	private XMLStreamWriter w;
franta-hg@2
    37
franta-hg@2
    38
	/**
franta-hg@2
    39
	 * @param writer kam se bude vypisovat XML.
franta-hg@2
    40
	 */
franta-hg@2
    41
	public EchoContentHandler(XMLStreamWriter writer) {
franta-hg@2
    42
		w = writer;
franta-hg@2
    43
	}
franta-hg@2
    44
franta-hg@2
    45
	@Override
franta-hg@2
    46
	public void startDocument() throws SAXException {
franta-hg@2
    47
		try {
franta-hg@2
    48
			w.writeStartDocument();
franta-hg@2
    49
		} catch (XMLStreamException e) {
franta-hg@2
    50
			throw new SAXException(e);
franta-hg@2
    51
		}
franta-hg@2
    52
	}
franta-hg@2
    53
franta-hg@2
    54
	@Override
franta-hg@2
    55
	public void endDocument() throws SAXException {
franta-hg@2
    56
		try {
franta-hg@2
    57
			w.writeEndDocument();
franta-hg@2
    58
			w.close();
franta-hg@2
    59
		} catch (XMLStreamException e) {
franta-hg@2
    60
			throw new SAXException(e);
franta-hg@2
    61
		}
franta-hg@2
    62
	}
franta-hg@2
    63
franta-hg@2
    64
	@Override
franta-hg@2
    65
	public void startElement(String uri, String localName, String qName, Attributes attributes) throws SAXException {
franta-hg@2
    66
		try {
franta-hg@2
    67
			w.writeStartElement(qName);
franta-hg@2
    68
franta-hg@2
    69
			if (attributes != null) {
franta-hg@2
    70
				for (int i = 0; i < attributes.getLength(); i++) {
franta-hg@2
    71
					w.writeAttribute(attributes.getQName(i), attributes.getValue(i));
franta-hg@2
    72
				}
franta-hg@2
    73
			}
franta-hg@2
    74
franta-hg@2
    75
			w.flush();
franta-hg@2
    76
		} catch (XMLStreamException e) {
franta-hg@2
    77
			throw new SAXException(e);
franta-hg@2
    78
		}
franta-hg@2
    79
	}
franta-hg@2
    80
franta-hg@2
    81
	@Override
franta-hg@2
    82
	public void endElement(String uri, String localName, String qName) throws SAXException {
franta-hg@2
    83
		try {
franta-hg@2
    84
			w.writeEndElement();
franta-hg@2
    85
			w.flush();
franta-hg@2
    86
		} catch (XMLStreamException e) {
franta-hg@2
    87
			throw new SAXException(e);
franta-hg@2
    88
		}
franta-hg@2
    89
	}
franta-hg@2
    90
franta-hg@2
    91
	@Override
franta-hg@2
    92
	public void characters(char[] ch, int start, int length) throws SAXException {
franta-hg@2
    93
		try {
franta-hg@2
    94
			w.writeCharacters(ch, start, length);
franta-hg@2
    95
			w.flush();
franta-hg@2
    96
		} catch (XMLStreamException e) {
franta-hg@2
    97
			throw new SAXException(e);
franta-hg@2
    98
		}
franta-hg@2
    99
	}
franta-hg@2
   100
}