All Downloads are FREE. Search and download functionalities are using the official Maven repository.

R.RestResponse-methods.R Maven / Gradle / Ivy

################################################################################
#' RestResponse methods
#' 
#' @include AllClasses.R
#' @description The following methods implement the functions to extract 
#' information from the RestResponse object
#' @seealso \url{http://docs.opencb.org/display/opencga/Using+OpenCGA} and the 
#' RESTful API documentation \url{http://bioinfo.hpc.cam.ac.uk/opencga-prod/webservices/}

## Getters ---------------------------------------------------------------------
#' Getters from RestResponse
#' 
#' @export
getApiVersion <- function(restResponse) {
    restResponse@apiVersion
}
#' @export
getTime <- function(restResponse) {
    restResponse@time
}
#' @export
getEvents <- function(restResponse) {
    restResponse@events
}
#' @export
getParams <- function(restResponse) {
    restResponse@params
}
#' @export
getResponses <- function(restResponse) {
    restResponse@responses
}
# Response getters
#' @export
getResponseTime <- function(restResponse) {
    restResponse@responses$time
}
#' @export
getResponseEvents <- function(restResponse) {
    restResponse@responses$events
}
#' @export
getResponseNumResults <- function(restResponse) {
    restResponse@responses$numResults
}
#' @export
getResponseResultType <- function(restResponse) {
    restResponse@responses$resultType
}
#' @export
getResponseNumTotalResults <- function(restResponse) {
    restResponse@responses$numTotalResults
}
#' @export
getResponseNumMatches <- function(restResponse) {
    restResponse@responses$numMatches
}
#' @export
getResponseNumInserted <- function(restResponse) {
    restResponse@responses$numInserted
}
#' @export
getResponseNumUpdated <- function(restResponse) {
    restResponse@responses$numUpdated
}
#' @export
getResponseNumDeleted <- function(restResponse) {
    restResponse@responses$numDeleted
}
#' @export
getResponseAttributes <- function(restResponse) {
    restResponse@responses$attributes
}
#' @export
getResponseResults <- function(restResponse) {
    restResponse@responses$results
}
# ------------------------------------------------------------------------------

#' Get results from RestResponse
#' 
#' @description Fetch the list of results of the response specified in _response_.
#' @param RestResponse an object of class RestResponse obtained after executing 
#' a query to OpenCGA.
#' @param response Position of the response from the array of responses. Default: 1
#' @return the list of results of the specified response. If no _response_ is 
#' given, the results from the first list are returned.
#' @export
setGeneric("results", function(restResponse, response=1) standardGeneric("results"))
setMethod("results", signature="RestResponse", definition=function(restResponse, response=1) {
    getResponseResults(restResponse)[[response]]
})

#' Merge a list of RestResponse Results
#' 
#' @description Merge a list of results from multiple calls to the db
#' @param resultsList a list of results from a RestResponse object
#' @return a character string containing the JSON with the merged results
#' @export
setGeneric("mergeResults", function(resultsList) standardGeneric("mergeResults"))
setMethod("mergeResults", signature=list(), definition=function(resultsList) {
    # resultsMarta = list(list("f1.1", "f2.1", "f3.1"), list("f1.2", "f2.2", "f3.2"), list("f1.3", "f2.3", "f2.3"), list("f1.4", "f2.4", "f3.4"))
    # resultsList <- resultsMarta
    numCall <- length(resultsList)
    numFederation <- length(resultsList[[1]])
    container <- list()
    for (fed_num in 1:numFederation){
        container[[fed_num]] <- list()
        for (call_num in 1:numCall){
            container[[fed_num]][[call_num]] <- resultsList[[call_num]][[fed_num]]
        }
    }
    for (fed_num in 1:numFederation){
        container[[fed_num]] <- jsonlite::rbind_pages(container[[fed_num]])
    }
    # resultsMerged <- jsonlite::rbind_pages(resultsList)
    return(container)
})

#' Merge a list of RestResponses
#' 
#' @description Fetch the list of results of the response specified in _response_.
#' @param RestResponseList a list of RestResponse objects obtained after executing 
#' a query to OpenCGA.
#' @return a merged RestResponse object
#' @export
setGeneric("mergeResponses", function(restResponseList) standardGeneric("mergeResponses"))
setMethod("mergeResponses", signature=list(), definition=function(restResponseList) {
    if (length(restResponseList) == 1){
        return (restResponseList[[1]])
    }else if (length(restResponseList) > 1){
        # Merge apiVersions
        apiVersion <- unique(unlist(lapply(X = restResponseList, FUN = getApiVersion)))
        if (length(apiVersion) > 1) {
            warning("WARNING: More than one api version used in the query.")
            apiVersion <- paste(apiVersion, collapse = ", ")
        }
        # Merge times
        times = sum(sapply(X = restResponseList, FUN = getTime), na.rm = TRUE)
        # Merge events
        events <- lapply(X = restResponseList, FUN = getEvents)
        # Merge params
        params <- getParams(restResponseList[[1]])
        # Merge responses
        responses <- list(time = sum(sapply(X = restResponseList, FUN = getResponseTime), na.rm = TRUE),
                          events = sapply(X = restResponseList, FUN = getResponseEvents),
                          numResults = sum(sapply(X = restResponseList, FUN = getResponseNumResults), na.rm = TRUE),
                          results = mergeResults(resultsList = lapply(X = restResponseList, FUN = getResponseResults)),
                          resultType = unique(sapply(X = restResponseList, FUN = getResponseResultType)),
                          numMatches = sapply(X = restResponseList, FUN = getResponseNumMatches)[1],
                          numInserted = sapply(X = restResponseList, FUN = getResponseNumInserted)[1],
                          numUpdated = sapply(X = restResponseList, FUN = getResponseNumUpdated)[1],
                          numDeleted = sapply(X = restResponseList, FUN = getResponseNumDeleted)[1],
                          attributes = sapply(X = restResponseList, FUN = getResponseAttributes))
        mergedResponse <- new("RestResponse", 
                              apiVersion = apiVersion,
                              time = times,
                              events = events,
                              params = params,
                              responses = responses)
        return(mergedResponse)    
    }else{
        stop("ERROR: No data to process")
    }
})





© 2015 - 2025 Weber Informatics LLC | Privacy Policy