@@ -38,45 +38,43 @@ geoflow_provenance <- R6Class("geoflow_provenance",
38
38
# '@param str character string to initialize a provenance using key-based syntax
39
39
initialize = function (str = NULL ){
40
40
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
+ }
80
78
}
81
79
}
82
80
},
0 commit comments