extensions/net.sf.basedb.reggie/trunk/resources/dnaseq-analysis/pon_build.js

Code
Comments
Other
Rev Date Author Line
7395 06 Nov 23 nicklas 1 var PoN = function()
7395 06 Nov 23 nicklas 2 {
7395 06 Nov 23 nicklas 3   var pon = {};
7395 06 Nov 23 nicklas 4   var debug = 0;
7395 06 Nov 23 nicklas 5   var selectionIsValid = false;
7395 06 Nov 23 nicklas 6   var subtypePanelOfNormals = null;
7395 06 Nov 23 nicklas 7   
7395 06 Nov 23 nicklas 8   var clusterIsValid = false;
7395 06 Nov 23 nicklas 9   
7395 06 Nov 23 nicklas 10   // Page initialization
7395 06 Nov 23 nicklas 11   pon.initPage = function()
7395 06 Nov 23 nicklas 12   {
7395 06 Nov 23 nicklas 13     
7395 06 Nov 23 nicklas 14     // Step 1
7395 06 Nov 23 nicklas 15     Buttons.addClickHandler('btnSelectList', pon.selectList);
7395 06 Nov 23 nicklas 16     Events.addEventHandler('itemList', 'base-selected', Items.onItemSelected);
7395 06 Nov 23 nicklas 17     Events.addEventHandler('itemList', 'change', pon.itemListOnChange);
7395 06 Nov 23 nicklas 18     Events.doOnEnter('itemList', pon.selectList);
7395 06 Nov 23 nicklas 19     Events.addEventHandler('step-1', 'wizard-validate', pon.validateStep1);
7395 06 Nov 23 nicklas 20
7395 06 Nov 23 nicklas 21     // Step 2
7395 06 Nov 23 nicklas 22     Events.addEventHandler('step-2', 'wizard-initialize', pon.initializeStep2);
7395 06 Nov 23 nicklas 23     Events.addEventHandler('step-2', 'wizard-validate', pon.validateStep2);
7395 06 Nov 23 nicklas 24     Events.addEventHandler('clusters', 'change', pon.clusterOnChange);
7395 06 Nov 23 nicklas 25     Events.addEventHandler('debug', 'change', pon.debugOnChange);
7395 06 Nov 23 nicklas 26     Events.addEventHandler('override', 'change', pon.overrideOnChange);
7395 06 Nov 23 nicklas 27
7395 06 Nov 23 nicklas 28     // Navigation
7395 06 Nov 23 nicklas 29     Buttons.addClickHandler('gocancel', Wizard.cancelWizard);
7395 06 Nov 23 nicklas 30     Buttons.addClickHandler('gorestart', Wizard.restartWizard);
7395 06 Nov 23 nicklas 31     Buttons.addClickHandler('gonext', Wizard.goNextOnClick);
7395 06 Nov 23 nicklas 32     Buttons.addClickHandler('goregister', Wizard.goRegister);
7395 06 Nov 23 nicklas 33     
7395 06 Nov 23 nicklas 34     // Final registration
7395 06 Nov 23 nicklas 35     Events.addEventHandler('wizard', 'wizard-submit', pon.submit);
7395 06 Nov 23 nicklas 36
7395 06 Nov 23 nicklas 37     Doc.show('step-1');
7395 06 Nov 23 nicklas 38     Doc.show('gonext');
7395 06 Nov 23 nicklas 39     
7395 06 Nov 23 nicklas 40     var frm = document.forms['reggie'];
7395 06 Nov 23 nicklas 41     frm.itemList.focus();
7395 06 Nov 23 nicklas 42   }
7395 06 Nov 23 nicklas 43   
7395 06 Nov 23 nicklas 44   // --- Step 1 -----------------------------------
7395 06 Nov 23 nicklas 45   
7395 06 Nov 23 nicklas 46   pon.validateStep1 = function(event)
7395 06 Nov 23 nicklas 47   {
7395 06 Nov 23 nicklas 48     if (!selectionIsValid) 
7395 06 Nov 23 nicklas 49     {
7395 06 Nov 23 nicklas 50       Wizard.setInputStatus('itemList', 'invalid', 'A list must be selected');
7395 06 Nov 23 nicklas 51       event.preventDefault();
7395 06 Nov 23 nicklas 52     }
7395 06 Nov 23 nicklas 53   }
7395 06 Nov 23 nicklas 54   
7395 06 Nov 23 nicklas 55   pon.selectList = function()
7395 06 Nov 23 nicklas 56   {
7395 06 Nov 23 nicklas 57     if (subtypePanelOfNormals == null)
7395 06 Nov 23 nicklas 58     {
7395 06 Nov 23 nicklas 59       subtypePanelOfNormals = Reggie.getSubtypeInfo('PANEL_OF_NORMAL');
7395 06 Nov 23 nicklas 60     }
7395 06 Nov 23 nicklas 61     
7395 06 Nov 23 nicklas 62     // Reset list
7395 06 Nov 23 nicklas 63     var url = '&resetTemporary=1';
7395 06 Nov 23 nicklas 64     url += '&tmpfilter:INT:memberType=268'; // 268=DERIVEDBIOASSAY
7395 06 Nov 23 nicklas 65     url += '&tmpfilter:INT:itemSubtype='+subtypePanelOfNormals.id;
7395 06 Nov 23 nicklas 66     Dialogs.selectItem('ITEMLIST', 'itemList', 0, url);
7395 06 Nov 23 nicklas 67   }
7395 06 Nov 23 nicklas 68
7395 06 Nov 23 nicklas 69   pon.itemListOnChange = function()
7395 06 Nov 23 nicklas 70   {
7395 06 Nov 23 nicklas 71     var frm = document.forms['reggie'];
7395 06 Nov 23 nicklas 72     selectionIsValid = false;
7395 06 Nov 23 nicklas 73
7395 06 Nov 23 nicklas 74     if (!frm.itemList.value)
7395 06 Nov 23 nicklas 75     {
7395 06 Nov 23 nicklas 76       Wizard.setInputStatus('itemList', 'invalid', 'A list must be selected');
7395 06 Nov 23 nicklas 77       return;
7395 06 Nov 23 nicklas 78     }
7395 06 Nov 23 nicklas 79
7395 06 Nov 23 nicklas 80     // Make some minor and quick checks on the selected list
7395 06 Nov 23 nicklas 81     Wizard.setInputStatus('itemList', 'checking', 'Checking...');
7395 06 Nov 23 nicklas 82     var url = '../WgsVariantCalling.servlet?ID='+App.getSessionId();
7395 06 Nov 23 nicklas 83     url += '&cmd=PreValidateItemListForPanelOfNormals';
7395 06 Nov 23 nicklas 84     url += '&listId='+frm.itemList.value;
7395 06 Nov 23 nicklas 85     Wizard.asyncJsonRequest(url, pon.itemListValidated);
7395 06 Nov 23 nicklas 86   }
7395 06 Nov 23 nicklas 87
7395 06 Nov 23 nicklas 88   pon.itemListValidated = function(response)
7395 06 Nov 23 nicklas 89   {
7442 17 Nov 23 nicklas 90     Doc.element('externalOperator').innerHTML=Strings.encodeTags(response.ExternalOperator);
7442 17 Nov 23 nicklas 91     if (response.errorMessage)
7395 06 Nov 23 nicklas 92     {
7395 06 Nov 23 nicklas 93       selectionIsValid = false;
7442 17 Nov 23 nicklas 94       Wizard.setInputStatus('itemList', 'invalid', response.errorMessage);
7395 06 Nov 23 nicklas 95     }
7442 17 Nov 23 nicklas 96     else if (response.warningMessage)
7442 17 Nov 23 nicklas 97     {
7442 17 Nov 23 nicklas 98       selectionIsValid = true;
7442 17 Nov 23 nicklas 99       Wizard.setInputStatus('itemList', 'warning', response.warningMessage);
7442 17 Nov 23 nicklas 100     }
7395 06 Nov 23 nicklas 101     else
7395 06 Nov 23 nicklas 102     {
7395 06 Nov 23 nicklas 103       selectionIsValid = true;
7395 06 Nov 23 nicklas 104       Wizard.setInputStatus('itemList', 'valid');
7395 06 Nov 23 nicklas 105     }
7395 06 Nov 23 nicklas 106   }
7395 06 Nov 23 nicklas 107
7395 06 Nov 23 nicklas 108   // --- Step 2 -----------------------------------
7395 06 Nov 23 nicklas 109   pon.initializeStep2 = function()
7395 06 Nov 23 nicklas 110   {
7395 06 Nov 23 nicklas 111     Wizard.setCurrentStep(2);
7395 06 Nov 23 nicklas 112     
7395 06 Nov 23 nicklas 113     // Check debug by default if debug is set or not on a secure server (=production server)
7395 06 Nov 23 nicklas 114     var frm = document.forms['reggie'];
7395 06 Nov 23 nicklas 115     frm.debug.checked = debug || location.protocol != 'https:';
7395 06 Nov 23 nicklas 116
7395 06 Nov 23 nicklas 117     // Load clusters
7395 06 Nov 23 nicklas 118     var url = '../OpenGrid.servlet?ID='+App.getSessionId() + '&cmd=GetHostInfo&config=wgs-variant-call';
7395 06 Nov 23 nicklas 119     Doc.addClass('clusters', 'list-loading');
7395 06 Nov 23 nicklas 120     frm.clusters[0] = new Option('loading...');
7395 06 Nov 23 nicklas 121     Wizard.asyncJsonRequest(url, pon.clustersLoaded);
7395 06 Nov 23 nicklas 122
7395 06 Nov 23 nicklas 123     Doc.show('goregister');
7395 06 Nov 23 nicklas 124     Doc.show('gocancel');
7395 06 Nov 23 nicklas 125   }
7395 06 Nov 23 nicklas 126   
7395 06 Nov 23 nicklas 127   pon.validateStep2 = function(event)
7395 06 Nov 23 nicklas 128   {
7395 06 Nov 23 nicklas 129     if (!clusterIsValid) event.preventDefault();
7395 06 Nov 23 nicklas 130   }
7395 06 Nov 23 nicklas 131   
7395 06 Nov 23 nicklas 132   pon.clustersLoaded = function(response)
7395 06 Nov 23 nicklas 133   {
7395 06 Nov 23 nicklas 134     Doc.removeClass('clusters', 'list-loading');
7395 06 Nov 23 nicklas 135     var frm = document.forms['reggie'];
7395 06 Nov 23 nicklas 136     var clusters = response.hosts;
7395 06 Nov 23 nicklas 137     frm.clusters.length = 0;
7395 06 Nov 23 nicklas 138     for (var i = 0; i < clusters.length; i++)
7395 06 Nov 23 nicklas 139     {
7395 06 Nov 23 nicklas 140       var cl = clusters[i];
7395 06 Nov 23 nicklas 141       var option = new Option(cl.connection.name, cl.id);
7395 06 Nov 23 nicklas 142       option.cluster = cl;
7395 06 Nov 23 nicklas 143       frm.clusters[frm.clusters.length] = option;
7395 06 Nov 23 nicklas 144       Wizard.setInputStatus('clusters', 'valid');
7395 06 Nov 23 nicklas 145       clusterIsValid = true;
7395 06 Nov 23 nicklas 146     }
7395 06 Nov 23 nicklas 147     if (frm.clusters.length == 0)
7395 06 Nov 23 nicklas 148     {
7395 06 Nov 23 nicklas 149       Wizard.setInputStatus('clusters', 'invalid', 'No available clusters');
7395 06 Nov 23 nicklas 150       clusterIsValid = false;
7395 06 Nov 23 nicklas 151     }
7395 06 Nov 23 nicklas 152     else
7395 06 Nov 23 nicklas 153     {
7395 06 Nov 23 nicklas 154       pon.clusterOnChange();
7395 06 Nov 23 nicklas 155     }
7395 06 Nov 23 nicklas 156   }
7395 06 Nov 23 nicklas 157   
7395 06 Nov 23 nicklas 158   pon.clusterOnChange = function()
7395 06 Nov 23 nicklas 159   {
7395 06 Nov 23 nicklas 160     var frm = document.forms['reggie'];
7395 06 Nov 23 nicklas 161     var cluster = frm.clusters[frm.clusters.selectedIndex].cluster;
7395 06 Nov 23 nicklas 162     if (cluster.priorities && cluster.priorities.length > 0)
7395 06 Nov 23 nicklas 163     {
7395 06 Nov 23 nicklas 164       frm.priority.length = 0;
7395 06 Nov 23 nicklas 165       for (var pNo = 0; pNo < cluster.priorities.length; pNo++)
7395 06 Nov 23 nicklas 166       {
7395 06 Nov 23 nicklas 167         var p = cluster.priorities[pNo];
7395 06 Nov 23 nicklas 168         frm.priority[frm.priority.length] = new Option(p.name + ' ('+p.value+')', p.value, p['default'], p['default']);
7395 06 Nov 23 nicklas 169       }
7395 06 Nov 23 nicklas 170       Doc.show('job-priority');
7395 06 Nov 23 nicklas 171     }
7395 06 Nov 23 nicklas 172     else
7395 06 Nov 23 nicklas 173     {
7395 06 Nov 23 nicklas 174       Doc.hide('job-priority');
7395 06 Nov 23 nicklas 175     }
7395 06 Nov 23 nicklas 176     if (cluster.partitions && cluster.partitions.length > 0)
7395 06 Nov 23 nicklas 177     {
7395 06 Nov 23 nicklas 178       frm.partition.length = 0;
7395 06 Nov 23 nicklas 179       for (var pNo = 0; pNo < cluster.partitions.length; pNo++)
7395 06 Nov 23 nicklas 180       {
7395 06 Nov 23 nicklas 181         var p = cluster.partitions[pNo];
7395 06 Nov 23 nicklas 182         var title = p.name;
7395 06 Nov 23 nicklas 183         if (p.description) title += ' ('+p.description+')';
7395 06 Nov 23 nicklas 184         frm.partition[frm.partition.length] = new Option(title, p.value, p['default'], p['default']);
7395 06 Nov 23 nicklas 185       }
7395 06 Nov 23 nicklas 186       Doc.show('job-partition');
7395 06 Nov 23 nicklas 187     }
7395 06 Nov 23 nicklas 188     else
7395 06 Nov 23 nicklas 189     {
7395 06 Nov 23 nicklas 190       Doc.hide('job-partition');
7395 06 Nov 23 nicklas 191     }
7395 06 Nov 23 nicklas 192     pon.updateSubmitOptions();
7395 06 Nov 23 nicklas 193   }
7395 06 Nov 23 nicklas 194
7395 06 Nov 23 nicklas 195   pon.debugOnChange = function()
7395 06 Nov 23 nicklas 196   {
7395 06 Nov 23 nicklas 197     pon.updateSubmitOptions();
7395 06 Nov 23 nicklas 198   }
7395 06 Nov 23 nicklas 199   
7395 06 Nov 23 nicklas 200   pon.updateSubmitOptions = function()
7395 06 Nov 23 nicklas 201   {
7395 06 Nov 23 nicklas 202     var frm = document.forms['reggie'];
7395 06 Nov 23 nicklas 203     var config = frm.clusters[frm.clusters.selectedIndex]?.cluster?.config?.['wgs-variant-call'];
7395 06 Nov 23 nicklas 204     if (config)
7395 06 Nov 23 nicklas 205     {
7395 06 Nov 23 nicklas 206       Doc.element('submitOptions').innerHTML = Reggie.getSubmitOptions(config, frm.debug.checked);
7395 06 Nov 23 nicklas 207       frm.override.disabled = false;
7395 06 Nov 23 nicklas 208     }
7395 06 Nov 23 nicklas 209   }
7395 06 Nov 23 nicklas 210   
7395 06 Nov 23 nicklas 211   pon.overrideOnChange = function()
7395 06 Nov 23 nicklas 212   {
7395 06 Nov 23 nicklas 213     var frm = document.forms['reggie'];
7395 06 Nov 23 nicklas 214     Doc.showHide('submitOptions', !frm.override.checked);
7395 06 Nov 23 nicklas 215     Doc.showHide('submitOptionsOverride', frm.override.checked);
7395 06 Nov 23 nicklas 216     if (frm.submitOptionsOverride.value=='') 
7395 06 Nov 23 nicklas 217     {
7395 06 Nov 23 nicklas 218       frm.submitOptionsOverride.value = Doc.element('submitOptions').innerHTML;
7395 06 Nov 23 nicklas 219     }
7395 06 Nov 23 nicklas 220   }
7395 06 Nov 23 nicklas 221
7395 06 Nov 23 nicklas 222
7395 06 Nov 23 nicklas 223   pon.submit = function()
7395 06 Nov 23 nicklas 224   {
7395 06 Nov 23 nicklas 225     var frm = document.forms['reggie'];
7395 06 Nov 23 nicklas 226       
7395 06 Nov 23 nicklas 227     var submitInfo = {};
7395 06 Nov 23 nicklas 228     submitInfo.itemList = parseInt(frm.itemList.value);
7395 06 Nov 23 nicklas 229     submitInfo.cluster = frm.clusters.value;
7395 06 Nov 23 nicklas 230     if (frm.priority.selectedIndex >= 0)
7395 06 Nov 23 nicklas 231     {
7395 06 Nov 23 nicklas 232       submitInfo.priority = parseInt(frm.priority.value);
7395 06 Nov 23 nicklas 233     }
7395 06 Nov 23 nicklas 234     if (frm.partition.selectedIndex >= 0)
7395 06 Nov 23 nicklas 235     {
7395 06 Nov 23 nicklas 236       submitInfo.partition = frm.partition.value;
7395 06 Nov 23 nicklas 237     }
7395 06 Nov 23 nicklas 238     if (frm.override.checked)
7395 06 Nov 23 nicklas 239     {
7395 06 Nov 23 nicklas 240       submitInfo.submitOptionsOverride = frm.submitOptionsOverride.value;
7395 06 Nov 23 nicklas 241     }
7395 06 Nov 23 nicklas 242     submitInfo.debug = frm.debug.checked;
7395 06 Nov 23 nicklas 243
7395 06 Nov 23 nicklas 244     var url = '../WgsVariantCalling.servlet?ID='+App.getSessionId();
7395 06 Nov 23 nicklas 245     url += '&cmd=BuildPanelOfNormals';
7395 06 Nov 23 nicklas 246     Wizard.showLoadingAnimation('Performing registration...');
7395 06 Nov 23 nicklas 247     Wizard.asyncJsonRequest(url, pon.submissionResults, 'POST', JSON.stringify(submitInfo));
7395 06 Nov 23 nicklas 248   }
7395 06 Nov 23 nicklas 249   
7395 06 Nov 23 nicklas 250   pon.submissionResults = function(response)
7395 06 Nov 23 nicklas 251   {
7395 06 Nov 23 nicklas 252     Wizard.showFinalMessage(response.messages);
7395 06 Nov 23 nicklas 253     Doc.show('gorestart');
7395 06 Nov 23 nicklas 254   }
7395 06 Nov 23 nicklas 255
7395 06 Nov 23 nicklas 256   return pon;
7395 06 Nov 23 nicklas 257 }();
7395 06 Nov 23 nicklas 258
7395 06 Nov 23 nicklas 259 Doc.onLoad(PoN.initPage);
7395 06 Nov 23 nicklas 260