package io.swagger.util; import java.io.ByteArrayOutputStream; import java.io.IOException; import java.io.PrintStream; import java.io.UnsupportedEncodingException; import java.nio.charset.StandardCharsets; /** * The <code>OutputReplacer</code> enumerator helps to run a code with a custom output stream. */ public enum OutputReplacer { /** * The "standard" output stream. */ OUT { @Override PrintStream getOutputStream() { return System.out; } @Override void setOutputStream(PrintStream outputStream) { System.setOut(outputStream); } }, /** * The "standard" error output stream. */ ERROR { @Override PrintStream getOutputStream() { return System.err; } @Override void setOutputStream(PrintStream outputStream) { System.setErr(outputStream); } }; /** * Runs a code with a custom output stream. * * @param function is code to run * @return is output stream as string */ public String run(Function function) { final PrintStream out = getOutputStream(); final ByteArrayOutputStream outputStream = new ByteArrayOutputStream(); try { setOutputStream(new PrintStream(outputStream)); function.run(); } finally { setOutputStream(out); } try { return outputStream.toString(StandardCharsets.UTF_8.name()); } catch (UnsupportedEncodingException ex) { throw new IllegalStateException(ex); } } abstract PrintStream getOutputStream(); abstract void setOutputStream(PrintStream printStream); public interface Function { void run(); } }