Split Collectin's add method to add and create methods.
authorFuad Muhic <fmuhic@capeannenterprises.com>
Fri, 22 Dec 2017 11:32:39 +0000 (12:32 +0100)
committerFuad Muhic <fmuhic@capeannenterprises.com>
Fri, 22 Dec 2017 11:32:39 +0000 (12:32 +0100)
Arvados-DCO-1.1-Signed-off-by: Fuad Muhic <fmuhic@capeannenterprises.com>

sdk/R/R/Collection.R
sdk/R/README

index fb9af1117dc481afd6f180f0dd490359617f8af9..8e6895e823ae46c023bdd25801a1bc7a47ea9af4 100644 (file)
@@ -50,17 +50,61 @@ Collection <- R6::R6Class(
             if(is.null(subcollection))
                 stop(paste("Subcollection", relativePath, "doesn't exist."))
 
-            if(is.character(content))
+            if("ArvadosFile"   %in% class(content) ||
+               "Subcollection" %in% class(content))
             {
-                sapply(content, function(fileName)
+                subcollection$add(content)
+
+                content
+            }
+            else
+            {
+                contentClass <- paste(class(content), collapse = ", ")
+                stop(paste("Expected AravodsFile or Subcollection object, got",
+                           paste0("(", contentClass, ")"), "."))
+            }
+        },
+
+        create = function(fileNames, relativePath = "")
+        {
+            if(relativePath == "" ||
+               relativePath == "." ||
+               relativePath == "./")
+            {
+                subcollection <- private$tree$.__enclos_env__$private$tree
+            }
+            else
+            {
+                if(endsWith(relativePath, "/") && nchar(relativePath) > 0)
+                    relativePath <- substr(relativePath, 1, nchar(relativePath) - 1)
+
+                subcollection <- self$get(relativePath)
+            }
+
+            if(is.null(subcollection))
+                stop(paste("Subcollection", relativePath, "doesn't exist."))
+
+            if(is.character(fileNames))
+            {
+                arvadosFiles <- NULL
+                sapply(fileNames, function(fileName)
                 {
-                    subcollection$add(ArvadosFile$new(fileName))
+                    newFile <- ArvadosFile$new(fileName)
+                    subcollection$add(newFile)
+
+                    arvadosFiles <<- c(arvadosFiles, newFile)
                 })
+
+                if(length(arvadosFiles) == 1)
+                    return(arvadosFiles[[1]])
+                else
+                    return(arvadosFiles)
             }
-            else if("ArvadosFile"   %in% class(content) ||
-                    "Subcollection" %in% class(content))
+            else 
             {
-                subcollection$add(content)
+                contentClass <- paste(class(fileNames), collapse = ", ")
+                stop(paste("Expected character vector, got",
+                           paste0("(", contentClass, ")"), "."))
             }
         },
 
index 0c4347352ac043a6fe23826ab630488e05d1c96d..3d100f4ddbe41a5c3f78f09c5c9fc1535ed0628c 100644 (file)
@@ -108,15 +108,16 @@ size <- arvadosSubcollection$getSizeInBytes()
 
 #Create new file in a collection
 
-#Call structure
-
-collection$add(arvadosFileOrSubcollectionOrFileName, optionalRelativePath)
+collection$create(fileNames, optionalRelativePath)
 
 #Example
 
-collection$add("main.cpp", "cpp/src/")
+mainFile <- collection$create("main.cpp", "cpp/src/")
+fileList <- collection$create(c("main.cpp", lib.dll), "cpp/src/")
 
-#or
+--------------------------------------------------------------------------------------------------------------------------------
+
+#Add existing ArvadosFile or Subcollection to a collection
 
 folder <- Subcollection$new("src")
 file <- ArvadosFile$new("main.cpp")
@@ -124,13 +125,9 @@ folder$add(file)
 
 collection$add(folder, "cpp")
 
-#Both examples will add file "main.cpp" in "./cpp/src/" folder if folder exists.
+#This examples will add file "main.cpp" in "./cpp/src/" folder if folder exists.
 #If subcollection contains more files or folders they will be added recursively.
 
-#You can also add multiple files
-
-collection$add(c("path/to/my/file.cpp", "path/to/other/file.cpp"))
-
 --------------------------------------------------------------------------------------------------------------------------------
 
 #Write to existing file (Override current content of the file)