From 9b62365c4b4e948cfd54a86bd63267934e5116f2 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Luise=20Quo=C3=9F?= <luise.quoss@idiv.de>
Date: Thu, 24 Nov 2022 15:41:34 +0100
Subject: [PATCH] implement irregular timesteps

---
 ebv_metadata_app.R | 103 ++++++++++++++++++++++++++++++++-------------
 1 file changed, 73 insertions(+), 30 deletions(-)

diff --git a/ebv_metadata_app.R b/ebv_metadata_app.R
index 6505828..166d1c6 100644
--- a/ebv_metadata_app.R
+++ b/ebv_metadata_app.R
@@ -98,14 +98,14 @@ ui <- fluidPage(
       column(6,
              textInput('project_name', tags$span(style="font-size: 18px; font-weight: bold", 'Project Name'), width='80%',
                        value = 'TERRANOVA - The European Landscape Learning Initiative',
-                       placeholder='The name(s) of the Project principally responsible for originating this data. Several values should be seperated by comma.'),
+                       placeholder='The name(s) of the Project principally responsible for originating this data. Several values should be separated by comma.'),
              #span(textOutput("title_desc"), style="font-size:14px")
       ),
       #project url
       column(6,
              textInput('project_url', tags$span(style="font-size: 18px; font-weight: bold", 'Project URL'), width='80%',
                        value = "https://www.terranova-itn.eu",
-                       placeholder='The URL from the project(s) website. Several values should be seperated by comma.')
+                       placeholder='The URL from the project(s) website. Several values should be separated by comma.')
       )
     ),
 
@@ -291,12 +291,16 @@ ui <- fluidPage(
                                     "weekly" = "P0000-00-07",
                                     "daily" = "P0000-00-01",
                                     'one timestep' = "P0000-00-00",
+                                    "irregular"  = "Irregular",
                                     "other" = "other"),
                                   width='80%'),
 
                       #other temporal resolution
                       uiOutput('temporal_resoultion_other'),
 
+                      #irregular temporal resolution
+                      uiOutput('temporal_resoultion_irregular'),
+
                       #temporal extent
                       uiOutput('temporal_extent'),
 
@@ -546,6 +550,15 @@ server <- function(input, output) {
         return(list(t,s))
       }
     })
+    output$temporal_resoultion_irregular <- renderUI({
+      if(input$temporal_resolution=='Irregular'){
+        t <- renderText('Provide the definition of your timesteps as a comma-separated list in the format YYYY-MM-DD or short YYYY.')
+
+        s <- textInput('temp_res_irr', '', width='80%', placeholder='YYYY, YYYY, ...')
+        return(list(t,s))
+      }
+    })
+
 
     #check variables
     to_do_list <- c()
@@ -553,43 +566,45 @@ server <- function(input, output) {
 
     #temporal extent----
     output$temporal_extent <- renderUI({
-      if(input$temporal_resolution=='other'){
-        #user defined temporal resolution
-        if(grepl('^P{1}\\d{4}-00-00', input$temp_res_txt)){
+      if(input$temporal_resolution!='Irregular'){
+        if(input$temporal_resolution=='other'){
+          #user defined temporal resolution
+          if(grepl('^P{1}\\d{4}-00-00', input$temp_res_txt)){
+            dateRangeInput('temporal_extent_input', tags$span(style="font-size: 18px; font-weight: bold",
+                                                              'Start and end date of the dataset*'),
+                           format = "yyyy")
+          } else if(grepl('^P{1}\\d{4}-\\d{2}-00$', input$temp_res_txt)){
+            dateRangeInput('temporal_extent_input', tags$span(style="font-size: 18px; font-weight: bold",
+                                                              'Start and end date of the dataset*'),
+                           format = "mm-yyyy")
+          } else if (grepl('^P{1}\\d{4}-\\d{2}-\\d{2}$', input$temp_res_txt)){
+            dateRangeInput('temporal_extent_input', tags$span(style="font-size: 18px; font-weight: bold",
+                                                              'Start and end date of the dataset*'),
+                           format = "dd-mm-yyyy")
+          }else{
+            create <- FALSE
+            to_do_list <- c(to_do_list, 'Your temporal resolution does not match the ISO duration format.')
+          }
+
+        }else if(input$temporal_resolution=='P0000-00-00'){
+          #one timestep only
+          dateInput('temporal_extent_input', tags$span(style="font-size: 18px; font-weight: bold",
+                                            'Date of the dataset*'), width='80%',
+                    startview ='year')
+
+        }else if(grepl('^P{1}\\d{4}-00-00$', input$temporal_resolution)){
           dateRangeInput('temporal_extent_input', tags$span(style="font-size: 18px; font-weight: bold",
                                                             'Start and end date of the dataset*'),
                          format = "yyyy")
-        } else if(grepl('^P{1}\\d{4}-\\d{2}-00$', input$temp_res_txt)){
+        } else if(grepl('^P{1}\\d{4}-\\d{2}-00$', input$temporal_resolution)){
           dateRangeInput('temporal_extent_input', tags$span(style="font-size: 18px; font-weight: bold",
                                                             'Start and end date of the dataset*'),
                          format = "mm-yyyy")
-        } else if (grepl('^P{1}\\d{4}-\\d{2}-\\d{2}$', input$temp_res_txt)){
+        } else {
           dateRangeInput('temporal_extent_input', tags$span(style="font-size: 18px; font-weight: bold",
                                                             'Start and end date of the dataset*'),
                          format = "dd-mm-yyyy")
-        }else{
-          create <- FALSE
-          to_do_list <- c(to_do_list, 'Your temporal resolution does not match the ISO duration format.')
         }
-
-      }else if(input$temporal_resolution=='P0000-00-00'){
-        #one timestep only
-        dateInput('temporal_extent_input', tags$span(style="font-size: 18px; font-weight: bold",
-                                          'Date of the dataset*'), width='80%',
-                  startview ='year')
-
-      }else if(grepl('^P{1}\\d{4}-00-00$', input$temporal_resolution)){
-        dateRangeInput('temporal_extent_input', tags$span(style="font-size: 18px; font-weight: bold",
-                                                          'Start and end date of the dataset*'),
-                       format = "yyyy")
-      } else if(grepl('^P{1}\\d{4}-\\d{2}-00$', input$temporal_resolution)){
-        dateRangeInput('temporal_extent_input', tags$span(style="font-size: 18px; font-weight: bold",
-                                                          'Start and end date of the dataset*'),
-                       format = "mm-yyyy")
-      } else {
-        dateRangeInput('temporal_extent_input', tags$span(style="font-size: 18px; font-weight: bold",
-                                                          'Start and end date of the dataset*'),
-                       format = "dd-mm-yyyy")
       }
 
     })
@@ -893,14 +908,41 @@ server <- function(input, output) {
             }
           }
 
+          #check the input of the irregulare timesteps
+          if(input$temporal_resolution=='Irregular'){
+            timestep_list <- stringr::str_split(input$temp_res_irr, ',')[[1]]
+            ts_irr_wrong <- FALSE
+            for(ts in timestep_list){
+              if(grepl('^\\d{4}-\\d{2}-\\d{2}$', ts) | grepl('^\\d{4}$', ts)){
+                #pass
+              }else{
+                ts_irr_wrong <- TRUE
+              }
+            }
+            if(ts_irr_wrong){
+              to_do_list <- c(to_do_list, 'You chose "Irregular" temporal resolution and the input you provided does not match the required form: comma-separated YYYY-MM-DD or comma-separated YYYY. Please check.')
+              create <- FALSE
+            }
+
+          }
+
           #temporal extent
-          if(input$temporal_resolution=='P0000-00-00'){
+          if(input$temporal_resolution=='Irregular'){
+            timestep_list <- stringr::str_split(input$temp_res_irr, ',')[[1]]
+            ts_last <- length(timestep_list)
+            t_start <- timestep_list[1]
+            t_end <- timestep_list[ts_last]#last
+            timesteps_irr <- paste0('"', paste0(timestep_list, collapse = '", "'), '"')
+          }else if(input$temporal_resolution=='P0000-00-00'){
             t_start <-input$temporal_extent_input
             t_end <- input$temporal_extent_input
           }else{
             t_start <- input$temporal_extent_input[1]
             t_end <- input$temporal_extent_input[2]
           }
+          if(input$temporal_resolution!='Irregular'){
+            timesteps_irr <- '"N/A"'
+          }
 
 
           #check terranova type
@@ -1015,6 +1057,7 @@ server <- function(input, output) {
             "ebv_domain": [\n\t\t\t\t"', paste0(ebv_domain_value, collapse = '",\n\t\t\t\t"'),'"\n\t\t\t],
             "comment": "',comment,'",
             "terranova_type": "', input$terranova_type,'"
+            "timesteps": [\n\t\t\t\t', timesteps_irr, '\n\t\t\t]
         }
     ]
 }')
-- 
GitLab