2525: getAvailableParametersForMethod includes properties from request also.
authorradhika <radhika@curoverse.com>
Thu, 8 May 2014 18:06:04 +0000 (14:06 -0400)
committerradhika <radhika@curoverse.com>
Thu, 8 May 2014 18:06:04 +0000 (14:06 -0400)
This is required for create and update methods which have no other parameters.

sdk/java/src/main/java/org/arvados/sdk/java/Arvados.java
sdk/java/src/test/java/org/arvados/sdk/java/ArvadosTest.java

index a81c3cf8ee846214528bf409d0141a3bea26f527..e404d681086c76aaf5a21eb77dbbe5f91b04ca2f 100644 (file)
@@ -15,6 +15,7 @@ import com.google.api.services.discovery.Discovery;
 import com.google.api.services.discovery.model.JsonSchema;
 import com.google.api.services.discovery.model.RestDescription;
 import com.google.api.services.discovery.model.RestMethod;
+import com.google.api.services.discovery.model.RestMethod.Request;
 import com.google.api.services.discovery.model.RestResource;
 
 import java.math.BigDecimal;
@@ -161,20 +162,52 @@ public class Arvados {
     }
   }
 
+  /**
+   * Get all supported resources by the API
+   * @return Set
+   */
   public Set<String> getAvailableResourses() {
     return (restDescription.getResources().keySet());
   }
-  
+
+  /**
+   * Get all supported method names for the given resource
+   * @param resourceName
+   * @return Set
+   * @throws Exception
+   */
   public Set<String> getAvailableMethodsForResourse(String resourceName)
-        throws Exception {
+      throws Exception {
     Map<String, RestMethod> methodMap = getMatchingMethodMap (resourceName);
     return (methodMap.keySet());
   }
 
+  /**
+   * Get the parameters for the method in the resource sought.
+   * @param resourceName
+   * @param methodName
+   * @return Set
+   * @throws Exception
+   */
   public Set<String> getAvailableParametersForMethod(String resourceName, String methodName)
       throws Exception {
     RestMethod method = getMatchingMethod(resourceName, methodName);
-    return (method.getParameters().keySet());
+    Set<String> parameters = method.getParameters().keySet();
+    Request request = method.getRequest();
+    if (request != null) {
+      Object requestProperties = request.get("properties");
+      if (requestProperties != null) {
+        if (requestProperties instanceof Map) {
+          Map properties = (Map)requestProperties;
+          Set<String> propertyKeys = properties.keySet();
+          if (propertyKeys.size()>0) {
+            propertyKeys.addAll(parameters);
+            parameters = propertyKeys;
+          }
+        }
+      }
+    }
+    return parameters;
   }
 
   private HashMap<String, Object> loadParameters(Map<String, Object> paramsMap,
@@ -237,7 +270,7 @@ public class Arvados {
   }
 
   private Map<String, RestMethod> getMatchingMethodMap(String resourceName)
-          throws Exception {
+      throws Exception {
     if (resourceName == null) {
       error("missing resource name");      
     }
index 6f44da80206ce86283b6072f2a815b7824999b29..bb1cf64a38ca4623b2a1032a47f3845b7071dd90 100644 (file)
@@ -6,6 +6,7 @@ import java.util.ArrayList;
 import java.util.HashMap;
 import java.util.List;
 import java.util.Map;
+import java.util.Set;
 
 import org.junit.Test;
 
@@ -384,4 +385,36 @@ public class ArvadosTest {
     assertEquals("Expected links.list in response", "arvados#linkList", response.get("kind"));
   }
 
+  @Test
+  public void testGetAvailableResources() throws Exception {
+    Arvados arv = new Arvados("arvados", "v1");
+    Set<String> resources = arv.getAvailableResourses();
+    assertNotNull("Expected resources", resources);
+    assertTrue("Excected users in resrouces", resources.contains("users"));
+  }
+
+  @Test
+  public void testGetAvailableMethodsResources() throws Exception {
+    Arvados arv = new Arvados("arvados", "v1");
+    Set<String> methods = arv.getAvailableMethodsForResourse("users");
+    assertNotNull("Expected resources", methods);
+    assertTrue("Excected create method for users", methods.contains("create"));
+  }
+
+  @Test
+  public void testGetAvailableParametersForUsersGetMethod() throws Exception {
+    Arvados arv = new Arvados("arvados", "v1");
+    Set<String> parameters = arv.getAvailableParametersForMethod("users", "get");
+    assertNotNull("Expected parameters", parameters);
+    assertTrue("Excected uuid parameter for get method for users", parameters.contains("uuid"));
+  }
+
+  @Test
+  public void testGetAvailableParametersForUsersCreateMethod() throws Exception {
+    Arvados arv = new Arvados("arvados", "v1");
+    Set<String> parameters = arv.getAvailableParametersForMethod("users", "create");
+    assertNotNull("Expected parameters", parameters);
+    assertTrue("Excected user parameter for create method for users", parameters.contains("user"));
+  }
+
 }
\ No newline at end of file