private static String getHeaderValue(final Request request, final String header) { return request.getHeaders().get(header); }
@Nullable private static Predicate<Response> ifNoneMatch(final Request request) { final String match = request.getHeaders().get(HttpHeaders.IF_NONE_MATCH); if (match != null && !"*".equals(match)) { return new Predicate<Response>() { @Override public boolean apply(final Response response) { final String etag = response.getHeaders().get(HttpHeaders.ETAG); if (etag != null) { return !match.contains(etag); } return true; } @Override public String toString() { return HttpConditions.class.getSimpleName() + ".ifNoneMatch(" + match + ")"; } }; } return null; }
@Nullable private static Predicate<Response> ifMatch(final Request request) { final String match = request.getHeaders().get(HttpHeaders.IF_MATCH); if (match != null && !"*".equals(match)) { return new Predicate<Response>() { @Override public boolean apply(final Response response) { final String etag = response.getHeaders().get(HttpHeaders.ETAG); if (etag != null) { return match.contains(etag); } return true; } @Override public String toString() { return HttpConditions.class.getSimpleName() + ".ifMatch(" + match + ")"; } }; } return null; }
/** * Log request details. */ private void logRequest(final Request request) { log.debug("Request: {}", request); if (log.isTraceEnabled()) { if (request.getHeaders().isEmpty()) { log.trace("No request headers"); } else { log.trace("Request headers:"); for (Map.Entry<String, String> header : request.getHeaders()) { log.trace(" {}: {}", header.getKey(), header.getValue()); } } if (request.getAttributes().isEmpty()) { log.trace("No request attributes"); } else { log.trace("Request attributes:"); for (Map.Entry<String, Object> entry : request.getAttributes()) { log.trace(" {}={}", entry.getKey(), entry.getValue()); } } } }
@Nullable private static Predicate<Response> ifUnmodifiedSince(final Request request) { final DateTime date = parseDateHeader(request.getHeaders().get(HttpHeaders.IF_UNMODIFIED_SINCE)); if (date != null) { return new Predicate<Response>() { @Override public boolean apply(final Response response) { final DateTime lastModified = parseDateHeader(response.getHeaders().get(HttpHeaders.LAST_MODIFIED)); if (lastModified != null) { return !lastModified.isAfter(date); } return true; } @Override public String toString() { return HttpConditions.class.getSimpleName() + ".ifUnmodifiedSince(" + date + ")"; } }; } return null; }
@Nullable private static Predicate<Response> ifModifiedSince(final Request request) { final DateTime date = parseDateHeader(request.getHeaders().get(HttpHeaders.IF_MODIFIED_SINCE)); if (date != null) { return new Predicate<Response>() { @Override public boolean apply(final Response response) { final DateTime lastModified = parseDateHeader(response.getHeaders().get(HttpHeaders.LAST_MODIFIED)); if (lastModified != null) { return lastModified.isAfter(date); } return true; } @Override public String toString() { return HttpConditions.class.getSimpleName() + ".ifModifiedSince(" + date + ")"; } }; } return null; }
/** * Un-stash the conditions originally found in {@link Request}. This method accepts only requests returned by {@link * #makeUnconditional(Request)} method, otherwise will throw {@link IllegalStateException}. This method must be used * in pair with the method above. */ @Nonnull public static Request makeConditional(@Nonnull final Request request) { checkNotNull(request); final Headers stashedHeaders = request.getAttributes().require(HTTP_CONDITIONS, Headers.class); for (Entry<String, String> entry : stashedHeaders.entries()) { request.getHeaders().set(entry.getKey(), stashedHeaders.getAll(entry.getKey())); } return request; }
/** * Stashes the conditions of the passed in request, making it non-conditional request. To reverse this change, * use {@link #makeConditional(Request)} method. */ @Nonnull public static Request makeUnconditional(@Nonnull final Request request) { checkNotNull(request); final Headers stashedHeaders = new Headers(); for (String httpHeader : SUPPORTED_HEADERS) { List<String> headerValues = request.getHeaders().getAll(httpHeader); if (headerValues != null) { stashedHeaders.set(httpHeader, headerValues); } request.getHeaders().remove(httpHeader); } request.getAttributes().set(HTTP_CONDITIONS, stashedHeaders); return request; }
public Builder copy(final Request request) { checkNotNull(request); attributes = request.getAttributes(); headers = request.getHeaders(); action = request.getAction(); path = request.getPath(); parameters = request.getParameters(); payload = request.getPayload(); multipart = request.isMultipart(); multiparts = request.getMultiparts(); return this; }