Skip to content
Snippets Groups Projects
uploadDIalog.js 9.48 KiB
Newer Older
  • Learn to ignore specific revisions
  • define([
            "base/js/dialog",
            "base/js/utils",
            "jquery",
            "./state",
            "./common",
        ],
        function (dialog, utils, $, state, common) {
    
            function getDatasetTypes(env, connection_name, dataset_types, input_fields) {
                // get all DatasetTypes of a given connection
    
                var url = env.notebook.base_url + 'openbis/datasetTypes/' + connection_name
                fetch(url)
                    .then(function (response) {
                        if (response.ok) {
                            response.json()
                                .then(function (data) {
                                    //console.log(data.dataSetTypes)
    
                                    var change_input_fields = function () {
                                        // remove existing input fields
                                        while (input_fields.firstChild) {
                                            input_fields.removeChild(input_fields.firstChild)
                                        }
    
                                        // for every property assignment, create an input field.
                                        for (pa of dts[dataset_types.selectedIndex].propertyAssignments) {
                                            //var input_title = document.createTextNode(pa.label + ": ")
                                            var input_field = document.createElement("INPUT")
                                            input_field.type = "text"
                                            input_field.name = pa.code
                                            input_field.placeholder = pa.description ? pa.label + ": " + pa.description : pa.label
                                            input_field.size = 90
    
                                            //input_fields.appendChild(input_title)
                                            input_fields.appendChild(input_field)
                                            input_fields.appendChild(document.createElement("BR"))
                                        }
                                    }
                                    dataset_types.onchange = change_input_fields
    
                                    // remove the old and add the new dataset-types
                                    dts = data.dataSetTypes
                                    while (dataset_types.firstChild) {
                                        dataset_types.removeChild(dataset_types.firstChild);
                                    }
                                    for (dt of dts) {
                                        var option = document.createElement("OPTION")
                                        option.value = dt.code
                                        option.textContent = dt.description ? dt.code + ": " + dt.description : dt.code
                                        dataset_types.appendChild(option)
                                    }
                                    // change the input fields, since we just received new datasetTypes
                                    change_input_fields()
    
                                })
                                .catch(function (error) {
                                    console.error("Error while parsing dataset types", error)
                                })
    
                        } else {
                            while (dataset_types.firstChild) {
                                dataset_types.removeChild(dataset_types.firstChild);
                            }
                        }
                    })
                    .catch(function (error) {
                        console.error("Error while fetching dataset types:", error)
                    })
            }
    
            return {
                help: 'upload Notebook and Data to openBIS',
                icon: 'fa-upload',
                help_index: '',
                handler: function (env) {
    
                    conn_table = document.createElement("DIV")
                    var dst_title = document.createElement("STRONG")
                    dst_title.textContent = "DataSet type"
                    var dataset_types = document.createElement("SELECT")
                    dataset_types.id = "dataset_type"
                    dataset_types.className = "form-control select-xs"
    
                    var input_fields = document.createElement("DIV")
                    conn_table.id = "openbis_connections"
    
                    getDatasetTypes(env, state.connection.name, dataset_types, input_fields)
    
                    var sample_title = document.createElement("STRONG")
                    sample_title.textContent = "Sample Identifier"
                    var sampleIdentifier = document.createElement("INPUT")
                    sampleIdentifier.type = "text"
                    sampleIdentifier.name = 'sampleIdentifier'
                    sampleIdentifier.placeholder = "Sample Identifier or permId"
                    sampleIdentifier.value = ''
                    sampleIdentifier.size = "90"
    
                    var ds_title = document.createElement("STRONG")
                    ds_title.textContent = "DataSet files"
                    var ds_files = document.createElement("INPUT")
                    ds_files.type = "text"
                    ds_files.placeholder = "filenames"
                    ds_files.name = "ds_files"
                    ds_files.size = "90"
    
                    var inputs = document.createElement("DIV")
                    inputs.style.marginTop = '10px'
                    inputs.appendChild(dst_title)
                    inputs.appendChild(dataset_types)
                    inputs.appendChild(input_fields)
                    inputs.appendChild(sample_title)
                    inputs.appendChild(sampleIdentifier)
                    inputs.appendChild(ds_title)
                    inputs.appendChild(ds_files)
    
                    var uploadDialogBox = $('<div/>').append(conn_table).append(inputs)
    
                    function onOk() {
                        var connection_name = state.connection.name
    
                        if (!connection_name) {
                            alert("No connection selected")
                            return false
                        }
    
                        var uploadUrl = env.notebook.base_url + 'openbis/dataset/' + connection_name
    
                        var notebook = IPython.notebook
                        var re = /\/notebooks\/(.*?)$/
                        var files = []
                        var filepath = window.location.pathname.match(re)[1]
                        files.push(filepath)
                        // FIXME
                        //if (ds_files.val()) {
                        //    files.push(ds_files.value)
                        //}
    
                        var dataSetInfo = {
                            "type": dataset_types.value,
                            "files": files,
                            "sampleIdentifier": sampleIdentifier.value
                        }
    
                        var settings = {
                            url: uploadUrl,
                            processData: false,
                            type: 'POST',
                            dataType: 'json',
                            data: JSON.stringify(dataSetInfo),
                            contentType: 'application/json',
                            success: function (data) {
                                // display feedback to user
                                common.createFeedback('success', data.statusText)
    
                                // write statusText from returned data to notebooks metadata
                                if (typeof notebook.metadata.openbis === 'undefined') {
                                    notebook.metadata.openbis = {}
                                }
                                if (typeof notebook.metadata.openbis.permIds === 'undefined') {
                                    notebook.metadata.openbis.permIds = {}
                                }
                                if (data.permId) {
                                    notebook.metadata.openbis.permIds[data.permId] = data.statusText
                                }
    
                            },
                            error: function (data) {
                                // display feedback to user
                                var feedback = "<strong>Error: </strong>Dataset was not uploaded.<div>" +
                                    data.statusText +
                                    "</div>"
                                common.createFeedback('danger', feedback)
                            }
                        }
    
                        // display preloader during commit and push
                        var preloader = '<img class="openbis-feedback" src="https://cdnjs.cloudflare.com/ajax/libs/slick-carousel/1.5.8/ajax-loader.gif">'
    
                        // commit and push
                        utils.ajax(settings)
                    }
    
                    if (IPython.notebook.dirty === true) {
                        dialog.modal({
                            body: 'Please save the notebook before uploading it to openBIS.',
                            title: 'Save notebook first',
                            buttons: {
                                'Back': {}
                            },
                            notebook: env.notebook,
                            keyboard_manager: env.notebook.keyboard_manager
                        })
                    } else {
                        dialog.modal({
                            body: uploadDialogBox,
                            title: 'Upload openBIS DataSet',
                            buttons: {
                                'Cancel': {},
                                'Upload': {
                                    class: 'btn-primary btn-large',
                                    click: onOk
                                }
                            },
                            notebook: env.notebook,
                            keyboard_manager: env.notebook.keyboard_manager
                        })
                    }
                }
            }
        }
    )