jpivotportlet.java

来自「OLAP 的客户端代码」· Java 代码 · 共 448 行 · 第 1/2 页

JAVA
448
字号
	}

    /** TODO EBIF: das sollte wieder verschwinden, wenn HH die $VARIABLEN im Mondrian eingebaut hat */
/*
	private boolean passThru(ServletRequest req) {
      if (passThru == null)
        return false;
      HttpServletRequest hsr = (HttpServletRequest) req;
      return UrlUtils.matchPattern(hsr, passThru);
    }
*/
    public void destroy() {
    }

    /** for testing */
    void setForceExtension(String forceExtension) {
      this.forceExtension = forceExtension;
    }

    private void logRequest(PortletRequest request) {
      logger.info(">>> Request " + request.getScheme() + "://" + request.getServerName() + ":"
          + request.getServerPort() + request.getContextPath() );
    }

    public RequestContext createContext(RenderRequest request, RenderResponse response) {
      
      HttpServletRequest httpRequest = getHttpServletRequest(this, request, response);
      HttpServletResponse httpResponse = getHttpServletResponse(this, request, response);
      //HttpSession session = httpRequest.getSession(true);
      //RequestContextFactory rcf = RequestContextFactoryFinder.findFactory(session);

      //return rcf.createContext(httpRequest, httpResponse);
      return RequestContextFactoryFinder.createContext(httpRequest, httpResponse, true);
    }
    
    protected String getContextProviderClassNameParameter(PortletConfig config) {
        return config.getInitParameter(PARAM_SERVLET_CONTEXT_PROVIDER);
    }
    
    protected ServletContextProvider getServletContextProvider() {
        return servletContextProvider;
    }
    
    protected ServletContext getServletContext(GenericPortlet portlet, PortletRequest request, PortletResponse response) {
        return getServletContextProvider().getServletContext(portlet);
    }
    
    protected HttpServletRequest getHttpServletRequest(GenericPortlet portlet, PortletRequest request, PortletResponse response) {
        return getServletContextProvider().getHttpServletRequest(portlet, request);
    }
    
    protected HttpServletResponse getHttpServletResponse(GenericPortlet portlet, PortletRequest request, PortletResponse response) {
        return getServletContextProvider().getHttpServletResponse(portlet, response);
    }

	class MyHandler implements RequestSynchronizer.Handler {
		protected GenericPortlet portlet;
		protected RequestContext context;
	    protected RenderRequest request;
	    protected RenderResponse response;
	    protected HttpServletRequest httpRequest;
	    protected HttpServletResponse httpResponse;

	    public MyHandler(GenericPortlet portlet, RequestContext context, RenderRequest request, RenderResponse response) {
	      this.portlet = portlet;
	      this.context = context;
	      this.request = request;
	      this.response = response;
	      this.httpRequest = getHttpServletRequest(portlet, request, response);
	      this.httpResponse = getHttpServletResponse(portlet, request, response);
	    }

	    public String getResultURI() {
	      // did the controller change the view?
	      String uri = (String) request.getAttribute(NEXTVIEW);
	      if (uri != null) {
	        uri = UrlUtils.forceExtension(uri, forceExtension);
	        //uri = redirectURI(uri);
	        return uri;
	      }

	      // no, redisplay the current request
	      //return request.getRequestURI();
	      return request.getContextPath();
	    }

	    public void normalRequest() throws Exception {
	      try {

	        if (request.getParameter(RESET_RANDOM_SEED) != null)
	          DomUtils.setRandomSeed(123);

	        if (redirectToIndex())
	          return;

	        HttpSession session = httpRequest.getSession(true);

	        // fire events
	        Controller controller = WcfController.instance(session);
	        controller.request(context);
	        
	        // someone has called sendError() or sendRedirect() on the response?
	        if (context.isResponseComplete())
	          return;

	        // if the controller redirects to another page, thats fine.
	        // if not, the current page is redisplayed UNLESS there was an error
	        // in which case we go to the start page.
	        String uri = (String) request.getAttribute(NEXTVIEW);
	        if (session.getAttribute(FORCE_INDEX_JSP) != null) {
	          session.removeAttribute(FORCE_INDEX_JSP);
	          if (uri == null)
	            uri = indexJSP;
	        }
            
            String query = request.getParameter(QUERY_PARM);
            if (query != null) {
                include(query, request, response);
            }
            
            // Assume we are given a screen and a query
            String screen = request.getParameter(SCREEN_PARM);
            if (screen != null) {
                uri = screen;
            }
            
	        if (uri != null)
	        	include(uri, request, response);
	        else
	        	include(mainJSP, request, response);
	      } catch (Exception e) {
	        logger.error(null, e);
	        if (errorJSP != null) {
	          try {
	            logger.error("redirecting to error page " + errorJSP, e);
	            request.setAttribute("javax.servlet.jsp.jspException", e);
	            include(errorJSP, request, response);
	          } catch (Exception e2) {
	            // there was an error displaying the error page. We  
	            // ignore the second error and display the original error
	            // instead
	            throw e;
	          }
	        } else
	          throw e;
	      }
	    }

        public void recursiveRequest() throws Exception {
            include(mainJSP, request, response);
        }

	    public void showBusyPage(boolean redirect) throws Exception {
	      if (redirectToIndex())
	        return;
	      if (busyJSP != null) {
	        if (redirect) {
	          request.setAttribute("isBusyPage", "true");
	          include(busyJSP, request, response);
	        }
	      } else
	        throw new IllegalStateException("concurrent requests and no busy.jsp defined in web.xml");
	    }

	    public boolean isBusyPage() {
	      return "true".equals(request.getParameter("isBusyPage"));
	    }

        /**
         * @param uri
         * @throws IOException
         */
        private void include(String uri, RenderRequest request, RenderResponse response) throws PortletException, IOException {
          //uri = redirectURI(uri);
          uri = UrlUtils.forceExtension(uri, forceExtension);
          if (logger.isInfoEnabled())
            logger.info("including " + uri);
          PortletRequestDispatcher rdisp = getPortletContext()
            .getRequestDispatcher(uri);
          rdisp.include(request, response);
        }

        /*
	    private String redirectURI(String uri) {

		    if (uri.startsWith("/")) {
		      StringBuffer sb = new StringBuffer();
		      sb.append(request.getContextPath());
		      sb.append(uri);
		      uri = sb.toString();
		    }
		    return uri;

	    }
*/
	    /**
	     * true, if the current request was redirected to the index page
	     * because there is no valid session.
	     */
	    protected boolean redirectToIndex() throws Exception {
	      if (indexJSP != null) {
	        // do not redirect to index.jsp while testing
	        if (Environment.isTest())
	          return false;
	        
	        PortletSession session = request.getPortletSession();
	        boolean isNew = session.isNew();
	        if (!isNew && request.getParameter(OPERATION_PARM) != null)
		      isNew = request.getParameter(OPERATION_PARM).equalsIgnoreCase("index");
	        if (!isNew)
	          isNew = !"false".equals(session.getAttribute(ISNEW));
	        if (isNew) {
	          session.setAttribute(ISNEW, "false");
	          include(indexJSP, request, response);
	          return true;
	        }
	      }
	      return false;
	    }

	  }

}

⌨️ 快捷键说明

复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?