Skip to content
Snippets Groups Projects
export_prj.R 2.2 KiB
Newer Older
#This script contains functions to export the .prj data

#'export_prj
#'@description Wrapper function to create a .prj XML document based on the user
#' input data
#'@param ogs6_obj OGS6: Simulation object
    prj_xml <- xml2::xml_new_root(
        .value = "OpenGeoSysProject",
        .version = "1.0",
        .encoding = "ISO-8859-1"
    )

    meshes_node <- NULL

    #If there is a .gml defined, add "mesh" node, else add "meshes" node
        basenames <- lapply(ogs6_obj$meshes, function(x){basename(x)})
        meshes_node <- to_node(basenames, "meshes")
        xml2::xml_add_child(
            prj_xml,
            xml2::as_xml_document(to_node(ogs6_obj$geometry)))
        meshes_node <- to_node(basename(ogs6_obj$meshes[[1]]), "mesh")
    xml2::xml_add_child(prj_xml,
                        xml2::as_xml_document(meshes_node))

    #Get implemented classes
    prj_components <- prj_top_level_classes()

    # Include file reference
    if(names(ogs6_obj$processes)[[1]] == "include"){
        processes_node <- to_node(ogs6_obj$processes,
                                  attribute_names = "include")

        xml2::xml_add_child(prj_xml,
                            xml2::as_xml_document(processes_node))

        prj_components <- prj_components[names(prj_components) != "processes"]
    }

    #Add default cases
    for(i in seq_len(length(prj_components))){
        param_name <- names(prj_components)[[i]]
        # cat("\nHandling param", param_name, "\n")

        get_param_call <- paste0("ogs6_obj$", param_name)
        param <- eval(parse(text = get_param_call))

        #If parameter wasn't defined, skip
        if(length(param) == 0){
            next
        }

        to_node_call <- paste0("to_node(ogs6_obj$", param_name, ")")
        param_node <- eval(parse(text = to_node_call))

        xml2::xml_add_child(prj_xml,
                            xml2::as_xml_document(param_node))
    file <- paste0(ogs6_obj$sim_path, ogs6_obj$sim_name, ".prj")

    xml2::write_xml(prj_xml,
                    file,
                    options = "format",
                    encoding="ISO-8859-1")
    return(invisible(TRUE))