edu.cornell.mannlib.vitro.webapp.auth.policy.RequestPolicyList.java Source code

Java tutorial

Introduction

Here is the source code for edu.cornell.mannlib.vitro.webapp.auth.policy.RequestPolicyList.java

Source

/* $This file is distributed under the terms of the license in /doc/license.txt$ */

package edu.cornell.mannlib.vitro.webapp.auth.policy;

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

import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;

import edu.cornell.mannlib.vitro.webapp.auth.policy.ifaces.PolicyIface;

/**
 * Allow us to store policies in a Request, in addition to those in the
 * ServletContext
 */
public class RequestPolicyList extends PolicyList {
    private static final String ATTRIBUTE_POLICY_ADDITIONS = RequestPolicyList.class.getName();
    private static final Log log = LogFactory.getLog(RequestPolicyList.class);

    /**
     * Get a copy of the current list of policies. This includes the policies in
     * the ServletContext, followed by any stored in the request. This method may
     * return an empty list, but it never returns null.
     */
    public static PolicyList getPolicies(HttpServletRequest request) {
        ServletContext ctx = request.getSession().getServletContext();

        PolicyList list = ServletPolicyList.getPolicies(ctx);
        list.addAll(getPoliciesFromRequest(request));
        return list;
    }

    public static void addPolicy(ServletRequest request, PolicyIface policy) {
        PolicyList policies = getPoliciesFromRequest(request);
        if (!policies.contains(policy)) {
            policies.add(policy);
            log.debug("Added policy: " + policy.toString());
        } else {
            log.warn("Ignored attempt to add redundent policy.");
        }
    }

    /**
     * Get the current list of policy additions from the request, or create one
     * if there is none. This method may return an empty list, but it never
     * returns null.
     */
    private static PolicyList getPoliciesFromRequest(ServletRequest request) {
        if (request == null) {
            throw new NullPointerException("request may not be null.");
        }

        Object obj = request.getAttribute(ATTRIBUTE_POLICY_ADDITIONS);
        if (obj == null) {
            obj = new PolicyList();
            request.setAttribute(ATTRIBUTE_POLICY_ADDITIONS, obj);
        }

        if (!(obj instanceof PolicyList)) {
            throw new IllegalStateException("Expected to find an instance of " + PolicyList.class.getName()
                    + " in the context, but found an instance of " + obj.getClass().getName() + " instead.");
        }

        return (PolicyList) obj;
    }
}