/* * 作成日: 2005/06/29 * * MockHttperServletを使ったメッセージディスパッチャー */ package pwv.spring.dispatcher; import java.awt.Component; import java.util.HashMap; import java.util.Iterator; import java.util.Map; import java.util.Observable; import java.util.Observer; import org.springframework.mock.web.MockHttpServletRequest; import org.springframework.web.servlet.ModelAndView; import org.springframework.web.servlet.mvc.Controller; /** * MockMessageDispatcher * * @author Hiroshi TAKEMOTO */ public class MockMessageDispatcher extends Observable implements IMessageDispatcher { private Controller contorller; private Map listener = new HashMap(); /** * */ public MockMessageDispatcher() { super(); } /** * @param controller */ public void setContorller(Controller controller) { contorller = controller; } /* (非 Javadoc) * @see pwv.spring.dispatcher.IMessageDispatcher#doSubmit(java.lang.String, java.util.Map) */ public void doSubmit(String url, Map args) { MockHttpServletRequest request = new MockHttpServletRequest("POST", url); Iterator itr = args.keySet().iterator(); while (itr.hasNext()) { Object key = (Object)itr.next(); request.addParameter((String)key, (String)args.get(key)); } try { ModelAndView modelAndView = contorller.handleRequest(request, null); String view = modelAndView != null ? modelAndView.getViewName() : null; Observer target = (Observer)listener.get(view); super.addObserver(target); this.setChanged(); notifyObservers(modelAndView); super.deleteObserver(target); } catch (Exception e) { } } /* (非 Javadoc) * @see java.util.Observable#addObserver(java.util.Observer) */ public synchronized void addObserver(Observer o) { if (o instanceof Component) { Component com = (Component)o; listener.put(com.getName(), o); } } public void doSubmit(String url, String action) { HashMap args = new HashMap(); args.put("action", action); doSubmit(url, args); } }