Added methods listAllCollections and listAllProjects.
authorFuad Muhic <fmuhic@capeannenterprises.com>
Fri, 22 Dec 2017 15:43:45 +0000 (16:43 +0100)
committerFuad Muhic <fmuhic@capeannenterprises.com>
Fri, 22 Dec 2017 15:43:45 +0000 (16:43 +0100)
Arvados-DCO-1.1-Signed-off-by: Fuad Muhic <fmuhic@capeannenterprises.com>

sdk/R/R/Arvados.R
sdk/R/R/HttpRequest.R

index e337cb921a6a8d45a313cee10047e2b1f0afbd20..e08ce61d4c8a91de0704a4268b094839e800764e 100644 (file)
@@ -83,12 +83,21 @@ Arvados <- R6::R6Class(
             serverResponse <- private$http$GET(collectionURL, headers, filters,
                                                limit, offset)
 
-            collection <- private$httpParser$parseJSONResponse(serverResponse)
+            collections <- private$httpParser$parseJSONResponse(serverResponse)
 
-            if(!is.null(collection$errors))
-                stop(collection$errors)       
+            if(!is.null(collections$errors))
+                stop(collections$errors)       
 
-            collection
+            collections
+        },
+
+        listAllCollections = function(filters = NULL)
+        {
+            if(!is.null(filters))
+                names(filters) <- c("collection")
+
+            collectionURL <- paste0(private$host, "collections")
+            private$fetchAllItems(collectionURL, filters)
         },
 
         deleteCollection = function(uuid) 
@@ -229,6 +238,18 @@ Arvados <- R6::R6Class(
             projects
         },
 
+        listAllProjects = function(filters = NULL)
+        {
+            if(!is.null(filters))
+                names(filters) <- c("groups")
+
+            filters[[length(filters) + 1]] <- list("group_class", "=", "project")
+
+            projectURL <- paste0(private$host, "groups")
+
+            private$fetchAllItems(projectURL, filters)
+        },
+
         deleteProject = function(uuid) 
         {
             projectURL <- paste0(private$host, "groups/", uuid)
@@ -252,7 +273,35 @@ Arvados <- R6::R6Class(
         host           = NULL,
         webDavHostName = NULL,
         http           = NULL,
-        httpParser     = NULL
+        httpParser     = NULL,
+
+        fetchAllItems = function(resourceURL, filters)
+        {
+            headers <- list(Authorization = paste("OAuth2", private$token))
+
+            offset <- 0
+            itemsAvailable <- .Machine$integer.max
+            items <- c()
+            while(length(items) < itemsAvailable)
+            {
+                serverResponse <- private$http$GET(url          = resourceURL,
+                                                   headers      = headers,
+                                                   queryFilters = filters,
+                                                   limit        = NULL,
+                                                   offset       = offset)
+
+                parsedResponse <- private$httpParser$parseJSONResponse(serverResponse)
+
+                if(!is.null(parsedResponse$errors))
+                    stop(parsedResponse$errors)       
+
+                items          <- c(items, parsedResponse$items)
+                offset         <- length(items)
+                itemsAvailable <- parsedResponse$items_available
+            }
+
+            items
+        }
     ),
     
     cloneable = FALSE
index 20ad7ea81b5d5772f4855929bc0e47f3d62c9cf5..a1e1f61275263ec63910f5d48a5d017621fb02ff 100644 (file)
@@ -139,9 +139,10 @@ HttpRequest <- R6::R6Class(
             if(length(finalQuery) > 1)
             {
                 finalQuery <- paste0(finalQuery, collapse = "&")
-                finalQuery <- paste0("?", finalQuery)
             }
 
+            finalQuery <- paste0("/?", finalQuery)
+
             finalQuery
         }
     ),