@Override public Builder<T> error(Function<Response, ? extends T> f) { builder.addStatusRangeFunction( new OrStatusRange(new HundredsStatusRange(HttpStatus.BAD_REQUEST), new HundredsStatusRange(HttpStatus.INTERNAL_SERVER_ERROR)), f); return this; }
@Override public Builder<T> notSuccessful(Function<Response, ? extends T> f) { builder.addStatusRangeFunction(new NotInStatusRange(new HundredsStatusRange(HttpStatus.OK)), f); return this; }
private int getUrlStatusCode(String url) { return httpClient.newRequest(url).get().claim().getStatusCode(); } }
@Override public Promise<Either<ClientError, List<Room>>> list() { return httpClient.newRequest("/rooms/list").get().<Either<ClientError, List<Room>>>transform() .ok(parseJson("rooms", new TypeReference<List<Room>>(){})) .others(ClientUtils.<List<Room>>error()) .fail(ClientUtils.<List<Room>>throwable()) .toPromise(); }
@Override public Promise<Either<ClientError, Room>> create(String name, long ownerId, Option<Boolean> privacy, Option<String> topic, Option<Boolean> enableGuestAccess) { // TODO validate params final Map<String, String> params = createParametersAsMap(name, ownerId, privacy, topic, enableGuestAccess); return httpClient.newRequest("/rooms/create", "application/x-www-form-urlencoded", urlEncode(params)) .post().<Either<ClientError, Room>>transform() .ok(parseJson("room", Room.class)) .others(ClientUtils.<Room>error()) .fail(ClientUtils.<Room>throwable()) .toPromise(); }
@Override public Request.Builder newRequest(String uri) { return delegate().newRequest(uri); }
@Override public Request setEntity(EntityBuilder entityBuilder) { EntityBuilder.Entity entity = entityBuilder.build(); return setHeaders(entity.getHeaders()).setEntityStream(entity.getInputStream()); }
@Override public void flushCacheByUriPattern(Pattern uriPattern) { delegate().flushCacheByUriPattern(uriPattern); } }
@Override public <A> ResponseTransformation.Builder<A> transformation() { return DefaultResponseTransformation.builder(); } }
@Override public ResponseTransformation<T> build() { return new DefaultResponseTransformation<T>(builder.build(), failFunction); } }
private DefaultResponseTransformationBuilder<T> addSingle(int statusCode, Function<Response, ? extends T> f) { builder.addStatusRangeFunction(new SingleStatusRange(statusCode), f); return this; }
private DefaultResponseTransformationBuilder<T> addRange(HttpStatus status, Function<Response, ? extends T> f) { builder.addStatusRangeFunction(new HundredsStatusRange(status), f); return this; }
@Override public Builder<T> others(Function<Response, ? extends T> f) { builder.setOthersFunction(f); return this; }
@Override public boolean isIn(int code) { return !range.isIn(code); } }
@Override public Promise<Either<ClientError, List<User>>> list() { return httpClient.newRequest("/users/list").get().<Either<ClientError, List<User>>>transform() .ok(parseJson("users", new TypeReference<List<User>>(){})) .others(ClientUtils.<List<User>>error()) .fail(ClientUtils.<List<User>>throwable()) .toPromise(); } }
@Override public Promise<Either<ClientError, Status>> message(String roomIdOrName, String from, String message, Option<Message.Format> format, Option<Message.BackgroundColor> color, Option<Boolean> notify) { // TODO: validate params final Map<String, String> params = messageParametersAsMap(roomIdOrName, from, message, format, color, notify); return httpClient.newRequest("/rooms/message", "application/x-www-form-urlencoded", urlEncode(params)) .post().<Either<ClientError, Status>>transform() .ok(constantRight(Status.SENT)) .others(ClientUtils.<Status>error()) .fail(ClientUtils.<Status>throwable()) .toPromise(); }
@Override public Request.Builder newRequest(String uri, String contentType, String entity) { return delegate().newRequest(uri, contentType, entity); }
@Override public Request.Builder newRequest(URI uri) { return delegate().newRequest(uri); }
@Override public Request.Builder newRequest(URI uri, String contentType, String entity) { return delegate().newRequest(uri, contentType, entity); }
@Override public Request.Builder newRequest() { return delegate().newRequest(); }