R/sample.R

# mzTab-M reference implementation and validation API.
#
# This is the mzTab-M reference implementation and validation API service.
#
# The version of the OpenAPI document: 2.0.0
# Contact: nils.hoffmann@cebitec.uni-bielefeld.de
# Generated by: https://openapi-generator.tech

#' @docType class
#' @title Sample
#' @description Sample Class
#' @format An \code{R6Class} generator object
#' @field id  integer [optional]
#'
#' @field name  character [optional]
#'
#' @field custom  list( \link{Parameter} ) [optional]
#'
#' @field species  list( \link{Parameter} ) [optional]
#'
#' @field tissue  list( \link{Parameter} ) [optional]
#'
#' @field cell_type  list( \link{Parameter} ) [optional]
#'
#' @field disease  list( \link{Parameter} ) [optional]
#'
#' @field description  character [optional]
#'
#'
#' @importFrom R6 R6Class
#' @importFrom jsonlite fromJSON toJSON
#' @export
Sample <- R6::R6Class(
  'Sample',
  public = list(
    `id` = NULL,
    `name` = NULL,
    `custom` = NULL,
    `species` = NULL,
    `tissue` = NULL,
    `cell_type` = NULL,
    `disease` = NULL,
    `description` = NULL,
    #' @description Create a Sample
    #' @param id Sample id.
    #' @param name Sample name.
    #' @param custom Custom parameters list( \link{Parameter} ).
    #' @param species Species CV parameters list( \link{Parameter} ).
    #' @param tissue Tissue CV parameters list( \link{Parameter} ).
    #' @param cell_type Cell Type CV parameters list( \link{Parameter} ).
    #' @param disease Disease CV parameters list( \link{Parameter} ).
    #' @param description Description of the sample.
    #' @param ... local optional variable arguments
    #'     
    initialize = function(`id`=NULL, `name`=NULL, `custom`=NULL, `species`=NULL, `tissue`=NULL, `cell_type`=NULL, `disease`=NULL, `description`=NULL, ...){
      local.optional.var <- list(...)
      if (!is.null(`id`)) {
        stopifnot(is.numeric(`id`), length(`id`) == 1)
        self$`id` <- `id`
      }
      if (!is.null(`name`)) {
        stopifnot(is.character(`name`), length(`name`) == 1)
        self$`name` <- `name`
      }
      if (!is.null(`custom`)) {
        stopifnot(is.vector(`custom`), length(`custom`) != 0)
        sapply(`custom`, function(x) stopifnot(R6::is.R6(x)))
        self$`custom` <- `custom`
      }
      if (!is.null(`species`)) {
        stopifnot(is.vector(`species`), length(`species`) != 0)
        sapply(`species`, function(x) stopifnot(R6::is.R6(x)))
        self$`species` <- `species`
      }
      if (!is.null(`tissue`)) {
        stopifnot(is.vector(`tissue`), length(`tissue`) != 0)
        sapply(`tissue`, function(x) stopifnot(R6::is.R6(x)))
        self$`tissue` <- `tissue`
      }
      if (!is.null(`cell_type`)) {
        stopifnot(is.vector(`cell_type`), length(`cell_type`) != 0)
        sapply(`cell_type`, function(x) stopifnot(R6::is.R6(x)))
        self$`cell_type` <- `cell_type`
      }
      if (!is.null(`disease`)) {
        stopifnot(is.vector(`disease`), length(`disease`) != 0)
        sapply(`disease`, function(x) stopifnot(R6::is.R6(x)))
        self$`disease` <- `disease`
      }
      if (!is.null(`description`)) {
        stopifnot(is.character(`description`), length(`description`) == 1)
        self$`description` <- `description`
      }
    },
    #' @description Serialize to list object suitable for jsonlite
    toJSON = function() {
      SampleObject <- list()
      if (!is.null(self$`id`)) {
        SampleObject[['id']] <-
          rmzTabM::safe_unbox(self$`id`)
      }
      if (!is.null(self$`name`)) {
        SampleObject[['name']] <-
          rmzTabM::safe_unbox(self$`name`)
      }
      if (!is.null(self$`custom`)) {
        SampleObject[['custom']] <-
          lapply(self$`custom`, function(x) x$toJSON())
      }
      if (!is.null(self$`species`)) {
        SampleObject[['species']] <-
          lapply(self$`species`, function(x) x$toJSON())
      }
      if (!is.null(self$`tissue`)) {
        SampleObject[['tissue']] <-
          lapply(self$`tissue`, function(x) x$toJSON())
      }
      if (!is.null(self$`cell_type`)) {
        SampleObject[['cell_type']] <-
          lapply(self$`cell_type`, function(x) x$toJSON())
      }
      if (!is.null(self$`disease`)) {
        SampleObject[['disease']] <-
          lapply(self$`disease`, function(x) x$toJSON())
      }
      if (!is.null(self$`description`)) {
        SampleObject[['description']] <-
          rmzTabM::safe_unbox(self$`description`)
      }

      SampleObject
    },
    #' @description Deserialize from jsonlite list object
    #' @param SampleJson list object.
    fromJSON = function(SampleJson) {
      SampleObject <- jsonlite::fromJSON(SampleJson)
      if (!is.null(SampleObject$`id`)) {
        self$`id` <- SampleObject$`id`
      }
      if (!is.null(SampleObject$`name`)) {
        self$`name` <- SampleObject$`name`
      }
      if (!is.null(SampleObject$`custom`)) {
        self$`custom` <- ApiClient$new()$deserializeObj(SampleObject$`custom`, "array[Parameter]", loadNamespace("rmzTabM"))
      }
      if (!is.null(SampleObject$`species`)) {
        self$`species` <- ApiClient$new()$deserializeObj(SampleObject$`species`, "array[Parameter]", loadNamespace("rmzTabM"))
      }
      if (!is.null(SampleObject$`tissue`)) {
        self$`tissue` <- ApiClient$new()$deserializeObj(SampleObject$`tissue`, "array[Parameter]", loadNamespace("rmzTabM"))
      }
      if (!is.null(SampleObject$`cell_type`)) {
        self$`cell_type` <- ApiClient$new()$deserializeObj(SampleObject$`cell_type`, "array[Parameter]", loadNamespace("rmzTabM"))
      }
      if (!is.null(SampleObject$`disease`)) {
        self$`disease` <- ApiClient$new()$deserializeObj(SampleObject$`disease`, "array[Parameter]", loadNamespace("rmzTabM"))
      }
      if (!is.null(SampleObject$`description`)) {
        self$`description` <- SampleObject$`description`
      }
    },
    #' @description Serialize to JSON string.
    toJSONString = function() {
      jsoncontent <- c(
        if (!is.null(self$`id`)) {
        sprintf(
        '"id":
          %d
                ',
        rmzTabM::safe_unbox(self$`id`)
        )},
        if (!is.null(self$`name`)) {
        sprintf(
        '"name":
          "%s"
                ',
        rmzTabM::safe_unbox(self$`name`)
        )},
        if (!is.null(self$`custom`)) {
        sprintf(
        '"custom":
        %s
',
        paste(sapply(self$`custom`, function(x) jsonlite::toJSON(x$toJSON(), auto_unbox=FALSE, null = "null", na = "null", digits = NA)), collapse=",")
        )},
        if (!is.null(self$`species`)) {
        sprintf(
        '"species":
        %s
',
        paste(sapply(self$`species`, function(x) jsonlite::toJSON(x$toJSON(), auto_unbox=FALSE, null = "null", na = "null", digits = NA)), collapse=",")
        )},
        if (!is.null(self$`tissue`)) {
        sprintf(
        '"tissue":
        %s
',
        paste(sapply(self$`tissue`, function(x) jsonlite::toJSON(x$toJSON(), auto_unbox=FALSE, null = "null", na = "null", digits = NA)), collapse=",")
        )},
        if (!is.null(self$`cell_type`)) {
        sprintf(
        '"cell_type":
        %s
',
        paste(sapply(self$`cell_type`, function(x) jsonlite::toJSON(x$toJSON(), auto_unbox=FALSE, null = "null", na = "null", digits = NA)), collapse=",")
        )},
        if (!is.null(self$`disease`)) {
        sprintf(
        '"disease":
        %s
',
        paste(sapply(self$`disease`, function(x) jsonlite::toJSON(x$toJSON(), auto_unbox=FALSE, null = "null", na = "null", digits = NA)), collapse=",")
        )},
        if (!is.null(self$`description`)) {
        sprintf(
        '"description":
          "%s"
                ',
        rmzTabM::safe_unbox(self$`description`)
        )}
      )
      jsoncontent <- paste(jsoncontent, collapse = ",")
      paste('{', jsoncontent, '}', sep = "")
    },
    #' @description Deserialize from JSON string
    #' @param SampleJson SampleJson string
    fromJSONString = function(SampleJson) {
      SampleObject <- jsonlite::fromJSON(SampleJson)
      self$`id` <- SampleObject$`id`
      self$`name` <- SampleObject$`name`
      self$`custom` <- ApiClient$new()$deserializeObj(SampleObject$`custom`, "array[Parameter]", loadNamespace("rmzTabM"))
      self$`species` <- ApiClient$new()$deserializeObj(SampleObject$`species`, "array[Parameter]", loadNamespace("rmzTabM"))
      self$`tissue` <- ApiClient$new()$deserializeObj(SampleObject$`tissue`, "array[Parameter]", loadNamespace("rmzTabM"))
      self$`cell_type` <- ApiClient$new()$deserializeObj(SampleObject$`cell_type`, "array[Parameter]", loadNamespace("rmzTabM"))
      self$`disease` <- ApiClient$new()$deserializeObj(SampleObject$`disease`, "array[Parameter]", loadNamespace("rmzTabM"))
      self$`description` <- SampleObject$`description`
      self
    },
    #' @description Serialize to data frame
    toDataFrame = function() {
      idPrefix <- paste0("sample[", self$`id`, "]")
      elements <- data.frame(PREFIX=character(), KEY=character(), VALUE=character())
      if (!is.null(self$`name`)) {
        elements <-
          rbind(elements,
                list(
                  PREFIX = "MTD",
                  KEY = idPrefix,
                  VALUE = self$`name`
                ),
                stringsAsFactors = FALSE)
      }
      if (!is.null(self$`custom`)) {
        elements <-
          rbind(elements,
                lapply(seq_along(self$`custom`), function(idx, elements, idPrefix) {
                  list(PREFIX = "MTD", KEY=paste(idPrefix, paste0("custom[", idx, "]"), sep="-"), VALUE=elements[[idx]]$toString())
                }, elements=self$`custom`, idPrefix=idPrefix) %>% dplyr::bind_rows(),
                stringsAsFactors = FALSE)
      }
      if (!is.null(self$`species`)) {
        elements <-
          rbind(elements,
                lapply(seq_along(self$`species`), function(idx, elements, idPrefix) {
                  list(PREFIX = "MTD", KEY=paste(idPrefix, paste0("species[", idx, "]"), sep="-"), VALUE=elements[[idx]]$toString())
                }, elements=self$`species`, idPrefix=idPrefix) %>% dplyr::bind_rows(),
                stringsAsFactors = FALSE)
      }
      if (!is.null(self$`tissue`)) {
        elements <-
          rbind(elements,
                lapply(seq_along(self$`tissue`), function(idx, elements, idPrefix) {
                  list(PREFIX = "MTD", KEY=paste(idPrefix, paste0("tissue[", idx, "]"), sep="-"), VALUE=elements[[idx]]$toString())
                }, elements=self$`tissue`, idPrefix=idPrefix) %>% dplyr::bind_rows(),
                stringsAsFactors = FALSE)
      }
      if (!is.null(self$`cell_type`)) {
        elements <-
          rbind(elements,
                lapply(seq_along(self$`cell_type`), function(idx, elements, idPrefix) {
                  list(PREFIX = "MTD", KEY=paste(idPrefix, paste0("cell_type[", idx, "]"), sep="-"), VALUE=elements[[idx]]$toString())
                }, elements=self$`cell_type`, idPrefix=idPrefix) %>% dplyr::bind_rows(),
                stringsAsFactors = FALSE)
      }
      if (!is.null(self$`disease`)) {
        elements <-
          rbind(elements,
                lapply(seq_along(self$`disease`), function(idx, elements, idPrefix) {
                  list(PREFIX = "MTD", KEY=paste(idPrefix, paste0("disease[", idx, "]"), sep="-"), VALUE=elements[[idx]]$toString())
                }, elements=self$`disease`, idPrefix=idPrefix) %>% dplyr::bind_rows(),
                stringsAsFactors = FALSE)
      }
      if (!is.null(self$`description`)) {
        elements <-
          rbind(elements,
                list(
                  PREFIX = "MTD",
                  KEY = paste(idPrefix, "description", sep = "-"),
                  VALUE = self$`description`
                ),
                stringsAsFactors = FALSE)
      }
      elements
    },
    #' @description Deserialize from sample data frame
    #' @param SampleDataFrame Sample data frame
    fromDataFrame = function(SampleDataFrame) {
      stopifnot(nrow(SampleDataFrame)==1)
      if (rlang::has_name(SampleDataFrame, "id")) {
        self$`id` <- as.numeric(SampleDataFrame$`id`)
      }
      columnNames <- colnames(SampleDataFrame)
      if (rlang::has_name(SampleDataFrame, "name")) {
        self$`name` <- SampleDataFrame$`name`
      }
      # extract potentially multiple columns with 'custom' prefix
      customColumns <- columnNames[grepl("^custom", columnNames)]
      if (length(customColumns) > 0) {
        self$`custom` <- lapply(customColumns, function(x) {
          param <- Parameter$new()
          param$fromString(NULL, SampleDataFrame[[x]])
          param
        })
      }
      # extract potentially multiple columns with 'species' prefix
      speciesColumns <- columnNames[grepl("^species", columnNames)]
      if (length(speciesColumns) > 0) {
        self$`species` <- lapply(speciesColumns, function(x) {
          param <- Parameter$new()
          param$fromString(NULL, SampleDataFrame[[x]])
          param
        })
      }
      # extract potentially multiple columns with 'tissue' prefix
      tissueColumns <- columnNames[grepl("^tissue", columnNames)]
      if (length(tissueColumns) > 0) {
        self$`tissue` <- lapply(tissueColumns, function(x) {
          param <- Parameter$new()
          param$fromString(NULL, SampleDataFrame[[x]])
          param
        })
      }
      # extract potentially multiple columns with 'cell_type' prefix
      cellTypeColumns <- columnNames[grepl("^cell\\_type", columnNames)]
      if (length(cellTypeColumns) > 0) {
        self$`cell_type` <- lapply(cellTypeColumns, function(x) {
          param <- Parameter$new()
          param$fromString(NULL, SampleDataFrame[[x]])
          param
        })
      }
      # extract potentially multiple columns with 'disease' prefix
      diseaseColumns <- columnNames[grepl("^disease", columnNames)]
      if (length(diseaseColumns) > 0) {
        self$`disease` <- lapply(diseaseColumns, function(x) {
          param <- Parameter$new()
          param$fromString(NULL, SampleDataFrame[[x]])
          param
        })
      }
      if (rlang::has_name(SampleDataFrame, "description")) {
        self$`description` <- SampleDataFrame$`description`
      }
      self
    }
  )
)
lifs-tools/rmzTab-m documentation built on Jan. 26, 2023, 4:45 p.m.