/** * Copies passed in {@link Request} and but sets action to GET and removes all supported * conditions making the GET request "unconditional". This method must be in sync with {@link * #requestPredicate(Request)} and process same conditions. */ @Nonnull public static Request copyAsUnconditionalGet(@Nonnull final Request request) { checkNotNull(request); final Request getRequest = new Request.Builder().copy(request).action(GET).build(); getRequest.getHeaders().remove(HttpHeaders.IF_MODIFIED_SINCE); getRequest.getHeaders().remove(HttpHeaders.IF_UNMODIFIED_SINCE); getRequest.getHeaders().remove(HttpHeaders.IF_MATCH); getRequest.getHeaders().remove(HttpHeaders.IF_NONE_MATCH); return getRequest; }
@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> 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; }