/* * RHQ Management Platform * Copyright (C) 2005-2011 Red Hat, Inc. * All rights reserved. * * 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 version 2 of the License. * * 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., 675 Mass Ave, Cambridge, MA 02139, USA. */ package org.rhq.enterprise.server.sync; import javax.xml.namespace.NamespaceContext; import javax.xml.stream.XMLStreamException; import javax.xml.stream.XMLStreamWriter; /** * This is a decorator implementation of the {@link XMLStreamWriter} that * will disallow the users from doing illegal things during export (like closing the writer) * but at the same time implements the full {@link XMLStreamWriter} interface so that * it can be more interoperable with other tooling. * * @author Lukas Krejci */ public class ExportWriter implements XMLStreamWriter { private int depth; private XMLStreamWriter wrt; public ExportWriter(XMLStreamWriter wrapped) { wrt = wrapped; } @Override public void writeStartElement(String localName) throws XMLStreamException { wrt.writeStartElement(localName); ++depth; } @Override public void writeStartElement(String namespaceURI, String localName) throws XMLStreamException { wrt.writeStartElement(namespaceURI, localName); ++depth; } @Override public void writeStartElement(String prefix, String localName, String namespaceURI) throws XMLStreamException { wrt.writeStartElement(prefix, localName, namespaceURI); ++depth; } @Override public void writeEmptyElement(String namespaceURI, String localName) throws XMLStreamException { wrt.writeEmptyElement(namespaceURI, localName); } @Override public void writeEmptyElement(String prefix, String localName, String namespaceURI) throws XMLStreamException { wrt.writeEmptyElement(prefix, localName, namespaceURI); } @Override public void writeEmptyElement(String localName) throws XMLStreamException { wrt.writeEmptyElement(localName); } /** * @see javax.xml.stream.XMLStreamWriter#writeEndElement() * * @throws IllegalExporterActionException if the writer would end an element * not previously defined by this writer (i.e. if it would end an element that this * writer wrote to and thus would escape out of the exporter's "shell"). */ @Override public void writeEndElement() throws XMLStreamException, IllegalExporterActionException { if (depth < 1) { throw new IllegalExporterActionException(); } wrt.writeEndElement(); --depth; } /** * @throws IllegalExporterActionException exporters aren't allowed to do this. */ @Override public void writeEndDocument() throws XMLStreamException { throw new IllegalExporterActionException(); } @Override public void close() throws XMLStreamException { throw new IllegalExporterActionException(); } @Override public void flush() throws XMLStreamException { wrt.flush(); } @Override public void writeAttribute(String localName, String value) throws XMLStreamException { wrt.writeAttribute(localName, value); } @Override public void writeAttribute(String prefix, String namespaceURI, String localName, String value) throws XMLStreamException { wrt.writeAttribute(prefix, namespaceURI, localName, value); } @Override public void writeAttribute(String namespaceURI, String localName, String value) throws XMLStreamException { wrt.writeAttribute(namespaceURI, localName, value); } @Override public void writeNamespace(String prefix, String namespaceURI) throws XMLStreamException { wrt.writeNamespace(prefix, namespaceURI); } @Override public void writeDefaultNamespace(String namespaceURI) throws XMLStreamException { wrt.writeDefaultNamespace(namespaceURI); } @Override public void writeComment(String data) throws XMLStreamException { wrt.writeComment(data); } @Override public void writeProcessingInstruction(String target) throws XMLStreamException { wrt.writeProcessingInstruction(target); } @Override public void writeProcessingInstruction(String target, String data) throws XMLStreamException { wrt.writeProcessingInstruction(target, data); } @Override public void writeCData(String data) throws XMLStreamException { wrt.writeCData(data); } @Override public void writeDTD(String dtd) throws XMLStreamException { wrt.writeDTD(dtd); } @Override public void writeEntityRef(String name) throws XMLStreamException { wrt.writeEntityRef(name); } /** * @throws IllegalExporterActionException */ @Override public void writeStartDocument() throws XMLStreamException { throw new IllegalExporterActionException(); } /** * @throws IllegalExporterActionException */ @Override public void writeStartDocument(String version) throws XMLStreamException { throw new IllegalExporterActionException(); } /** * @throws IllegalExporterActionException */ @Override public void writeStartDocument(String encoding, String version) throws XMLStreamException { throw new IllegalExporterActionException(); } @Override public void writeCharacters(String text) throws XMLStreamException { wrt.writeCharacters(text); } @Override public void writeCharacters(char[] text, int start, int len) throws XMLStreamException { wrt.writeCharacters(text, start, len); } @Override public String getPrefix(String uri) throws XMLStreamException { return wrt.getPrefix(uri); } @Override public void setPrefix(String prefix, String uri) throws XMLStreamException { wrt.setPrefix(prefix, uri); } @Override public void setDefaultNamespace(String uri) throws XMLStreamException { wrt.setDefaultNamespace(uri); } /** * @throws IllegalExporterActionException */ @Override public void setNamespaceContext(NamespaceContext context) throws XMLStreamException { throw new IllegalExporterActionException(); } @Override public NamespaceContext getNamespaceContext() { return wrt.getNamespaceContext(); } @Override public Object getProperty(String name) throws IllegalArgumentException { return wrt.getProperty(name); } }