package com.griddynamics.banshun.web;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.LinkedHashSet;
import java.util.List;
import java.util.Map;
import java.util.Set;
import javax.servlet.http.HttpServletRequest;
import org.springframework.core.annotation.AnnotationUtils;
import org.springframework.stereotype.Controller;
import org.springframework.util.Assert;
import org.springframework.util.ObjectUtils;
import org.springframework.util.StringUtils;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.servlet.mvc.annotation.DefaultAnnotationHandlerMapping;
private final Map<Class<?>, RequestMapping> cachedMappings = new HashMap<Class<?>, RequestMapping>();
List<String> urls = new ArrayList<String>();
if (beanName.startsWith("/")) {
urls.add(beanName);
}
return StringUtils.toStringArray(urls);
}
String[] urls = determineUrlsForHandlerByName(url);
register(urls, controller);
return null;
}
private void register(String[] urls, Object handler) {
if (!ObjectUtils.isEmpty(urls)) {
Assert.notNull(urls, "URL path array must not be null");
for (int j = 0; j < urls.length; j++) {
registerHandler(urls[j], handler);
}
} else {
if (logger.isDebugEnabled()) {
logger.debug("Rejected bean '" + handler + "': no URL paths identified");
}
}
}
register(determineUrlsByAnnotations(handler), handler);
return null;
}
Class<? extends Object> handlerType = handler.getClass();
RequestMapping mapping = AnnotationUtils.findAnnotation(handlerType, RequestMapping.class);
if (mapping != null) {
this.cachedMappings.put(handlerType, mapping);
Set<String> urls = new LinkedHashSet<String>();
String[] paths = mapping.value();
if (paths.length > 0) {
for (String path : paths) {
addUrlsForPath(urls, path);
}
return StringUtils.toStringArray(urls);
} else {
return determineUrlsForHandlerMethods(handlerType);
}
} else if (AnnotationUtils.findAnnotation(handlerType, Controller.class) != null) {
return determineUrlsForHandlerMethods(handlerType);
} else {
return null;
}
}
protected void validateHandler(Object handler, HttpServletRequest request)
throws Exception {
RequestMapping mapping = this.cachedMappings.get(handler.getClass());
if (mapping == null) {
mapping = AnnotationUtils.findAnnotation(handler.getClass(), RequestMapping.class);
}
if (mapping != null) {
validateMapping(mapping, request);
}
}
}