diff --git a/NAMESPACE b/NAMESPACE index 5c52d08b..f23e3c15 100644 --- a/NAMESPACE +++ b/NAMESPACE @@ -322,6 +322,7 @@ export(ISOVerticalExtent) export(SWEAbstractDataComponent) export(SWEAbstractObject) export(SWEAbstractSimpleComponent) +export(SWECount) export(cacheISOClasses) export(convert_metadata) export(geometaLogger) diff --git a/R/ISOAbstractObject.R b/R/ISOAbstractObject.R index 63b9e09e..16712041 100644 --- a/R/ISOAbstractObject.R +++ b/R/ISOAbstractObject.R @@ -168,7 +168,7 @@ ISOAbstractObject <- R6Class("ISOAbstractObject", xmlNamespacePrefix = "GCO", encoding = options("encoding"), document = FALSE, - system_fields = c("wrap", "valueDescription", + system_fields = c("wrap", "value_as_field", "valueDescription", "element", "namespace", "defaults", "attrs", "printAttrs", "parentAttrs", "codelistId", "measureType", "isNull", "anyElement"), xmlComments = function(isoCompliant = NA, inspireReport = NULL){ @@ -319,11 +319,12 @@ ISOAbstractObject <- R6Class("ISOAbstractObject", printAttrs = list(), parentAttrs = NULL, value = NULL, + value_as_field = FALSE, isNull = FALSE, anyElement = FALSE, initialize = function(xml = NULL, element = NULL, namespace = NULL, attrs = list(), defaults = list(), - wrap = TRUE){ + wrap = TRUE, value_as_field = FALSE){ if(!is.null(element)){ private$xmlElement <- element } if(!is.null(namespace)){ private$xmlNamespacePrefix <- toupper(namespace)} self$element = private$xmlElement @@ -331,6 +332,7 @@ ISOAbstractObject <- R6Class("ISOAbstractObject", self$attrs = attrs self$defaults = defaults self$wrap = wrap + self$value_as_field = value_as_field if(!is.null(xml)){ self$decode(xml) } @@ -934,10 +936,19 @@ ISOAbstractObject <- R6Class("ISOAbstractObject", emptyNode <- xmlOutputDOM(tag = field,nameSpace = namespaceId, attrs = emptyNodeAttrs) rootXML$addNode(emptyNode$value()) }else{ - if(field == "value"|| field == "_internal_"){ + if((field == "value"|| field == "_internal_")){ if(is.logical(fieldObj)) fieldObj <- tolower(as.character(is.logical(fieldObj))) fieldObj <- private$fromComplexTypes(fieldObj) - rootXML$addNode(xmlTextNode(fieldObj)) + if(field == "value" && self$value_as_field){ + wrapperNode <- xmlOutputDOM( + tag = field, + nameSpace = namespaceId + ) + wrapperNode$addNode(xmlTextNode(fieldObj)) + rootXML$addNode(wrapperNode$value()) + }else{ + rootXML$addNode(xmlTextNode(fieldObj)) + } }else{ dataObj <- self$wrapBaseElement(field, fieldObj) if(!is.null(dataObj)){ diff --git a/R/SWEAbstractDataComponent.R b/R/SWEAbstractDataComponent.R index 6520d98b..7fb3a01a 100644 --- a/R/SWEAbstractDataComponent.R +++ b/R/SWEAbstractDataComponent.R @@ -4,7 +4,7 @@ #' @importFrom R6 R6Class #' @export #' @keywords ISO SWE -#' @return Object of \code{\link{R6Class}} for modelling an SWS Abstract data component +#' @return Object of \code{\link{R6Class}} for modelling an SWE Abstract data component #' @format \code{\link{R6Class}} object. #' #' @note Class used internally by geometa diff --git a/R/SWEAbstractObject.R b/R/SWEAbstractObject.R index aa53ea07..f22bbc07 100644 --- a/R/SWEAbstractObject.R +++ b/R/SWEAbstractObject.R @@ -4,7 +4,7 @@ #' @importFrom R6 R6Class #' @export #' @keywords ISO GML -#' @return Object of \code{\link{R6Class}} for modelling an GML abstract object +#' @return Object of \code{\link{R6Class}} for modelling an SWE abstract object #' @format \code{\link{R6Class}} object. #' #' @note Class used internally by geometa @@ -29,7 +29,7 @@ SWEAbstractObject <- R6Class("SWEAbstractObject", if(is.null(element)) element <- private$xmlElement super$initialize(xml, element, namespace = private$xmlNamespacePrefix, attrs = attrs, defaults = defaults, - wrap = wrap) + wrap = wrap, value_as_field = TRUE) } ) ) \ No newline at end of file diff --git a/R/SWEAbstractSimpleComponent.R b/R/SWEAbstractSimpleComponent.R index 22b05cd4..97db15ce 100644 --- a/R/SWEAbstractSimpleComponent.R +++ b/R/SWEAbstractSimpleComponent.R @@ -4,7 +4,7 @@ #' @importFrom R6 R6Class #' @export #' @keywords ISO SWE -#' @return Object of \code{\link{R6Class}} for modelling an SWS Abstract simple component +#' @return Object of \code{\link{R6Class}} for modelling an SWE Abstract simple component #' @format \code{\link{R6Class}} object. #' #' @references diff --git a/R/SWECount.R b/R/SWECount.R new file mode 100644 index 00000000..61986b4e --- /dev/null +++ b/R/SWECount.R @@ -0,0 +1,55 @@ +#' SWECount +#' +#' @docType class +#' @importFrom R6 R6Class +#' @export +#' @keywords ISO SWE +#' @return Object of \code{\link{R6Class}} for modelling an SWE Count +#' @format \code{\link{R6Class}} object. +#' +#' @references +#' OGC Geography Markup Language. https://www.ogc.org/standards/swecommon +#' +#' @author Emmanuel Blondel +#' +SWECount <- R6Class("SWECount", + inherit = SWEAbstractSimpleComponent, + private = list( + xmlElement = "Count", + xmlNamespacePrefix = "SWE" + ), + public = list( + + #'@field constraint constraint + constraint = NULL, + + #'@field value value + value = NULL, + + #'@description Initializes an object of class \link{SWECount} + #'@param xml object of class \link{XMLInternalNode-class} from \pkg{XML} + #'@param element element + #'@param attrs attrs + #'@param defaults defaults + #'@param wrap wrap + initialize = function(xml = NULL, constraint = NULL, value = NULL){ + super$initialize(xml, element = private$xmlElement) + if(is.null(xml)){ + self$constraint <- constraint + self$value <- value + } + }, + + #'@description setConstraint + #'@param constraint + setConstraint = function(constraint){ + self$constraint <- constraint + }, + + #'@description setValue + #'@param value + setValue = function(value){ + self$value <- value + } + ) +) \ No newline at end of file diff --git a/README.md b/README.md index 01446790..1f9cd035 100644 --- a/README.md +++ b/README.md @@ -37,4 +37,4 @@ We thank in advance people that use ``geometa`` for citing it in their work / pu |GML 3.2.1 (ISO 19136) |Geographic Markup Language |GML |[![GML 3.2.1 (ISO 19136)](https://img.shields.io/badge/-37%25-ff0c0c.svg)](https://github.com/eblondel/geometa) | 63| 106| |GML 3.2.1 Coverage (OGC GMLCOV) |OGC GML Coverage Implementation Schema |GMLCOV |[![GML 3.2.1 Coverage (OGC GMLCOV)](https://img.shields.io/badge/-100%25-4a4ea8.svg)](https://github.com/eblondel/geometa) | 1| 0| |GML 3.3 Referenceable Grid (OGC GML) |OGC GML Referenceable Grid |GMLRGRID |[![GML 3.3 Referenceable Grid (OGC GML)](https://img.shields.io/badge/-100%25-4a4ea8.svg)](https://github.com/eblondel/geometa) | 5| 0| -|SWE 2.0 |Sensor Web Enablement (SWE) Common Data Model |SWE |[![SWE 2.0](https://img.shields.io/badge/-7%25-ad0f0f.svg)](https://github.com/eblondel/geometa) | 2| 28| +|SWE 2.0 |Sensor Web Enablement (SWE) Common Data Model |SWE |[![SWE 2.0](https://img.shields.io/badge/-16%25-ad0f0f.svg)](https://github.com/eblondel/geometa) | 5| 26| diff --git a/inst/extdata/coverage/geometa_coverage_inventory.csv b/inst/extdata/coverage/geometa_coverage_inventory.csv index de8a67f1..63fedf6f 100644 --- a/inst/extdata/coverage/geometa_coverage_inventory.csv +++ b/inst/extdata/coverage/geometa_coverage_inventory.csv @@ -486,7 +486,8 @@ "SWE 2.0","Sensor Web Enablement (SWE) Common Data Model","SWE","Category","",FALSE "SWE 2.0","Sensor Web Enablement (SWE) Common Data Model","SWE","CategoryRange","",FALSE "SWE 2.0","Sensor Web Enablement (SWE) Common Data Model","SWE","Component","",FALSE -"SWE 2.0","Sensor Web Enablement (SWE) Common Data Model","SWE","Count","",FALSE +"SWE 2.0","Sensor Web Enablement (SWE) Common Data Model","SWE","Count","SWECount",TRUE +"SWE 2.0","Sensor Web Enablement (SWE) Common Data Model","SWE","Count","SWECount",TRUE "SWE 2.0","Sensor Web Enablement (SWE) Common Data Model","SWE","CountRange","",FALSE "SWE 2.0","Sensor Web Enablement (SWE) Common Data Model","SWE","DataArray","",FALSE "SWE 2.0","Sensor Web Enablement (SWE) Common Data Model","SWE","DataChoice","",FALSE diff --git a/inst/extdata/coverage/geometa_coverage_summary.csv b/inst/extdata/coverage/geometa_coverage_summary.csv index 8bfdcb1c..1bafaff8 100644 --- a/inst/extdata/coverage/geometa_coverage_summary.csv +++ b/inst/extdata/coverage/geometa_coverage_summary.csv @@ -8,4 +8,4 @@ "GML 3.2.1 (ISO 19136)","Geographic Markup Language","GML",63,106,37.28 "GML 3.2.1 Coverage (OGC GMLCOV)","OGC GML Coverage Implementation Schema","GMLCOV",1,0,100 "GML 3.3 Referenceable Grid (OGC GML)","OGC GML Referenceable Grid","GMLRGRID",5,0,100 -"SWE 2.0","Sensor Web Enablement (SWE) Common Data Model","SWE",3,27,10 +"SWE 2.0","Sensor Web Enablement (SWE) Common Data Model","SWE",5,26,16.13 diff --git a/inst/extdata/coverage/geometa_coverage_summary.md b/inst/extdata/coverage/geometa_coverage_summary.md index 0cf3b5fb..05f0d53b 100644 --- a/inst/extdata/coverage/geometa_coverage_summary.md +++ b/inst/extdata/coverage/geometa_coverage_summary.md @@ -9,4 +9,4 @@ |GML 3.2.1 (ISO 19136) |Geographic Markup Language |GML |[![GML 3.2.1 (ISO 19136)](https://img.shields.io/badge/-37%25-ff0c0c.svg)](https://github.com/eblondel/geometa) | 63| 106| |GML 3.2.1 Coverage (OGC GMLCOV) |OGC GML Coverage Implementation Schema |GMLCOV |[![GML 3.2.1 Coverage (OGC GMLCOV)](https://img.shields.io/badge/-100%25-4a4ea8.svg)](https://github.com/eblondel/geometa) | 1| 0| |GML 3.3 Referenceable Grid (OGC GML) |OGC GML Referenceable Grid |GMLRGRID |[![GML 3.3 Referenceable Grid (OGC GML)](https://img.shields.io/badge/-100%25-4a4ea8.svg)](https://github.com/eblondel/geometa) | 5| 0| -|SWE 2.0 |Sensor Web Enablement (SWE) Common Data Model |SWE |[![SWE 2.0](https://img.shields.io/badge/-10%25-ad0f0f.svg)](https://github.com/eblondel/geometa) | 3| 27| +|SWE 2.0 |Sensor Web Enablement (SWE) Common Data Model |SWE |[![SWE 2.0](https://img.shields.io/badge/-16%25-ad0f0f.svg)](https://github.com/eblondel/geometa) | 5| 26| diff --git a/man/SWEAbstractDataComponent.Rd b/man/SWEAbstractDataComponent.Rd index 992e136f..391f5a8c 100644 --- a/man/SWEAbstractDataComponent.Rd +++ b/man/SWEAbstractDataComponent.Rd @@ -29,7 +29,7 @@ \item{identifier}{identifier} } \value{ -Object of \code{\link{R6Class}} for modelling an SWS Abstract data component +Object of \code{\link{R6Class}} for modelling an SWE Abstract data component } \description{ Initializes an object of class \link{SWEAbstractDataComponent} diff --git a/man/SWEAbstractObject.Rd b/man/SWEAbstractObject.Rd index f4c47248..921b6d58 100644 --- a/man/SWEAbstractObject.Rd +++ b/man/SWEAbstractObject.Rd @@ -19,7 +19,7 @@ \item{wrap}{wrap} } \value{ -Object of \code{\link{R6Class}} for modelling an GML abstract object +Object of \code{\link{R6Class}} for modelling an SWE abstract object } \description{ Initializes an object of class \link{SWEAbstractObject} diff --git a/man/SWEAbstractSimpleComponent.Rd b/man/SWEAbstractSimpleComponent.Rd index 81bc6c70..e4f746d8 100644 --- a/man/SWEAbstractSimpleComponent.Rd +++ b/man/SWEAbstractSimpleComponent.Rd @@ -19,7 +19,7 @@ \item{wrap}{wrap} } \value{ -Object of \code{\link{R6Class}} for modelling an SWS Abstract simple component +Object of \code{\link{R6Class}} for modelling an SWE Abstract simple component } \description{ Initializes an object of class \link{SWEAbstractSimpleComponent} diff --git a/man/SWECount.Rd b/man/SWECount.Rd new file mode 100644 index 00000000..eb02081c --- /dev/null +++ b/man/SWECount.Rd @@ -0,0 +1,46 @@ +% Generated by roxygen2: do not edit by hand +% Please edit documentation in R/SWECount.R +\docType{class} +\name{SWECount} +\alias{SWECount} +\title{SWECount} +\format{ +\code{\link{R6Class}} object. +} +\arguments{ +\item{xml}{object of class \link{XMLInternalNode-class} from \pkg{XML}} + +\item{element}{element} + +\item{attrs}{attrs} + +\item{defaults}{defaults} + +\item{wrap}{wrap} +} +\value{ +Object of \code{\link{R6Class}} for modelling an SWE Count +} +\description{ +Initializes an object of class \link{SWECount} + +setConstraint + +setValue +} +\section{Fields}{ + +\describe{ +\item{\code{constraint}}{constraint} + +\item{\code{value}}{value} +}} + +\references{ +OGC Geography Markup Language. https://www.ogc.org/standards/swecommon +} +\author{ +Emmanuel Blondel +} +\keyword{ISO} +\keyword{SWE} diff --git a/tests/testthat/test_SWECount.R b/tests/testthat/test_SWECount.R new file mode 100644 index 00000000..f3ec8c5d --- /dev/null +++ b/tests/testthat/test_SWECount.R @@ -0,0 +1,23 @@ +# test_SWECount.R +# Author: Emmanuel Blondel +# +# Description: Unit tests for classes inheriting SWECount.R +#======================= +require(geometa, quietly = TRUE) +require(sf) +require(testthat) + +context("SWECount") + +test_that("SWECount",{ + testthat::skip_on_cran() + #encoding + cnt <- SWECount$new(value = 1000) + xml <- cnt$encode() + expect_is(xml, "XMLInternalNode") + #decoding + cnt2 <- SWECount$new(xml = xml) + xml2 <- cnt2$encode() + #assert object identity + expect_true(ISOAbstractObject$compare(cnt, cnt2)) +})