Start line:  
End line:  

Snippet Preview

Snippet HTML Code

Stack Overflow Questions
  package com.google.sitebricks.routing;
  
 

Author(s):
Dhanji R. Prasanna (dhanji@gmail.com)
 
   private final PageBook book;
   private final RequestBinder binder;
   private final ResourcesService resourcesService;
   private final Provider<FlashCacheflashCacheProvider;
   private final HeadlessRenderer headlessRenderer;
 
   @Inject
   public WidgetRoutingDispatcher(PageBook bookRequestBinder binder,
                                  ResourcesService resourcesService,
                                  Provider<FlashCacheflashCacheProvider,
                                  HeadlessRenderer headlessRenderer) {
     this. = headlessRenderer;
     this. = book;
     this. = binder;
     this. = resourcesService;
     this. = flashCacheProvider;
   }
 
   public Object dispatch(Request requestEvents eventthrows IOException {
     String uri = request.path();
 
     //first try dispatching as a static resource service
     Respond respond = .serve(uri);
 
     if (null != respond)
       return respond;
 
     // Otherwise try to dispatch as a widget/page
     // Check if there is a page chain link sitting here
     // for this page.
     // NOTE(dhanji): we must use remove, to atomically
     // remove the page and process it in one go. It is
     // also worth coordinating this with conversation request
     // queueing.
     // TODO(dhanji): Change flashcache to use temporary cookies instead.
     PageBook.Page page = .get().remove(uri);
 
     // If there is no link, obtain page via Guice as normal.
     if (null == page)
       page = .get(uri);
 
     //could not dispatch as there was no match
     if (null == page)
       return null;
 
     final Object instance = page.instantiate();
     if (page.isHeadless()) {
       return bindAndReply(requestpageinstance);
     } else {
        //fire events and render reponders
       return bindAndRespond(requestpageinstance);
     }
   }
 
   private Object bindAndReply(Request requestPage pageObject instancethrows IOException {
     // bind request (sets request params, etc).
     .bind(requestinstance);
 
     // call the appropriate handler.
     return fireEvent(requestpageinstance);
   }
 
   private Object bindAndRespond(Request requestPageBook.Page pageObject instance)
       throws IOException {
     //bind request
     .bind(requestinstance);
 
     //fire get/post events
     final Object redirect = fireEvent(requestpageinstance);
 
     //render to respond
     Respond respond = new StringBuilderRespond(instance);
     if (null != redirect) {
 
       if (redirect instanceof String)
        respond.redirect((Stringredirect);
      else if (redirect instanceof Class) {
        PageBook.Page targetPage = .forClass((Class<?>) redirect);
        // should never be null coz it is validated on compile.
        respond.redirect(contextualize(requesttargetPage.getUri()));
      } else if (redirect instanceof Reply<?>) {
    	  // To allow non-headless pages to use Reply<?> for more advanced HTTP responses
    	  return redirect;
      } else {
        // Handle page-chaining driven redirection.
        PageBook.Page targetPage = .forInstance(redirect);
        // should never be null coz it will be validated at compile time.
        .get().put(targetPage.getUri(), targetPage);
        // Send to the canonical address of the page. This is also
        // verified at compile, not be a variablized matcher.
        respond.redirect(contextualize(requesttargetPage.getUri()));
      }
    } else {
      page.widget().render(instancerespond);
    }
    
    return respond;
  }
  // We're sure the request parameter map is a Map<String, String[]>
  @SuppressWarnings("unchecked")
  private Object fireEvent(Request requestPageBook.Page pageObject instance)
      throws IOException {
    final String method = request.method();
    final String pathInfo = request.path();
    return page.doMethod(method.toLowerCase(), instancepathInforequest);
  }
  private static String contextualize(Request requestString targetUri) {
    return request.context() + targetUri;
  }
New to GrepCode? Check out our FAQ X