Implement copy method, update move method and remove trailing
[arvados.git] / sdk / R / R / CollectionTree.R
index 82c6eb8f9e16011a2b82c753e2e672ed15387d0e..2d4af094aa1c96b98b585cba059085c95b537f8c 100644 (file)
@@ -1,13 +1,11 @@
-source("./R/Subcollection.R")
+# Copyright (C) The Arvados Authors. All rights reserved.
+#
+# SPDX-License-Identifier: Apache-2.0
 
+source("./R/Subcollection.R")
 source("./R/ArvadosFile.R")
+source("./R/util.R")
 
-#' Arvados Collection Object
-#'
-#' Update description
-#'
-#' @examples arv = Collection$new(api, uuid)
-#' @export CollectionTree
 CollectionTree <- R6::R6Class(
     "CollectionTree",
     public = list(
@@ -21,7 +19,7 @@ CollectionTree <- R6::R6Class(
             treeBranches <- sapply(fileContent, function(filePath)
             {
                 splitPath <- unlist(strsplit(filePath, "/", fixed = TRUE))
-                branch = private$createBranch(splitPath)      
+                branch <- private$createBranch(splitPath)
             })
 
             root <- Subcollection$new("")
@@ -31,28 +29,33 @@ CollectionTree <- R6::R6Class(
                 private$addBranch(root, branch)
             })
 
-            root$.__enclos_env__$private$addToCollection(collection)
+            root$setCollection(collection)
             private$tree <- root
         },
 
         getElement = function(relativePath)
         {
+            relativePath <- trimFromStart(relativePath, "./")
+            relativePath <- trimFromEnd(relativePath, "/")
+
             if(endsWith(relativePath, "/"))
                 relativePath <- substr(relativePath, 0, nchar(relativePath) - 1)
 
             splitPath <- unlist(strsplit(relativePath, "/", fixed = TRUE))
-            returnElement = private$tree
+            returnElement <- private$tree
 
             for(pathFragment in splitPath)
             {
-                returnElement = returnElement$.__enclos_env__$private$getChild(pathFragment)
+                returnElement <- returnElement$get(pathFragment)
 
                 if(is.null(returnElement))
                     return(NULL)
             }
 
             returnElement
-        }
+        },
+
+        getTree = function() private$tree
     ),
 
     private = list(
@@ -68,49 +71,74 @@ CollectionTree <- R6::R6Class(
             {
                 if(elementIndex == lastElementIndex)
                 {
-                    branch = ArvadosFile$new(splitPath[[elementIndex]])
+                    branch <- ArvadosFile$new(splitPath[[elementIndex]])
                 }
                 else
                 {
-                    newFolder = Subcollection$new(splitPath[[elementIndex]])
+                    newFolder <- Subcollection$new(splitPath[[elementIndex]])
                     newFolder$add(branch)
-                    branch = newFolder
+                    branch <- newFolder
                 }
             }
-            
+
             branch
         },
 
         addBranch = function(container, node)
         {
-            child = container$.__enclos_env__$private$getChild(node$getName())
+            child <- container$get(node$getName())
 
             if(is.null(child))
             {
                 container$add(node)
-                #todo add it to collection
             }
             else
             {
+                # Note: REST always returns folder name alone before other folder
+                # content, so in first iteration we don't know if it's a file
+                # or folder since its just a name, so we assume it's a file.
+                # If we encounter that same name again we know
+                # it's a folder so we need to replace ArvadosFile with Subcollection.
                 if("ArvadosFile" %in% class(child))
                 {
                     child = private$replaceFileWithSubcollection(child)
                 }
 
-                private$addBranch(child, node$.__enclos_env__$private$getFirstChild())
+                private$addBranch(child, node$getFirst())
             }
         },
 
         replaceFileWithSubcollection = function(arvadosFile)
         {
             subcollection <- Subcollection$new(arvadosFile$getName())
-            fileParent <- arvadosFile$.__enclos_env__$private$parent
-            fileParent$.__enclos_env__$private$removeChild(arvadosFile$getName())
+            fileParent <- arvadosFile$getParent()
+            fileParent$remove(arvadosFile$getName())
             fileParent$add(subcollection)
 
-            arvadosFile$.__enclos_env__$private$parent <- NULL
+            arvadosFile$setParent(NULL)
 
             subcollection
         }
     )
 )
+
+# deepCopyArvadosComposite = function(composite) 
+# {
+    # if("ArvadosFile" %in% class(content))
+    # {
+        # newFile <- ArvadosFile$new(content$name)
+        # newFile$setCollection(content$getCollection())
+
+        # return(newFile)
+    # }
+    # else if("Subcollection" %in% class(content))
+    # {
+        # root <- Subcollection$new(content$name)
+        # root$setCollection(content$getCollection())
+    # }
+    # else
+        # stop("Arvados composite is corrupted. It can contain only ArvadosFile or Subcollection.")
+    
+    
+
+# }