1 package org.simantics.scl.rest;
3 import java.util.concurrent.Future;
5 import javax.ws.rs.client.Client;
6 import javax.ws.rs.client.ClientBuilder;
7 import javax.ws.rs.client.Invocation;
8 import javax.ws.rs.client.InvocationCallback;
9 import javax.ws.rs.core.Configuration;
10 import javax.ws.rs.core.Response;
12 import org.glassfish.jersey.client.ClientConfig;
13 import org.glassfish.jersey.media.multipart.MultiPartFeature;
14 import org.simantics.scl.runtime.SCLContext;
15 import org.simantics.scl.runtime.function.Function1;
16 import org.simantics.scl.runtime.tuple.Tuple0;
18 public class HttpClientUtils {
20 public static Client buildClient(ClientBuilder clientBuilder) {
21 final ClientConfig clientConfig = new ClientConfig();
22 clientConfig.register(MultiPartFeature.class);
23 return ClientBuilder.newBuilder().withConfig((Configuration) clientConfig).build();
26 public static String statusMessageOf(Response response) {
27 return response.getStatusInfo().getReasonPhrase();
30 public static Future<Response> asyncInvoke(Invocation invocation, Function1<Response, Tuple0> responseCallback, Function1<Throwable, Tuple0> failureCallback) {
31 SCLContext context = SCLContext.createDerivedContext();
33 return invocation.submit(new InvocationCallback<Response>() {
36 public void completed(Response response) {
37 SCLContext.push(context);
39 responseCallback.apply(response);
46 public void failed(Throwable throwable) {
47 SCLContext.push(context);
49 failureCallback.apply(throwable);