Package net.sourceforge.stripes.examples.bugzooky

Source Code of net.sourceforge.stripes.examples.bugzooky.ViewResourceActionBean

package net.sourceforge.stripes.examples.bugzooky;

import java.io.BufferedReader;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.io.PrintWriter;
import java.util.Collection;
import java.util.Iterator;
import java.util.SortedSet;
import java.util.TreeSet;

import javax.servlet.ServletContext;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import net.sourceforge.stripes.action.Resolution;
import net.sourceforge.stripes.action.UrlBinding;
import net.sourceforge.stripes.util.HtmlUtil;
import net.sourceforge.stripes.validation.SimpleError;
import net.sourceforge.stripes.validation.Validate;
import net.sourceforge.stripes.validation.ValidationErrors;
import net.sourceforge.stripes.validation.ValidationMethod;

/**
* ActionBean that is used to display source files from the bugzooky web application to the user.
* This ActionBean demonstrates the use of clean URLs by embedding the "resource" parameter in the
* binding.
*
* @author Tim Fennell
*/
@UrlBinding("/bugzooky/view{resource}")
public class ViewResourceActionBean extends BugzookyActionBean {
    @Validate(required=true)
    private String resource;

    /** Sets the name resource to be viewed. */
    public void setResource(String resource) { this.resource = resource; }

    /** Gets the name of the resource to be viewed. */
    public String getResource() { return resource; }

    /** Validates that only resources in the allowed places are asked for. */
    @ValidationMethod
    public void validate(ValidationErrors errors) {
        if (resource.startsWith("/WEB-INF") && !resource.startsWith("/WEB-INF/src")) {
            errors.add("resource",
                       new SimpleError("Naughty, naughty. We mustn't hack the URL now."));
        }
    }

    /**
     * Handler method which will handle a request for a resource in the web application
     * and stream it back to the client inside of an HTML preformatted section.
     */
    public Resolution view() {
        final InputStream stream = getContext().getRequest().getSession()
                                  .getServletContext().getResourceAsStream(this.resource);
        final BufferedReader reader = new BufferedReader( new InputStreamReader(stream) );

        return new Resolution() {
            public void execute(HttpServletRequest request, HttpServletResponse response) throws Exception {
                PrintWriter writer = response.getWriter();
                writer.write("<html><head><title>");
                writer.write(resource);
                writer.write("</title></head><body><pre>");

                String line;
                while ( (line = reader.readLine()) != null ) {
                    writer.write(HtmlUtil.encode(line));
                    writer.write("\n");
                }

                writer.write("</pre></body></html>");
            }
        };
    }

    /**
     * Method used when this ActionBean is used as a view helper. Returns a listing of all the
     * JSPs and ActionBeans available for viewing.
     */
    @SuppressWarnings("unchecked")
    public Collection getAvailableResources() {
        ServletContext ctx = getContext().getRequest().getSession().getServletContext();
        SortedSet<String> resources = new TreeSet<String>();
        resources.addAll( ctx.getResourcePaths("/bugzooky/"));
        resources.addAll( ctx.getResourcePaths("/bugzooky/layout/"));
        resources.addAll( ctx.getResourcePaths("/WEB-INF/src/"));

        Iterator<String> iterator = resources.iterator();
        while (iterator.hasNext()) {
            String file = iterator.next();
            if (!file.endsWith(".jsp") && !file.endsWith(".java")) {
                iterator.remove();
            }
        }

        return resources;
    }
}
TOP

Related Classes of net.sourceforge.stripes.examples.bugzooky.ViewResourceActionBean

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.