JAL-3541 selectively merged build.gradle and gradle.properties
[jalview.git] / src / jalview / javascript / web / WebResource.java
diff --git a/src/jalview/javascript/web/WebResource.java b/src/jalview/javascript/web/WebResource.java
new file mode 100644 (file)
index 0000000..1896b65
--- /dev/null
@@ -0,0 +1,79 @@
+package jalview.javascript.web;
+
+import jalview.util.Platform;
+
+import java.net.MalformedURLException;
+import java.net.URI;
+import java.net.URISyntaxException;
+import java.net.URL;
+
+/*
+ *  A JavaScript-only proxy for com.sun.jersey.api.client.WebResource
+ * 
+ */
+public class WebResource
+{
+
+  private String endpoint, params = "";
+
+  public WebResource(String endpoint)
+  {
+    this.endpoint = endpoint;
+  }
+
+  public WebResource queryParam(String key, String value)
+  {
+    params += (params == "" ? "?" : "&") + key + "="
+            + Platform.encodeURI(value);
+    return this;
+  }
+
+  public URI getURI()
+  {
+    try
+    {
+      return new URI(endpoint + params);
+    } catch (URISyntaxException e)
+    {
+      e.printStackTrace();
+      return null;
+    }
+  }
+
+  public Builder accept(String... encoding)
+  {
+    return new Builder(getURI(), encoding);
+  }
+
+  public static class Builder
+  {
+    private URI uri;
+
+    private String[] encoding;
+
+    public Builder(URI uri, String... encoding)
+    {
+      this.uri = uri;
+      this.encoding = encoding; // application/json
+    }
+
+    /**
+     * Get the response
+     * 
+     * @param c
+     *          must be ClientResponse
+     * @return
+     */
+    public ClientResponse get(Class<?> c)
+    {
+      try
+      {
+        return new ClientResponse(new URL(uri.toString()), encoding);
+      } catch (MalformedURLException e)
+      {
+        return null;
+      }
+    }
+  }
+
+}