Package com.psddev.cms.db

Source Code of com.psddev.cms.db.FrameFilter$CapturingResponse

package com.psddev.cms.db;

import java.io.IOException;
import java.io.PrintWriter;
import java.io.StringWriter;

import javax.servlet.FilterChain;
import javax.servlet.ServletException;
import javax.servlet.ServletOutputStream;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpServletResponseWrapper;

import com.psddev.dari.util.AbstractFilter;
import com.psddev.dari.util.HtmlWriter;
import com.psddev.dari.util.ObjectUtils;

public class FrameFilter extends AbstractFilter {

    @Override
    protected void doRequest(
            HttpServletRequest request,
            HttpServletResponse response,
            FilterChain chain)
            throws IOException, ServletException {

        if (ObjectUtils.to(boolean.class, request.getParameter("_frame"))) {
            CapturingResponse capturing = new CapturingResponse(response);

            try {
                chain.doFilter(request, capturing);

            } finally {
                @SuppressWarnings("resource")
                HtmlWriter writer = new HtmlWriter(response.getWriter());

                writer.writeTag("!doctype html");
                writer.writeStart("html");
                    writer.writeStart("body");
                        writer.writeStart("textarea", "id", "frameBody");
                            writer.writeHtml(capturing.getOutput());
                        writer.writeEnd();
                    writer.writeEnd();
                writer.writeEnd();
            }

        } else {
            chain.doFilter(request, response);
        }
    }

    private static final class CapturingResponse extends HttpServletResponseWrapper {

        private final StringWriter output;
        private final PrintWriter printWriter;

        public CapturingResponse(HttpServletResponse response) {
            super(response);

            this.output = new StringWriter();
            this.printWriter = new PrintWriter(output);
        }

        @Override
        public ServletOutputStream getOutputStream() {
            throw new IllegalStateException();
        }

        @Override
        public PrintWriter getWriter() {
            return printWriter;
        }

        public String getOutput() {
            return output.toString();
        }
    }
}
TOP

Related Classes of com.psddev.cms.db.FrameFilter$CapturingResponse

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.