package ru.yandex.qatools.allure.utils;
import java.io.File;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.FilterWriter;
import java.io.IOException;
import java.io.OutputStream;
import java.io.OutputStreamWriter;
import java.io.Writer;
import java.nio.charset.StandardCharsets;
import static ru.yandex.qatools.allure.config.AllureNamingUtils.replaceBadXmlCharactersBySpace;
/**
* @author Dmitry Baev charlie@yandex-team.ru
* Date: 12.03.15
*/
public class BadXmlCharacterFilterWriter extends FilterWriter {
/**
* Create a new filtered writer
*/
public BadXmlCharacterFilterWriter(File out) throws FileNotFoundException {
this(new FileOutputStream(out));
}
/**
* Create a new filtered writer
*/
public BadXmlCharacterFilterWriter(OutputStream out) {
this(new OutputStreamWriter(out, StandardCharsets.UTF_8));
}
/**
* Create a new filtered writer.
*
* @param out a Writer object to provide the underlying stream.
* @throws NullPointerException if <code>out</code> is <code>null</code>
*/
protected BadXmlCharacterFilterWriter(Writer out) {
super(out);
}
/**
* Replace invalid XML characters and then write characters
*
* @throws IOException If an I/O error occurs
* @see ru.yandex.qatools.allure.config.AllureNamingUtils#replaceBadXmlCharactersBySpace(char[], int, int)
*/
@Override
public void write(char[] cbuf, int off, int len) throws IOException {
replaceBadXmlCharactersBySpace(cbuf, off, len);
super.write(cbuf, off, len);
}
}