From 6de009cdcf0b4d71daca76a2e6beb7f0967d9251 Mon Sep 17 00:00:00 2001 From: mstackhouse Date: Thu, 5 Sep 2024 16:48:30 -0400 Subject: [PATCH 1/2] Updates from discussion --- NAMESPACE | 2 +- R/datasetjson.R | 18 +++++---- R/file_metadata.R | 40 +++++++++++++++++-- man/dataset_json.Rd | 6 ++- man/dataset_metadata_setters.Rd | 3 ++ ...eference_data.Rd => set_reference_data.Rd} | 6 +-- 6 files changed, 60 insertions(+), 15 deletions(-) rename man/{set_as_reference_data.Rd => set_reference_data.Rd} (81%) diff --git a/NAMESPACE b/NAMESPACE index 5a563e6..ccbacf6 100644 --- a/NAMESPACE +++ b/NAMESPACE @@ -2,7 +2,6 @@ export(dataset_json) export(read_dataset_json) -export(set_as_reference_data) export(set_dataset_label) export(set_dataset_name) export(set_file_oid) @@ -10,6 +9,7 @@ export(set_item_oid) export(set_metadata_ref) export(set_metadata_version) export(set_originator) +export(set_reference_data) export(set_source_system) export(set_study_oid) export(validate_dataset_json) diff --git a/R/datasetjson.R b/R/datasetjson.R index f3279ba..906a5b5 100644 --- a/R/datasetjson.R +++ b/R/datasetjson.R @@ -25,6 +25,8 @@ #' @param item_oid ID used to label dataset with the itemGroupData parameter. #' Defined as "Object of Datasets. Key value is a unique identifier for #' Dataset, corresponding to ItemGroupDef/@OID in Define-XML." +#' @param ref_data Boolean value that is set to "true" when the dataset contains +#' reference data (not subject data). The default value is "false". #' @param version The DatasetJSON version to use. Currently only 1.1.0 is supported. #' #' @return dataset_json object pertaining to the specific Dataset JSON version @@ -61,9 +63,9 @@ dataset_json <- function(.data, file_oid = NULL, originator=NULL, sys=NULL, sys_version = NULL, study=NULL, metadata_version=NULL, metadata_ref=NULL, item_oid=NULL, name=NULL, - dataset_label=NULL, version="1.1.0") { + dataset_label=NULL, ref_data=FALSE, version="1.1.0") { new_dataset_json(.data, file_oid, originator, sys, sys_version, study, metadata_version, - metadata_ref, item_oid, name, dataset_label, version) + metadata_ref, item_oid, name, dataset_label, ref_data, version) } #' Create a base Dataset JSON Container @@ -77,7 +79,7 @@ dataset_json <- function(.data, file_oid = NULL, originator=NULL, sys=NULL, #' @noRd new_dataset_json <- function(.data, file_oid, originator, sys, sys_version, study, metadata_version, metadata_ref, item_oid, name, dataset_label, - version) { + ref_data, version) { if (!(version %in% c("1.1.0"))) { stop("Unsupported version specified - currently only version 1.1.0 is supported", call.=FALSE) @@ -90,7 +92,8 @@ new_dataset_json <- function(.data, file_oid, originator, sys, sys_version, stud # Extract the function and call it to return the base structure funcs[[version]](.data, file_oid, originator, sys, sys_version, study, - metadata_version, metadata_ref, item_oid, name, dataset_label) + metadata_version, metadata_ref, item_oid, name, dataset_label, + ref_data) } #' Dataset JSON v1.1.0 Generator @@ -98,7 +101,8 @@ new_dataset_json <- function(.data, file_oid, originator, sys, sys_version, stud #' @return datasetjson_v1_1_0 object #' @noRd new_dataset_json_v1_1_0 <- function(.data, file_oid, originator, sys, sys_version, study, - metadata_version, metadata_ref, item_oid, name, dataset_label) { + metadata_version, metadata_ref, item_oid, name, dataset_label, + ref_data) { if (!inherits(.data, 'data.frame')) { stop("datasetjson objects must inherit from a data.frame", call.=FALSE) @@ -111,16 +115,16 @@ new_dataset_json_v1_1_0 <- function(.data, file_oid, originator, sys, sys_versio ) } + attr(.data, 'datasetJSONVersion') <- "1.1.0" attr(.data, 'fileOID') <- file_oid attr(.data, 'originator') <- originator attr(.data, 'studyOID') <- study attr(.data, 'metaDataVersionOID') <- metadata_version attr(.data, 'metaDataRef') <- metadata_ref attr(.data, "itemGroupOID") <- item_oid - attr(.data, 'records') <- nrow(x) attr(.data, 'name') <- name attr(.data, 'label') <- dataset_label - attr(.data, 'isReferenceData') <- FALSE + attr(.data, 'isReferenceData') <- ref_data structure( .data, diff --git a/R/file_metadata.R b/R/file_metadata.R index e0ca4cd..cf5f15f 100644 --- a/R/file_metadata.R +++ b/R/file_metadata.R @@ -29,6 +29,8 @@ #' @param item_oid ID used to label dataset with the itemGroupData parameter. #' Defined as "Object of Datasets. Key value is a unique identifier for #' Dataset, corresponding to ItemGroupDef/@OID in Define-XML." +#' @param ref_data Boolean value that is set to "true" when the dataset contains +#' reference data (not subject data). The default value is "false". #' @param name Dataset name #' @param dataset_label Dataset Label #' @@ -50,6 +52,12 @@ #' ds_json <- set_dataset_label(ds_json, "Iris") set_source_system <- function(x, sys, sys_version) { stopifnot_datasetjson(x) + if (!is.character(sys)) { + stop("`sys` must be a character") + } + if (!is.character(sys_version)) { + stop("`sys_version` must be a character") + } attr(x, 'sourceSystem') <- list( "name" = sys, "version" = sys_version @@ -62,6 +70,9 @@ set_source_system <- function(x, sys, sys_version) { #' @rdname dataset_metadata_setters set_originator <- function(x, originator) { stopifnot_datasetjson(x) + if (!is.character(originator)) { + stop("`originator` must be a character") + } attr(x, 'originator') <- originator x } @@ -71,6 +82,9 @@ set_originator <- function(x, originator) { #' @rdname dataset_metadata_setters set_file_oid <- function(x, file_oid) { stopifnot_datasetjson(x) + if (!is.character(file_oid)) { + stop("`file_oid` must be a character") + } attr(x, 'fileOID') <- file_oid x } @@ -80,6 +94,9 @@ set_file_oid <- function(x, file_oid) { #' @rdname dataset_metadata_setters set_study_oid <- function(x, study) { stopifnot_datasetjson(x) + if (!is.character(study)) { + stop("`study` must be a character") + } attr(x, 'studyOID') <- study x } @@ -89,6 +106,9 @@ set_study_oid <- function(x, study) { #' @rdname dataset_metadata_setters set_metadata_version <- function(x, metadata_version) { stopifnot_datasetjson(x) + if (!is.character(metadata_version)) { + stop("`metadata_version` must be a character") + } attr(x, 'metaDataVersionOID') <- metadata_version x } @@ -98,6 +118,9 @@ set_metadata_version <- function(x, metadata_version) { #' @rdname dataset_metadata_setters set_metadata_ref <- function(x, metadata_ref) { stopifnot_datasetjson(x) + if (!is.character(metadata_ref)) { + stop("`metadata_ref` must be a character") + } attr(x, 'metaDataRef') <- metadata_ref x } @@ -107,6 +130,9 @@ set_metadata_ref <- function(x, metadata_ref) { #' @rdname dataset_metadata_setters set_item_oid <- function(x, item_oid) { stopifnot_datasetjson(x) + if (!is.character(item_oid)) { + stop("`item_oid` must be a character") + } attr(x, "itemGroupOID") <- item_oid } @@ -115,6 +141,9 @@ set_item_oid <- function(x, item_oid) { #' @rdname dataset_metadata_setters set_dataset_name <- function(x, name) { stopifnot_datasetjson(x) + if (!is.character(name)) { + stop("`name` must be a character") + } attr(x, 'name') <- name } @@ -123,6 +152,9 @@ set_dataset_name <- function(x, name) { #' @rdname dataset_metadata_setters set_dataset_label <- function(x, dataset_label) { stopifnot_datasetjson(x) + if (!is.character(dataset_labelx)) { + stop("`dataset_label` must be a character") + } attr(x, 'label') <- dataset_label } @@ -138,12 +170,14 @@ set_dataset_label <- function(x, dataset_label) { #' @examples #' ds_json <- dataset_json(iris) #' ds_json <- set_as_reference_data(ds_json) -set_as_reference_data <- function(x) { +set_reference_data <- function(x, is_refdata) { stopifnot_datasetjson(x) - attr(x, 'isReferenceData') <- TRUE + if (!is.logical(is_refdata)) { + stop("`is_refdata` must be a boolean") + } + attr(x, 'isReferenceData') <- is_refdata } - #' Create an ISO8601 formatted datetime of the current time #' #' This is used to create the creationDateTime and asOfDateTime attributes of diff --git a/man/dataset_json.Rd b/man/dataset_json.Rd index cd9f37d..d538d80 100644 --- a/man/dataset_json.Rd +++ b/man/dataset_json.Rd @@ -16,6 +16,7 @@ dataset_json( item_oid = NULL, name = NULL, dataset_label = NULL, + ref_data = FALSE, version = "1.1.0" ) } @@ -46,6 +47,9 @@ sourceSystem"} Defined as "Object of Datasets. Key value is a unique identifier for Dataset, corresponding to ItemGroupDef/@OID in Define-XML."} +\item{ref_data}{Boolean value that is set to "true" when the dataset contains +reference data (not subject data). The default value is "false".} + \item{version}{The DatasetJSON version to use. Currently only 1.1.0 is supported.} } \value{ @@ -86,5 +90,5 @@ ds_json_updated <- set_source_system(ds_json_updated, "source system", "1.0") ds_json_updated <- set_study_oid(ds_json_updated, "SOMESTUDY") ds_json_updated <- set_item_oid(ds_json_updated, "IG.IRIS") ds_json_updated <- set_dataset_name(ds_json_updated, "IRIS") -ds_json_updated <- set_dataseT_label(ds_json_updated, "Iris") +ds_json_updated <- set_dataset_label(ds_json_updated, "Iris") } diff --git a/man/dataset_metadata_setters.Rd b/man/dataset_metadata_setters.Rd index dcbab0a..c0c2caf 100644 --- a/man/dataset_metadata_setters.Rd +++ b/man/dataset_metadata_setters.Rd @@ -59,6 +59,9 @@ Dataset, corresponding to ItemGroupDef/@OID in Define-XML."} \item{name}{Dataset name} \item{dataset_label}{Dataset Label} + +\item{ref_data}{Boolean value that is set to "true" when the dataset contains +reference data (not subject data). The default value is "false".} } \value{ datasetjson object diff --git a/man/set_as_reference_data.Rd b/man/set_reference_data.Rd similarity index 81% rename from man/set_as_reference_data.Rd rename to man/set_reference_data.Rd index 173bd93..e52a644 100644 --- a/man/set_as_reference_data.Rd +++ b/man/set_reference_data.Rd @@ -1,10 +1,10 @@ % Generated by roxygen2: do not edit by hand % Please edit documentation in R/file_metadata.R -\name{set_as_reference_data} -\alias{set_as_reference_data} +\name{set_reference_data} +\alias{set_reference_data} \title{Declare as reference data} \usage{ -set_as_reference_data(x) +set_reference_data(x, is_refdata) } \arguments{ \item{x}{datasetjson object} From 7d4f4bae7f368f951c868abbe2c7b7cb1c1a136e Mon Sep 17 00:00:00 2001 From: mstackhouse Date: Thu, 5 Sep 2024 16:56:42 -0400 Subject: [PATCH 2/2] docs and cleanup --- NAMESPACE | 1 + R/datasetjson.R | 29 +++++++++++++++++------------ R/file_metadata.R | 24 +++++++++++++----------- man/dataset_json.Rd | 5 ++++- man/dataset_metadata_setters.Rd | 6 ++++++ man/set_reference_data.Rd | 21 --------------------- 6 files changed, 41 insertions(+), 45 deletions(-) delete mode 100644 man/set_reference_data.Rd diff --git a/NAMESPACE b/NAMESPACE index ccbacf6..03d40e1 100644 --- a/NAMESPACE +++ b/NAMESPACE @@ -6,6 +6,7 @@ export(set_dataset_label) export(set_dataset_name) export(set_file_oid) export(set_item_oid) +export(set_last_modified) export(set_metadata_ref) export(set_metadata_version) export(set_originator) diff --git a/R/datasetjson.R b/R/datasetjson.R index 906a5b5..ec453cc 100644 --- a/R/datasetjson.R +++ b/R/datasetjson.R @@ -37,7 +37,8 @@ #' # Create a basic object #' ds_json <- dataset_json( #' iris, -#' file_oid = "/some/path" +#' file_oid = "/some/path", +#' last_modified = "2023-02-15T10:23:15", #' originator = "Some Org", #' sys = "source system", #' sys_version = "1.0", @@ -52,6 +53,7 @@ #' # Attach attributes directly #' ds_json_updated <- set_data_type(ds_json, "referenceData") #' ds_json_updated <- set_file_oid(ds_json_updated, "/some/path") +#' ds_json_updates <- set_last_modified(ds_json_updates, "2023-02-15T10:23:15") #' ds_json_updated <- set_metadata_ref(ds_json_updated, "some/define.xml") #' ds_json_updated <- set_metadata_version(ds_json_updated, "MDV.MSGv2.0.SDTMIG.3.3.SDTM.1.7") #' ds_json_updated <- set_originator(ds_json_updated, "Some Org") @@ -60,12 +62,14 @@ #' ds_json_updated <- set_item_oid(ds_json_updated, "IG.IRIS") #' ds_json_updated <- set_dataset_name(ds_json_updated, "IRIS") #' ds_json_updated <- set_dataset_label(ds_json_updated, "Iris") -dataset_json <- function(.data, file_oid = NULL, originator=NULL, sys=NULL, - sys_version = NULL, study=NULL, metadata_version=NULL, - metadata_ref=NULL, item_oid=NULL, name=NULL, - dataset_label=NULL, ref_data=FALSE, version="1.1.0") { - new_dataset_json(.data, file_oid, originator, sys, sys_version, study, metadata_version, - metadata_ref, item_oid, name, dataset_label, ref_data, version) +dataset_json <- function(.data, file_oid = NULL, last_modified=NULL, + originator=NULL, sys=NULL, sys_version = NULL, + study=NULL, metadata_version=NULL,metadata_ref=NULL, + item_oid=NULL, name=NULL, dataset_label=NULL, ref_data=FALSE, + version="1.1.0") { + new_dataset_json(.data, file_oid, last_modified, originator, sys, sys_version, study, + metadata_version, metadata_ref, item_oid, name, dataset_label, ref_data, + version) } #' Create a base Dataset JSON Container @@ -77,7 +81,7 @@ dataset_json <- function(.data, file_oid = NULL, originator=NULL, sys=NULL, #' @return datasetjson object #' #' @noRd -new_dataset_json <- function(.data, file_oid, originator, sys, sys_version, study, +new_dataset_json <- function(.data, file_oid, last_modified, originator, sys, sys_version, study, metadata_version, metadata_ref, item_oid, name, dataset_label, ref_data, version) { @@ -91,7 +95,7 @@ new_dataset_json <- function(.data, file_oid, originator, sys, sys_version, stud ) # Extract the function and call it to return the base structure - funcs[[version]](.data, file_oid, originator, sys, sys_version, study, + funcs[[version]](.data, file_oid, last_modified, originator, sys, sys_version, study, metadata_version, metadata_ref, item_oid, name, dataset_label, ref_data) } @@ -100,9 +104,9 @@ new_dataset_json <- function(.data, file_oid, originator, sys, sys_version, stud #' #' @return datasetjson_v1_1_0 object #' @noRd -new_dataset_json_v1_1_0 <- function(.data, file_oid, originator, sys, sys_version, study, - metadata_version, metadata_ref, item_oid, name, dataset_label, - ref_data) { +new_dataset_json_v1_1_0 <- function(.data, file_oid, last_modified, originator, sys, sys_version, + study, metadata_version, metadata_ref, item_oid, name, + dataset_label, ref_data) { if (!inherits(.data, 'data.frame')) { stop("datasetjson objects must inherit from a data.frame", call.=FALSE) @@ -117,6 +121,7 @@ new_dataset_json_v1_1_0 <- function(.data, file_oid, originator, sys, sys_versio attr(.data, 'datasetJSONVersion') <- "1.1.0" attr(.data, 'fileOID') <- file_oid + attr(.data, 'dbLastModifiedDateTime') <- last_modified attr(.data, 'originator') <- originator attr(.data, 'studyOID') <- study attr(.data, 'metaDataVersionOID') <- metadata_version diff --git a/R/file_metadata.R b/R/file_metadata.R index cf5f15f..738b382 100644 --- a/R/file_metadata.R +++ b/R/file_metadata.R @@ -158,18 +158,9 @@ set_dataset_label <- function(x, dataset_label) { attr(x, 'label') <- dataset_label } -#' Declare as reference data -#' -#' Sets DatasetJSON file to have the isReferenceData attribute set to TRUE -#' -#' @param x datasetjson object -#' -#' @return datasetjson object #' @export -#' -#' @examples -#' ds_json <- dataset_json(iris) -#' ds_json <- set_as_reference_data(ds_json) +#' @family Dataset Metadata Setters +#' @rdname dataset_metadata_setters set_reference_data <- function(x, is_refdata) { stopifnot_datasetjson(x) if (!is.logical(is_refdata)) { @@ -178,6 +169,17 @@ set_reference_data <- function(x, is_refdata) { attr(x, 'isReferenceData') <- is_refdata } +#' @export +#' @family Dataset Metadata Setters +#' @rdname dataset_metadata_setters +set_last_modified <- function(x, last_modified) { + stopifnot_datasetjson(x) + if (!is.character(last_modified)) { + stop("`last_modified` must be a character") + } + attr(x, 'dbLastModifiedDateTime') <- last_modified +} + #' Create an ISO8601 formatted datetime of the current time #' #' This is used to create the creationDateTime and asOfDateTime attributes of diff --git a/man/dataset_json.Rd b/man/dataset_json.Rd index d538d80..91f6532 100644 --- a/man/dataset_json.Rd +++ b/man/dataset_json.Rd @@ -7,6 +7,7 @@ dataset_json( .data, file_oid = NULL, + last_modified = NULL, originator = NULL, sys = NULL, sys_version = NULL, @@ -68,7 +69,8 @@ been deprecated. # Create a basic object ds_json <- dataset_json( iris, - file_oid = "/some/path" + file_oid = "/some/path", + last_modified = "2023-02-15T10:23:15", originator = "Some Org", sys = "source system", sys_version = "1.0", @@ -83,6 +85,7 @@ ds_json <- dataset_json( # Attach attributes directly ds_json_updated <- set_data_type(ds_json, "referenceData") ds_json_updated <- set_file_oid(ds_json_updated, "/some/path") +ds_json_updates <- set_last_modified(ds_json_updates, "2023-02-15T10:23:15") ds_json_updated <- set_metadata_ref(ds_json_updated, "some/define.xml") ds_json_updated <- set_metadata_version(ds_json_updated, "MDV.MSGv2.0.SDTMIG.3.3.SDTM.1.7") ds_json_updated <- set_originator(ds_json_updated, "Some Org") diff --git a/man/dataset_metadata_setters.Rd b/man/dataset_metadata_setters.Rd index c0c2caf..900f055 100644 --- a/man/dataset_metadata_setters.Rd +++ b/man/dataset_metadata_setters.Rd @@ -10,6 +10,8 @@ \alias{set_item_oid} \alias{set_dataset_name} \alias{set_dataset_label} +\alias{set_reference_data} +\alias{set_last_modified} \title{Dataset Metadata Setters} \usage{ set_source_system(x, sys, sys_version) @@ -29,6 +31,10 @@ set_item_oid(x, item_oid) set_dataset_name(x, name) set_dataset_label(x, dataset_label) + +set_reference_data(x, is_refdata) + +set_last_modified(x, last_modified) } \arguments{ \item{x}{datasetjson object} diff --git a/man/set_reference_data.Rd b/man/set_reference_data.Rd deleted file mode 100644 index e52a644..0000000 --- a/man/set_reference_data.Rd +++ /dev/null @@ -1,21 +0,0 @@ -% Generated by roxygen2: do not edit by hand -% Please edit documentation in R/file_metadata.R -\name{set_reference_data} -\alias{set_reference_data} -\title{Declare as reference data} -\usage{ -set_reference_data(x, is_refdata) -} -\arguments{ -\item{x}{datasetjson object} -} -\value{ -datasetjson object -} -\description{ -Sets DatasetJSON file to have the isReferenceData attribute set to TRUE -} -\examples{ -ds_json <- dataset_json(iris) -ds_json <- set_as_reference_data(ds_json) -}