Start line:  
End line:  

Snippet Preview

Snippet HTML Code

Stack Overflow Questions
  package com.google.sitebricks;
  
 
 import java.util.Map;

Author(s):
dhanji@gmail.com (Dhanji R. Prasanna)
 
 class ServletRequestProvider implements Provider<Request> {
   private final Injector injector;
 
   @Inject
   public ServletRequestProvider(Provider<HttpServletRequestservletRequestInjector injector) {
     this. = servletRequest;
     this. = injector;
   }
 
   @Override
   public Request get() {
     return new Request() {
       Multimap<StringStringmatrix;
       Multimap<StringStringheaders;
       Multimap<StringStringparams;
       String method;
 
       @Override
       public <E> RequestRead<E> read(final Class<E> type) {
         return new RequestRead<E>() {
           E memo;
 
           @Override
           public E as(Class<? extends Transporttransport) {
             try {
               // Only read from the stream once.
               if (null == ) {
                  = .getInstance(transport).in(.getInputStream(),
                     type);
               }
             } catch (IOException e) {
               throw new RuntimeException("Unable to obtain input stream from servlet request" +
                   " (was it already used or closed elsewhere?). Error:\n" + e.getMessage(), e);
             }
 
             return ;
           }
         };
       }
 
       @Override
       public <E> RequestRead<E> read(final TypeLiteral<E> type) {
         return new RequestRead<E>() {
           E memo;
 
           @Override
           public E as(Class<? extends Transporttransport) {
             try {
               // Only read from the stream once.
               if (null == ) {
                  = .getInstance(transport).in(.getInputStream(),
                     type);
               }
             } catch (IOException e) {
               throw new RuntimeException("Unable to obtain input stream from servlet request" +
                   " (was it already used or closed elsewhere?). Error:\n" + e.getMessage(), e);
             }
 
             return ;
           }
         };
       }
 
       @Override
       public void readTo(OutputStream outthrows IOException {
         ByteStreams.copy(.getInputStream(), out);
       }
 
       @Override
       public Multimap<StringStringheaders() {
         if (null == ) {
           readHeaders();
         }
        return ;
      }
      @Override
      public Multimap<StringStringparams() {
        if (null == ) {
          readParams();
        }
        return ;
      }
      @Override
      public Multimap<StringStringmatrix() {
        if (null == ) {
          this. = Parameters.readMatrix(.getRequestURI());
        }
        return ;
      }
      @Override
      public String matrixParam(String name) {
        if (null == ) {
          this. = Parameters.readMatrix(.getRequestURI());
        }
        return Parameters.singleMatrixParam(name.get(name));
      }
      @Override
      public String param(String name) {
        return .getParameter(name);
      }
      @Override
      public String header(String name) {
        return .getHeader(name);
      }
      @Override public String uri() {
        return .getRequestURI();
      }
      @Override public String path() {
      }
      @Override public String context() {
        return .getContextPath();
      }
      @Override public String method() {
        // This ugly hack is required because Sitebricks supports simulating PUT/DELETE requests
        // via browser POST and special form fields.
        if ( == null) {
           = (ghostMethod != null) ? ghostMethod : .getMethod();
        }
        return ;
      }
      private void readParams() {
        ImmutableMultimap.Builder<StringStringbuilder = ImmutableMultimap.builder();
        @SuppressWarnings("unchecked"// Guaranteed by servlet spec
            Map<StringString[]> parameterMap = .getParameterMap();
        for (Map.Entry<StringString[]> entry : parameterMap.entrySet()) {
          builder.putAll(entry.getKey(), entry.getValue());
        }
        this. = builder.build();
      }
      private void readHeaders() {
        // Build once per request only (so do it here).
        ImmutableMultimap.Builder<StringStringbuilder = ImmutableMultimap.builder();
        @SuppressWarnings("unchecked"// Guaranteed by servlet spec
            Enumeration<StringheaderNames = .getHeaderNames();
        while (headerNames.hasMoreElements()) {
          String header = headerNames.nextElement();
          @SuppressWarnings("unchecked"// Guaranteed by servlet spec
          Enumeration<Stringvalues = .getHeaders(header);
          while (values.hasMoreElements()) {
            builder.put(headervalues.nextElement());
          }
        }
        this. = builder.build();
      }
    };
  }
New to GrepCode? Check out our FAQ X