mountainlab
Version:
MountainLab data analysis environment
197 lines (173 loc) • 5.36 kB
JavaScript
/*
* Copyright 2016-2017 Flatiron Institute, Simons Foundation
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
function MLSPipelineModulesView(O,options) {
O=O||this;
JSQWidget(O);
O.div().addClass('MLSPipelineModulesView');
if (!options) options={};
this.setProcessorManager=function(PM) {m_pipeline_module_widget.setProcessorManager(PM);};
this.setMLSManager=function(M) {setMLSManager(M);};
this.refresh=function() {refresh();};
var m_manager=null;
var m_list_widget=new MLSPipelineModuleListWidget();
var m_pipeline_module_widget=new MLSPipelineModuleWidget();
var m_menu_bar=new MLMenuBar();
var menu=m_menu_bar.addMenu('...');
menu.addItem('Add new pipeline module...',add_new_pipeline_module);
menu.addDivider();
menu.addItem('Remove selected pipeline modules...',remove_selected_pipeline_modules);
menu.addDivider();
menu.addItem('Export selected pipeline modules...',export_selected_pipeline_modules);
menu.addItem('Import pipeline module(s)...',import_pipeline_modules);
m_list_widget.setParent(O);
m_pipeline_module_widget.setParent(O);
m_menu_bar.setParent(O);
m_list_widget.onCurrentPipelineModuleChanged(refresh_pipeline_module);
JSQ.connect(O,'sizeChanged',O,update_layout);
function update_layout() {
var W=O.width();
var H=O.height();
var Hmenu=50;
var W1=Math.max(200,Math.floor(W/10));
var W2=W-W1;
hmarg=5;
m_menu_bar.setGeometry(hmarg,0,W1-hmarg*2,Hmenu);
m_list_widget.setGeometry(hmarg,Hmenu,W1-hmarg*2,H-Hmenu);
m_pipeline_module_widget.setGeometry(W1+hmarg,0,W2-hmarg*2,H);
}
function refresh() {
m_list_widget.refresh();
refresh_pipeline_module();
}
function refresh_pipeline_module() {
var module_name=m_list_widget.currentPipelineModuleName();
if (!module_name) {
m_pipeline_module_widget.setPipelineModule(null);
return;
}
var P=m_manager.study().pipelineModule(module_name);
m_pipeline_module_widget.setPipelineModule(P);
if (P) {
P.onChanged(function() {
if (module_name) {
m_manager.study().setPipelineModule(module_name,P);
}
});
}
}
function add_new_pipeline_module() {
var pipeline_module_name=prompt('Pipeline module name:');
if (!pipeline_module_name) return;
m_manager.study().setPipelineModule(pipeline_module_name,new MLSPipelineModule());
refresh();
m_list_widget.setCurrentPipelineModuleName(pipeline_module_name);
}
function remove_selected_pipeline_modules() {
var names=m_list_widget.selectedPipelineModuleNames();
if (names.length==0) {
alert('No pipeline modules selected.');
return;
}
if (confirm('Remove '+names.length+' pipeline modules?')) {
for (var i in names) {
var name=names[i];
m_manager.study().removePipelineModule(name);
}
refresh();
}
}
function import_pipeline_modules() {
var UP=new FileUploader();
UP.uploadTextFile({},function(tmp) {
if (!tmp.success) {
alert(tmp.error);
return;
}
var obj=try_parse_json(tmp.text);
if (!obj) {
alert('Error parsing json');
return;
}
if (!('pipeline_modules' in obj)) {
if ('pipelines' in obj) {
var imported_name=remove_file_extension(tmp.file_name);
var obj2={pipeline_modules:{}};
obj2.pipeline_modules[imported_name]=obj;
obj=obj2;
}
else {
alert('Missing json field: pipeline_modules');
return;
}
}
var last_name='';
var count=0;
for (var name in obj.pipeline_modules) {
var X=new MLSPipelineModule();
X.setObject(obj.pipeline_modules[name]);
m_manager.study().setPipelineModule(name,X);
last_name=name;
count++;
}
refresh();
if (last_name) {
m_list_widget.setCurrentPipelineModuleName(last_name);
}
alert('Imported '+count+' pipeline modules.');
});
}
function remove_file_extension(str) {
var list=str.split('.');
if (list.length>1)
list=list.slice(0,list.length-1);
return list.join('.');
}
function export_selected_pipeline_modules() {
var names=m_list_widget.selectedPipelineModuleNames();
if (names.length==0) {
alert('No pipeline modules selected.');
return;
}
var obj={pipeline_modules:{}};
for (var i in names) {
var name=names[i];
var PM=m_manager.study().pipelineModule(name);
if (!PM) {
alert('Unable to find pipeline module: '+name);
return;
}
obj.pipeline_modules[name]=PM.object();
}
var fname0='';
if (names.length==1) {
fname0=names[0]+'.json';
}
else {
fname0='pipeline_modules.json';
}
fname0=prompt('Download '+names.length+' pipeline modules to file:',fname0);
if (!fname0) return;
download(JSON.stringify(obj,null,4),fname0);
}
function setMLSManager(M) {
m_manager=M;
m_pipeline_module_widget.setJobManager(M.jobManager());
m_list_widget.setMLSManager(M);
refresh();
//m_pipeline_module_widget.setMLSManager(M);
}
update_layout();
}