Newer
Older
define([
"base/js/namespace",
"base/js/dialog",
"base/js/utils",
"jquery"
],
var currentSampleIdentifier = null
var currentDownloadPath = null
var ds_type = document.createElement("SELECT")
ds_type.className = "select-xs"
ds_type.id = "dataset_type"
function show_available_connections (data, conn_table) {
if (!currentDownloadPath) {
currentDownloadPath = data.cwd
}
var table = document.createElement("TABLE")
table.className = 'table-bordered table-striped table-condensed'
var thead = table.createTHead()
var thead_row = thead.insertRow(0)
var titles = ['', 'Name', 'URL', 'Status']
for (title of titles) {
thead_row.insertCell().textContent = title
}
//titles.forEach( function(item, index) {
// thead_row.insertCell().textContent = item
//})
for (item of data.connections) {
//data.connections.forEach( function(item) {
//console.log(item)
var conn = document.createElement("INPUT")
conn.type = "radio"
conn.name = "connection_name"
conn.value = item.name
conn.setAttribute("url", item.url)
// Change the list of available dataset types
conn.onchange = function() {
//ds_type.children().remove()
while (ds_type.firstChild) {
ds_type.removeChild(ds_type.firstChild);
}
if (item.ds_types != null) {
option = document.createElement("OPTION")
option.textContent = ds_type.code
}
}
}
conn.checked = item.name === currentConnection;
var row = tbody.insertRow()
row.insertCell().appendChild(conn)
row.insertCell().textContent = item.name
row.insertCell().textContent = item.url
row.insertCell().textContent = item.status
conn_table.innerHTML = ""
table_title = document.createElement("STRONG")
table_title.textContent = "Please choose a connection"
conn_table.appendChild(table_title)
conn_table.appendChild(table)
}
function show_datasets_table( data, datasets_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.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)
function getOpenBisConnections(env) {
var connectionsUrl = env.notebook.base_url + 'openbis/conn'
var settings = {
url: connectionsUrl,
processData: false,
type: 'GET',
dataType: 'json',
function createFeedback(type, content) {
var close = document.createElement("BUTTON")
close.className = "close"
close.setAttribute("data-dismiss", "alert")
close.setAttribute("aria-label", "Close")
var x = document.createElement("SPAN")
x.setAttribute("aria-hidden", true)
x.innerHTML = "×"
close.appendChild(x)
var feedbackBox = document.createElement( "DIV" )
feedbackBox.className = "openbis-feedback alert alert-dismissible alert-" + type
feedbackBox.setAttribute("role","alert")
feedbackBox.innerHTML = content
feedbackBox.prepend(close)
var nb_container = document.getElementById('notebook-container')
nb_container.prepend(feedbackBox)
}
function writeMetaData(data) {
var notebook = IPython.notebook
if (typeof notebook.metadata.openbis_connections === 'undefined') {
notebook.metadata.openbis_connections = {}
}
if (typeof notebook.metadata.openbis_connections[data.url] === 'undefined') {
notebook.metadata.openbis_connections[data.url] = {}
}
// store metadata about the downloaded files into the notebook-metadata
if (data.permId) {
notebook.metadata.openbis_connections[data.url][data.permId] = {
"permId": data.permId,
"path": data.path,
"dataStore": data.dataStore,
"location": data.location,
"size": data.size,
"status": data.statusText
}
}
}
var fetchDatasetFromOpenBis = {
help: 'Download a openBIS dataset to your local harddrive',
icon: 'fa-download',
help_index: '',
handler: function (env) {
//var conn_table = $('<div id="openbis_connections"/>')
var conn_table = document.createElement("DIV")
conn_table.id = "openbis_connections"
.done(function (data) {
show_available_connections(data, conn_table)
})
.fail(function (data) {
alert(data.status)
})
.always(function () {
showDownloadDialog()
})
function showDownloadDialog() {
// This function gets called after loading the openBIS connections
// to make sure we can display the download path provided by the server.
// show DataSets for Sample identifier/permid
var showDataSets = document.createElement("DIV")
var title = document.createElement("STRONG")
title.textContent = "Sample identfier/permId: "
showDataSets.appendChild(title)
showDataSets.style.marginTop = '10px'
var sampleIdentifier = document.createElement("INPUT")
sampleIdentifier.type = "text"
sampleIdentifier.name = "sampleIdentifier"
sampleIdentifier.size = 40
sampleIdentifier.placeholder = "sample identifier or permId"
sampleIdentifier.value = currentSampleIdentifier
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 = document.querySelector('input[name=connection_name]:checked')
if (!selected_conn) {
alert('Please choose a connection')
return false
}
connection_name = selected_conn.value
currentConnection = connection_name
currentSampleIdentifier = sampleIdentifier.value
if (!currentSampleIdentifier) {
alert('Please specify a sample identifier/permId')
return false
}
var url = env.notebook.base_url + 'openbis/sample/' + connection_name + '/' + encodeURIComponent(currentSampleIdentifier)
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(sampleIdentifier)
showDataSets.appendChild(show_datasets_btn)
showDataSets.appendChild(datasets_table)
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
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 = currentDownloadPath
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(selected_conn, selectedPermIds, downloadPath) {
var connection_name = selected_conn.value
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) {
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)
})
}
var selected_conn = document.querySelector('input[name=connection_name]:checked')
if (! selected_conn) {
alert('please choose a connection')
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 DataSet',
buttons: {
'Cancel': {},
'Download': {
class: 'btn-primary btn-large',
click: onDownloadClick,
},
notebook: env.notebook,
keyboard_manager: env.notebook.keyboard_manager
})
}
}
}
var uploadDatasetsToOpenBis = {
help: 'upload Notebook and Data to openBIS',
icon: 'fa-cloud-upload',
help_index: '',
handler: function (env) {
var conn_table = document.createElement("DIV")
conn_table.id = "openbis_connections"
.done(function (data) {
show_available_connections(data, conn_table)
})
.fail(function (data) {
alert(data.status)
})
var ds_name = $('<input type="text" name="ds_name" size=40 placeholder="name">')
var ds_description = $('<input type="text" name="ds_description" size=40 placeholder="description">')
//var ds_type = $('<input type="text" name="ds_type" size=40 placeholder="type">')
//var ds_type = $('<select class="form-control select-xs" id="dataset_type">')
var sampleIdentifier = $('<input type="text" name="sampleIdentifier" size=40 placeholder="sample identifier">')
.val(currentSampleIdentifier)
var ds_files = $('<input type="text" name="files" size=40 placeholder="filenames">')
var inputs = $('<div>')
.css('margin-top', '10px')
.append($('<p>').text('Name: ').append(ds_name))
.append($('<p>').text('Description: ').append(ds_description))
.append($('<p>').text('DatasetType: ').append(ds_type))
.append($('<p>').text('Sample: ').append(sampleIdentifier))
.append($('<p>').text('Files: ').append(ds_files))
var uploadDialogBox = $('<div/>').append(conn_table).append(inputs)
// get the canvas for user feedback
var container = $('#notebook-container')
function onOk () {
//var connection_name = $('input[name="connection_name"]:checked').val()
var selected_connection = document.querySelector('input[name=connection_name]:checked')
if (!selected_connection) {
alert("No connection selected")
return false
}
var connection_name = selected_connection.value
var uploadUrl = env.notebook.base_url + 'openbis/dataset/' + connection_name
var filepath = window.location.pathname.match(re)[1]
files.push(filepath)
if (ds_files.val()) {
files.push(ds_files.val())
}
var dataSetInfo = {
"name" : ds_name.val(),
"description" : ds_description.val(),
"type" : ds_type.val(),
"files" : files,
"sampleIdentifier": sampleIdentifier.val()
}
contentType: 'application/json',
success: function (data) {
// display feedback to user
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>"
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">'
container.prepend(preloader)
$('.openbis-feedback').remove()
// 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({
478
479
480
481
482
483
484
485
486
487
488
489
490
491
492
493
494
495
496
497
498
499
500
501
502
503
504
505
506
title: 'Upload openBIS DataSet',
buttons: {
'Cancel': {},
'Upload': {
class: 'btn-primary btn-large',
click: onOk
}
},
notebook: env.notebook,
keyboard_manager: env.notebook.keyboard_manager
})
}
}
}
function _onLoad () {
// register new action
var download_datasets = IPython.keyboard_manager.actions.register(
fetchDatasetFromOpenBis, 'openbis-dataset-download', 'jupyter-openBIS')
var upload_datasets = IPython.keyboard_manager.actions.register(
uploadDatasetsToOpenBis, 'openbis-dataset-upload', 'jupyter-openBIS')
// add button for new action
IPython.toolbar.add_buttons_group([download_datasets, upload_datasets])
}
return {load_ipython_extension: _onLoad}
})