From f549f06d019911640272d1263098b87206c94ec3 Mon Sep 17 00:00:00 2001
From: baigner <benedikt.aigner@rwth-aachen.de>
Date: Tue, 14 Aug 2018 09:28:13 +0200
Subject: [PATCH] VISTOMS update: Adding design competences dynamically works
 now!

Former-commit-id: c9f9b028ce22abc694c9059b422ee444c78aa4ed
---
 kadmos/vistoms/templates/VISTOMS.html        | 1009 +++++++++---------
 kadmos/vistoms/templates/cmdows_template.xml |   20 +-
 kadmos/vistoms/vistoms.py                    |  141 ++-
 3 files changed, 588 insertions(+), 582 deletions(-)

diff --git a/kadmos/vistoms/templates/VISTOMS.html b/kadmos/vistoms/templates/VISTOMS.html
index 89ee0900c..573bee8bd 100644
--- a/kadmos/vistoms/templates/VISTOMS.html
+++ b/kadmos/vistoms/templates/VISTOMS.html
@@ -262,469 +262,14 @@
              
              
              
-            function createNewGraph(theData, theCurrentGraph=null)
+            function createNewGraph(theData,aNewGraphID)
             {               
-                bootbox.hideAll();
-                
-                var html = d3.select("html")
-                var form_content = html.append("div").attr("class","form-content").attr("style","display:none")
-                var form = form_content.append("form").attr("class","form").attr("role","form")
-                var form_group, input;
-                    
-                //Tool information
-                form_group = form.append("div").attr("class","form-group")
-                form_group.append("text").text("Name")
-                input = form_group.append("input")
-                    .attr("id","graph_name")
-                    .attr("class","form-control")
-                    .attr("name","graph_name")
-                    .attr("placeholder","Add a graph name here...")
-                //Tool information
-                form_group = form.append("div").attr("class","form-group")
-                form_group.append("text").text("Description")
-                input = form_group.append("input")
-                    .attr("id","graph_description")
-                    .attr("class","form-control")
-                    .attr("name","graph_description")
-                    .attr("placeholder","Add a graph description here...")
-                
-                var modal = bootbox.dialog({
-                    message: $(".form-content").html(),
-                    title: "Create new graph",
-                    size: "large",
-                    buttons: [
-                      {
-                        label: "Cancel",
-                        className: "btn btn-default pull-left",
-                        callback: function() {
-                          modal.modal("hide");
-                          d3.selectAll(".form-content").remove();
-                        }
-                      },
-                      {
-                        label: "OK",
-                        className: "btn btn-primary pull-left",
-                        callback: function() {
-                            
-                            //get form data
-                            var graph_name = $('form #graph_name').val();
-                            var graph_description = $('form #graph_description').val();
-                            
-                            
-                            var bootboxContent = {title: "Create new graph", message: '<p>Please be patient...</p>'};
-                            var xhr = $.ajax({
-                                type: 'POST',
-                                url: '/kadmos_create_new_graph',
-                                data: {'graph_name':graph_name, 'graph_description':graph_description},
-                                success: function(result)
-                                {
-                                    if (result.includes("ERROR:"))
-                                    {
-                                        bootboxContent.message = result
-                                        kadmosErrorMessage(bootboxContent);
-                                    }
-                                    else
-                                    {
-                                        var updatedData = {};
-                                        if (theData != "REP__GRAPH_DATA__REP")
-                                        {
-                                            updatedData = theData;
-                                            var graphData = JSON.parse(result);                                        
-                                            updatedData.graphs.push(graphData.graphs[0]);                                        
-                                        }
-                                        else
-                                        {
-                                            updatedData = JSON.parse(result);
-                                        }
-                                        
-                                        clearView();
-                                        makeKadmosMenu(updatedData);
-                                        mainPage();
-                                        
-                                        bootboxContent.message = "Success!"
-                                        kadmosSuccessMessage(bootboxContent)
-                                    }
-                                },
-                                error: function(result)
-                                {
-                                    bootboxContent.message = result
-                                    kadmosErrorMessage(bootboxContent);
-                                }
-                            });
-                            kadmosHavePatience(xhr, bootboxContent)
-                            modal.modal("hide");
-                            d3.selectAll(".form-content").remove();
-                        }
-                      }
-                    ],
-                    onEscape: function() {
-                      modal.modal("hide");
-                      d3.selectAll(".form-content").remove();
-                    }
-                });
-                    
-            }
-            
-             
-            //aigner: HIER WEITER!!!
-            function addDesignCompetence(theData, theCurrentGraph=null)
-            {               
-                console.log(data)
-                bootbox.hideAll();
-                
-                var html = d3.select("html")
-                var form_content = html.append("div").attr("class","form-content").attr("style","display:none")
-                var form = form_content.append("form").attr("class","form").attr("role","form")
-                var form_group, input;
-                    
-                //Tool information
-                form_group = form.append("div").attr("class","form-group")
-                form_group.append("text").text("Name")
-                input = form_group.append("input")
-                    .attr("id","function_node")
-                    .attr("class","form-control")
-                    .attr("name","function_node")
-                    .attr("placeholder","Add a tool name here...")
-                //Tool input xml
-                form_group = form.append("div").attr("class","form-group")
-                form_group.append("text").text("Tool input XML")
-                input = form_group.append("input")
-                    .attr("type","file")
-                    .attr("id","input_xml")
-                    .attr("name","input_xml")
-                //Tool output xml
-                form_group = form.append("div").attr("class","form-group")
-                form_group.append("text").text("Tool output XML")
-                input = form_group.append("input")
-                    .attr("type","file")
-                    .attr("id","output_xml")
-                    .attr("name","output_xml")
-                    
-                
-                var modal = bootbox.dialog({
-                    message: $(".form-content").html(),
-                    title: "Add design competence",
-                    size: "large",
-                    buttons: [
-                      {
-                        label: "Cancel",
-                        className: "btn btn-default pull-left",
-                        callback: function() {
-                          modal.modal("hide");
-                          d3.selectAll(".form-content").remove();
-                        }
-                      },
-                      {
-                        label: "OK",
-                        className: "btn btn-primary pull-left",
-                        callback: function() {
-                            
-                            //get form data
-                            var form_data = {
-                                function_node: $('form #function_node').val(),
-                                input_nodes_xPath: $('form #input_nodes_xPath').val(),
-                                input_nodes_name: $('form #input_nodes_name').val(),
-                                output_node_xPath: $('form #output_node_xPath').val(),
-                                equation: $('form #equation').val(),
-                                language: $('form #language').val()
-                            }
-                            
-                            
-                            var bootboxContent = {title: "Add design competence", message: '<p>Please be patient...</p>'};
-                            var xhr = $.ajax({
-                                type: 'POST',
-                                url: '/kadmos_add_design_competence',
-                                data: {'graphID':graphID, 'currentOrder':nodeOrder, 'form_data':JSON.stringify(form_data)},
-                                success: function(result)
-                                {
-                                    if (result.includes("ERROR:"))
-                                    {
-                                        bootboxContent.message = result
-                                        kadmosErrorMessage(bootboxContent);
-                                    }
-                                    else
-                                    {
-                                        var updatedData = {};
-                                        updatedData = theData;
-                                        var graphData = JSON.parse(result);             
-                                        for (var i = 0; i < updatedData.graphs.length; i++)
-                                        {
-                                            if (graphID == updatedData.graphs[i].id)
-                                            {
-                                                updatedData.graphs[i] = graphData.graphs[0];   
-                                            }
-                                        }
-                                        
-                                        clearView();
-                                        makeKadmosMenu(updatedData);
-                                        xdsm_script(updatedData,graphID);
-                                        
-                                        bootboxContent.message = "Success!"
-                                        kadmosSuccessMessage(bootboxContent)
-                                    }
-                                },
-                                error: function(result)
-                                {
-                                    bootboxContent.message = result
-                                    kadmosErrorMessage(bootboxContent);
-                                }
-                            });
-                            kadmosHavePatience(xhr, bootboxContent)
-                            kadmosHavePatience(xhr, bootboxContent)
-                            modal.modal("hide");
-                            d3.selectAll(".form-content").remove();
-                            
-                            //aigner: After the competence has been added, add metadata for the competence
-                            addDCMetadata(data,theCurrentGraph)
-                        }
-                      }
-                    ],
-                    onEscape: function() {
-                      modal.modal("hide");
-                      d3.selectAll(".form-content").remove();
-                    }
-                });
-                    
-            }
-            
-            //aigner: HIER WEITER!!! --> Add contacts if not already existing
-            function addDCMetadata(theData, theCurrentGraph, aNode=null)
-            {               
-                bootbox.hideAll();
-                
-                var metadata;
-                if (aNode != null)
-                {
-                    metadata = aNode.metadata;
-                }
-                                    
-                var html = d3.select("html")
-                var form_content = html.append("div").attr("class","form-content").attr("style","display:none")
-                var form = form_content.append("form").attr("class","form").attr("role","form")
-                var form_group, input;
-                    
-                //General information
-                form_group = form.append("div").attr("class","form-group")
-                form_group.append("label").text("General information")
-                form_group = form.append("div").attr("class","form-group")
-                form_group.append("text").text("Description")
-                input = form_group.append("textarea")
-                    .attr("id","description")
-                    .attr("class","form-control")
-                    .attr("name","description")
-                    .attr("placeholder","Add a description for the DC here")
-                
-                form_group = form.append("div").attr("class","form-group")
-                form_group.append("text").text("Status")
-                input = form_group.append("select").attr("id","status").style("margin-left","5px")
-                input.append("option").attr("type","select").attr("value","-").text("Please select...")
-                input.append("option").attr("type","select").attr("value","Available").text("Available")
-                input.append("option").attr("type","select").attr("value","N/A").text("N/A")
-                var contacts = []
-                if (theCurrentGraph.organization.contacts){contacts=theCurrentGraph.organization.contacts};
-                console.log(theCurrentGraph)
-                form_group = form.append("div").attr("class","form-group")
-                form_group.append("text").text("Owner")
-                input = form_group.append("select").attr("id","owner_uid").style("margin-left","5px")
-                input.append("option").attr("type","select").attr("value","-").text("Please select...")
-                contacts.forEach(function(contact){
-                    input.append("option").attr("type","select").attr("value",contact.attrib.uID).text(contact.name + " (" + contact.company + ")")
-                })
-                form_group = form.append("div").attr("class","form-group")
-                form_group.append("text").text("Creator")
-                input = form_group.append("select").attr("id","creator_uid").style("margin-left","5px")
-                input.append("option").attr("type","select").attr("value","-").text("Please select...")
-                contacts.forEach(function(contact){
-                    input.append("option").attr("type","select").attr("value",contact.attrib.uID).text(contact.name + " (" + contact.company + ")")
-                })
-                form_group = form.append("div").attr("class","form-group")
-                form_group.append("text").text("Operator")
-                input = form_group.append("select").attr("id","operator_uid").style("margin-left","5px")
-                input.append("option").attr("type","select").attr("value","-").text("Please select...")
-                contacts.forEach(function(contact){
-                    input.append("option").attr("type","select").attr("value",contact.attrib.uID).text(contact.name + " (" + contact.company + ")")
-                })
                 
-                
-                //Information on tool execution
-                form_group = form.append("div").attr("class","form-group").style("margin-top","40px")
-                form_group.append("label").text("Execution information")
-                form_group = form.append("div").attr("class","form-group")
-                form_group.append("text").text("Operating System")
-                input = form_group.append("select").attr("id","operating_system").style("margin-left","5px")
-                input.append("option").attr("type","select").attr("value","-").text("Please select...")
-                input.append("option").attr("type","select").attr("value","windows").text("Windows")
-                input.append("option").attr("type","select").attr("value","linux").text("Linux")
-                input.append("option").attr("type","select").attr("value","mac").text("Mac OS")
-                input.append("option").attr("type","select").attr("value","other").text("Other")
-                form_group = form.append("div").attr("class","form-group")
-                form_group.append("text").text("Integration platform")
-                input = form_group.append("input")
-                    .attr("id","integration_platform")
-                    .attr("class","form-control")
-                    .attr("name","integration_platform")
-                    .attr("placeholder","Integration platform (e.g. RCE, Optimus)")
-                form_group = form.append("div").attr("class","form-group")
-                form_group.append("text").text("Execution command")
-                input = form_group.append("textarea")
-                    .attr("id","command")
-                    .attr("class","form-control")
-                    .attr("cols","40")
-                    .attr("rows","5")
-                    .attr("name","command")
-                    .attr("placeholder","Execution command")
-                form_group = form.append("div").attr("class","form-group")
-                input = form_group.append("input")
-                    .attr("id","description_cmd")
-                    .attr("class","form-control")
-                    .attr("name","description_cmd")
-                    .attr("placeholder","Details on the exectuion command (optional)")
-                form_group = form.append("div").attr("class","form-group")
-                input = form_group.append("input")
-                    .attr("id","software_requirements")
-                    .attr("class","form-control")
-                    .attr("name","software_requirements")
-                    .attr("placeholder","Software requirements")
-                form_group = form.append("div").attr("class","form-group")
-                input = form_group.append("input")
-                    .attr("id","hardware_requirements")
-                    .attr("class","form-control")
-                    .attr("name","hardware_requirements")
-                    .attr("placeholder","Hardware requirements")
-                
-                //Information on tool licensing
-                form_group = form.append("div").attr("class","form-group").style("margin-top","40px")
-                form_group.append("label").text("License information (optional)")
-                input = form_group.append("input")
-                    .attr("id","license_type")
-                    .attr("class","form-control")
-                    .attr("name","license_type")
-                    .attr("placeholder","License type (e.g. open-source, commercial)")
-                form_group = form.append("div").attr("class","form-group")
-                input = form_group.append("input")
-                    .attr("id","license_specification")
-                    .attr("class","form-control")
-                    .attr("name","license_specification")
-                    .attr("placeholder","License specification (e.g. Apache License 2.0)")
-                form_group = form.append("div").attr("class","form-group")
-                input = form_group.append("input")
-                    .attr("id","license_info")
-                    .attr("class","form-control")
-                    .attr("name","license_info")
-                    .attr("placeholder","License information (e.g. https://www.apache.org/licenses/LICENSE-2.0)")
                     
-                //Information on tool sources
-                form_group = form.append("div").attr("class","form-group").style("margin-top","40px")
-                form_group.append("label").text("Source information (optional)")
-                input = form_group.append("input")
-                    .attr("id","repository_link")
-                    .attr("class","form-control")
-                    .attr("name","repository_link")
-                    .attr("placeholder","Repository link")
-                form_group = form.append("div").attr("class","form-group")
-                input = form_group.append("input")
-                    .attr("id","download_link")
-                    .attr("class","form-control")
-                    .attr("name","download_link")
-                    .attr("placeholder","Download link")
-                form_group = form.append("div").attr("class","form-group")
-                input = form_group.append("input")
-                    .attr("id","references")
-                    .attr("class","form-control")
-                    .attr("name","references")
-                    .attr("placeholder","References")
-
-                
-                var modal = bootbox.dialog({
-                    message: $(".form-content").html(),
-                    title: "Add Competence Metadata",
-                    size: "large",
-                    buttons: [
-                      {
-                        label: "Cancel",
-                        className: "btn btn-default pull-left",
-                        callback: function() {
-                          modal.modal("hide");
-                          d3.selectAll(".form-content").remove();
-                        }
-                      },
-                      {
-                        label: "OK",
-                        className: "btn btn-primary pull-left",
-                        callback: function() {
-                            var metadata = {
-                                uID: aNode.uID,
-                                description: $('form #description').val(),
-                                status: $('form #status').val(),
-                                owner_uid: $('form #owner_uid').val(),
-                                creator_uid: $('form #creator_uid').val(),
-                                operator_uid: $('form #operator_uid').val()
-                            }
-                            var metadata_str = JSON.stringify(metadata)
-                            var bootboxContent = {title: "Get graph elements", message: '<p>Please be patient...</p>'};
-                            var xhr = $.ajax(
-                            {
-                                type: 'POST',
-                                url: '/kadmos_add_DC_metadata',
-                                data: {'graphID':graphID, 'currentOrder':nodeOrder, 'nodeName':metadata.uID, 'metadata_str':metadata_str},
-                                success: function(result)
-                                {
-                                    if (result.includes("ERROR:"))
-                                    {
-                                        bootboxContent.message = result
-                                        kadmosErrorMessage(bootboxContent);
-                                    }
-                                    else
-                                    {   
-                                        var updatedData = {};
-                                        updatedData = theData;
-                                        var graphData = JSON.parse(result);             
-                                        for (var i = 0; i < updatedData.graphs.length; i++)
-                                        {
-                                            if (graphID == updatedData.graphs[i].id)
-                                            {
-                                                updatedData.graphs[i] = graphData.graphs[0];   
-                                            }
-                                        }
-                                        
-                                        clearView();
-                                        makeKadmosMenu(updatedData);
-                                        xdsm_script(updatedData,graphID);
-                                        
-                                        bootboxContent.message = "Success!"
-                                        kadmosSuccessMessage(bootboxContent)
-                                    }
-                                },
-                                error: function(result)
-                                {
-                                    bootboxContent.message = result
-                                    kadmosErrorMessage(bootboxContent);
-                                }
-                            });
-                            kadmosHavePatience(xhr, bootboxContent)
-                            modal.modal("hide");
-                            d3.selectAll(".form-content").remove();
-                        }
-                      }
-                    ],
-                    onEscape: function() {
-                      modal.modal("hide");
-                      d3.selectAll(".form-content").remove();
-                    }
-                });
-                
-                
-            }
-            
-            function sendDCMetadata(aMetadata)
-            {
-                
             }
             
-            
-            
              
-			function makeKadmosMenu(data, initial=false)
+            function makeKadmosMenu(data, initial=false)
 			{
                 //First of all, clear everything if it is already there
                 var visPackDiv = d3.select(".visPackDiv");
@@ -1079,9 +624,9 @@
                     var selectValue;
                     
                     function onchange() {
-                        selectValue = d3.select('#addselect').property('value')
-                        if (include(selectValue,"Create"))
+                        if (include(d3.select('#addselect').property('value'),"Create"))
                         {
+                            selectValue = "Create"
                             if (file){
                                 fileText.remove();
                                 file.remove();
@@ -1089,16 +634,13 @@
                             if (submit){submit.remove();}
                             submit = label.append("button")
                                 .style("margin-top","10pt")
-                                .attr("type","button")
+                                .attr("type","submit")
                                 .attr("class","btn btn-primary")
                                 .text("Go!")
-                            submit.on("mousedown", function()
-                            {
-                                createNewGraph(data);
-                            })
                         }
-                        else if (include(selectValue,"KDMS"))
+                        else if (include(d3.select('#addselect').property('value'),"KDMS"))
                         {
+                            selectValue = "KDMS"
                             if (file){
                                 fileText.remove();
                                 file.remove();
@@ -1111,8 +653,9 @@
                             file = label.append("input").attr("type","file").attr("name","file[]").attr("multiple","")
                             submit = label.append("input").attr("type","submit").attr("value","Submit");
                         }
-                        else if (include(selectValue,"CMDOWS"))
-                        {             
+                        else if (include(d3.select('#addselect').property('value'),"CMDOWS"))
+                        {   
+                            selectValue = "CMDOWS"
                             if (file){
                                 fileText.remove();
                                 file.remove();
@@ -1125,8 +668,9 @@
                             file = label.append("input").attr("type","file").attr("name","file[]")
                             submit = label.append("input").attr("type","submit").attr("value","Submit");
                         }
-                        else if (include(selectValue,"Database"))
+                        else if (include(d3.select('#addselect').property('value'),"Database"))
                         {             
+                            selectValue = "Database"
                             if (file){
                                 fileText.remove();
                                 file.remove();
@@ -1149,61 +693,162 @@
                         formData.append('newGraphID', newGraphID);
                         formData.append('fileType',selectValue)
                        
-                     
-                        
-                        //aigner: Upload file to VISTOMS and inspect it
-                        //##########################################################
-                        var bootboxContent = {title: "Upload file to VISTOMS", message: '<p>Please be patient...</p>'};
-                        var xhr = $.ajax({
-                            type: 'POST',
-                            url: '/kadmos_upload_file',
-                            data: formData,
-                            processData: false,
-                            contentType: false,
-                            success: function(result)
-                            {
-                                if (result.includes("ERROR:"))
-                                {
-                                    
-                                    
-                                    bootboxContent.message = result
-                                    kadmosErrorMessage(bootboxContent);
-                                    
-                                    clearView();
-                                    makeKadmosMenu(data);
-                                    mainPage();
-                                }
-                                else
+                       
+                        if (selectValue == "Create")
+                        {
+                            bootbox.hideAll();
+                            var html = d3.select("html")
+                            var form_content = html.append("div").attr("class","form-content").attr("style","display:none")
+                            var form = form_content.append("form").attr("class","form").attr("role","form")
+                            var form_group, input;
+                                
+                            //Tool information
+                            form_group = form.append("div").attr("class","form-group")
+                            form_group.append("text").text("Name")
+                            input = form_group.append("input")
+                                .attr("id","graph_name")
+                                .attr("class","form-control")
+                                .attr("name","graph_name")
+                                .attr("placeholder","Add a graph name here...")
+                            //Tool information
+                            form_group = form.append("div").attr("class","form-group")
+                            form_group.append("text").text("Description")
+                            input = form_group.append("input")
+                                .attr("id","graph_description")
+                                .attr("class","form-control")
+                                .attr("name","graph_description")
+                                .attr("placeholder","Add a graph description here...")
+                            
+                           bootbox.dialog({
+                                message: $(".form-content").html(),
+                                title: "Create new graph",
+                                size: "large",
+                                buttons: [
+                                  {
+                                    label: "Cancel",
+                                    className: "btn btn-default pull-left",
+                                    callback: function() {
+                                      d3.selectAll(".form-content").remove();
+                                    }
+                                  },
+                                  {
+                                    label: "OK",
+                                    className: "btn btn-primary pull-left",
+                                    callback: function() {
+                                        
+                                        //get form data
+                                        var graph_name = $('form #graph_name').val();
+                                        var graph_description = $('form #graph_description').val();
+                                        
+                                        
+                                        var bootboxContent = {title: "Create new graph", message: '<p>Please be patient...</p>'};
+                                        var xhr = $.ajax({
+                                            type: 'POST',
+                                            url: '/kadmos_create_new_graph',
+                                            data: {'graph_name':graph_name, 'graph_description':graph_description, 'graphID':newGraphID},
+                                            success: function(result)
+                                            {
+                                                if (result.includes("ERROR:"))
+                                                {
+                                                    bootboxContent.message = result
+                                                    kadmosErrorMessage(bootboxContent);
+                                                    
+                                                    clearView();
+                                                    makeKadmosMenu(data);
+                                                    mainPage();
+                                                }
+                                                else
+                                                {
+                                                    var updatedData = {};
+                                                    if (data != "REP__GRAPH_DATA__REP")
+                                                    {
+                                                        updatedData = data;
+                                                        var graphData = JSON.parse(result);                                        
+                                                        updatedData.graphs.push(graphData.graphs[0]);                                        
+                                                    }
+                                                    else
+                                                    {
+                                                        updatedData = JSON.parse(result);
+                                                    }
+                                                                                                        
+                                                    clearView();
+                                                    makeKadmosMenu(updatedData);
+                                                    mainPage();
+                                                    
+                                                    bootboxContent.message = "Success!"
+                                                    kadmosSuccessMessage(bootboxContent)
+                                                    
+                                                }
+                                            },
+                                            error: function(result)
+                                            {
+                                                bootboxContent.message = result
+                                                kadmosErrorMessage(bootboxContent);
+                                            }
+                                        });
+                                        kadmosHavePatience(xhr, bootboxContent)
+                                    }
+                                  }
+                                ]
+                            });
+                        }
+                        else
+                        {
+                            //aigner: Upload file to VISTOMS and inspect it
+                            //##########################################################
+                            var bootboxContent = {title: "Upload file to VISTOMS", message: '<p>Please be patient...</p>'};
+                            var xhr = $.ajax({
+                                type: 'POST',
+                                url: '/kadmos_upload_file',
+                                data: formData,
+                                processData: false,
+                                contentType: false,
+                                success: function(result)
                                 {
-                                    var updatedData = {};
-                                    if (data != "REP__GRAPH_DATA__REP")
+                                    if (result.includes("ERROR:"))
                                     {
-                                        updatedData = data;
-                                        var graphData = JSON.parse(result);                                        
-                                        updatedData.graphs.push(graphData.graphs[0]);                                        
+                                        
+                                        
+                                        bootboxContent.message = result
+                                        kadmosErrorMessage(bootboxContent);
+                                        
+                                        clearView();
+                                        makeKadmosMenu(data);
+                                        mainPage();
                                     }
                                     else
                                     {
-                                        updatedData = JSON.parse(result);
+                                        var updatedData = {};
+                                        if (data != "REP__GRAPH_DATA__REP")
+                                        {
+                                            updatedData = data;
+                                            var graphData = JSON.parse(result);                                        
+                                            updatedData.graphs.push(graphData.graphs[0]);                                        
+                                        }
+                                        else
+                                        {
+                                            updatedData = JSON.parse(result);
+                                        }
+                                        
+                                        clearView();
+                                        makeKadmosMenu(updatedData);
+                                        mainPage();
+                                        
+                                        bootboxContent.message = "Success!"
+                                        kadmosSuccessMessage(bootboxContent)
+                                        
                                     }
-                                    
-                                    clearView();
-                                    makeKadmosMenu(updatedData);
-                                    mainPage();
-                                    
-                                    bootboxContent.message = "Success!"
-                                    kadmosSuccessMessage(bootboxContent)
-                                    
+                                },
+                                error: function(result)
+                                {
+                                    bootboxContent.message = result
+                                    kadmosErrorMessage(bootboxContent);
                                 }
-                            },
-                            error: function(result)
-                            {
-                                bootboxContent.message = result
-                                kadmosErrorMessage(bootboxContent);
-                            }
-                        });
-                        kadmosHavePatience(xhr, bootboxContent)
-                        //##########################################################
+                            });
+                            kadmosHavePatience(xhr, bootboxContent)
+                            //##########################################################
+                        
+                        }
                     });
                     
                     if (theGraphs)
@@ -1567,7 +1212,7 @@
 			//#####################################################################//
 		
 		function xdsm_script(data,graphID)
-		{
+		{        
 			(function e(t,n,r){function s(o,u){if(!n[o]){if(!t[o]){var a=typeof require=="function"&&require;if(!u&&a)return a(o,!0);if(i)return i(o,!0);var f=new Error("Cannot find module '"+o+"'");throw f.code="MODULE_NOT_FOUND",f}var l=n[o]={exports:{}};t[o][0].call(l.exports,function(e){var n=t[o][1][e];return s(n?n:e)},l,l.exports,e,t,n,r)}return n[o].exports}var i=typeof require=="function"&&require;for(var o=0;o<r.length;o++)s(r[o]);return s})({1:[function(require,module,exports){
 			// https://d3js.org Version 4.3.0. Copyright 2016 Mike Bostock.
 			(function (global, factory) {
@@ -19229,7 +18874,6 @@
 			  };
 			}
 
-
 			var myLoader = loader({width: 960, height: 500, container: "#loader_container", id: "loader"});
 			
 			//aigner: NEW!
@@ -19625,9 +19269,7 @@
 					onMouseOver: function(elm, d, i) {},
 					childrenItems: []
 				}
-				]		
-                
-                
+				]		                
                 
 			   
 				var graphs, currentGraph, varCategories;
@@ -19641,7 +19283,7 @@
 					}
 				}
 				varCategories =  data.categories;
-                                
+                
 				//aigner: Get xdsm data
 				var mdo = currentGraph.xdsm;
 				
@@ -19907,7 +19549,7 @@
                 }
                 
                 function deleteNode(aNode)
-                {               
+                {                  
                     bootbox.hideAll();
                     bootbox.confirm("Are you sure you want to do this?", function(sure)
                     {
@@ -20394,6 +20036,8 @@
                                                                 }
                                                             }
                                                             
+                                                            
+                                                            
                                                             clearView();
                                                             makeKadmosMenu(updatedData);
                                                             xdsm_script(updatedData,newGraphID);
@@ -20620,6 +20264,325 @@
                 })
                 
                 
+                
+                //aigner: HIER WEITER!!!
+                function addDesignCompetence(theData, theCurrentGraph=null)
+                {               
+                    bootbox.hideAll();
+                    bootbox.dialog({
+                        title: "Add design competence",
+                        message: "<form id='inp_outp_form' method='post' enctype='multipart/form-data'>" 
+                                +"<label>"
+                                +"<text>Competence name</text>"
+                                +"<br>"
+                                +"<input name='function_node' id='function_node' placeholder='Add a tool name here...'></input>"
+                                +"<br>"
+                                +"<br>"
+                                +"<text>Upload input file:</text>"
+                                +"<input type='file' name='input_xml' />"
+                                +"<br>"
+                                +"<text>Upload output file:</text>"
+                                +"<input type='file' name='output_xml' />"
+                                +"<br>"
+                                +"<input type='submit' value='Submit'/>"
+                                +"</label></form>",
+                        buttons : 
+                        { 
+                            cancel: {
+                                label: "Cancel",
+                                className: 'btn-danger'
+                            }
+                        }                                
+                    });
+                    
+                    $('#inp_outp_form').on('submit',function(event){
+                        event.preventDefault();
+                        var formData = new FormData($('#inp_outp_form')[0]);
+                        formData.append('graphID', graphID);
+                        formData.append('currentOrder',nodeOrder);
+                        formData.append('function_node', $('form #function_node').val());
+                       
+                        var bootboxContent = {title: "Add design competence", message: '<p>Please be patient...</p>'};
+                        var xhr = $.ajax({
+                            type: 'POST',
+                            url: '/kadmos_add_design_competence',
+                            data: formData,
+                            processData: false,
+                            contentType: false,
+                            success: function(result)
+                            {
+                                if (result.includes("ERROR:"))
+                                {
+                                    bootboxContent.message = result
+                                    kadmosErrorMessage(bootboxContent);
+                                }
+                                else
+                                {
+                                    var updatedData = {};
+                                    updatedData = theData;
+                                    var graphData = JSON.parse(result);             
+                                    for (var i = 0; i < updatedData.graphs.length; i++)
+                                    {
+                                        if (graphID == updatedData.graphs[i].id)
+                                        {
+                                            updatedData.graphs[i] = graphData.graphs[0];   
+                                        }
+                                    }
+                                    
+                                    clearView();
+                                    makeKadmosMenu(updatedData);
+                                    xdsm_script(updatedData,graphID);
+                                    
+                                    bootboxContent.message = "Success!"
+                                    kadmosSuccessMessage(bootboxContent)
+                                }
+                            },
+                            error: function(result)
+                            {
+                                bootboxContent.message = result
+                                kadmosErrorMessage(bootboxContent);
+                            }
+                        });
+                        kadmosHavePatience(xhr, bootboxContent)
+                        d3.selectAll(".form-content").remove();
+                    });
+                }
+                
+                //aigner: HIER WEITER!!! --> Add contacts if not already existing
+                function addDCMetadata(theData, theCurrentGraph, aNode=null)
+                {               
+                    bootbox.hideAll();
+                    
+                    var metadata;
+                    if (aNode != null)
+                    {
+                        metadata = aNode.metadata;
+                    }
+                                        
+                    var html = d3.select("html")
+                    var form_content = html.append("div").attr("class","form-content").attr("style","display:none")
+                    var form = form_content.append("form").attr("class","form").attr("role","form")
+                    var form_group, input;
+                        
+                    //General information
+                    form_group = form.append("div").attr("class","form-group")
+                    form_group.append("label").text("General information")
+                    form_group = form.append("div").attr("class","form-group")
+                    form_group.append("text").text("Description")
+                    input = form_group.append("textarea")
+                        .attr("id","description")
+                        .attr("class","form-control")
+                        .attr("name","description")
+                        .attr("placeholder","Add a description for the DC here")
+                    
+                    form_group = form.append("div").attr("class","form-group")
+                    form_group.append("text").text("Status")
+                    input = form_group.append("select").attr("id","status").style("margin-left","5px")
+                    input.append("option").attr("type","select").attr("value","-").text("Please select...")
+                    input.append("option").attr("type","select").attr("value","Available").text("Available")
+                    input.append("option").attr("type","select").attr("value","N/A").text("N/A")
+                    var contacts = []
+                    if (theCurrentGraph.organization.contacts){contacts=theCurrentGraph.organization.contacts};
+                    console.log(theCurrentGraph)
+                    form_group = form.append("div").attr("class","form-group")
+                    form_group.append("text").text("Owner")
+                    input = form_group.append("select").attr("id","owner_uid").style("margin-left","5px")
+                    input.append("option").attr("type","select").attr("value","-").text("Please select...")
+                    contacts.forEach(function(contact){
+                        input.append("option").attr("type","select").attr("value",contact.attrib.uID).text(contact.name + " (" + contact.company + ")")
+                    })
+                    form_group = form.append("div").attr("class","form-group")
+                    form_group.append("text").text("Creator")
+                    input = form_group.append("select").attr("id","creator_uid").style("margin-left","5px")
+                    input.append("option").attr("type","select").attr("value","-").text("Please select...")
+                    contacts.forEach(function(contact){
+                        input.append("option").attr("type","select").attr("value",contact.attrib.uID).text(contact.name + " (" + contact.company + ")")
+                    })
+                    form_group = form.append("div").attr("class","form-group")
+                    form_group.append("text").text("Operator")
+                    input = form_group.append("select").attr("id","operator_uid").style("margin-left","5px")
+                    input.append("option").attr("type","select").attr("value","-").text("Please select...")
+                    contacts.forEach(function(contact){
+                        input.append("option").attr("type","select").attr("value",contact.attrib.uID).text(contact.name + " (" + contact.company + ")")
+                    })
+                    
+                    
+                    //Information on tool execution
+                    form_group = form.append("div").attr("class","form-group").style("margin-top","40px")
+                    form_group.append("label").text("Execution information")
+                    form_group = form.append("div").attr("class","form-group")
+                    form_group.append("text").text("Operating System")
+                    input = form_group.append("select").attr("id","operating_system").style("margin-left","5px")
+                    input.append("option").attr("type","select").attr("value","-").text("Please select...")
+                    input.append("option").attr("type","select").attr("value","windows").text("Windows")
+                    input.append("option").attr("type","select").attr("value","linux").text("Linux")
+                    input.append("option").attr("type","select").attr("value","mac").text("Mac OS")
+                    input.append("option").attr("type","select").attr("value","other").text("Other")
+                    form_group = form.append("div").attr("class","form-group")
+                    form_group.append("text").text("Integration platform")
+                    input = form_group.append("input")
+                        .attr("id","integration_platform")
+                        .attr("class","form-control")
+                        .attr("name","integration_platform")
+                        .attr("placeholder","Integration platform (e.g. RCE, Optimus)")
+                    form_group = form.append("div").attr("class","form-group")
+                    form_group.append("text").text("Execution command")
+                    input = form_group.append("textarea")
+                        .attr("id","command")
+                        .attr("class","form-control")
+                        .attr("cols","40")
+                        .attr("rows","5")
+                        .attr("name","command")
+                        .attr("placeholder","Execution command")
+                    form_group = form.append("div").attr("class","form-group")
+                    input = form_group.append("input")
+                        .attr("id","description_cmd")
+                        .attr("class","form-control")
+                        .attr("name","description_cmd")
+                        .attr("placeholder","Details on the exectuion command (optional)")
+                    form_group = form.append("div").attr("class","form-group")
+                    input = form_group.append("input")
+                        .attr("id","software_requirements")
+                        .attr("class","form-control")
+                        .attr("name","software_requirements")
+                        .attr("placeholder","Software requirements")
+                    form_group = form.append("div").attr("class","form-group")
+                    input = form_group.append("input")
+                        .attr("id","hardware_requirements")
+                        .attr("class","form-control")
+                        .attr("name","hardware_requirements")
+                        .attr("placeholder","Hardware requirements")
+                    
+                    //Information on tool licensing
+                    form_group = form.append("div").attr("class","form-group").style("margin-top","40px")
+                    form_group.append("label").text("License information (optional)")
+                    input = form_group.append("input")
+                        .attr("id","license_type")
+                        .attr("class","form-control")
+                        .attr("name","license_type")
+                        .attr("placeholder","License type (e.g. open-source, commercial)")
+                    form_group = form.append("div").attr("class","form-group")
+                    input = form_group.append("input")
+                        .attr("id","license_specification")
+                        .attr("class","form-control")
+                        .attr("name","license_specification")
+                        .attr("placeholder","License specification (e.g. Apache License 2.0)")
+                    form_group = form.append("div").attr("class","form-group")
+                    input = form_group.append("input")
+                        .attr("id","license_info")
+                        .attr("class","form-control")
+                        .attr("name","license_info")
+                        .attr("placeholder","License information (e.g. https://www.apache.org/licenses/LICENSE-2.0)")
+                        
+                    //Information on tool sources
+                    form_group = form.append("div").attr("class","form-group").style("margin-top","40px")
+                    form_group.append("label").text("Source information (optional)")
+                    input = form_group.append("input")
+                        .attr("id","repository_link")
+                        .attr("class","form-control")
+                        .attr("name","repository_link")
+                        .attr("placeholder","Repository link")
+                    form_group = form.append("div").attr("class","form-group")
+                    input = form_group.append("input")
+                        .attr("id","download_link")
+                        .attr("class","form-control")
+                        .attr("name","download_link")
+                        .attr("placeholder","Download link")
+                    form_group = form.append("div").attr("class","form-group")
+                    input = form_group.append("input")
+                        .attr("id","references")
+                        .attr("class","form-control")
+                        .attr("name","references")
+                        .attr("placeholder","References")
+
+                    
+                    var modal = bootbox.dialog({
+                        message: $(".form-content").html(),
+                        title: "Add Competence Metadata",
+                        size: "large",
+                        buttons: [
+                          {
+                            label: "Cancel",
+                            className: "btn btn-default pull-left",
+                            callback: function() {
+                              modal.modal("hide");
+                              d3.selectAll(".form-content").remove();
+                            }
+                          },
+                          {
+                            label: "OK",
+                            className: "btn btn-primary pull-left",
+                            callback: function() {
+                                var metadata = {
+                                    uID: aNode.uID,
+                                    description: $('form #description').val(),
+                                    status: $('form #status').val(),
+                                    owner_uid: $('form #owner_uid').val(),
+                                    creator_uid: $('form #creator_uid').val(),
+                                    operator_uid: $('form #operator_uid').val()
+                                }
+                                var metadata_str = JSON.stringify(metadata)
+                                var bootboxContent = {title: "Get graph elements", message: '<p>Please be patient...</p>'};
+                                var xhr = $.ajax(
+                                {
+                                    type: 'POST',
+                                    url: '/kadmos_add_DC_metadata',
+                                    data: {'graphID':graphID, 'currentOrder':nodeOrder, 'nodeName':metadata.uID, 'metadata_str':metadata_str},
+                                    success: function(result)
+                                    {
+                                        if (result.includes("ERROR:"))
+                                        {
+                                            bootboxContent.message = result
+                                            kadmosErrorMessage(bootboxContent);
+                                        }
+                                        else
+                                        {   
+                                            var updatedData = {};
+                                            updatedData = theData;
+                                            var graphData = JSON.parse(result);             
+                                            for (var i = 0; i < updatedData.graphs.length; i++)
+                                            {
+                                                if (graphID == updatedData.graphs[i].id)
+                                                {
+                                                    updatedData.graphs[i] = graphData.graphs[0];   
+                                                }
+                                            }
+                                            
+                                            clearView();
+                                            makeKadmosMenu(updatedData);
+                                            xdsm_script(updatedData,graphID);
+                                            
+                                            bootboxContent.message = "Success!"
+                                            kadmosSuccessMessage(bootboxContent)
+                                        }
+                                    },
+                                    error: function(result)
+                                    {
+                                        bootboxContent.message = result
+                                        kadmosErrorMessage(bootboxContent);
+                                    }
+                                });
+                                kadmosHavePatience(xhr, bootboxContent)
+                                modal.modal("hide");
+                                d3.selectAll(".form-content").remove();
+                            }
+                          }
+                        ],
+                        onEscape: function() {
+                          modal.modal("hide");
+                          d3.selectAll(".form-content").remove();
+                        }
+                    });
+                    
+                    
+                }
+                
+                function sendDCMetadata(aMetadata)
+                {
+                    
+                }
+                
+                
                 var addCBButton = revertDiv.append("button")
                     .attr("class","btn btn-success")
                     .attr("data-toggle","tooltip")
diff --git a/kadmos/vistoms/templates/cmdows_template.xml b/kadmos/vistoms/templates/cmdows_template.xml
index d4c810155..3d99617e3 100644
--- a/kadmos/vistoms/templates/cmdows_template.xml
+++ b/kadmos/vistoms/templates/cmdows_template.xml
@@ -1,20 +1,11 @@
 <?xml version='1.0' encoding='UTF-8'?>
 <cmdows xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="https://bitbucket.org/imcovangent/cmdows/raw/master/schema/0.7/cmdows.xsd">
   <header>
-    <creator>Lukas Mueller</creator>
-    <description>RCG CMDOWS file of the super-sonic business jet test case optimization problem</description>
+    <creator>Benedikt Aigner</creator>
+    <description>CMDOWS template</description>
     <timestamp>2018-03-21T18:06:39.928759</timestamp>
     <fileVersion>0.1</fileVersion>
     <cmdowsVersion>0.7</cmdowsVersion>
-    <updates>
-      <update>
-        <modification>KADMOS export of a repository connectivity graph (RCG).</modification>
-        <creator>Lukas Mueller</creator>
-        <timestamp>2018-03-21T18:06:39.928759</timestamp>
-        <fileVersion>0.1</fileVersion>
-        <cmdowsVersion>0.7</cmdowsVersion>
-      </update>
-    </updates>
   </header>
   <executableBlocks>
     <designCompetences>
@@ -32,11 +23,4 @@
     </designCompetences>
     <mathematicalFunctions></mathematicalFunctions>
   </executableBlocks>
-  <parameters></parameters>
-  <workflow>
-    <dataGraph>
-      <name>RCG</name>
-      <edges></edges>
-    </dataGraph>
-  </workflow>
 </cmdows>
diff --git a/kadmos/vistoms/vistoms.py b/kadmos/vistoms/vistoms.py
index df1dd7ebc..45ac83d0c 100644
--- a/kadmos/vistoms/vistoms.py
+++ b/kadmos/vistoms/vistoms.py
@@ -11,11 +11,13 @@ import webbrowser
 import zipfile
 from copy import deepcopy
 from shutil import copyfile
+import xml.etree.ElementTree as ET
 
 import networkx as nx
 from flask import Flask, render_template, request, jsonify
 from kadmos.cmdows.cmdows import find_cmdows_file
-from kadmos.graph import load, FundamentalProblemGraph
+from kadmos.graph import load, FundamentalProblemGraph, KadmosGraph
+
 
 app = Flask(__name__)
 
@@ -97,6 +99,7 @@ def kadmos_upload_file():
                             actual_database_dir = os.path.join(database_dir, database_listdir[0])
                     for file in os.listdir(actual_database_dir):
                         file_list.append(os.path.join(actual_database_dir, file))
+
                     cmdows_file = find_cmdows_file(file_list)
                     graphFileName = cmdows_file
                 else:
@@ -155,33 +158,26 @@ def kadmos_create_new_graph():
         # Get request form
         graph_name = request.form['graph_name']
         graph_description = request.form['graph_description']
+        graphID = request.form['graphID']
 
         # Open cmdows template file and load it as graph
         cmdows_template = os.path.join('templates', 'cmdows_template.xml')
         graph_template = load(cmdows_template, check_list=['consistent_root', 'invalid_leaf_elements'])
 
-        # Determine graph_id
-        graph_ids = []
-        for aFile in os.listdir(UPLOAD_FOLDER):
-            if aFile.endswith('.kdms'):
-                filename = aFile.split('.kdms')[0]
-                graph_ids.append(int(filename.split('_')[1]))
-        graph_id_int = max(graph_ids)+1
-        graph_id = format(graph_id_int, "02")
-
         # Allocate graph name, description and id
         graph_template.graph['name'] = graph_name
         graph_template.graph['description'] = graph_description
-        graph_template.graph['id'] = graph_id
+        graph_template.graph['id'] = graphID
 
         # Delete dummy design competence
         graph_template.remove_node('dummy')
 
         # Save empty graph as kdms file
-        graph_template.save(os.path.join(UPLOAD_FOLDER, 'tmp_'+graph_id+'.kdms'), file_type='kdms', graph_check_critical=False, mpg=None)
+        graph_template.save(os.path.join(UPLOAD_FOLDER, 'tmp_'+graphID+'.kdms'), file_type='kdms',
+                            graph_check_critical=False, mpg=None)
 
         # Add graph to vistoms data
-        newVistomsData = graph_template.vistoms_add_json(mpg=None, graph_id=graph_id)
+        newVistomsData = graph_template.vistoms_add_json(mpg=None, graph_id=graphID)
 
         return newVistomsData
 
@@ -339,7 +335,10 @@ def kadmos_save_vistoms_graph():
         graphID = request.form['graphID']
         newGraphName = request.form['newGraphName']
         newGraphID = request.form['newGraphID']
-        function_order = request.form['currentOrder'].split(',')
+
+        function_order = None
+        if request.form['currentOrder'].split(',') != '':
+            function_order = request.form['currentOrder'].split(',')
 
         tmpDir = UPLOAD_FOLDER
         graphFileName = TEMP_FILE + '_' + graphID + '.kdms'
@@ -353,9 +352,10 @@ def kadmos_save_vistoms_graph():
 
         newFileName = TEMP_FILE + '_' + newGraphID + '.kdms'
         graph.graph['name'] = newGraphName
+        graph.graph['id'] = newGraphID
         graph.save(os.path.join(UPLOAD_FOLDER, newFileName), file_type="kdms", graph_check_critical=False, mpg=mpg)
 
-        newVistomsData = graph.vistoms_add_json(function_order=function_order,mpg=mpg, graph_id=newGraphID)
+        newVistomsData = graph.vistoms_add_json(function_order=function_order, mpg=mpg, graph_id=newGraphID)
 
         return newVistomsData
 
@@ -804,7 +804,9 @@ def kadmos_add_DC_metadata():
     try:
         # Get request form
         graphID = request.form['graphID']
-        function_order = request.form['currentOrder'].split(',')
+        function_order = None
+        if request.form['currentOrder'].split(',') != '':
+            function_order = request.form['currentOrder'].split(',')
         nodeName = request.form['nodeName']
         metadata_str = request.form['metadata_str']
 
@@ -876,7 +878,7 @@ def kadmos_add_mathematical_function():
     try:
         # Get request form
         graphID = request.form['graphID']
-        function_order = []
+        function_order = None
         if request.form['currentOrder'] != '':
             function_order = request.form['currentOrder'].split(',')
         form_data_str = request.form['form_data']
@@ -917,6 +919,8 @@ def kadmos_add_mathematical_function():
                                             output_nodes=output_nodes)
 
             # Add the new mathematical function to the function list (function_order)
+            if function_order is None:
+                function_order = []
             function_order.append(function_node)
 
             # The graph with the added mathematical function is now saved as json data for vistoms
@@ -945,9 +949,10 @@ def kadmos_add_design_competence():
     try:
         # Get request form
         graphID = request.form['graphID']
-        input_file = request.form['input']
-        output_file = request.form['output']
-        cmdows_file = request.form['cmdows']
+        current_order = request.form['currentOrder']
+        function_node = request.form['function_node'].replace(" ", "")
+        input_xml = request.files['input_xml']
+        output_xml = request.files['output_xml']
 
 
         # Save previous graph as backup before making the changes
@@ -962,18 +967,44 @@ def kadmos_add_design_competence():
             graph = load(os.path.join(path, graphFileName), file_check_critical=False)
             mpg = None
 
-            # Here the dc cmdows file and database is created
-            check_list = ['consistent_root', 'invalid_leaf_elements']
-            graph_dc = load(check_list=check_list)
-
-            # Here the two graphs are merged
-            new_graph = nx.compose(graph, graph_dc)
+            # Here the dc cmdows file is loaded
+            # Save the template cmdows file in the tmp folder
+            cmdows_template = os.path.join('templates', 'cmdows_template.xml')
+            cmdows_file = os.path.join(UPLOAD_FOLDER,'cmdows_template.xml')
+            # Write the new competence to the CMDOWS template xml file
+            tree = ET.parse(cmdows_template)
+            root = tree.getroot()
+            dc_element = root.find("./executableBlocks/designCompetences/designCompetence")
+            dc_element.find("ID").text = function_node
+            uid = function_node
+            dc_element.set('uID', uid)
+            tree.write(cmdows_file)
+
+            # Copy the uploaded input/outut files to the tmp folder
+            input_xml_file = os.path.join(UPLOAD_FOLDER, function_node+'-input.xml')
+            output_xml_file = os.path.join(UPLOAD_FOLDER, function_node+'-output.xml')
+            input_xml.save(input_xml_file)
+            output_xml.save(output_xml_file)
+
+            # Load design competence with cmdows template file
+            graph_dc = load(cmdows_file, check_list=['consistent_root', 'invalid_leaf_elements'])
+
+            os.remove(cmdows_file)
+            os.remove(input_xml_file)
+            os.remove(output_xml_file)
+
+            # Here the original graph and the new graph including the design competence are merged
+            new_graph = KadmosGraph(nx.compose(graph, graph_dc))
+            # new_graph.graph['name'] = graph.graph['name']
+            # new_graph.graph['id'] = graphID
+            # new_graph.graph['description'] = graph.graph['description']
 
             # Add the graph with the updated function order to VISTOMS
             newVistomsData = new_graph.vistoms_add_json(graph_id=graphID, mpg=mpg)
 
             # Save the graph in temp/tmp.kdms
-            new_graph.save(os.path.join(UPLOAD_FOLDER, TEMP_FILE+'_'+graphID+'.kdms'), file_type='kdms', graph_check_critical=False, mpg=mpg)
+            new_graph.save(os.path.join(UPLOAD_FOLDER, TEMP_FILE+'_'+graphID+'.kdms'), file_type='kdms',
+                           graph_check_critical=False, mpg=mpg)
 
             return newVistomsData
 
@@ -994,7 +1025,9 @@ def kadmos_change_node_pos():
         # Get request form
         graphID = request.form['graphID']
         nodeName = str(request.form['nodeName'])
-        function_order = request.form['currentOrder'].split(',')
+        function_order = None
+        if request.form['currentOrder'].split(',') != '':
+            function_order = request.form['currentOrder'].split(',')
         newPos = int(request.form['newPos'])
 
         # Save previous graph as backup before making the changes
@@ -1042,7 +1075,9 @@ def kadmos_delete_node():
         # Get request form
         graphID = request.form['graphID']
         nodeName = str(request.form['nodeName'])
-        function_order = request.form['currentOrder'].split(',')
+        function_order = None
+        if request.form['currentOrder'].split(',') != '':
+            function_order = request.form['currentOrder'].split(',')
 
         # Save previous graph as backup before making the changes
         savePreviousGraph(graphID)
@@ -1088,7 +1123,9 @@ def kadmos_delete_edge():
         graphID = request.form['graphID']
         nodeName = str(request.form['nodeName'])
         edgeName = str(request.form['edgeName'])
-        function_order = request.form['currentOrder'].split(',')
+        function_order = None
+        if request.form['currentOrder'].split(',') != '':
+            function_order = request.form['currentOrder'].split(',')
 
         # Save previous graph as backup before making the changes
         savePreviousGraph(graphID)
@@ -1129,7 +1166,9 @@ def kadmos_exclude_DCs():
         # Get request form
         graphID = request.form['graphID']
         nodeList = request.form['nodeList'].split(',')
-        function_order = request.form['currentOrder'].split(',')
+        function_order = None
+        if request.form['currentOrder'].split(',') != '':
+            function_order = request.form['currentOrder'].split(',')
 
         # Save previous graph as backup before making the changes
         savePreviousGraph(graphID)
@@ -1175,7 +1214,9 @@ def kadmos_merge_seq_DCs():
     try:
         # Get request form
         graphID = request.form['graphID']
-        function_order = request.form['currentOrder'].split(',')
+        function_order = None
+        if request.form['currentOrder'].split(',') != '':
+            function_order = request.form['currentOrder'].split(',')
         nodeList = request.form['nodeList'].split(',')
 
         # Save previous graph as backup before making the changes
@@ -1226,7 +1267,9 @@ def kadmos_merge_parallel_DCs():
     try:
         # Get request form
         graphID = request.form['graphID']
-        function_order = request.form['currentOrder'].split(',')
+        function_order = None
+        if request.form['currentOrder'].split(',') != '':
+            function_order = request.form['currentOrder'].split(',')
         nodeList = request.form['nodeList'].split(',')
 
         # Save previous graph as backup before making the changes
@@ -1277,7 +1320,9 @@ def kadmos_merge_func_mod_DCs():
     try:
         # Get request form
         graphID = request.form['graphID']
-        function_order = request.form['currentOrder'].split(',')
+        function_order = None
+        if request.form['currentOrder'].split(',') != '':
+            function_order = request.form['currentOrder'].split(',')
         nodeList = request.form['nodeList'].split(',')
 
         # Save previous graph as backup before making the changes
@@ -1333,7 +1378,9 @@ def kadmos_remove_collision():
         # Get request form
         graphID = request.form['graphID']
         nodeList = request.form['nodeList'].split(',')
-        function_order = request.form['currentorder'].split(',')
+        function_order = None
+        if request.form['currentOrder'].split(',') != '':
+            function_order = request.form['currentOrder'].split(',')
 
         # Save previous graph as backup before making the changes
         savePreviousGraph(graphID)
@@ -1431,7 +1478,9 @@ def kadmos_make_all_variables_valid():
     try:
         # get request form
         graphID = request.form['graphID']
-        function_order = request.form['currentOrder'].split(',')
+        function_order = None
+        if request.form['currentOrder'].split(',') != '':
+            function_order = request.form['currentOrder'].split(',')
 
         # Save previous graph as backup before making the changes
         savePreviousGraph(graphID)
@@ -1479,7 +1528,9 @@ def kadmos_add_function_problem_roles():
     try:
         # get request form
         graphID = request.form['graphID']
-        function_order = request.form['currentOrder'].split(',')
+        function_order = None
+        if request.form['currentOrder'].split(',') != '':
+            function_order = request.form['currentOrder'].split(',')
 
         # Save previous graph as backup before making the changes
         savePreviousGraph(graphID)
@@ -1525,7 +1576,9 @@ def kadmos_mark_variable():
     try:
         # get request form
         graphID = request.form['graphID']
-        function_order = request.form['currentOrder'].split(',')
+        function_order = None
+        if request.form['currentOrder'].split(',') != '':
+            function_order = request.form['currentOrder'].split(',')
         variableData_str = request.form['variableData_str']
         # read json data
         variableData_py = json.loads(variableData_str)
@@ -1581,7 +1634,9 @@ def kadmos_unmark_variable():
     try:
         # get request form
         graphID = request.form['graphID']
-        function_order = request.form['currentOrder'].split(',')
+        function_order = None
+        if request.form['currentOrder'].split(',') != '':
+            function_order = request.form['currentOrder'].split(',')
         xPath = request.form['xPath']
 
         # Save previous graph as backup before making the changes
@@ -1625,7 +1680,9 @@ def kadmos_remove_unused_outputs():
     try:
         # get request form
         graphID = request.form['graphID']
-        function_order = request.form['currentOrder'].split(',')
+        function_order = None
+        if request.form['currentOrder'].split(',') != '':
+            function_order = request.form['currentOrder'].split(',')
         cleanUp_str = request.form['cleanUp']
         if cleanUp_str == 'True':
             cleanUp = True
@@ -1758,7 +1815,9 @@ def kadmos_impose_MDAO_architecture():
     try:
         # Get request form
         graphID = request.form['graphID']
-        function_order = request.form['currentOrder'].split(',')
+        function_order = None
+        if request.form['currentOrder'].split(',') != '':
+            function_order = request.form['currentOrder'].split(',')
         mdao_architecture = request.form['mdao_architecture']
         doe_method = request.form['doe_method']
         coupling_decomposition = request.form['coupling_decomposition']
-- 
GitLab