Skip to content
Snippets Groups Projects
downloadDialog.js 10.3 KiB
Newer Older
  • Learn to ignore specific revisions
  • define([
            "base/js/dialog",
            "./common",
            "./state"
        ],
        function (dialog, common, state) {
    
            function writeMetaData(data) {
                var notebook = IPython.notebook
    
                if (typeof notebook.metadata.datasets === 'undefined') {
                    notebook.metadata.datasets = {}
    
                }
                // store metadata about the downloaded files into the notebook-metadata
                if (data.permId) {
    
                    notebook.metadata.datasets[data.permId] = {
    
                        "permId": data.permId,
                        "path": data.path,
                        "dataStore": data.dataStore,
                        "location": data.location,
                        "size": data.size,
                        "status": data.statusText
                    }
                }
            }
    
            function show_datasets_table(data, datasets_table) {
                var table = document.createElement("TABLE")
                table.className = "table-bordered table-striped table-condensed text-nowrap"
                var thead = table.createTHead()
                var t_row = thead.insertRow()
                var titles = ['', 'permId', 'Type', 'Experiment', 'Registration Date', 'Status', 'Size']
                titles.forEach(function (title) {
                    t_row.insertCell().textContent = title
                })
                var tbody = table.createTBody()
    
                for (dataSet of data.dataSets) {
    
                    var permId = document.createElement("INPUT")
                    permId.type = "checkbox"
                    permId.name = "permId"
                    permId.value = dataSet.permId
    
                    var row = tbody.insertRow()
                    row.insertCell().appendChild(permId)
                    row.insertCell().textContent = dataSet.permId
                    row.insertCell().textContent = dataSet.type
                    row.insertCell().textContent = dataSet.experiment
                    row.insertCell().textContent = dataSet.registrationDate
                    row.insertCell().textContent = dataSet.status
                    row.insertCell().textContent = dataSet.size
                }
    
                while (datasets_table.firstChild) {
                    datasets_table.removeChild(datasets_table.firstChild);
                }
                datasets_table.appendChild(table)
            }
    
    
            return {
                help: 'Download openBIS datasets to your local harddrive',
                icon: 'fa-download',
                help_index: '',
                handler: function (env) {
                    conn_table = document.createElement("DIV")
                    conn_table.id = "openbis_connections"
    
                    var showDataSets = document.createElement("DIV")
                    var title = document.createElement("STRONG")
    
                    title.textContent = "Sample or Experiment identifier/permId: "
    
                    showDataSets.appendChild(title)
                    showDataSets.style.marginTop = '10px'
    
    
                    var entityIdentifier = document.createElement("INPUT")
                    entityIdentifier.type = "text"
                    entityIdentifier.name = "entityIdentifier"
                    entityIdentifier.size = 40
                    entityIdentifier.placeholder = "Sample or Experiment identifier/permId"
                    entityIdentifier.value = ''
    
    
                    var datasets_table = document.createElement("DIV")
                    datasets_table.id = "dataset_table"
                    datasets_table.className = "output output_scroll"
                    datasets_table.style.maxHeight = "10em"
    
                    var show_datasets_btn = document.createElement("BUTTON")
                    show_datasets_btn.className = "btn-info btn-xs"
                    show_datasets_btn.textContent = "show datasets"
    
                    show_datasets_btn.onclick = function () {
                        var selected_conn = state.connection.name
                        if (!selected_conn) {
                            alert('Please choose a connection')
                            return false
                        }
                        connection_name = state.connection.name
    
                        currentConnection = connection_name
    
                        currentEntityIdentifier = entityIdentifier.value
                        if (!currentEntityIdentifier) {
                            alert('Please specify a Sample or Experiment identifier/permId')
    
                        var url = env.notebook.base_url + 'openbis/sample/' + connection_name + '/' + encodeURIComponent(currentEntityIdentifier)
    
    
                        fetch(url)
                            .then(function (response) {
                                if (response.ok) {
                                    response.json()
                                        .then(function (data) {
                                            show_datasets_table(data, datasets_table)
                                        })
                                } else {
                                    response.json()
                                        .then(function (error) {
                                            console.log(error.reason)
                                            alert("Error: " + error.reason)
                                        })
                                }
                            })
                            .catch(function (error) {
                                console.error('A serious network problem occured:', error)
                            })
    
                    }
    
                    showDataSets.appendChild(entityIdentifier)
    
                    showDataSets.appendChild(show_datasets_btn)
                    showDataSets.appendChild(datasets_table)
    
                    // dataSetPermId only
                    var dataset_direct = document.createElement("P")
                    dataset_direct.style.marginTop = '10px'
                    dataset_direct.innerHTML = '<strong>enter DataSet permId directly: </strong>'
    
                    //var dataset = $('<p>')
                    //    .css('margin-top', '10px')
                    //    .append($('<b>').text('... or enter DataSet permId directly: '))
                    var datasetPermId = document.createElement("INPUT")
                    datasetPermId.type = "text"
                    datasetPermId.name = "datasetPermId"
                    datasetPermId.size = "40"
                    datasetPermId.placeholder = "dataSet permId"
    
                    dataset_direct.appendChild(datasetPermId)
    
                    var downloadPath = document.createElement("INPUT")
                    downloadPath.type = "text"
                    downloadPath.name = "downloadPath"
                    downloadPath.size = "90"
                    downloadPath.value = ''
    
                    var path = document.createElement("DIV")
                    path.innerHTML = "<strong>download data to path: </strong>"
                    path.appendChild(downloadPath)
    
                    var download_dialog_box = document.createElement("DIV")
                    download_dialog_box.appendChild(conn_table)
                    download_dialog_box.appendChild(showDataSets)
                    download_dialog_box.appendChild(dataset_direct)
                    download_dialog_box.appendChild(path)
    
                    function downloadDataset(connection_name, selectedPermIds, downloadPath) {
    
                        for (permId of selectedPermIds) {
                            var downloadUrl = env.notebook.base_url + 'openbis/dataset/' +
                                connection_name + '/' + permId + '/' + encodeURIComponent(downloadPath)
    
                            fetch(downloadUrl)
                                .then(function (response) {
                                    if (response.ok) {
                                        response.json()
                                            .then(function (data) {
                                                common.createFeedback('success', data.statusText)
    
                                                // successful download:
                                                // write statusText from returned data to notebooks metadata
                                                writeMetaData(data)
    
                                                // keep current download path for later use
                                                currentDownloadPath = downloadPath
                                            })
                                    } else {
                                        response.json()
                                            .then(function (error) {
                                                console.log(error.reason)
                                                alert("Error: " + error.reason)
                                            })
                                    }
                                })
                                .catch(function (error) {
                                    console.error('A serious network problem occured:', error)
                                })
                        }
                    }
    
                    function onDownloadClick() {
                        var selected_conn = state.connection.name
                        if (!selected_conn) {
                            alert('please choose a connection')
                            return false
                        }
    
                        var selectedPermIds = []
                        for (row of document.querySelectorAll('input[name=permId]:checked')) {
                            selectedPermIds.push(row.value)
                        }
                        if (datasetPermId.value) {
                            selectedPermIds.push(datasetPermId.value)
                        }
                        if (!selectedPermIds) {
                            alert('please select a dataset or provide a permId')
                            return false
                        }
    
                        if (!downloadPath.value) {
                            alert('Please specify where you would like to download your files!')
                            return false
                        }
                        downloadDataset(selected_conn, selectedPermIds, downloadPath.value)
                    }
    
                    dialog.modal({
                        body: download_dialog_box,
                        title: 'Download openBIS DataSets',
                        buttons: {
                            'Cancel': {},
                            'Download': {
                                class: 'btn-primary btn-large',
                                click: onDownloadClick,
                            }
                        },
                        notebook: env.notebook,
                        keyboard_manager: env.notebook.keyboard_manager
                    })
                }
            }
        }
    )