package railo.runtime.tag; import java.io.IOException; import javax.servlet.jsp.JspException; import railo.runtime.ext.tag.BodyTagTryCatchFinallyImpl; import railo.runtime.listener.ApplicationContextSupport; import railo.runtime.writer.BodyContentImpl; public final class Silent extends BodyTagTryCatchFinallyImpl { private Boolean bufferOutput=true; private BodyContentImpl bc; private boolean wasSilent; /** * @param bufferoutput the bufferoutput to set */ public void setBufferoutput(boolean bufferOutput) { this.bufferOutput = bufferOutput?Boolean.TRUE:Boolean.FALSE; } @Override public int doStartTag() throws JspException { if(bufferOutput==null) bufferOutput=((ApplicationContextSupport)pageContext.getApplicationContext()).getBufferOutput()?Boolean.TRUE:Boolean.FALSE; if(bufferOutput.booleanValue()) bc = (BodyContentImpl) pageContext.pushBody(); else wasSilent=pageContext.setSilent(); return EVAL_BODY_INCLUDE; } @Override public void doCatch(Throwable t) throws Throwable { if(bufferOutput.booleanValue()){ try { bc.flush(); } catch (IOException e) {} pageContext.popBody(); bc=null; } else if(!wasSilent)pageContext.unsetSilent(); super.doCatch(t); } @Override public void doFinally() { if(bufferOutput.booleanValue()){ if(bc!=null){ bc.clearBody(); pageContext.popBody(); } } else if(!wasSilent)pageContext.unsetSilent(); } @Override public void release() { super.release(); bc=null; this.bufferOutput=null; } }