extensions/net.sf.basedb.reggie/trunk/resources/analysis/report.js

Code
Comments
Other
Rev Date Author Line
3492 18 Sep 15 nicklas 1 var Report = function()
3492 18 Sep 15 nicklas 2 {
3492 18 Sep 15 nicklas 3   var report = {};
3492 18 Sep 15 nicklas 4   var debug = 0;
4991 01 Oct 18 nicklas 5   var manuallySelected = [];
5666 14 Oct 19 nicklas 6   var selectionIsValid = false;
5666 14 Oct 19 nicklas 7   var rawDataType;
5666 14 Oct 19 nicklas 8   var pipeline;
5666 14 Oct 19 nicklas 9   var annotationTypePipeline;
3492 18 Sep 15 nicklas 10   
3492 18 Sep 15 nicklas 11   // Page initialization
3492 18 Sep 15 nicklas 12   report.initPage = function()
3492 18 Sep 15 nicklas 13   {
3492 18 Sep 15 nicklas 14     
3492 18 Sep 15 nicklas 15     // Step 1
3492 18 Sep 15 nicklas 16     Buttons.addClickHandler('btnSelectRawBioAssays', report.selectRawBioAssays);
3616 23 Nov 15 nicklas 17     Events.addEventHandler('reportSoftware', 'change', report.softwareOnChange);
3492 18 Sep 15 nicklas 18     Events.addEventHandler('rawBioAssays', 'base-selected', report.setRawBioAssayCallback);
4991 01 Oct 18 nicklas 19     Events.addEventHandler('rawBioAssays', 'change', report.rawBioAssaysOnChange);
3492 18 Sep 15 nicklas 20     Events.addEventHandler('step-1', 'wizard-validate', report.validateStep1);
3492 18 Sep 15 nicklas 21
3492 18 Sep 15 nicklas 22     // Navigation
3492 18 Sep 15 nicklas 23     Buttons.addClickHandler('gocancel', Wizard.cancelWizard);
3492 18 Sep 15 nicklas 24     Buttons.addClickHandler('gorestart', Wizard.restartWizard);
3492 18 Sep 15 nicklas 25     Buttons.addClickHandler('gonext', Wizard.goNextOnClick);
3492 18 Sep 15 nicklas 26     Buttons.addClickHandler('goregister', Wizard.goRegister);
3492 18 Sep 15 nicklas 27       
3492 18 Sep 15 nicklas 28     // Final registration
3492 18 Sep 15 nicklas 29     Events.addEventHandler('wizard', 'wizard-submit', report.submit);
3492 18 Sep 15 nicklas 30
3492 18 Sep 15 nicklas 31     Wizard.showLoadingAnimation('Loading bioassays...');
3492 18 Sep 15 nicklas 32     var url = '../Report.servlet?ID='+App.getSessionId();
3492 18 Sep 15 nicklas 33     url += '&cmd=GetRawBioAssayWithoutReport';
3492 18 Sep 15 nicklas 34     url += '&report='+encodeURIComponent(Data.get('page-data', 'report'));
3492 18 Sep 15 nicklas 35     Wizard.asyncJsonRequest(url, report.initializeStep1);
3492 18 Sep 15 nicklas 36   }
3492 18 Sep 15 nicklas 37   
3492 18 Sep 15 nicklas 38   // --- Step 1 -----------------------------------
3492 18 Sep 15 nicklas 39   report.initializeStep1 = function(response)
3492 18 Sep 15 nicklas 40   {
3492 18 Sep 15 nicklas 41     var frm = document.forms['reggie'];
4991 01 Oct 18 nicklas 42     Reggie.loadSoftware('REPORT_SOFTWARE', 'reportSoftware', 'REPORT_TEMPLATE,PARAMETER_SET', Data.get('page-data', 'report'));
3492 18 Sep 15 nicklas 43     
3513 24 Sep 15 nicklas 44     Doc.element('reportName').innerHTML = Strings.encodeTags(response.reportName);
3616 23 Nov 15 nicklas 45     Doc.element('configSection').innerHTML = Strings.encodeTags(response.configSection);
5666 14 Oct 19 nicklas 46     rawDataType = response.rawDataType;
5666 14 Oct 19 nicklas 47     pipeline = response.pipeline;
3513 24 Sep 15 nicklas 48     
3492 18 Sep 15 nicklas 49     var rawBioAssays = response.rawBioAssays;
3492 18 Sep 15 nicklas 50     if (rawBioAssays.length > 0)
3492 18 Sep 15 nicklas 51     {
3492 18 Sep 15 nicklas 52       var firstPlate = null;
3492 18 Sep 15 nicklas 53       for (var rawNo=0; rawNo < rawBioAssays.length; rawNo++)
3492 18 Sep 15 nicklas 54       {
3492 18 Sep 15 nicklas 55         var raw = rawBioAssays[rawNo];
4991 01 Oct 18 nicklas 56         
4991 01 Oct 18 nicklas 57         var libPlate = raw.lib.bioWell ? raw.lib.bioWell.bioPlate : null;
3492 18 Sep 15 nicklas 58         if (firstPlate == null && libPlate != null) firstPlate = libPlate.name;
4991 01 Oct 18 nicklas 59         var option = report.createListOption(rawNo+1, raw, raw.DO_NOT_USE == null && libPlate != null && libPlate.name==firstPlate)
3492 18 Sep 15 nicklas 60         frm.rawBioAssays.options[frm.rawBioAssays.length] = option;
3492 18 Sep 15 nicklas 61       }
5666 14 Oct 19 nicklas 62       Events.sendChangeEvent('rawBioAssays');
3492 18 Sep 15 nicklas 63     }
3492 18 Sep 15 nicklas 64     else
3492 18 Sep 15 nicklas 65     {
3492 18 Sep 15 nicklas 66       Wizard.setInputStatus('rawBioAssays', 'invalid', 'No raw bioassays available for processing');
3492 18 Sep 15 nicklas 67     }
3492 18 Sep 15 nicklas 68
3492 18 Sep 15 nicklas 69     Doc.show('step-1');
3492 18 Sep 15 nicklas 70     Doc.show('goregister');
3492 18 Sep 15 nicklas 71   }
3492 18 Sep 15 nicklas 72   
4991 01 Oct 18 nicklas 73   report.validateStep1 = function(event)
4991 01 Oct 18 nicklas 74   {
5666 14 Oct 19 nicklas 75     if (!selectionIsValid) event.preventDefault();
4991 01 Oct 18 nicklas 76   }
4991 01 Oct 18 nicklas 77
3492 18 Sep 15 nicklas 78   report.selectRawBioAssays = function()
3492 18 Sep 15 nicklas 79   {
3492 18 Sep 15 nicklas 80     var frm = document.forms['reggie'];
3492 18 Sep 15 nicklas 81     if (frm.rawBioAssays.disabled) return;
4991 01 Oct 18 nicklas 82     // Reset list
4991 01 Oct 18 nicklas 83     manuallySelected = [];
3492 18 Sep 15 nicklas 84     var url = '&resetTemporary=1';
5666 14 Oct 19 nicklas 85     if (rawDataType) url += '&tmpfilter:STRING:rawDataType='+encodeURIComponent(rawDataType);
5666 14 Oct 19 nicklas 86     if (pipeline != null)
5666 14 Oct 19 nicklas 87     {
5666 14 Oct 19 nicklas 88       if (annotationTypePipeline == null)
5666 14 Oct 19 nicklas 89       {
5666 14 Oct 19 nicklas 90         annotationTypePipeline = Reggie.getAnnotationTypeInfo('PIPELINE');
5666 14 Oct 19 nicklas 91       }
5666 14 Oct 19 nicklas 92       url += '&tmpfilter:STRING:'+encodeURIComponent('#')+annotationTypePipeline.id+'='+encodeURIComponent(pipeline);
5666 14 Oct 19 nicklas 93     }
3492 18 Sep 15 nicklas 94     Dialogs.selectItem('RAWBIOASSAY', 'rawBioAssays', 1, url);
3492 18 Sep 15 nicklas 95   }
3492 18 Sep 15 nicklas 96
3492 18 Sep 15 nicklas 97   report.setRawBioAssayCallback = function(event)
3492 18 Sep 15 nicklas 98   {
3492 18 Sep 15 nicklas 99     var raw = event.detail;
3492 18 Sep 15 nicklas 100     
4991 01 Oct 18 nicklas 101     var opt = Reggie.getListOption('rawBioAssays', raw.id);
4991 01 Oct 18 nicklas 102     if (opt)
4991 01 Oct 18 nicklas 103     {
4991 01 Oct 18 nicklas 104       opt.selected = true;
4991 01 Oct 18 nicklas 105     }
4991 01 Oct 18 nicklas 106     else
4991 01 Oct 18 nicklas 107     {
4991 01 Oct 18 nicklas 108       manuallySelected[manuallySelected.length] = raw.id;
4991 01 Oct 18 nicklas 109     }
4991 01 Oct 18 nicklas 110     
4991 01 Oct 18 nicklas 111     if (raw.remaining == 0 && manuallySelected.length > 0)
4991 01 Oct 18 nicklas 112     {
4991 01 Oct 18 nicklas 113       var url = '../Report.servlet?ID='+App.getSessionId();
4991 01 Oct 18 nicklas 114       url += '&cmd=GetRawBioAssayWithoutReport';
4991 01 Oct 18 nicklas 115       url += '&items='+manuallySelected.join(',');
4991 01 Oct 18 nicklas 116       url += '&report='+encodeURIComponent(Data.get('page-data', 'report'));
4991 01 Oct 18 nicklas 117       Wizard.showLoadingAnimation('Loading bioassays...');
4991 01 Oct 18 nicklas 118       Wizard.asyncJsonRequest(url, report.manuallySelected);
4991 01 Oct 18 nicklas 119     }
4991 01 Oct 18 nicklas 120     else
4991 01 Oct 18 nicklas 121     {
4991 01 Oct 18 nicklas 122       Events.sendChangeEvent('rawBioAssays');
4991 01 Oct 18 nicklas 123     }
4991 01 Oct 18 nicklas 124   }
4991 01 Oct 18 nicklas 125
4991 01 Oct 18 nicklas 126   report.manuallySelected = function(response)
4991 01 Oct 18 nicklas 127   {
4991 01 Oct 18 nicklas 128     var rawBioAssays = response.rawBioAssays;
4991 01 Oct 18 nicklas 129     var frm = document.forms['reggie'];  
4991 01 Oct 18 nicklas 130
4991 01 Oct 18 nicklas 131     if (rawBioAssays != null && rawBioAssays.length > 0)
4991 01 Oct 18 nicklas 132     {
4991 01 Oct 18 nicklas 133       var offset = frm.rawBioAssays.length+1;
4991 01 Oct 18 nicklas 134       for (var rawNo=0; rawNo < rawBioAssays.length; rawNo++)
4991 01 Oct 18 nicklas 135       {
4991 01 Oct 18 nicklas 136         var raw = rawBioAssays[rawNo];
4991 01 Oct 18 nicklas 137         var option = report.createListOption(rawNo+offset, raw, raw.DO_NOT_USE == null);
4991 01 Oct 18 nicklas 138         frm.rawBioAssays.options[frm.rawBioAssays.length] = option;
4991 01 Oct 18 nicklas 139       }
4991 01 Oct 18 nicklas 140       Events.sendChangeEvent('rawBioAssays');
4991 01 Oct 18 nicklas 141     }
4991 01 Oct 18 nicklas 142   }
4991 01 Oct 18 nicklas 143   
4991 01 Oct 18 nicklas 144   report.createListOption = function(index, rawItem, selected)
4991 01 Oct 18 nicklas 145   {
4991 01 Oct 18 nicklas 146     var lib = rawItem.lib;
4991 01 Oct 18 nicklas 147     var isYellow = lib.specimen && lib.specimen.YellowLabel != null;
4991 01 Oct 18 nicklas 148     var libPlate = lib.bioWell ? lib.bioWell.bioPlate : null;
4991 01 Oct 18 nicklas 149     
4991 01 Oct 18 nicklas 150     var tooltip = null;
4991 01 Oct 18 nicklas 151     var name = (index) + ': ';
4991 01 Oct 18 nicklas 152     if (libPlate) name += libPlate.name + ' - ';
4991 01 Oct 18 nicklas 153     name += rawItem.name;
4991 01 Oct 18 nicklas 154     
4991 01 Oct 18 nicklas 155     if (rawItem.DO_NOT_USE)
4991 01 Oct 18 nicklas 156     {
4991 01 Oct 18 nicklas 157       name += ' [DoNotUse]';
4991 01 Oct 18 nicklas 158       tooltip = 'DoNotUse-'+Strings.encodeTags(rawItem.DO_NOT_USE+': '+rawItem.DO_NOT_USE_COMMENT);
4991 01 Oct 18 nicklas 159     }
4991 01 Oct 18 nicklas 160     else if (rawItem.AutoProcess == 'ReProcess')
4991 01 Oct 18 nicklas 161     {
4991 01 Oct 18 nicklas 162       name += ' [R]';
4991 01 Oct 18 nicklas 163     }
4991 01 Oct 18 nicklas 164     
4991 01 Oct 18 nicklas 165     var option = new Option(name, rawItem.id, false, selected);
4991 01 Oct 18 nicklas 166     if (isYellow) option.className = 'yellow';
4991 01 Oct 18 nicklas 167     if (tooltip) option.title = tooltip;
4991 01 Oct 18 nicklas 168     option.rawBioAssay = rawItem;
4991 01 Oct 18 nicklas 169     return option;
4991 01 Oct 18 nicklas 170   }
4991 01 Oct 18 nicklas 171
4991 01 Oct 18 nicklas 172   report.rawBioAssaysOnChange = function()
4991 01 Oct 18 nicklas 173   {
3492 18 Sep 15 nicklas 174     var frm = document.forms['reggie'];
4991 01 Oct 18 nicklas 175     
5666 14 Oct 19 nicklas 176     selectionIsValid = false;
5666 14 Oct 19 nicklas 177     var numSelected = 0;
4991 01 Oct 18 nicklas 178     var numDoNotUse = 0;
5666 14 Oct 19 nicklas 179     var invalidPipeline = null;
5666 14 Oct 19 nicklas 180
5666 14 Oct 19 nicklas 181     Wizard.setInputStatus('rawBioAssays');
5666 14 Oct 19 nicklas 182     Wizard.hideGoNextConfirmation();
5666 14 Oct 19 nicklas 183
4991 01 Oct 18 nicklas 184     for (var rawNo = 0; rawNo < frm.rawBioAssays.length; rawNo++)
3492 18 Sep 15 nicklas 185     {
4991 01 Oct 18 nicklas 186       if (frm.rawBioAssays[rawNo].selected) 
3492 18 Sep 15 nicklas 187       {
5666 14 Oct 19 nicklas 188         numSelected++;
5666 14 Oct 19 nicklas 189         
4991 01 Oct 18 nicklas 190         var raw = frm.rawBioAssays[rawNo].rawBioAssay;
4991 01 Oct 18 nicklas 191         if (raw.DO_NOT_USE) numDoNotUse++;
5666 14 Oct 19 nicklas 192         
5666 14 Oct 19 nicklas 193         if (pipeline && raw.pipeline && raw.pipeline != pipeline)
5666 14 Oct 19 nicklas 194         {
5666 14 Oct 19 nicklas 195           invalidPipeline = Strings.encodeTags(raw.name+' ('+raw.pipeline)+') is not intended for the '+pipeline+' pipeline.';
5666 14 Oct 19 nicklas 196         }
3492 18 Sep 15 nicklas 197       }
3492 18 Sep 15 nicklas 198     }
5666 14 Oct 19 nicklas 199     if (numSelected == 0)
5666 14 Oct 19 nicklas 200     {
5666 14 Oct 19 nicklas 201       Wizard.setInputStatus('rawBioAssays', 'invalid', 'Select at least one item');
5666 14 Oct 19 nicklas 202       return;
5666 14 Oct 19 nicklas 203     }
5666 14 Oct 19 nicklas 204     if (invalidPipeline) 
5666 14 Oct 19 nicklas 205     {
5666 14 Oct 19 nicklas 206       Wizard.setInputStatus('rawBioAssays', 'invalid', invalidPipeline);
5666 14 Oct 19 nicklas 207       return;
5666 14 Oct 19 nicklas 208     }
5666 14 Oct 19 nicklas 209     selectionIsValid = true;
4991 01 Oct 18 nicklas 210     
4991 01 Oct 18 nicklas 211     if (numDoNotUse > 0)
4991 01 Oct 18 nicklas 212     {
4991 01 Oct 18 nicklas 213       Wizard.setInputStatus('rawBioAssays', 'warning', numDoNotUse + ' selected items marked as DoNotUse');
4991 01 Oct 18 nicklas 214       Wizard.showGoNextConfirmation(true, 'Confirm ' + numDoNotUse + ' items marked as DoNotUse');
4991 01 Oct 18 nicklas 215     }
4991 01 Oct 18 nicklas 216     else
4991 01 Oct 18 nicklas 217     {
5666 14 Oct 19 nicklas 218       Wizard.setInputStatus('rawBioAssays', 'valid');
4991 01 Oct 18 nicklas 219     }
3492 18 Sep 15 nicklas 220   }
3492 18 Sep 15 nicklas 221
3616 23 Nov 15 nicklas 222   report.softwareOnChange = function(event)
3616 23 Nov 15 nicklas 223   {
3616 23 Nov 15 nicklas 224     var target = event.currentTarget;
3616 23 Nov 15 nicklas 225     var item = target[target.selectedIndex].item;
3616 23 Nov 15 nicklas 226     if (!item) item = {};
3616 23 Nov 15 nicklas 227     
3616 23 Nov 15 nicklas 228     Doc.element(target.id+'.parameterSet').innerHTML = Strings.encodeTags(item.ParameterSet || 'default');
3616 23 Nov 15 nicklas 229     Doc.element(target.id+'.description').innerHTML = Strings.encodeTags(item.description);
3616 23 Nov 15 nicklas 230     Wizard.setInputStatus(target.id, 'valid');
3616 23 Nov 15 nicklas 231
3616 23 Nov 15 nicklas 232     if (item.ParameterSet)
3616 23 Nov 15 nicklas 233     {
3616 23 Nov 15 nicklas 234       var url = '../Install.servlet?ID='+App.getSessionId();
3616 23 Nov 15 nicklas 235       url += '&cmd=GetParameterSetInfo';
3616 23 Nov 15 nicklas 236       url += '&parameterSet='+encodeURIComponent(item.ParameterSet);
3616 23 Nov 15 nicklas 237       url += '&targetId='+target.id;
3616 23 Nov 15 nicklas 238       Wizard.asyncJsonRequest(url, report.parameterSetInfoLoaded);
3616 23 Nov 15 nicklas 239     }
3616 23 Nov 15 nicklas 240   }
3616 23 Nov 15 nicklas 241
3616 23 Nov 15 nicklas 242   report.parameterSetInfoLoaded = function(response)
3616 23 Nov 15 nicklas 243   {
3616 23 Nov 15 nicklas 244     if (!response.parameters || response.parameters.length == 0)
3616 23 Nov 15 nicklas 245     {
3616 23 Nov 15 nicklas 246       Wizard.setInputStatus(response.targetId, 'warning', 'Can\'t find \'' + Strings.encodeTags(response.parameterSet) + '\' parameter set in reggie-config.xml');
3616 23 Nov 15 nicklas 247     }
3616 23 Nov 15 nicklas 248   }
3616 23 Nov 15 nicklas 249
3616 23 Nov 15 nicklas 250   
3492 18 Sep 15 nicklas 251   report.submit = function()
3492 18 Sep 15 nicklas 252   {
3492 18 Sep 15 nicklas 253     var frm = document.forms['reggie'];
3492 18 Sep 15 nicklas 254     var submitInfo = {};
3492 18 Sep 15 nicklas 255     
3492 18 Sep 15 nicklas 256     var rawBioAssays = [];
3492 18 Sep 15 nicklas 257     submitInfo.rawBioAssays = rawBioAssays;
3616 23 Nov 15 nicklas 258     submitInfo.software = parseInt(frm.reportSoftware.value);
3492 18 Sep 15 nicklas 259     submitInfo.report = Data.get('page-data', 'report');
3492 18 Sep 15 nicklas 260       
3492 18 Sep 15 nicklas 261     for (var rawNo = 0; rawNo < frm.rawBioAssays.length; rawNo++)
3492 18 Sep 15 nicklas 262     {
3492 18 Sep 15 nicklas 263       if (frm.rawBioAssays[rawNo].selected) 
3492 18 Sep 15 nicklas 264       {
3492 18 Sep 15 nicklas 265         var raw = {};
3492 18 Sep 15 nicklas 266         raw.id = frm.rawBioAssays[rawNo].rawBioAssay.id;
3492 18 Sep 15 nicklas 267         rawBioAssays[rawBioAssays.length] = raw;
3492 18 Sep 15 nicklas 268       }
3492 18 Sep 15 nicklas 269     }
3492 18 Sep 15 nicklas 270
3492 18 Sep 15 nicklas 271     var url = '../Report.servlet?ID='+App.getSessionId();
3492 18 Sep 15 nicklas 272     url += '&cmd=CreateReport';
3492 18 Sep 15 nicklas 273     Wizard.showLoadingAnimation('Performing registration...');
3492 18 Sep 15 nicklas 274     Wizard.asyncJsonRequest(url, report.submissionResults, 'POST', JSON.stringify(submitInfo));
3492 18 Sep 15 nicklas 275   }
3492 18 Sep 15 nicklas 276   
3492 18 Sep 15 nicklas 277   report.submissionResults = function(response)
3492 18 Sep 15 nicklas 278   {
3492 18 Sep 15 nicklas 279     Wizard.showFinalMessage(response.messages);
3492 18 Sep 15 nicklas 280     Doc.show('gorestart');
3492 18 Sep 15 nicklas 281   }
3492 18 Sep 15 nicklas 282   
3492 18 Sep 15 nicklas 283   
3492 18 Sep 15 nicklas 284   return report;
3492 18 Sep 15 nicklas 285 }();
3492 18 Sep 15 nicklas 286
3492 18 Sep 15 nicklas 287 Doc.onLoad(Report.initPage);
3492 18 Sep 15 nicklas 288