3076eedf9adfe899712c29527413cb53fccdbad7
[arvados.git] / sdk / R / R / HttpRequest.R
1 source("./R/custom_classes.R")
2
3 HttpRequest <- setRefClass(
4
5     "HttrRequest",
6
7     fields = list(
8         send_method         = "character",
9         server_base_url     = "character",
10         server_relative_url = "character",
11         auth_token          = "character",
12         allowed_methods     = "list",
13         query_filters       = "ANY",
14         response_limit      = "ANY",
15         query_offset        = "ANY"
16     ),
17
18     methods = list(
19         initialize = function(method,
20                               token,
21                               base_url,
22                               relative_url,
23                               filters = NULL,
24                               limit = 100,
25                               offset = 0) 
26         {
27             send_method         <<- method
28             auth_token          <<- token
29             server_base_url     <<- base_url
30             server_relative_url <<- relative_url
31             query_filters       <<- filters
32             response_limit      <<- limit
33             query_offset        <<- offset
34         },
35
36         execute = function() 
37         {
38             http_method <- switch(send_method,
39                                   "GET"    = .self$getRequest,
40                                   "POST"   = .self$postRequest,
41                                   "PUT"    = .self$putRequest,
42                                   "DELETE" = .self$deleteRequest,
43                                   "PATCH"  = .self$pathcRequest)
44             http_method()
45         },
46
47         getRequest = function() 
48         {
49             requestHeaders <- httr::add_headers(Authorization = .self$getAuthHeader())
50             requestQuery   <- .self$generateQuery()
51             url            <- paste0(server_base_url, server_relative_url, requestQuery)
52
53             server_data <- httr::GET(url    = url,
54                                      config = requestHeaders)
55         },
56
57         #Todo(Fudo): Try to make this more generic
58         postRequest = function() 
59         {
60             #Todo(Fudo): Implement this later on.
61             print("POST method")
62         },
63
64         putRequest = function() 
65         {
66             #Todo(Fudo): Implement this later on.
67             print("PUT method")
68         },
69
70         deleteRequest = function() 
71         {
72             #Todo(Fudo): Implement this later on.
73             print("DELETE method")
74         },
75
76         pathcRequest = function() 
77         {
78             #Todo(Fudo): Implement this later on.
79             print("PATCH method")
80         },
81
82         getAuthHeader = function() 
83         {
84             auth_method <- "OAuth2"
85             auth_header <- paste(auth_method, auth_token)
86         },
87
88         generateQuery = function() 
89         {
90             finalQuery <- ""
91
92             if(!is.null(query_filters))
93             {
94                 filters <- sapply(query_filters, function(filter)
95                 {
96                     filter <- sapply(filter, function(component) 
97                     {
98                         component <- paste0("\"", component, "\"")
99                     })
100                     
101                     queryParameter <- paste(filter, collapse = ",+")
102                     queryParameter <- paste0("[[", queryParameter, "]]")
103                 })
104
105                 encodedQuery <- URLencode(filters, reserved = T, repeated = T)
106
107                 #Todo(Fudo): Hardcoded for now. Look for a better solution.
108                 finalQuery <- paste0("?alt=json&filters=", encodedQuery)
109
110                 #Todo(Fudo): This is a hack for now. Find a proper solution.
111                 finalQuery <- str_replace_all(finalQuery, "%2B", "+")
112             }
113
114             finalQuery
115         }
116     )
117 )