01: /*
02: * Created on Jun 15, 2005
03: */
04: package uk.org.ponder.springutil;
05:
06: import java.util.Iterator;
07: import java.util.Map;
08:
09: import javax.servlet.http.HttpServletRequest;
10:
11: import org.springframework.beans.BeansException;
12: import org.springframework.web.servlet.handler.AbstractHandlerMapping;
13: import org.springframework.web.servlet.mvc.Controller;
14: import org.springframework.web.util.UrlPathHelper;
15:
16: /**
17: * A semi-obsolete class mapping URLs to SpringMVC "Handlers"/Controllers,
18: * dating from the days when we were still experimenting with getting using
19: * SpringMVC as a view locator. What we would "like" is to be able to refer
20: * to views from out of Handlers in order to generate URLs, but this approach
21: * fails conceptually since Spring URL mappings are not in general one-to-one.
22: * This problem goes away in RSF with the ViewParameters system.
23: * @author Antranig Basman (antranig@caret.cam.ac.uk)
24: *
25: */
26: public class ReversibleURLHandlerMapping extends AbstractHandlerMapping
27: implements ReverseURLMapper {
28:
29: private UrlPathHelper urlPathHelper = new UrlPathHelper();
30:
31: private Map forwardmap;
32: private Map backwardmap;
33:
34: /**
35: * Set a Map with URL paths as keys and handler beans as values. Convenient
36: * for population with bean references.
37: * <p>
38: * The key MUST be a single URL path (no wildcards),
39: * and the value MUST be a bean implementing
40: * Controller.
41: *
42: * @param urlMap
43: * map with URLs as keys and beans as values
44: */
45: public void setUrlMap(Map urlMap) {
46: this .forwardmap.putAll(urlMap);
47: for (Iterator hit = urlMap.keySet().iterator(); hit.hasNext();) {
48: String url = (String) hit.next();
49: Controller controller = (Controller) urlMap.get(url);
50: if (controller instanceof URLAwareController) {
51: URLAwareController uc = (URLAwareController) controller;
52: uc.setReverseURLMapper(this );
53: backwardmap.put(uc.getBeanName(), url);
54: }
55:
56: // backwardmap.put(controller, url);
57: }
58: }
59:
60: public String URLforBean(String beanname) {
61: return (String) backwardmap.get(beanname);
62: }
63:
64: // copied from AbstractUrlHandlerMapping
65: /**
66: * Look up a handler for the URL path of the given request.
67: * @param request current HTTP request
68: * @return the looked up handler instance, or null
69: */
70: /*
71: protected Object getHandlerInternal(HttpServletRequest request) throws Exception {
72: String lookupPath = this.urlPathHelper.getLookupPathForRequest(request);
73: if (logger.isDebugEnabled()) {
74: logger.debug("Looking up handler for [" + lookupPath + "]");
75: }
76: return lookupHandler(lookupPath);
77: }
78: */
79:
80: public void initApplicationContext() throws BeansException {
81:
82: }
83:
84: protected Object getHandlerInternal(HttpServletRequest request)
85: throws Exception {
86: // TODO Auto-generated method stub
87: return null;
88: }
89: }
|