org.frameworkset.web.servlet.handler.BeanNameUrlHandlerMapping Maven / Gradle / Ivy
Show all versions of bboss-mvc Show documentation
/*
* Copyright 2008 biaoping.yin
*
* 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.frameworkset.web.servlet.handler;
/**
* Title: BeanNameUrlHandlerMapping.java
* Description:
* bboss workgroup
* Copyright (c) 2008
* @Date 2010-9-24
* @author biaoping.yin
* @version 1.0
*/
public class BeanNameUrlHandlerMapping extends AbstractDetectingUrlHandlerMapping{
private boolean useDefaultSuffixPattern = true;
/**
* Set whether to register paths using the default suffix pattern as well:
* i.e. whether "/users" should be registered as "/users.*" too.
* Default is "true". Turn this convention off if you intend to interpret
* your @HandlerMapping
paths strictly.
*
Note that paths which include a ".xxx" suffix already will not be
* transformed using the default suffix pattern in any case.
*/
public void setUseDefaultSuffixPattern(boolean useDefaultSuffixPattern) {
this.useDefaultSuffixPattern = useDefaultSuffixPattern;
}
/**
* Checks name and aliases of the given bean for URLs, starting with "/".
*/
protected String[] determineUrlsForHandler(String beanName) {
// List urls = new ArrayList();
// if (beanName.startsWith("/")) {
// urls.add(beanName);
// }
// String[] aliases = getApplicationContext().getAliases(beanName);
// for (int i = 0; i < aliases.length; i++) {
// if (aliases[i].startsWith("/")) {
// urls.add(aliases[i]);
// }
// }
// return StringUtil.toStringArray(urls);
// boolean iscontroller = beanName != null && beanName.startsWith("/");
// Pro pro = this.getApplicationContext().getProBean(beanName);
// boolean restful = pro.getBooleanExtendAttribute("restful", false);
// if(iscontroller)
// {
//
// return beanName.split(",");
//
// }
// return null;
// return determineUrlsForHandler_(beanName);
return HandlerUtils.determineUrlsForHandler(getApplicationContext(), beanName, null);
}
// /**
// * Checks name and aliases of the given bean for URLs, starting with "/".
// */
// protected String[] determineUrlsForHandler(String beanName) {
//
//// List urls = new ArrayList();
//// if (beanName.startsWith("/")) {
//// urls.add(beanName);
//// }
//// String[] aliases = getApplicationContext().getAliases(beanName);
//// for (int i = 0; i < aliases.length; i++) {
//// if (aliases[i].startsWith("/")) {
//// urls.add(aliases[i]);
//// }
//// }
//// return StringUtil.toStringArray(urls);
// boolean iscontroller = beanName != null && beanName.startsWith("/");
// Pro pro = this.getApplicationContext().getProBean(beanName);
// boolean restful = pro.getBooleanExtendAttribute("restful", false);
// if(iscontroller)
// {
//
// return beanName.split(",");
//
// }
//
// return null;
//// return determineUrlsForHandler_(beanName);
// }
// protected String[] determineUrlsForHandler_(String beanName) {
// ApplicationContext context = getApplicationContext();
// Pro beaninfos = context.getProBean(beanName);
// if(!beaninfos.isBean())
// return null;
// Class> handlerType = beaninfos.getBeanClass();
//// ListableBeanFactory bf = (context instanceof ConfigurableApplicationContext ?
//// ((ConfigurableApplicationContext) context).getBeanFactory() : context);
//// GenericBeanFactoryAccessor bfa = new GenericBeanFactoryAccessor(bf);
// HandlerMapping mapping = AnnotationUtils.findAnnotation(handlerType, HandlerMapping.class);
//
// if (mapping != null) {
// // @HandlerMapping found at type level
// this.cachedMappings.put(handlerType, mapping);
// Set urls = new LinkedHashSet();
// String[] paths = mapping.value();
// if (paths.length > 0) {
// // @HandlerMapping specifies paths at type level
// for (String path : paths) {
// addUrlsForPath(urls, path);
// }
// return StringUtil.toStringArray(urls);
// }
// else {
// // actual paths specified by @HandlerMapping at method level
// return determineUrlsForHandlerMethods(handlerType);
// }
// }
// else if (AnnotationUtils.findAnnotation(handlerType, Controller.class) != null) {
// // @HandlerMapping to be introspected at method level
// return determineUrlsForHandlerMethods(handlerType);
// }
// else {
// return null;
// }
// }
//
// /**
// * Derive URL mappings from the handler's method-level mappings.
// * @param handlerType the handler type to introspect
// * @return the array of mapped URLs
// */
// protected String[] determineUrlsForHandlerMethods(Class> handlerType) {
// final Set urls = new LinkedHashSet();
// ReflectionUtils.doWithMethods(handlerType, new ReflectionUtils.MethodCallback() {
// public void doWith(Method method) {
// HandlerMapping mapping = method.getAnnotation(HandlerMapping.class);
// if (mapping != null) {
// String[] mappedPaths = mapping.value();
// for (int i = 0; i < mappedPaths.length; i++) {
// addUrlsForPath(urls, mappedPaths[i]);
// }
// }
// }
// });
// return StringUtil.toStringArray(urls);
// }
//
// /**
// * Add URLs and/or URL patterns for the given path.
// * @param urls the Set of URLs for the current bean
// * @param path the currently introspected path
// */
// protected void addUrlsForPath(Set urls, String path) {
// urls.add(path);
// if (this.useDefaultSuffixPattern && path.indexOf('.') == -1) {
// urls.add(path + ".*");
// }
// }
//
//
// /**
// * Validate the given annotated handler against the current request.
// * @see #validateMapping
// */
// protected void validateHandler(Object handler, HttpServletRequest request) throws Exception {
// HandlerMapping mapping = this.cachedMappings.get(handler.getClass());
// if (mapping == null) {
// mapping = AnnotationUtils.findAnnotation(handler.getClass(), HandlerMapping.class);
// }
// if (mapping != null) {
// validateMapping(mapping, request);
// }
// }
//
// /**
// * Validate the given type-level mapping metadata against the current request,
// * checking HTTP request method and parameter conditions.
// * @param mapping the mapping metadata to validate
// * @param request current HTTP request
// * @throws Exception if validation failed
// */
// protected void validateMapping(HandlerMapping mapping, HttpServletRequest request) throws Exception {
// RequestMethod[] mappedMethods = mapping.method();
// if (!ServletAnnotationMappingUtils.checkRequestMethod(mappedMethods, request)) {
// String[] supportedMethods = new String[mappedMethods.length];
// for (int i = 0; i < mappedMethods.length; i++) {
// supportedMethods[i] = mappedMethods[i].name();
// }
// throw new HttpRequestMethodNotSupportedException(request.getMethod(), supportedMethods);
// }
//
// String[] mappedParams = mapping.params();
// if (!ServletAnnotationMappingUtils.checkParameters(mappedParams, request)) {
// throw new ServletException("Parameter conditions {" +
// StringUtil.arrayToDelimitedString(mappedParams, ", ") +
// "} not met for request parameters: " + request.getParameterMap());
// }
// }
}