diff --git a/R/prj_parameter.R b/R/prj_parameter.R index 6f3bf66a4079023fdd7c717375e342206456b43d..cdb3495933102a433f657197b890f9f02ad5635e 100644 --- a/R/prj_parameter.R +++ b/R/prj_parameter.R @@ -3,21 +3,34 @@ #'r2ogs6_parameter -#'@description S3 class describing a .prj parameter -#'@param name The parameter name -#'@param type The parameter type -#'@param values Optional: string | numeric: Parameter values +#'@description tag: parameter +#'@param name string: +#'@param type string: #'@param value Optional: string | double: Parameter value +#'@param values Optional: string | double: Parameter values +#'@param curve Optional: string: +#'@param parameter Optional: string: +#'@param group_id_property Optional: string: +#'@param index_values Optional: list: +#'@param field_name Optional: string: +#'@param mesh Optional: string: +#'@param expression Optional: string: +#'@param time_series Optional: list: +#'@param use_local_coordinate_system Optional: string, "true" | "false": #'@export r2ogs6_parameter <- function(name, type, + value = NULL, values = NULL, - value = NULL) { - - if(!is.null(values) && !is.null(value)){ - stop(paste("r2ogs6_parameter: Use either 'values' or 'value'", - "parameter (XOR)"), call. = FALSE) - } + curve = NULL, + parameter = NULL, + group_id_property = NULL, + index_values = NULL, + field_name = NULL, + mesh = NULL, + expression = NULL, + time_series = NULL, + use_local_coordinate_system = NULL) { #Coerce input value <- coerce_string_to_numeric(value) @@ -25,32 +38,107 @@ r2ogs6_parameter <- function(name, new_r2ogs6_parameter(name, type, + value, values, - value) + curve, + parameter, + group_id_property, + index_values, + field_name, + mesh, + expression, + time_series, + use_local_coordinate_system) } new_r2ogs6_parameter <- function(name, type, - values, - value) { + value = NULL, + values = NULL, + curve = NULL, + parameter = NULL, + group_id_property = NULL, + index_values = NULL, + field_name = NULL, + mesh = NULL, + expression = NULL, + time_series = NULL, + use_local_coordinate_system = NULL) { assertthat::assert_that(assertthat::is.string(name)) assertthat::assert_that(assertthat::is.string(type)) - validate_is_null_or_numeric(values) validate_is_null_or_number(value) + validate_is_null_or_numeric(values) + + validate_is_null_or_string(curve, + parameter, + group_id_property, + field_name, + mesh, + expression) + + validate_is_null_or_str_flag(use_local_coordinate_system) - structure( - list( - name = name, - type = type, - values = values, - value = value, - is_subclass = FALSE, - attr_names = character(), - flatten_on_exp = c("values") - ), - class = "r2ogs6_parameter" + index_values <- validate_index_values(index_values) + + if(!is.null(time_series)){ + assertthat::assert_that(is.list(time_series)) + names(time_series) <- rep("pair", length(time_series)) + + for(i in seq_len(length(time_series))){ + time_series[[i]] <- validate_param_list(time_series[[i]], + c("time", + "parameter_name")) + } + } + + structure(list(name = name, + type = type, + value = value, + values = values, + curve = curve, + parameter = parameter, + group_id_property = group_id_property, + index_values = index_values, + field_name = field_name, + mesh = mesh, + expression = expression, + time_series = time_series, + use_local_coordinate_system = use_local_coordinate_system, + is_subclass = TRUE, + attr_names = character(), + flatten_on_exp = c("values") + ), + class = "r2ogs6_parameter" ) } + + +#===== validation utility ===== + + +validate_index_values <- function(index_values){ + + if(!is.null(index_values)){ + assertthat::assert_that(is.list(index_values)) + assertthat::assert_that(length(index_values == 2)) + + #Coerce index + index_values[[1]] <- coerce_string_to_numeric(index_values[[1]]) + names(index_values)[[1]] <- "index" + + #Coerce value / values + index_values[[2]] <- coerce_string_to_numeric(index_values[[2]], + TRUE) + + if(length(index_values[[2]]) > 1){ + names(index_values)[[2]] <- "values" + }else{ + names(index_values)[[2]] <- "value" + } + } + + return(invisible(index_values)) +}