package pl.matisoft.soy.ajax.process.yahoo; import java.io.IOException; import java.io.Reader; import java.io.Writer; import com.yahoo.platform.yui.compressor.JavaScriptCompressor; import org.mozilla.javascript.ErrorReporter; import org.mozilla.javascript.EvaluatorException; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import pl.matisoft.soy.ajax.process.OutputProcessor; /** * Created with IntelliJ IDEA. * User: mati * Date: 12/10/2013 * Time: 14:36 */ public class YahooOutputProcessor implements OutputProcessor { private static final Logger logger = LoggerFactory.getLogger(YahooOutputProcessor.class); // options of YUI compressor private int linebreakpos = -1; /** * Renames variables. */ boolean munge = false; boolean verbose = false; boolean preserveAllSemiColons = true; boolean disableOptimizations = false; private boolean logWarn = false; private boolean logError = true; @Override public void process(Reader reader, Writer writer) throws IOException { final JavaScriptCompressor javaScriptCompressor = new JavaScriptCompressor(reader, new ErrorReporter() { public void warning(final String message, final String sourceName, final int line, final String lineSource, final int lineOffset) { if (!logWarn) { return; } if (line < 0) { logger.warn("\n[WARNING] " + message); } else { logger.warn("\n[WARNING] " + line + ':' + lineOffset + ':' + message); } } public void error(final String message, final String sourceName, final int line, final String lineSource, final int lineOffset) { if (!logError) { return; } if (line < 0) { logger.error("\n[ERROR] " + message); } else { logger.error("\n[ERROR] " + line + ':' + lineOffset + ':' + message); } } public EvaluatorException runtimeError(final String message, final String sourceName, final int line, final String lineSource, final int lineOffset) { error(message, sourceName, line, lineSource, lineOffset); return new EvaluatorException(message); } }); javaScriptCompressor.compress(writer, linebreakpos, munge, verbose, preserveAllSemiColons, disableOptimizations); } public void setMunge(final boolean munge) { this.munge = munge; } public void setVerbose(final boolean verbose) { this.verbose = verbose; } public void setPreserveAllSemiColons(final boolean preserveAllSemiColons) { this.preserveAllSemiColons = preserveAllSemiColons; } public void setDisableOptimizations(final boolean disableOptimizations) { this.disableOptimizations = disableOptimizations; } public void setLogWarn(final boolean logWarn) { this.logWarn = logWarn; } public void setLogError(final boolean logError) { this.logError = logError; } public void setLinebreakpos(int linebreakpos) { this.linebreakpos = linebreakpos; } }