Beispiel #1
0
  @Override
  public Optional<RestxHandlerMatch> match(RestxRequest req) {
    for (String path : paths) {
      if (req.getRestxPath().startsWith(path)) {
        return Optional.absent();
      }
    }

    return Optional.of(
        new RestxHandlerMatch(
            new StdRestxRequestMatch("*", req.getRestxPath()),
            new RestxHandler() {
              @Override
              public void handle(
                  RestxRequestMatch match, RestxRequest req, RestxResponse resp, RestxContext ctx)
                  throws IOException {
                ctx.nextHandlerMatch()
                    .handle(
                        req,
                        resp,
                        ctx.withListener(
                            new AbstractRouteLifecycleListener() {
                              @Override
                              public void onBeforeWriteContent(
                                  RestxRequest req, RestxResponse resp) {
                                if (!resp.getHeader("Cache-Control").isPresent()) {
                                  resp.setHeader("Cache-Control", "no-cache");
                                }
                              }
                            }));
              }
            }));
  }
  Iterable<WhenHttpRequest> findWhensMatchingRequest(
      ImmutableMap<String, RestxSpec> allSpecs, RestxRequest restxRequest) {
    Collection<WhenHttpRequest> matchingRequestsSpecs = Lists.newArrayList();
    for (Map.Entry<String, RestxSpec> spec : allSpecs.entrySet()) {
      for (When when : spec.getValue().getWhens()) {
        if (when instanceof WhenHttpRequest) {
          WhenHttpRequest request = (WhenHttpRequest) when;
          String requestPath = request.getPath();
          if (!requestPath.startsWith("/")) {
            requestPath = "/" + requestPath;
          }
          StdRequest stdRequest =
              StdRequest.builder()
                  .setBaseUri("http://restx.io") // baseUri is required but we won't use it
                  .setHttpMethod(request.getMethod())
                  .setFullPath(requestPath)
                  .build();

          if (restxRequest.getHttpMethod().equals(stdRequest.getHttpMethod())
              && restxRequest.getRestxPath().equals(stdRequest.getRestxPath())) {
            MapDifference<String, ImmutableList<String>> difference =
                Maps.difference(restxRequest.getQueryParams(), stdRequest.getQueryParams());
            if (difference.entriesOnlyOnRight().isEmpty()
                && difference.entriesDiffering().isEmpty()) {
              matchingRequestsSpecs.add(request);
              break;
            }
          }
        }
      }
    }
    return matchingRequestsSpecs;
  }
Beispiel #3
0
 @Override
 public Optional<RestxRouteMatch> match(RestxRequest req) {
   if (req.getHttpMethod().equals("GET") && req.getRestxPath().startsWith(baseRestPath)) {
     return Optional.of(new RestxRouteMatch(this, baseRestPath + "*", req.getRestxPath()));
   } else {
     return Optional.absent();
   }
 }
Beispiel #4
0
 @Override
 public void handle(RestxRouteMatch match, RestxRequest req, RestxResponse resp, RestxContext ctx)
     throws IOException {
   String relativePath = req.getRestxPath().substring(baseRestPath.length());
   relativePath = Optional.fromNullable(aliases.get(relativePath)).or(relativePath);
   try {
     URL resource =
         MoreResources.getResource(
             baseResourcePath + relativePath, RestxContext.Modes.DEV.equals(ctx.getMode()));
     resp.setStatus(HttpStatus.OK.getCode());
     resp.setContentType(
         HTTP.getContentTypeFromExtension(relativePath).or("application/octet-stream"));
     ByteStreams.copy(Resources.newInputStreamSupplier(resource), resp.getOutputStream());
   } catch (IllegalArgumentException e) {
     notFound(resp, relativePath);
   }
 }