remove trailing white space from all files
[arvados.git] / sdk / R / R / ArvadosFile.R
index 0cbecd8cefeb5e6f99b93db0c800b06a2cb7f061..1071302892690a659370d41afaa4336316678362 100644 (file)
@@ -1,10 +1,58 @@
+# Copyright (C) The Arvados Authors. All rights reserved.
+#
+# SPDX-License-Identifier: Apache-2.0
+
 source("./R/util.R")
 
-#' ArvadosFile Object
+#' ArvadosFile
+#'
+#' ArvadosFile class represents a file inside Arvados collection.
+#'
+#' @section Usage:
+#' \preformatted{file = ArvadosFile$new(name)}
+#'
+#' @section Arguments:
+#' \describe{
+#'   \item{name}{Name of the file.}
+#' }
+#'
+#' @section Methods:
+#' \describe{
+#'   \item{getName()}{Returns name of the file.}
+#'   \item{getRelativePath()}{Returns file path relative to the root.}
+#'   \item{read(contentType = "raw", offset = 0, length = 0)}{Read file content.}
+#'   \item{write(content, contentType = "text/html")}{Write to file (override current content of the file).}
+#'   \item{connection(rw)}{Get connection opened in "read" or "write" mode.}
+#'   \item{flush()}{Write connections content to a file (override current content of the file).}
+#'   \item{remove(name)}{Removes ArvadosFile or Subcollection specified by name from the subcollection.}
+#'   \item{getSizeInBytes()}{Returns file size in bytes.}
+#'   \item{move(newLocation)}{Moves file to a new location inside collection.}
+#' }
+#'
+#' @name ArvadosFile
+#' @examples
+#' \dontrun{
+#' myFile <- ArvadosFile$new("myFile")
+#'
+#' myFile$write("This is new file content")
+#' fileContent <- myFile$read()
+#' fileContent <- myFile$read("text")
+#' fileContent <- myFile$read("raw", offset = 8, length = 4)
 #'
-#' Update description
+#' #Write a table:
+#' arvConnection <- myFile$connection("w")
+#' write.table(mytable, arvConnection)
+#' arvadosFile$flush()
 #'
-#' @export ArvadosFile
+#' #Read a table:
+#' arvConnection <- myFile$connection("r")
+#' mytable <- read.table(arvConnection)
+#'
+#' myFile$move("newFolder/myFile")
+#' }
+NULL
+
+#' @export
 ArvadosFile <- R6::R6Class(
 
     "ArvadosFile",
@@ -13,9 +61,10 @@ ArvadosFile <- R6::R6Class(
 
         initialize = function(name)
         {
-            private$name             <- name
-            private$http             <- HttpRequest$new()
-            private$httpParser       <- HttpParser$new()
+            if(name == "")
+                stop("Invalid name.")
+
+            private$name <- name
         },
 
         getName = function() private$name,
@@ -84,18 +133,22 @@ ArvadosFile <- R6::R6Class(
 
             REST <- private$collection$getRESTService()
 
-            REST$read(private$collection$uuid,
-                      self$getRelativePath(),
-                      contentType, offset, length)
+            fileContent <- REST$read(self$getRelativePath(),
+                                     private$collection$uuid,
+                                     contentType, offset, length)
+            fileContent
         },
 
         connection = function(rw)
         {
-            if (rw == "r"
+            if (rw == "r" || rw == "rb")
             {
-                return(textConnection(self$read("text")))
+                REST <- private$collection$getRESTService()
+                return(REST$getConnection(self$getRelativePath(),
+                                          private$collection$uuid,
+                                          rw))
             }
-            else if (rw == "w") 
+            else if (rw == "w")
             {
                 private$buffer <- textConnection(NULL, "w")
 
@@ -103,7 +156,7 @@ ArvadosFile <- R6::R6Class(
             }
         },
 
-        flush = function() 
+        flush = function()
         {
             v <- textConnectionValue(private$buffer)
             close(private$buffer)
@@ -117,39 +170,42 @@ ArvadosFile <- R6::R6Class(
 
             REST <- private$collection$getRESTService()
 
-            result <- REST$write(private$collection$uuid,
-                                 self$getRelativePath(),
-                                 content, contentType)
+            writeResult <- REST$write(self$getRelativePath(),
+                                      private$collection$uuid,
+                                      content, contentType)
+            writeResult
         },
 
-        move = function(newLocationInCollection)
+        move = function(newLocation)
         {
             if(is.null(private$collection))
                 stop("ArvadosFile doesn't belong to any collection")
 
-            newLocationInCollection <- trimFromEnd(newLocationInCollection, "/")
-            newParentLocation <- trimFromEnd(newLocationInCollection, private$name)
+            newLocation <- trimFromEnd(newLocation, "/")
+            nameAndPath <- splitToPathAndName(newLocation)
 
-            newParent <- private$collection$get(newParentLocation)
+            newParent <- private$collection$get(nameAndPath$path)
 
             if(is.null(newParent))
             {
                 stop("Unable to get destination subcollection")
             }
 
-            childWithSameName <- newParent$get(private$name)
+            childWithSameName <- newParent$get(nameAndPath$name)
 
             if(!is.null(childWithSameName))
                 stop("Destination already contains content with same name.")
 
             REST <- private$collection$getRESTService()
             REST$move(self$getRelativePath(),
-                      paste0(newParent$getRelativePath(), "/", self$getName()),
+                      paste0(newParent$getRelativePath(), "/", nameAndPath$name),
                       private$collection$uuid)
 
             private$dettachFromCurrentParent()
             private$attachToNewParent(newParent)
 
+            private$name <- nameAndPath$name
+
             "Content moved successfully."
         }
     ),
@@ -160,8 +216,6 @@ ArvadosFile <- R6::R6Class(
         size       = NULL,
         parent     = NULL,
         collection = NULL,
-        http       = NULL,
-        httpParser = NULL,
         buffer     = NULL,
 
         attachToNewParent = function(newParent)
@@ -194,3 +248,27 @@ ArvadosFile <- R6::R6Class(
 
     cloneable = FALSE
 )
+
+#' print.ArvadosFile
+#'
+#' Custom print function for ArvadosFile class
+#'
+#' @param x Instance of ArvadosFile class
+#' @param ... Optional arguments.
+#' @export
+print.ArvadosFile = function(x, ...)
+{
+    collection   <- NULL
+    relativePath <- x$getRelativePath()
+
+    if(!is.null(x$getCollection()))
+    {
+        collection <- x$getCollection()$uuid
+        relativePath <- paste0("/", relativePath)
+    }
+
+    cat(paste0("Type:          ", "\"", "ArvadosFile",         "\""), sep = "\n")
+    cat(paste0("Name:          ", "\"", x$getName(),           "\""), sep = "\n")
+    cat(paste0("Relative path: ", "\"", relativePath,          "\""), sep = "\n")
+    cat(paste0("Collection:    ", "\"", collection,            "\""), sep = "\n")
+}