/** * 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; }
/** * 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; }
@Override public boolean apply(final Response response) { final String etag = response.getHeaders().get(HttpHeaders.ETAG); if (etag != null) { return !match.contains(etag); } return true; }
public Builder header(final String name, final String... values) { headers().set(name, values); return this; }
@Nonnull public Headers headers() { if (headers == null) { headers = new Headers(); } return headers; }
/** * Log response details. */ private void logResponse(final Response response) { log.debug("Response: {}", response); if (log.isTraceEnabled()) { if (response.getHeaders().isEmpty()) { log.trace("No response headers"); } else { log.trace("Response headers:"); for (Map.Entry<String, String> header : response.getHeaders()) { log.trace(" {}: {}", header.getKey(), header.getValue()); } } if (response.getAttributes().isEmpty()) { log.trace("No response attributes"); } else { log.trace("Response attributes:"); for (Map.Entry<String, Object> entry : response.getAttributes()) { log.trace(" {}={}", entry.getKey(), entry.getValue()); } } } }
public Builder header(final String name, final String... values) { headers().set(name, values); return this; }
@Nonnull public Headers headers() { if (headers == null) { headers = new Headers(); } return headers; }
/** * 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()); } } } }
@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; }
@Nonnull @Override public Response handle(@Nonnull final Context context) throws Exception { final Response response = context.proceed(); Payload payload = response.getPayload(); if (response.getStatus().isSuccessful() && payload instanceof Content) { final Content content = (Content) payload; final DateTime lastModified = content.getAttributes().get(Content.CONTENT_LAST_MODIFIED, DateTime.class); if (lastModified != null) { response.getHeaders().set(HttpHeaders.LAST_MODIFIED, DateUtils.formatDate(lastModified.toDate())); } final String etag = content.getAttributes().get(Content.CONTENT_ETAG, String.class); if (etag != null) { response.getHeaders().set(HttpHeaders.ETAG, "\"" + etag + "\""); } } return 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 boolean apply(final Response response) { final String etag = response.getHeaders().get(HttpHeaders.ETAG); if (etag != null) { return match.contains(etag); } return true; }
private static String getHeaderValue(final Response response, final String header) { return response.getHeaders().get(header); }
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; }
@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; }
@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; }