13111: Merge branch 'master' into 13111-webdav-projects
[arvados.git] / sdk / R / R / HttpParser.R
index ebe7d8c636d28b26132f4d3da965a709753b380f..5df8287fdce7b85f2b83003ac7e55720afc39645 100644 (file)
@@ -1,39 +1,53 @@
-#' HttpParser
-#'
-HttpParser <- setRefClass(
+HttpParser <- R6::R6Class(
 
     "HttrParser",
 
-    fields = list(
-    ),
+    public = list(
+
+        validContentTypes = NULL,
 
-    methods = list(
         initialize = function() 
         {
+            self$validContentTypes <- c("text", "raw")
         },
 
-        parseCollectionGet = function(server_response) 
+        parseJSONResponse = function(serverResponse) 
         {
-            parsed_response <- httr::content(server_response, as = "parsed", type = "application/json")
+            parsed_response <- httr::content(serverResponse,
+                                             as = "parsed",
+                                             type = "application/json")
+        },
 
-            #Todo(Fudo): Create new Collection object and populate it
+        parseResponse = function(serverResponse, outputType)
+        {
+            parsed_response <- httr::content(serverResponse, as = outputType)
         },
 
-        parseWebDAVResponse = function(response, uri)
+        getFileNamesFromResponse = function(response, uri)
         {
-            #Todo(Fudo): Move this to HttpParser.
             text <- rawToChar(response$content)
             doc <- XML::xmlParse(text, asText=TRUE)
-
-            # calculate relative paths
             base <- paste(paste("/", strsplit(uri, "/")[[1]][-1:-3], sep="", collapse=""), "/", sep="")
             result <- unlist(
                 XML::xpathApply(doc, "//D:response/D:href", function(node) {
-                    sub(base, "", URLdecode(xmlValue(node)), fixed=TRUE)
+                    sub(base, "", URLdecode(XML::xmlValue(node)), fixed=TRUE)
                 })
             )
-            result[result != ""]
-        }
+            result <- result[result != ""]
+            result[-1]
+        },
 
+        getFileSizesFromResponse = function(response, uri)    
+        {
+            text <- rawToChar(response$content)
+            doc <- XML::xmlParse(text, asText=TRUE)
+
+            base <- paste(paste("/", strsplit(uri, "/")[[1]][-1:-3], sep="", collapse=""), "/", sep="")
+            result <- XML::xpathApply(doc, "//D:response/D:propstat/D:prop/D:getcontentlength", function(node) {
+              XML::xmlValue(node)
+            })
+
+            unlist(result)
+        }
     )
 )