/*
* $Id: XmlPrettyPrinter.java 21933 2011-05-17 18:31:30Z dirk.olmes $
* --------------------------------------------------------------------------------------
* Copyright (c) MuleSoft, Inc. All rights reserved. http://www.mulesoft.com
*
* The software in this package is published under the terms of the CPAL v1.0
* license, a copy of which has been included with this distribution in the
* LICENSE.txt file.
*/
package org.mule.module.xml.transformer;
import org.mule.api.transformer.TransformerException;
import org.mule.module.xml.util.XMLUtils;
import org.mule.transformer.AbstractTransformer;
import org.mule.transformer.types.DataTypeFactory;
import org.mule.util.StringUtils;
import org.apache.commons.io.output.ByteArrayOutputStream;
import org.dom4j.Document;
import org.dom4j.DocumentException;
import org.dom4j.io.OutputFormat;
import org.dom4j.io.XMLWriter;
public class XmlPrettyPrinter extends AbstractTransformer
{
protected OutputFormat outputFormat = OutputFormat.createPrettyPrint();
public XmlPrettyPrinter()
{
super();
this.registerSourceType(DataTypeFactory.STRING);
this.registerSourceType(DataTypeFactory.create(org.dom4j.Document.class));
this.registerSourceType(DataTypeFactory.create(org.w3c.dom.Document.class));
this.setReturnDataType(DataTypeFactory.STRING);
}
public synchronized OutputFormat getOutputFormat()
{
return outputFormat;
}
@Override
protected Object doTransform(Object src, String outputEncoding) throws TransformerException
{
try
{
Document document = XMLUtils.toDocument(src, muleContext);
if (document != null)
{
ByteArrayOutputStream resultStream = new ByteArrayOutputStream();
XMLWriter writer = new XMLWriter(resultStream, this.getOutputFormat());
writer.write(document);
writer.close();
return resultStream.toString(outputEncoding);
}
else
{
throw new DocumentException("Payload is not valid XML");
}
}
catch (Exception e)
{
throw new TransformerException(this, e);
}
}
/**
* @see OutputFormat#getEncoding()
*/
@Override
public synchronized String getEncoding()
{
return outputFormat.getEncoding();
}
/**
* @see OutputFormat#setEncoding(String)
*/
@Override
public synchronized void setEncoding(String encoding)
{
outputFormat.setEncoding(encoding);
}
/**
* @see OutputFormat#getIndent()
*/
public synchronized boolean getIndentEnabled()
{
return outputFormat.getIndent() != null;
}
/**
* @see OutputFormat#setIndent(boolean)
*/
public synchronized void setIndentEnabled(boolean doIndent)
{
outputFormat.setIndent(doIndent);
}
/**
* @see OutputFormat#getIndent()
*/
public synchronized String getIndentString()
{
return outputFormat.getIndent();
}
/**
* @see OutputFormat#setIndent(boolean)
*/
public synchronized void setIndentString(String indentString)
{
outputFormat.setIndent(indentString);
}
/**
* @see OutputFormat#setIndentSize(int)
*/
public synchronized int getIndentSize()
{
return StringUtils.defaultIfEmpty(outputFormat.getIndent(), "").length();
}
/**
* @see OutputFormat#setIndentSize(int)
*/
public synchronized void setIndentSize(int indentSize)
{
outputFormat.setIndentSize(indentSize);
}
/**
* @see OutputFormat#getLineSeparator()
*/
public synchronized String getLineSeparator()
{
return outputFormat.getLineSeparator();
}
/**
* @see OutputFormat#setLineSeparator(String)
*/
public synchronized void setLineSeparator(String separator)
{
outputFormat.setLineSeparator(separator);
}
/**
* @see OutputFormat#getNewLineAfterNTags()
*/
public synchronized int getNewLineAfterNTags()
{
return outputFormat.getNewLineAfterNTags();
}
/**
* @see OutputFormat#setNewLineAfterNTags(int)
*/
public synchronized void setNewLineAfterNTags(int tagCount)
{
outputFormat.setNewLineAfterNTags(tagCount);
}
/**
* @see OutputFormat#isExpandEmptyElements()
*/
public synchronized boolean isExpandEmptyElements()
{
return outputFormat.isExpandEmptyElements();
}
/**
* @see OutputFormat#setExpandEmptyElements(boolean)
*/
public synchronized void setExpandEmptyElements(boolean expandEmptyElements)
{
outputFormat.setExpandEmptyElements(expandEmptyElements);
}
/**
* @see OutputFormat#isNewlines()
*/
public synchronized boolean isNewlines()
{
return outputFormat.isNewlines();
}
/**
* @see OutputFormat#setNewlines(boolean)
*/
public synchronized void setNewlines(boolean newlines)
{
outputFormat.setNewlines(newlines);
}
/**
* @see OutputFormat#isNewLineAfterDeclaration()
*/
public synchronized boolean isNewLineAfterDeclaration()
{
return outputFormat.isNewLineAfterDeclaration();
}
/**
* @see OutputFormat#setNewLineAfterDeclaration(boolean)
*/
public synchronized void setNewLineAfterDeclaration(boolean newline)
{
outputFormat.setNewLineAfterDeclaration(newline);
}
/**
* @see OutputFormat#isOmitEncoding()
*/
public synchronized boolean isOmitEncoding()
{
return outputFormat.isOmitEncoding();
}
/**
* @see OutputFormat#setOmitEncoding(boolean)
*/
public synchronized void setOmitEncoding(boolean omitEncoding)
{
outputFormat.setOmitEncoding(omitEncoding);
}
/**
* @see OutputFormat#getEncoding()
*/
public synchronized boolean isPadText()
{
return outputFormat.isPadText();
}
/**
* @see OutputFormat#getEncoding()
*/
public synchronized void setPadText(boolean padText)
{
outputFormat.setPadText(padText);
}
/**
* @see OutputFormat#getEncoding()
*/
public synchronized boolean isSuppressDeclaration()
{
return outputFormat.isSuppressDeclaration();
}
/**
* @see OutputFormat#getEncoding()
*/
public synchronized void setSuppressDeclaration(boolean suppressDeclaration)
{
outputFormat.setSuppressDeclaration(suppressDeclaration);
}
/**
* @see OutputFormat#isTrimText()
*/
public synchronized boolean isTrimText()
{
return outputFormat.isTrimText();
}
/**
* @see OutputFormat#setTrimText(boolean)
*/
public synchronized void setTrimText(boolean trimText)
{
outputFormat.setTrimText(trimText);
}
/**
* @see OutputFormat#isXHTML()
*/
public synchronized boolean isXHTML()
{
return outputFormat.isXHTML();
}
/**
* @see OutputFormat#setXHTML(boolean)
*/
public synchronized void setXHTML(boolean xhtml)
{
outputFormat.setXHTML(xhtml);
}
}