/* Woodstox XML processor
*
* Copyright (c) 2004- Tatu Saloranta, tatu.saloranta@iki.fi
*
* Licensed under the License specified in file LICENSE, included with
* the source code.
* You may not use this file except in compliance with the License.
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package com.ctc.wstx.sw;
import java.io.*;
This is a simple wrapper class, which decorates an XmlWriter
to look like a Writer. This is necessary to implement a (legacy) character quoting system introduced for Woodstox 2.0, which relies on having a Writer to use for outputting. /**
* This is a simple wrapper class, which decorates an {@link XmlWriter}
* to look like a Writer. This is necessary to implement a (legacy)
* character quoting system introduced for Woodstox 2.0, which relies
* on having a Writer to use for outputting.
*/
public abstract class XmlWriterWrapper
extends Writer
{
protected final XmlWriter mWriter;
private char[] mBuffer = null;
public static XmlWriterWrapper wrapWriteRaw(XmlWriter xw)
{
return new RawWrapper(xw);
}
public static XmlWriterWrapper wrapWriteCharacters(XmlWriter xw)
{
return new TextWrapper(xw);
}
protected XmlWriterWrapper(XmlWriter writer)
{
mWriter = writer;
}
@Override
public final void close() throws IOException
{
mWriter.close(false);
}
@Override
public final void flush() throws IOException
{
mWriter.flush();
}
/* !!! 30-Nov-2006, TSa: Due to co-variance between Appendable and
* Writer, this would not compile with javac 1.5, in 1.4 mode
* (source and target set to "1.4". Not a huge deal, but since
* the base impl is just fine, no point in overriding it.
*/
/*
public final Writer append(char c)
throws IOException
{
if (mBuffer == null) {
mBuffer = new char[1];
}
mBuffer[0] = (char) c;
write(mBuffer, 0, 1);
return this;
}
*/
@Override
public final void write(char[] cbuf) throws IOException {
write(cbuf, 0, cbuf.length);
}
@Override
public abstract void write(char[] cbuf, int off, int len) throws IOException;
@Override
public final void write(int c) throws IOException
{
if (mBuffer == null) {
mBuffer = new char[1];
}
mBuffer[0] = (char) c;
write(mBuffer, 0, 1);
}
@Override
public abstract void write(String str) throws IOException;
@Override
public abstract void write(String str, int off, int len) throws IOException;
/*
//////////////////////////////////////////////////
// Implementation classes
//////////////////////////////////////////////////
*/
This wrapper directs calls to writeRaw
methods. Thus,
it is a "vanilla" writer, and no escaping is done.
/**
* This wrapper directs calls to <code>writeRaw</code> methods. Thus,
* it is a "vanilla" writer, and no escaping is done.
*/
private final static class RawWrapper
extends XmlWriterWrapper
{
protected RawWrapper(XmlWriter writer)
{
super(writer);
}
@Override
public void write(char[] cbuf, int off, int len) throws IOException
{
mWriter.writeRaw(cbuf, off, len);
}
@Override
public void write(String str, int off, int len) throws IOException
{
mWriter.writeRaw(str, off, len);
}
@Override
public final void write(String str) throws IOException
{
mWriter.writeRaw(str, 0, str.length());
}
}
This wrapper directs calls to writeCharacters
methods.
This means that text content escaping (and, possibly, validation)
is done, using default or custom escaping code.
/**
* This wrapper directs calls to <code>writeCharacters</code> methods.
* This means that text content escaping (and, possibly, validation)
* is done, using default or custom escaping code.
*/
private static class TextWrapper
extends XmlWriterWrapper
{
protected TextWrapper(XmlWriter writer) {
super(writer);
}
@Override
public void write(char[] cbuf, int off, int len) throws IOException {
mWriter.writeCharacters(cbuf, off, len);
}
@Override
public void write(String str) throws IOException {
mWriter.writeCharacters(str);
}
@Override
public void write(String str, int off, int len) throws IOException {
mWriter.writeCharacters(str.substring(off, off+len));
}
}
}