X-Git-Url: https://gerrit.simantics.org/r/gitweb?a=blobdiff_plain;f=bundles%2Forg.simantics.scl.rest%2Fsrc%2Forg%2Fsimantics%2Fscl%2Frest%2FHttpClientUtils.java;fp=bundles%2Forg.simantics.scl.rest%2Fsrc%2Forg%2Fsimantics%2Fscl%2Frest%2FHttpClientUtils.java;h=dfdbf5ba99276892c58f3b629778551af1dfa652;hb=0edd88ddfb4c73f2689dd3b504be01209b74a32c;hp=0000000000000000000000000000000000000000;hpb=8e8367aa523006cefa590f8cda8ed30818a6eb71;p=simantics%2Fplatform.git diff --git a/bundles/org.simantics.scl.rest/src/org/simantics/scl/rest/HttpClientUtils.java b/bundles/org.simantics.scl.rest/src/org/simantics/scl/rest/HttpClientUtils.java new file mode 100644 index 000000000..dfdbf5ba9 --- /dev/null +++ b/bundles/org.simantics.scl.rest/src/org/simantics/scl/rest/HttpClientUtils.java @@ -0,0 +1,57 @@ +package org.simantics.scl.rest; + +import java.util.concurrent.Future; + +import javax.ws.rs.client.Client; +import javax.ws.rs.client.ClientBuilder; +import javax.ws.rs.client.Invocation; +import javax.ws.rs.client.InvocationCallback; +import javax.ws.rs.core.Configuration; +import javax.ws.rs.core.Response; + +import org.glassfish.jersey.client.ClientConfig; +import org.glassfish.jersey.media.multipart.MultiPartFeature; +import org.simantics.scl.runtime.SCLContext; +import org.simantics.scl.runtime.function.Function1; +import org.simantics.scl.runtime.tuple.Tuple0; + +public class HttpClientUtils { + + public static Client buildClient(ClientBuilder clientBuilder) { + final ClientConfig clientConfig = new ClientConfig(); + clientConfig.register(MultiPartFeature.class); + return ClientBuilder.newBuilder().withConfig((Configuration) clientConfig).build(); + } + + public static String statusMessageOf(Response response) { + return response.getStatusInfo().getReasonPhrase(); + } + + public static Future asyncInvoke(Invocation invocation, Function1 responseCallback, Function1 failureCallback) { + SCLContext context = SCLContext.createDerivedContext(); + + return invocation.submit(new InvocationCallback() { + + @Override + public void completed(Response response) { + SCLContext.push(context); + try { + responseCallback.apply(response); + } finally { + SCLContext.pop(); + } + } + + @Override + public void failed(Throwable throwable) { + SCLContext.push(context); + try { + failureCallback.apply(throwable); + } finally { + SCLContext.pop(); + } + + } + }); + } +}