package org.codehaus.plexus.util.xml;
/*
* Copyright The Codehaus Foundation.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* 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.
*/
import org.codehaus.plexus.util.StringUtils;
Utility class for the XmlWriter
class.
Author: Vincent Siveton Version: $Id$
/**
* Utility class for the <code>XmlWriter</code> class.
*
* @author <a href="mailto:vincent.siveton@gmail.com">Vincent Siveton</a>
* @version $Id$
*/
public class XmlWriterUtil
{
The vm line separator /** The vm line separator */
public static final String LS = System.getProperty( "line.separator" );
The default line indenter size i.e. 2. /** The default line indenter size i.e. 2. */
public static final int DEFAULT_INDENTATION_SIZE = 2;
The default column before line wrapping i.e. 80. /** The default column before line wrapping i.e. 80. */
public static final int DEFAULT_COLUMN_LINE = 80;
Convenience method to write one CRLF
.
Params: - writer – not null writer
/**
* Convenience method to write one <code>CRLF</code>.
*
* @param writer not null writer
*/
public static void writeLineBreak( XMLWriter writer )
{
writeLineBreak( writer, 1 );
}
Convenience method to repeat CRLF
.
Params: - writer – not null
- repeat – positive number
/**
* Convenience method to repeat <code>CRLF</code>.
*
* @param writer not null
* @param repeat positive number
*/
public static void writeLineBreak( XMLWriter writer, int repeat )
{
for ( int i = 0; i < repeat; i++ )
{
writer.writeMarkup( LS );
}
}
Convenience method to repeat CRLF
and to indent the writer by 2
.
Params: - writer – not null
- repeat –
- indent – positive number
See Also:
/**
* Convenience method to repeat <code>CRLF</code> and to indent the writer by <code>2</code>.
*
* @param writer not null
* @param repeat
* @param indent positive number
* @see #DEFAULT_INDENTATION_SIZE
* @see #writeLineBreak(XMLWriter, int, int, int)
*/
public static void writeLineBreak( XMLWriter writer, int repeat, int indent )
{
writeLineBreak( writer, repeat, indent, DEFAULT_INDENTATION_SIZE );
}
Convenience method to repeat CRLF
and to indent the writer by indentSize
.
Params: - writer – not null
- repeat –
- indent – positive number
- indentSize – positive number
/**
* Convenience method to repeat <code>CRLF</code> and to indent the writer by <code>indentSize</code>.
*
* @param writer not null
* @param repeat
* @param indent positive number
* @param indentSize positive number
*/
public static void writeLineBreak( XMLWriter writer, int repeat, int indent, int indentSize )
{
writeLineBreak( writer, repeat );
if ( indent < 0 )
{
indent = 0;
}
if ( indentSize < 0 )
{
indentSize = 0;
}
writer.writeText( StringUtils.repeat( " ", indent * indentSize ) );
}
Convenience method to write XML comment line break. Its size is 80
.
Params: - writer – not null
See Also:
/**
* Convenience method to write XML comment line break. Its size is <code>80</code>.
*
* @param writer not null
* @see #DEFAULT_COLUMN_LINE
* @see #writeCommentLineBreak(XMLWriter, int)
*/
public static void writeCommentLineBreak( XMLWriter writer )
{
writeCommentLineBreak( writer, DEFAULT_COLUMN_LINE );
}
Convenience method to write XML comment line break with columnSize
as length.
Params: - writer – not null
- columnSize – positive number
/**
* Convenience method to write XML comment line break with <code>columnSize</code> as length.
*
* @param writer not null
* @param columnSize positive number
*/
public static void writeCommentLineBreak( XMLWriter writer, int columnSize )
{
if ( columnSize < 10 )
{
columnSize = DEFAULT_COLUMN_LINE;
}
writer.writeMarkup( "<!-- " + StringUtils.repeat( "=", columnSize - 10 ) + " -->" + LS );
}
Convenience method to write XML comment line. The comment
is splitted to have a size of
80
.
Params: - writer – not null
- comment –
See Also:
/**
* Convenience method to write XML comment line. The <code>comment</code> is splitted to have a size of
* <code>80</code>.
*
* @param writer not null
* @param comment
* @see #DEFAULT_INDENTATION_SIZE
* @see #writeComment(XMLWriter, String, int, int)
*/
public static void writeComment( XMLWriter writer, String comment )
{
writeComment( writer, comment, 0, DEFAULT_INDENTATION_SIZE );
}
Convenience method to write XML comment line. The comment
is splitted to have a size of
80
and is indented by indent
using 2
as indentation size.
Params: - writer – not null
- comment –
- indent – positive number
See Also:
/**
* Convenience method to write XML comment line. The <code>comment</code> is splitted to have a size of
* <code>80</code> and is indented by <code>indent</code> using <code>2</code> as indentation size.
*
* @param writer not null
* @param comment
* @param indent positive number
* @see #DEFAULT_INDENTATION_SIZE
* @see #writeComment(XMLWriter, String, int, int)
*/
public static void writeComment( XMLWriter writer, String comment, int indent )
{
writeComment( writer, comment, indent, DEFAULT_INDENTATION_SIZE );
}
Convenience method to write XML comment line. The comment
is splitted to have a size of
80
and is indented by indent
using indentSize
.
Params: - writer – not null
- comment –
- indent – positive number
- indentSize – positive number
See Also:
/**
* Convenience method to write XML comment line. The <code>comment</code> is splitted to have a size of
* <code>80</code> and is indented by <code>indent</code> using <code>indentSize</code>.
*
* @param writer not null
* @param comment
* @param indent positive number
* @param indentSize positive number
* @see #DEFAULT_COLUMN_LINE
* @see #writeComment(XMLWriter, String, int, int, int)
*/
public static void writeComment( XMLWriter writer, String comment, int indent, int indentSize )
{
writeComment( writer, comment, indent, indentSize, DEFAULT_COLUMN_LINE );
}
Convenience method to write XML comment line. The comment
is splitted to have a size of
columnSize
and is indented by indent
using indentSize
.
Params: - writer – not null
- comment –
- indent – positive number
- indentSize – positive number
- columnSize – positive number
/**
* Convenience method to write XML comment line. The <code>comment</code> is splitted to have a size of
* <code>columnSize</code> and is indented by <code>indent</code> using <code>indentSize</code>.
*
* @param writer not null
* @param comment
* @param indent positive number
* @param indentSize positive number
* @param columnSize positive number
*/
public static void writeComment( XMLWriter writer, String comment, int indent, int indentSize, int columnSize )
{
if ( comment == null )
{
comment = "null";
}
while ( comment.contains( "<!--" ) )
{
comment = comment.replace( "<!--", "" );
}
while ( comment.contains( "-->" ) )
{
comment = comment.replace( "-->", "" );
}
if ( indent < 0 )
{
indent = 0;
}
if ( indentSize < 0 )
{
indentSize = 0;
}
if ( columnSize < 0 )
{
columnSize = DEFAULT_COLUMN_LINE;
}
String indentation = StringUtils.repeat( " ", indent * indentSize );
int magicNumber = indentation.length() + columnSize - "-->".length() - 1;
String[] sentences = StringUtils.split( comment, LS );
StringBuffer line = new StringBuffer( indentation + "<!-- " );
for ( String sentence : sentences )
{
String[] words = StringUtils.split( sentence, " " );
for ( String word : words )
{
StringBuilder sentenceTmp = new StringBuilder( line.toString() );
sentenceTmp.append( word ).append( ' ' );
if ( sentenceTmp.length() > magicNumber )
{
if ( line.length() != indentation.length() + "<!-- ".length() )
{
if ( magicNumber - line.length() > 0 )
{
line.append( StringUtils.repeat( " ", magicNumber - line.length() ) );
}
line.append( "-->" ).append( LS );
writer.writeMarkup( line.toString() );
}
line = new StringBuffer( indentation + "<!-- " );
line.append( word ).append( ' ' );
}
else
{
line.append( word ).append( ' ' );
}
}
if ( magicNumber - line.length() > 0 )
{
line.append( StringUtils.repeat( " ", magicNumber - line.length() ) );
}
}
if ( line.length() <= magicNumber )
{
line.append( StringUtils.repeat( " ", magicNumber - line.length() ) );
}
line.append( "-->" ).append( LS );
writer.writeMarkup( line.toString() );
}
Convenience method to write XML comments between two comments line break. The XML comment block is not indented.
Params: - writer – not null
- comment –
See Also:
/**
* Convenience method to write XML comments between two comments line break. The XML comment block is not indented.
*
* @param writer not null
* @param comment
* @see #DEFAULT_INDENTATION_SIZE
* @see #writeCommentText(XMLWriter, String, int, int)
*/
public static void writeCommentText( XMLWriter writer, String comment )
{
writeCommentText( writer, comment, 0, DEFAULT_INDENTATION_SIZE );
}
Convenience method to write XML comments between two comments line break. The XML comment block is also indented
by indent
using 2
as indentation size.
Params: - writer – not null
- comment –
- indent – positive number
See Also:
/**
* Convenience method to write XML comments between two comments line break. The XML comment block is also indented
* by <code>indent</code> using <code>2</code> as indentation size.
*
* @param writer not null
* @param comment
* @param indent positive number
* @see #DEFAULT_INDENTATION_SIZE
* @see #writeCommentText(XMLWriter, String, int, int)
*/
public static void writeCommentText( XMLWriter writer, String comment, int indent )
{
writeCommentText( writer, comment, indent, DEFAULT_INDENTATION_SIZE );
}
Convenience method to write XML comment between two comment line break. The XML comment block is also indented by
indent
using indentSize
.
Params: - writer – not null
- comment –
- indent – positive number
- indentSize – positive number
See Also:
/**
* Convenience method to write XML comment between two comment line break. The XML comment block is also indented by
* <code>indent</code> using <code>indentSize</code>.
*
* @param writer not null
* @param comment
* @param indent positive number
* @param indentSize positive number
* @see #DEFAULT_COLUMN_LINE
* @see #writeCommentText(XMLWriter, String, int, int, int)
*/
public static void writeCommentText( XMLWriter writer, String comment, int indent, int indentSize )
{
writeCommentText( writer, comment, indent, indentSize, DEFAULT_COLUMN_LINE );
}
Convenience method to write XML comments between two comments line break. The XML comment block is also indented
by indent
using indentSize
. The column size could be also be specified.
Params: - writer – not null
- comment –
- indent – positive number
- indentSize – positive number
- columnSize – positive number
/**
* Convenience method to write XML comments between two comments line break. The XML comment block is also indented
* by <code>indent</code> using <code>indentSize</code>. The column size could be also be specified.
*
* @param writer not null
* @param comment
* @param indent positive number
* @param indentSize positive number
* @param columnSize positive number
*/
public static void writeCommentText( XMLWriter writer, String comment, int indent, int indentSize, int columnSize )
{
if ( indent < 0 )
{
indent = 0;
}
if ( indentSize < 0 )
{
indentSize = 0;
}
if ( columnSize < 0 )
{
columnSize = DEFAULT_COLUMN_LINE;
}
writeLineBreak( writer, 1 );
writer.writeMarkup( StringUtils.repeat( " ", indent * indentSize ) );
writeCommentLineBreak( writer, columnSize );
writeComment( writer, comment, indent, indentSize, columnSize );
writer.writeMarkup( StringUtils.repeat( " ", indent * indentSize ) );
writeCommentLineBreak( writer, columnSize );
writeLineBreak( writer, 1, indent, indentSize );
}
}