1 package com.icesoft.faces.webapp.http.servlet; 2 3 import com.icesoft.faces.util.event.servlet.ContextEventRepeater; 4 import com.icesoft.faces.webapp.http.common.Configuration; 5 import com.icesoft.faces.webapp.http.core.PageServer; 6 import com.icesoft.faces.webapp.http.core.ViewQueue; 7 8 import javax.servlet.http.HttpServletRequest ; 9 import javax.servlet.http.HttpServletResponse ; 10 import javax.servlet.http.HttpSession ; 11 import java.util.Map ; 12 13 public class MultiViewServlet extends BasicAdaptingServlet { 14 private int viewCount = 0; 15 private HttpSession session; 16 private Map views; 17 private ViewQueue asynchronouslyUpdatedViews; 18 private String sessionID; 19 private Configuration configuration; 20 private SessionDispatcher.Listener.Monitor sessionMonitor; 21 22 public MultiViewServlet(HttpSession session, String sessionID, SessionDispatcher.Listener.Monitor sessionMonitor, Map views, ViewQueue asynchronouslyUpdatedViews, Configuration configuration) { 23 super(new PageServer()); 24 this.sessionID = sessionID; 25 this.session = session; 26 this.sessionMonitor = sessionMonitor; 27 this.views = views; 28 this.asynchronouslyUpdatedViews = asynchronouslyUpdatedViews; 29 this.configuration = configuration; 30 } 31 32 public void service(HttpServletRequest request, HttpServletResponse response) throws Exception { 33 ServletView view; 35 String redirectViewNumber = request.getParameter("rvn"); 36 if (redirectViewNumber == null) { 37 String viewNumber = String.valueOf(++viewCount); 38 view = new ServletView(viewNumber, sessionID, request, response, asynchronouslyUpdatedViews, configuration); 39 views.put(viewNumber, view); 40 ContextEventRepeater.viewNumberRetrieved(session, sessionID, Integer.parseInt(viewNumber)); 41 } else { 42 view = (ServletView) views.get(redirectViewNumber); 43 if (view == null) { 44 view = new ServletView(redirectViewNumber, sessionID, request, response, asynchronouslyUpdatedViews, configuration); 45 views.put(redirectViewNumber, view); 46 ContextEventRepeater.viewNumberRetrieved(session, sessionID, Integer.parseInt(redirectViewNumber)); 47 } else { 48 view.updateOnRequest(request, response); 49 view.switchToNormalMode(); 50 } 51 } 52 sessionMonitor.touchSession(); 53 super.service(request, response); 54 view.switchToPushMode(); 55 view.release(); 56 } 57 } 58 | Popular Tags |