package com.nominanuda.springmvc;
import static com.nominanuda.web.http.ServletHelper.SERVLET;
import java.util.List;
import javax.servlet.http.HttpServletRequest;
import org.apache.http.HttpRequest;
import org.springframework.beans.BeansException;
import org.springframework.context.ApplicationContext;
import org.springframework.context.ApplicationContextAware;
import org.springframework.web.servlet.HandlerExecutionChain;
import org.springframework.web.servlet.HandlerMapping;
import com.nominanuda.web.mvc.HandlerMatcher;
import com.nominanuda.zen.common.Tuple2;
import com.nominanuda.zen.obj.Stru;
public class MultiHandlerMatcherMapping implements HandlerMapping, ApplicationContextAware {
public final static String BEAN_PROP_MATCHERS = "handlerMatchers";
protected List<HandlerMatcher> matchers;
public HandlerExecutionChain getHandler(HttpServletRequest request) throws Exception {
HttpRequest httpRequest = SERVLET.getOrCreateRequest(request, true);
Tuple2<Object, Stru> res = match(httpRequest);
if (res == null) {
return null;
} else {
SERVLET.storeCommand(request, res.get1());
return new HandlerExecutionChain(res.get0());
}
}
private Tuple2<Object, Stru> match(HttpRequest request) {
for (HandlerMatcher matcher : matchers) {
Tuple2<Object, Stru> res = matcher.match(request);
if (null != res) {
return res;
}
}
return null;
}
/* setters */
public void setApplicationContext(ApplicationContext applicationContext) throws BeansException {
// this.applicationContext = applicationContext;
}
public void setHandlerMatchers(List<HandlerMatcher> matchers) {
this.matchers = matchers;
}
}