org.pentaho.reporting.libraries.xmlns.writer

Class XmlWriterSupport

public class XmlWriterSupport extends Object

A support class for writing XML files.

Author: Thomas Morgner

Field Summary
static booleanCLOSE
A constant for close.
static intCLOSE_TAG_DECREASE
A constant for controlling the indent function.
static intINDENT_ONLY
A constant for controlling the indent function.
static booleanOPEN
A constant for open.
static intOPEN_TAG_INCREASE
A constant for controlling the indent function.
Constructor Summary
XmlWriterSupport()
Default Constructor.
XmlWriterSupport(TagDescription safeTags, String indentString)
Creates a new support instance.
XmlWriterSupport(TagDescription safeTags, String indentString, String lineseparator)
Create a new XmlWriterSupport instance.
Method Summary
voidaddImpliedNamespace(String uri, String prefix)
Adds an implied namespace to the document.
protected DeclaredNamespacescomputeNamespaces()
Computes the current collection of defined namespaces.
voidcopyNamespaces(XmlWriterSupport writerSupport)
Copies all currently declared namespaces of the given XmlWriterSupport instance as new implied namespaces into this instance.
intgetAdditionalIndent()
Returns the indent level that should be added to the automaticly computed indentation.
intgetCurrentIndentLevel()
Returns the current indention level.
StringgetLineSeparator()
Returns the line separator.
PropertiesgetNamespaces()
Returns all namespaces as properties-collection.
TagDescriptiongetTagDescription()
Returns the list of safe tags.
voidindent(Writer writer)
Indent the line.
voidindentForClose(Writer writer)
Indent the line.
booleanisAlwaysAddNamespace()
Checks, whether the XML writer should always add a namespace prefix to the attributes.
booleanisAssumeDefaultNamespace()
Checks, whether attributes of the same namespace as the current element should be written without a prefix.
booleanisHtmlCompatiblityMode()
Checks, whether the HTML compatibility mode is enabled.
booleanisLineEmpty()
Checks, whether the currently generated line of text is empty.
booleanisNamespaceDefined(String uri)
Checks, whether the given URI is defined as valid namespace.
booleanisNamespacePrefixDefined(String prefix)
Checks, whether the given namespace prefix is defined.
booleanisWriteFinalLinebreak()
Checks, whether the written XML file should end with an empty line.
static Stringnormalize(String s, boolean transformNewLine)
Normalises a string, replacing certain characters with their escape sequences so that the XML text is not corrupted.
StringnormalizeLocal(String s, boolean transformNewLine)
Normalizes the given string using a shared buffer.
voidsetAdditionalIndent(int additionalIndent)
Defines the indent level that should be added to the automaticly computed indentation.
voidsetAlwaysAddNamespace(boolean alwaysAddNamespace)
Defines, whether the XML writer should always add a namespace prefix to the attributes.
voidsetAssumeDefaultNamespace(boolean assumeDefaultNamespace)
Defines, whether attributes of the same namespace as the current element should be written without a prefix.
voidsetHtmlCompatiblityMode(boolean htmlCompatiblityMode)
Enables or disables the HTML Compatibility mode.
voidsetLineEmpty(boolean lineEmpty)
A marker flag to track, wether the current line is empty.
voidsetWriteFinalLinebreak(boolean writeFinalLinebreak)
Defines, whether the written XML file should end with an empty line.
voidwriteCloseTag(Writer w)
Writes a closing XML tag.
voidwriteComment(Writer writer, String comment)
Writes a comment into the generated xml file.
voidwriteNewLine(Writer writer)
Writes a linebreak to the writer.
voidwriteTag(Writer w, String namespaceUri, String name)
Writes an opening XML tag that has no attributes.
voidwriteTag(Writer w, String namespace, String name, String attributeName, String attributeValue, boolean close)
Writes an opening XML tag with an attribute/value pair.
voidwriteTag(Writer w, String namespaceUri, String name, AttributeList attributes, boolean close)
Writes an opening XML tag along with a list of attribute/value pairs.
voidwriteTextNormalized(Writer writer, String s, boolean transformNewLine)
Normalizes the given string and writes the result directly to the stream.

Field Detail

CLOSE

public static final boolean CLOSE
A constant for close.

CLOSE_TAG_DECREASE

public static final int CLOSE_TAG_DECREASE
A constant for controlling the indent function.

INDENT_ONLY

public static final int INDENT_ONLY
A constant for controlling the indent function.

OPEN

public static final boolean OPEN
A constant for open.

OPEN_TAG_INCREASE

public static final int OPEN_TAG_INCREASE
A constant for controlling the indent function.

Constructor Detail

XmlWriterSupport

public XmlWriterSupport()
Default Constructor. The created XMLWriterSupport will not have no safe tags and starts with an indention level of 0.

XmlWriterSupport

public XmlWriterSupport(TagDescription safeTags, String indentString)
Creates a new support instance.

Parameters: safeTags the tags that are safe for line breaks. indentString the indent string.

XmlWriterSupport

public XmlWriterSupport(TagDescription safeTags, String indentString, String lineseparator)
Create a new XmlWriterSupport instance.

Parameters: safeTags the tags that are safe for line breaks. indentString the indent string. lineseparator the lineseparator that should be used for writing XML files.

Method Detail

addImpliedNamespace

public void addImpliedNamespace(String uri, String prefix)
Adds an implied namespace to the document. Such a namespace is not explicitly declared, it is assumed that the xml-parser knows the prefix by some other means. Using implied namespaces for standalone documents is almost always a bad idea.

Parameters: uri the uri of the namespace. prefix the defined prefix.

computeNamespaces

protected DeclaredNamespaces computeNamespaces()
Computes the current collection of defined namespaces.

Returns: the namespaces declared at this writing position.

copyNamespaces

public void copyNamespaces(XmlWriterSupport writerSupport)
Copies all currently declared namespaces of the given XmlWriterSupport instance as new implied namespaces into this instance.

Parameters: writerSupport the Xml-writer from where to copy the declared namespaces.

getAdditionalIndent

public int getAdditionalIndent()
Returns the indent level that should be added to the automaticly computed indentation.

Returns: the indent level.

getCurrentIndentLevel

public int getCurrentIndentLevel()
Returns the current indention level.

Returns: the indention level.

getLineSeparator

public String getLineSeparator()
Returns the line separator.

Returns: the line separator.

getNamespaces

public Properties getNamespaces()
Returns all namespaces as properties-collection. This reflects the currently defined namespaces, therefore calls to writeOpenTag(..) might cause this method to return different collections.

Returns: the defined namespaces.

getTagDescription

public TagDescription getTagDescription()
Returns the list of safe tags.

Returns: The list.

indent

public void indent(Writer writer)
Indent the line. Called for proper indenting in various places.

Parameters: writer the writer which should receive the indentention.

Throws: java.io.IOException if writing the stream failed.

indentForClose

public void indentForClose(Writer writer)
Indent the line. Called for proper indenting in various places.

Parameters: writer the writer which should receive the indentention.

Throws: java.io.IOException if writing the stream failed.

isAlwaysAddNamespace

public boolean isAlwaysAddNamespace()
Checks, whether the XML writer should always add a namespace prefix to the attributes. The XML specification leaves it up to the application on how to handle unqualified attributes. If this mode is enabled, all attributes will always be fully qualified - which removed the ambugity but may not be compatible with simple, non namespace aware parsers.

Returns: true, if all attributes should be qualified, false otherwise.

isAssumeDefaultNamespace

public boolean isAssumeDefaultNamespace()
Checks, whether attributes of the same namespace as the current element should be written without a prefix. Attributes without a prefix are considered to be not in any namespace at all. How to treat such attributes is implementation dependent. (Appendix A; Section 6.2 of the XmlNamespaces recommendation)

Returns: true, if attributes in the element's namespace should be written without a prefix, false to write all attributes with a prefix.

isHtmlCompatiblityMode

public boolean isHtmlCompatiblityMode()
Checks, whether the HTML compatibility mode is enabled. In HTML compatibility mode, closed empty tags will have a space between the tagname and the close-indicator.

Returns: true, if the HTML compatiblity mode is enabled, false otherwise.

isLineEmpty

public boolean isLineEmpty()
Checks, whether the currently generated line of text is empty.

Returns: true, if the line is empty, false otherwise.

isNamespaceDefined

public boolean isNamespaceDefined(String uri)
Checks, whether the given URI is defined as valid namespace.

Parameters: uri the uri of the namespace.

Returns: true, if there's a namespace defined, false otherwise.

isNamespacePrefixDefined

public boolean isNamespacePrefixDefined(String prefix)
Checks, whether the given namespace prefix is defined.

Parameters: prefix the namespace prefix.

Returns: true, if the prefix is defined, false otherwise.

isWriteFinalLinebreak

public boolean isWriteFinalLinebreak()
Checks, whether the written XML file should end with an empty line.

Returns: true, if an linebreak should be added at the end of the file, false otherwise.

normalize

public static String normalize(String s, boolean transformNewLine)
Normalises a string, replacing certain characters with their escape sequences so that the XML text is not corrupted.

Parameters: s the string. transformNewLine true, if a newline in the string should be converted into a character entity.

Returns: the normalised string.

normalizeLocal

public String normalizeLocal(String s, boolean transformNewLine)
Normalizes the given string using a shared buffer.

Parameters: s the string that should be XML-Encoded. transformNewLine a flag controling whether to transform newlines into character-entities.

Returns: the transformed string.

setAdditionalIndent

public void setAdditionalIndent(int additionalIndent)
Defines the indent level that should be added to the automaticly computed indentation.

Parameters: additionalIndent the indent level.

setAlwaysAddNamespace

public void setAlwaysAddNamespace(boolean alwaysAddNamespace)
Defines, whether the XML writer should always add a namespace prefix to the attributes. The XML specification leaves it up to the application on how to handle unqualified attributes. If this mode is enabled, all attributes will always be fully qualified - which removed the ambugity but may not be compatible with simple, non namespace aware parsers.

Parameters: alwaysAddNamespace set to true, if all attributes should be qualified, false otherwise.

setAssumeDefaultNamespace

public void setAssumeDefaultNamespace(boolean assumeDefaultNamespace)
Defines, whether attributes of the same namespace as the current element should be written without a prefix. Attributes without a prefix are considered to be not in any namespace at all. How to treat such attributes is implementation dependent. (Appendix A; Section 6.2 of the XmlNamespaces recommendation)

Parameters: assumeDefaultNamespace true, if attributes in the element's namespace should be written without a prefix, false to write all attributes with a prefix.

setHtmlCompatiblityMode

public void setHtmlCompatiblityMode(boolean htmlCompatiblityMode)
Enables or disables the HTML Compatibility mode. In HTML compatibility mode, closed empty tags will have a space between the tagname and the close-indicator.

Parameters: htmlCompatiblityMode true, if the HTML compatiblity mode is enabled, false otherwise.

setLineEmpty

public void setLineEmpty(boolean lineEmpty)
A marker flag to track, wether the current line is empty. This influences the indention.

Parameters: lineEmpty defines, whether the current line should be treated as empty line.

setWriteFinalLinebreak

public void setWriteFinalLinebreak(boolean writeFinalLinebreak)
Defines, whether the written XML file should end with an empty line.

Parameters: writeFinalLinebreak true, if an linebreak should be added at the end of the file, false otherwise.

writeCloseTag

public void writeCloseTag(Writer w)
Writes a closing XML tag.

Parameters: w the writer.

Throws: java.io.IOException if there is an I/O problem.

writeComment

public void writeComment(Writer writer, String comment)
Writes a comment into the generated xml file.

Parameters: writer the writer. comment the comment text

Throws: IOException if there is a problem writing to the character stream.

writeNewLine

public void writeNewLine(Writer writer)
Writes a linebreak to the writer.

Parameters: writer the writer.

Throws: IOException if there is a problem writing to the character stream.

writeTag

public void writeTag(Writer w, String namespaceUri, String name)
Writes an opening XML tag that has no attributes.

Parameters: w the writer. namespaceUri the namespace URI for the element. name the tag name.

Throws: java.io.IOException if there is an I/O problem.

writeTag

public void writeTag(Writer w, String namespace, String name, String attributeName, String attributeValue, boolean close)
Writes an opening XML tag with an attribute/value pair.

Parameters: w the writer. namespace the namespace URI for the element name the tag name. attributeName the attribute name. attributeValue the attribute value. close controls whether the tag is closed.

Throws: java.io.IOException if there is an I/O problem.

writeTag

public void writeTag(Writer w, String namespaceUri, String name, AttributeList attributes, boolean close)
Writes an opening XML tag along with a list of attribute/value pairs.

Parameters: w the writer. namespaceUri the namespace uri for the element (can be null). name the tag name. attributes the attributes. close controls whether the tag is closed.

Throws: java.io.IOException if there is an I/O problem.

writeTextNormalized

public void writeTextNormalized(Writer writer, String s, boolean transformNewLine)
Normalizes the given string and writes the result directly to the stream.

Parameters: writer the writer that should receive the normalized content. s the string that should be XML-Encoded. transformNewLine a flag controling whether to transform newlines into character-entities.

Throws: IOException if writing to the stream failed.