Package org.springmodules.validation.bean.context.web

Source Code of org.springmodules.validation.bean.context.web.ValidationContextHandlerInterceptor

/*
* Copyright 2002-2005 the original author or authors.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
*      http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/

package org.springmodules.validation.bean.context.web;

import java.beans.PropertyEditorManager;

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

import org.springframework.web.servlet.handler.HandlerInterceptorAdapter;
import org.springframework.web.servlet.ModelAndView;
import org.springframework.util.PathMatcher;
import org.springframework.util.AntPathMatcher;
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
import org.springmodules.validation.bean.context.ValidationContextUtils;

/**
* An interceptor that sets the validation context based on configured mappings of url patterns to validation context
* tokens. This interceptor is the Spring MVC counterpart of the {@link ValidationContextFilter}.
*
* @author Uri Boness
*/
public class ValidationContextHandlerInterceptor extends HandlerInterceptorAdapter {

    private final static Log logger = LogFactory.getLog(ValidationContextHandlerInterceptor.class);

    static {
        PropertyEditorManager.registerEditor(ValidationContextUrlMapping[].class,
                ValidationContextUrlMappingArrayPropertyEditor.class);
    }

    private ValidationContextUrlMapping[] validationContextUrlMappings;

    private PathMatcher pathMatcher;

    public ValidationContextHandlerInterceptor() {
        validationContextUrlMappings = new ValidationContextUrlMapping[0];
        pathMatcher = new AntPathMatcher();
    }

    /**
     * Creates and sets the validation context based on the request URI. The validation context tokens are determined
     * by the configured {@link ValidationContextUrlMapping}'s.
     *
     * @see HandlerInterceptorAdapter#preHandle(javax.servlet.http.HttpServletRequest, javax.servlet.http.HttpServletResponse, Object)
     * @see #setValidationContextUrlMappings(ValidationContextUrlMapping[])
     */
    public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {

        String[] contextTokens = new String[0];

        for (int i=0; i<validationContextUrlMappings.length; i++) {
            String pattern = validationContextUrlMappings[i].getUrlPattern();
            if (pathMatcher.match(pattern, request.getRequestURI())) {
                contextTokens = validationContextUrlMappings[i].getContextTokens();
                break;
            }
        }

        if (logger.isInfoEnabled() && contextTokens.length == 0) {
            logger.info("No validation context url mapping matches url '" + request.getRequestURI() +
                    "'. Setting validation context without supported tokens...");
        }

        ValidationContextUtils.setContext(contextTokens);


        return true;
    }

    /**
     * Clears
     * @param request
     * @param response
     * @param handler
     * @param modelAndView
     * @throws Exception
     */
    public void postHandle(HttpServletRequest request, HttpServletResponse response, Object handler, ModelAndView modelAndView) throws Exception {
        ValidationContextUtils.clearContext();
    }


    //============================================== Setter/Getter =====================================================

    public ValidationContextUrlMapping[] getValidationContextUrlMappings() {
        return validationContextUrlMappings;
    }

    public void setValidationContextUrlMappings(ValidationContextUrlMapping[] validationContextUrlMappings) {
        this.validationContextUrlMappings = validationContextUrlMappings;
    }

    public PathMatcher getPathMatcher() {
        return pathMatcher;
    }

    public void setPathMatcher(PathMatcher pathMatcher) {
        this.pathMatcher = pathMatcher;
    }

}
TOP

Related Classes of org.springmodules.validation.bean.context.web.ValidationContextHandlerInterceptor

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.