]> gerrit.simantics Code Review - simantics/platform.git/blob - bundles/org.simantics.scl.rest/src/org/simantics/scl/rest/HttpClientUtils.java
Improvements to HTTP client SCL API
[simantics/platform.git] / bundles / org.simantics.scl.rest / src / org / simantics / scl / rest / HttpClientUtils.java
1 package org.simantics.scl.rest;
2
3 import java.util.concurrent.Future;
4
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;
11
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;
17
18 public class HttpClientUtils {
19     
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();
24     }
25     
26     public static String statusMessageOf(Response response) {
27         return response.getStatusInfo().getReasonPhrase();
28     }
29     
30     public static Future<Response> asyncInvoke(Invocation invocation, Function1<Response, Tuple0> responseCallback, Function1<Throwable, Tuple0> failureCallback) {
31         SCLContext context = SCLContext.createDerivedContext();
32         
33         return invocation.submit(new InvocationCallback<Response>() {
34
35             @Override
36             public void completed(Response response) {
37                 SCLContext.push(context);
38                 try {
39                     responseCallback.apply(response);
40                 } finally {
41                     SCLContext.pop();
42                 }
43             }
44             
45             @Override
46             public void failed(Throwable throwable) {
47                 SCLContext.push(context);
48                 try {
49                     failureCallback.apply(throwable);
50                 } finally {
51                     SCLContext.pop();
52                 }
53                 
54             }
55         });
56     }
57 }