2525: token, host name, and host insecure can also be passed to constructor similar...
[arvados.git] / sdk / java / src / main / java / org / arvados / sdk / java / Arvados.java
index 260b68d69b280f16b0e8c1a972b547eba8e2e1a7..66feadd95870043dc8de8a2bae3d39261daf4e3c 100644 (file)
@@ -22,7 +22,6 @@ import java.io.File;
 import java.math.BigDecimal;
 import java.math.BigInteger;
 import java.util.ArrayList;
-import java.util.Arrays;
 import java.util.Collections;
 import java.util.HashMap;
 import java.util.List;
@@ -33,16 +32,16 @@ import org.apache.log4j.Logger;
 
 public class Arvados {
   // HttpTransport and JsonFactory are thread-safe. So, use global instances.
-  private static HttpTransport HTTP_TRANSPORT;
-  private static final JsonFactory JSON_FACTORY = JacksonFactory.getDefaultInstance();
+  private HttpTransport HTTP_TRANSPORT;
+  private final JsonFactory JSON_FACTORY = JacksonFactory.getDefaultInstance();
 
   private static final Pattern METHOD_PATTERN = Pattern.compile("((\\w+)\\.)*(\\w+)");
 
-  private static String ARVADOS_API_TOKEN;
-  private static String ARVADOS_API_HOST;
-  private static boolean ARVADOS_API_HOST_INSECURE;
+  private String ARVADOS_API_TOKEN;
+  private String ARVADOS_API_HOST;
+  private boolean ARVADOS_API_HOST_INSECURE;
 
-  private static String ARVADOS_ROOT_URL;
+  private String ARVADOS_ROOT_URL;
 
   private static final Logger logger = Logger.getLogger(Arvados.class);
   
@@ -52,26 +51,41 @@ public class Arvados {
   String apiVersion = null;
   
   public Arvados (String apiName, String apiVersion){
+    this (apiName, apiVersion, null, null, null);
+  }
+  
+  public Arvados (String apiName, String apiVersion, String token, String host, String hostInsecure){
     try {
       this.apiName = apiName;
       this.apiVersion = apiVersion;
       
-      // Read needed environmental variables
-      ARVADOS_API_TOKEN = System.getenv().get("ARVADOS_API_TOKEN");
-      if (ARVADOS_API_TOKEN == null) {
-        throw new Exception("Missing environment variable: ARVADOS_API_TOKEN");
+      // Read needed environmental variables if they are not passed
+      if (token != null) {
+        ARVADOS_API_TOKEN = token;
+      } else {
+        ARVADOS_API_TOKEN = System.getenv().get("ARVADOS_API_TOKEN");
+        if (ARVADOS_API_TOKEN == null) {
+          throw new Exception("Missing environment variable: ARVADOS_API_TOKEN");
+        }
       }
 
-      ARVADOS_API_HOST = System.getenv().get("ARVADOS_API_HOST");      
-      if (ARVADOS_API_HOST == null) {
-        throw new Exception("Missing environment variable: ARVADOS_API_HOST");
+      if (host != null) {
+        ARVADOS_API_HOST = host;
+      } else {
+        ARVADOS_API_HOST = System.getenv().get("ARVADOS_API_HOST");      
+        if (ARVADOS_API_HOST == null) {
+          throw new Exception("Missing environment variable: ARVADOS_API_HOST");
+        }
       }
-
       ARVADOS_ROOT_URL = "https://" + ARVADOS_API_HOST;
       ARVADOS_ROOT_URL += (ARVADOS_API_HOST.endsWith("/")) ? "" : "/";
 
-      ARVADOS_API_HOST_INSECURE = "true".equals(System.getenv().get("ARVADOS_API_HOST_INSECURE")) ? true : false;
-
+      if (hostInsecure != null) {
+        ARVADOS_API_HOST_INSECURE = Boolean.valueOf(hostInsecure);
+      } else {
+        ARVADOS_API_HOST_INSECURE = "true".equals(System.getenv().get("ARVADOS_API_HOST_INSECURE")) ? true : false;
+      }
+      
       // Create HTTP_TRANSPORT object
       NetHttpTransport.Builder builder = new NetHttpTransport.Builder();
       if (ARVADOS_API_HOST_INSECURE) {
@@ -357,5 +371,4 @@ public class Arvados {
     throw new Exception(errorDetail);
   }
 
-
 }