Skip to content

Commit 8555731

Browse files
committed
#298 consolidate generic approach + provenance i18n
1 parent 24d984e commit 8555731

File tree

4 files changed

+51
-51
lines changed

4 files changed

+51
-51
lines changed

R/geoflow_provenance.R

Lines changed: 37 additions & 39 deletions
Original file line numberDiff line numberDiff line change
@@ -38,45 +38,43 @@ geoflow_provenance <- R6Class("geoflow_provenance",
3838
#'@param str character string to initialize a provenance using key-based syntax
3939
initialize = function(str = NULL){
4040
if(!is.null(str)){
41-
data_props <- extract_cell_components(sanitize_str(str))
42-
state_prop <- data_props[[1]]
43-
if(!startsWith(state_prop, "statement")){
44-
stop("The data 'statement' is mandatory")
45-
}
46-
state_prop <- unlist(strsplit(state_prop,"statement:"))[2]
47-
self$setStatement(state_prop)
48-
if(length(data_props)>1){
49-
data_props <- data_props[2:length(data_props)]
50-
#processes
51-
processes <- data_props[sapply(data_props, function(x){startsWith(x, "process:")})]
52-
processes <- lapply(processes, function(process){
53-
return(extract_kvp(process))
54-
})
55-
#processors
56-
#processors <- data_props[sapply(data_props, function(x){startsWith(x,"processor:")})]
57-
#processors_splits <- unlist(strsplit(processors, ":"))
58-
#processors <- unlist(strsplit(processors_splits[2],","))
59-
#control processors vs. processes
60-
#if(length(processors)!=length(processes)){
61-
# stop(sprintf("Number of processors [%s] doesn't match the number of processes [%s]",
62-
# length(processors), length(processes)))
63-
#}
64-
#if(length(processes)>0 & length(processors)>0 & length(processes)==length(processors)){
65-
if(length(processes)>0){
66-
for(i in 1:length(processes)){
67-
process <- processes[[i]]$values[[1]]
68-
process_obj <- geoflow_process$new()
69-
process_des <- attr(process, "description")
70-
process_obj$setDescription(process_des)
71-
attr(process, "description") <- NULL
72-
process_obj$setRationale(process)
73-
#processor_obj <- geoflow_contact$new()
74-
#processor_obj$setIdentifier(key = "id", processors[i])
75-
#processor_obj$setRole("processor")
76-
#process_obj$setProcessor(processor_obj)
77-
self$addProcess(process_obj)
78-
}
79-
}
41+
strs <- extract_cell_components(sanitize_str(str))
42+
kvps <- extract_kvps(strs)
43+
44+
#statement
45+
statement <- kvps[sapply(kvps, function(kvp){kvp$key == "statement"})]
46+
if(length(statement)==0) stop("No provenance statement, statement is mandatory")
47+
if(length(statement)>1) warning("More than one provenance statement declared, only the first will be considered!")
48+
statement = statement [[1]]
49+
self$setStatement(statement$values)
50+
51+
#processes
52+
processes <- kvps[sapply(kvps, function(kvp){kvp$key == "process"})]
53+
if(length(processes)>0){
54+
for(process in processes){ #in case processes defined on various lines
55+
print(process)
56+
process_attrs <- attributes(process$values)
57+
for(i in 1:length(process$values)){ #in case processes defined on same line (eg for i18n)
58+
value = if(is.list(process$values)) process$values[[i]] else process$values[i]
59+
process_obj <- geoflow_process$new()
60+
rationale = value
61+
description = process_attrs$description
62+
attributes(rationale) <- NULL
63+
if(is.null(description)) description = attr(value, "description")
64+
if(length(process_attrs)>0){
65+
process_attrs <- process_attrs[names(process_attrs)!="description"]
66+
for(attr_name in names(process_attrs)){
67+
rationale_i18n = process_attrs[[attr_name]][[i]]
68+
attr(description, attr_name) <- attr(rationale_i18n, "description")
69+
attributes(rationale_i18n) = NULL
70+
attr(rationale, attr_name) <- rationale_i18n
71+
}
72+
}
73+
process_obj$setRationale(rationale)
74+
process_obj$setDescription(description)
75+
self$addProcess(process_obj)
76+
}
77+
}
8078
}
8179
}
8280
},

R/geoflow_utils.R

Lines changed: 9 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -132,7 +132,6 @@ extract_kvp <- function(str){
132132
attributes(key) <- key_attrs
133133
locale <- key_parts[2]
134134
}
135-
136135
return(geoflow_kvp$new(key = key, values = values, locale = locale))
137136
}
138137

@@ -154,12 +153,16 @@ extract_kvps <- function(strs, collapse = NULL){
154153
kvps <- lapply(strs, function(str){
155154
kvp <- extract_kvp(str)
156155
if(!is.null(collapse)) kvp$values <- list(paste0(kvp$values, collapse = collapse))
156+
if(length(kvp$values)==1) kvp$values <- kvp$values[[1]]
157157
return(kvp)
158158
})
159159
keys <- unique(sapply(kvps, "[[", "key"))
160-
kvps <- lapply(keys, function(key){
160+
kvps <- do.call("c", lapply(keys, function(key){
161161
kvps_for_key <- kvps[sapply(kvps, function(kvp){kvp$key == key})]
162-
with_null_locale <- any(sapply(kvps_for_key, function(x){is.null(x$locale)}))
162+
with_locales <- any(sapply(kvps_for_key, function(x){!is.null(x$locale)}))
163+
if(!with_locales){
164+
return(kvps_for_key)
165+
}
163166
kvp_with_default_locale <- kvps_for_key[sapply(kvps_for_key, function(x){is.null(x$locale)})]
164167
kvp_with_locale <- kvps_for_key[sapply(kvps_for_key, function(x){!is.null(x$locale)})]
165168
if(length(kvp_with_default_locale)>0){
@@ -168,7 +171,6 @@ extract_kvps <- function(strs, collapse = NULL){
168171
#TODO support default language in geoflow
169172
}
170173
#localization
171-
key <- kvp_with_default_locale$key
172174
#locale key descriptions
173175
for(kvp in kvp_with_locale){
174176
if(!is.null(attr(kvp$key, "uri"))) attr(key, paste0("uri#", kvp$locale)) <- attr(kvp$key, "uri")
@@ -177,14 +179,14 @@ extract_kvps <- function(strs, collapse = NULL){
177179
#locale key uris
178180
#locale values
179181
locale_values <- kvp_with_default_locale$values
180-
if(length(locale_values)==1) locale_values <- locale_values[[1]]
182+
#if(length(locale_values)==1) locale_values <- locale_values[[1]]
181183
for(item in kvp_with_locale){
182184
attr(locale_values, paste0("locale#", toupper(item$locale))) <- item$values
183185
}
184186

185-
kvp_with_locales <- geoflow_kvp$new(key = key, values = locale_values)
187+
kvp_with_locales <- list(geoflow_kvp$new(key = key, values = locale_values))
186188
return(kvp_with_locales)
187-
})
189+
}))
188190

189191
return(kvps)
190192
}

doc/Summary_metadata.csv

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -42,8 +42,8 @@
4242
"Rights","accessConstraint",,,"x",,,,,,"x",,
4343
"Rights","otherConstraint","x","x","x",,,,,,"x",,
4444
"Rights","license","x","x","x",,,,,"x","x",,"x"
45-
"Provenance","statement","x",,"x",,,,,,,,
46-
"Provenance","process","x",,"x",,,,,,,,
45+
"Provenance","statement","x","x","x",,,,,,,,
46+
"Provenance","process","x","x","x",,,,,,,,
4747
"Format","ressource",,,"x",,,,,,,,
4848
"Format","distribution",,,"x",,,,,,,,
4949
"Data",,,,,,,,,,,,

inst/actions/geometa_create_iso_19115.R

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -826,13 +826,13 @@ function(action, entity, config){
826826
dq_lineage_scope$setLevel(dctype_iso)
827827
dq_lineage$setScope(dq_lineage_scope)
828828
lineage <- ISOLineage$new()
829-
lineage$setStatement(entity$provenance$statement)
829+
lineage$setStatement(entity$provenance$statement, locales = geoflow::get_locales_from(entity$provenance$statement))
830830
processes <- entity$provenance$processes
831831
if(length(processes)>0){
832832
for(process in processes){
833833
processStep <- ISOProcessStep$new()
834-
processStep$setRationale(process$rationale)
835-
processStep$setDescription(process$description)
834+
processStep$setRationale(process$rationale, locales = geoflow::get_locales_from(process$rationale))
835+
processStep$setDescription(process$description, locales = geoflow::get_locales_from(process$description))
836836

837837
#processor as responsability party
838838
for(processor in process$processors){

0 commit comments

Comments
 (0)