Package railo.commons.io

Source Code of railo.commons.io.BodyContentStack

package railo.commons.io;
import javax.servlet.jsp.JspWriter;
import javax.servlet.jsp.tagext.BodyContent;

import railo.runtime.writer.BodyContentImpl;
import railo.runtime.writer.CFMLWriter;
import railo.runtime.writer.DevNullBodyContent;

/**
* Stack for the Body Content Objects
*/
public final class BodyContentStack {

    private CFMLWriter base;
   
    private final DevNullBodyContent nirvana=new DevNullBodyContent();
    private Entry current;
    private final Entry root;
   
   
    /**
     * Default Constructor
     */
    public BodyContentStack() {
        current=new Entry(null,null);
        root=current;
    }

    /**
     * initialize the BodyContentStack
     * @param rsp
     */
    public void init(CFMLWriter writer) {
      this.base=writer;
    }

    /**
     * release the BodyContentStack
     */
    public void release() {
        this.base=null;
        current=root;
        current.body=null;
        current.after=null;
        current.before=null;
    }
   

    /**
     * push a new BodyContent to Stack
     * @return new BodyContent
     */
    public BodyContent push() {
        if(current.after==null) {
            current.after=new Entry(current,new BodyContentImpl(current.body==null?(JspWriter)base:current.body));
        }
        else {
            current.after.doDevNull=false;
            current.after.body.init(current.body==null?(JspWriter)base:current.body);
        }
        current=current.after;
        return current.body;
    }
   
    /**
     * pop a BodyContent from Stack
     * @return BodyContent poped
     */
    public JspWriter pop() {
        if(current.before!=null) current=current.before;
        return getWriter();
    }
   
    /**
     * set if actuell BodyContent is DevNull or not
     * @param doDevNull
     */
    public void setDevNull(boolean doDevNull) {
        current.doDevNull=doDevNull;
    }
   
    /**
     * @return returns actuell writer
     */
    public JspWriter getWriter() {
        if(!current.doDevNull) {
            if(current.body!=null) return current.body;
            return base;
        }
        return nirvana;
    }
   
   
    class Entry {
        private Entry before;
        private Entry after;
        private boolean doDevNull=false;
        private BodyContentImpl body;
        private Entry(Entry before, BodyContentImpl body) {
            this.before=before;
            this.body=body;
        }
       
    }

    /**
     * @return returns DevNull Object
     */
    public boolean getDevNull() {
        return current.doDevNull;
    }

    /**
     * @return returns DevNull Object
     */
    public DevNullBodyContent getDevNullBodyContent() {
        return nirvana;
    }

    /**
     * @return Returns the base.
     */
    public CFMLWriter getBase() {
        return base;
    }

}
TOP

Related Classes of railo.commons.io.BodyContentStack

TOP
Copyright © 2018 www.massapi.com. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.