extensions/net.sf.basedb.reggie/trunk/resources/mipsprep/pool_registration.js

Code
Comments
Other
Rev Date Author Line
5428 15 May 19 nicklas 1 var Pool = function()
5428 15 May 19 nicklas 2 {
5428 15 May 19 nicklas 3   var pool = {};
5428 15 May 19 nicklas 4   var debug = 0;
5428 15 May 19 nicklas 5
5428 15 May 19 nicklas 6   var plates;
5428 15 May 19 nicklas 7   var nextPoolName;
5428 15 May 19 nicklas 8   var poolsAreValid = false;
5428 15 May 19 nicklas 9
5428 15 May 19 nicklas 10   // Page initialization
5428 15 May 19 nicklas 11   pool.initPage = function()
5428 15 May 19 nicklas 12   {
5428 15 May 19 nicklas 13     // Step 1
5428 15 May 19 nicklas 14     Events.addEventHandler('bioplate', 'change', pool.bioplateOnChange);
5428 15 May 19 nicklas 15     Events.addEventHandler('step-1', 'wizard-validate', pool.validateStep1);
5428 15 May 19 nicklas 16     
5428 15 May 19 nicklas 17     // Step 2
5428 15 May 19 nicklas 18     Events.addEventHandler('step-2', 'wizard-initialize', pool.initializeStep2);
5428 15 May 19 nicklas 19     Events.addEventHandler('step-2', 'wizard-validate', pool.validateStep2);
5428 15 May 19 nicklas 20     Events.addEventHandler('poolDate', 'blur', Wizard.validateDate);
5428 15 May 19 nicklas 21     
5428 15 May 19 nicklas 22     // Navigation
5428 15 May 19 nicklas 23     Buttons.addClickHandler('gocancel', Wizard.cancelWizard);
5428 15 May 19 nicklas 24     Buttons.addClickHandler('gorestart', Wizard.restartWizard);
5428 15 May 19 nicklas 25     Buttons.addClickHandler('gonext', Wizard.goNextOnClick);
5428 15 May 19 nicklas 26     Buttons.addClickHandler('goregister', Wizard.goRegister);
5428 15 May 19 nicklas 27     
5428 15 May 19 nicklas 28     // Final registration
5428 15 May 19 nicklas 29     Events.addEventHandler('wizard', 'wizard-submit', pool.submit);
5428 15 May 19 nicklas 30     
5428 15 May 19 nicklas 31     var url = '../Mips.servlet?ID='+App.getSessionId();
5428 15 May 19 nicklas 32     url += '&cmd=GetLibraryPlatesForPooling';    
5428 15 May 19 nicklas 33     Wizard.showLoadingAnimation('Loading MIPs plates...');
5428 15 May 19 nicklas 34     Wizard.asyncJsonRequest(url, pool.initializeStep1);
5428 15 May 19 nicklas 35   }
5428 15 May 19 nicklas 36
5428 15 May 19 nicklas 37
5428 15 May 19 nicklas 38   pool.initializeStep1 = function(response)
5428 15 May 19 nicklas 39   {
5428 15 May 19 nicklas 40     var frm = document.forms['reggie'];
5428 15 May 19 nicklas 41     nextPoolName = response.nextPoolName;
5428 15 May 19 nicklas 42     Doc.element('poolName').innerHTML = Strings.encodeTags(nextPoolName);
5428 15 May 19 nicklas 43     
5428 15 May 19 nicklas 44     var bioplates = response.bioplates;
5428 15 May 19 nicklas 45     var plates = frm.bioplate;
5428 15 May 19 nicklas 46     if (bioplates.length > 0)
5428 15 May 19 nicklas 47     {
5430 16 May 19 nicklas 48       var usedBarcodeTemplate = {};
5428 15 May 19 nicklas 49       for (var i=0; i < bioplates.length; i++)
5428 15 May 19 nicklas 50       {
5428 15 May 19 nicklas 51         var plate = bioplates[i];
5430 16 May 19 nicklas 52         var sameTemplate = usedBarcodeTemplate[plate.barcodeTemplate] || false;
5430 16 May 19 nicklas 53         usedBarcodeTemplate[plate.barcodeTemplate] = true;
5430 16 May 19 nicklas 54         var option = new Option(plate.name+' ('+(plate.barcodeTemplate || 'no barcode template')+')', plate.id, !sameTemplate, !sameTemplate);
5428 15 May 19 nicklas 55         option.plate = plate;
5428 15 May 19 nicklas 56         plates.options[plates.length] = option;
5428 15 May 19 nicklas 57       }
5428 15 May 19 nicklas 58       Events.sendChangeEvent('bioplate');
5428 15 May 19 nicklas 59     }
5428 15 May 19 nicklas 60     else
5428 15 May 19 nicklas 61     {
5428 15 May 19 nicklas 62       Wizard.setFatalError('No MIPs plates available for pooling.');
5428 15 May 19 nicklas 63       Doc.hide('gorestart');
5428 15 May 19 nicklas 64       return;
5428 15 May 19 nicklas 65     }
5428 15 May 19 nicklas 66     
5428 15 May 19 nicklas 67     Doc.show('step-1');
5428 15 May 19 nicklas 68     Doc.show('gonext');
5428 15 May 19 nicklas 69   }
5428 15 May 19 nicklas 70   
5428 15 May 19 nicklas 71   
5428 15 May 19 nicklas 72   // Add pools to the pools list based on the bioplate selection
5428 15 May 19 nicklas 73   pool.bioplateOnChange = function()
5428 15 May 19 nicklas 74   {
5428 15 May 19 nicklas 75     var frm = document.forms['reggie'];
5428 15 May 19 nicklas 76     Wizard.setInputStatus('bioplate');
5428 15 May 19 nicklas 77     poolsAreValid = false;
5428 15 May 19 nicklas 78     
5428 15 May 19 nicklas 79     var numSelected = 0;
5428 15 May 19 nicklas 80     var duplicateBarcodes = false;
5430 16 May 19 nicklas 81     var usedBarcodes = {};
5428 15 May 19 nicklas 82     for (var i = 0; i < frm.bioplate.length; i++)
5428 15 May 19 nicklas 83     {
5428 15 May 19 nicklas 84       if (frm.bioplate[i].selected)
5428 15 May 19 nicklas 85       {
5428 15 May 19 nicklas 86         numSelected++;
5430 16 May 19 nicklas 87         var plate = frm.bioplate[i].plate;
5430 16 May 19 nicklas 88         for (var libNo = 0; libNo < plate.libraries.length; libNo++)
5430 16 May 19 nicklas 89         {
5430 16 May 19 nicklas 90           var barcode = plate.libraries[libNo].barcode;
5430 16 May 19 nicklas 91           if (usedBarcodes[barcode])
5430 16 May 19 nicklas 92           {
5430 16 May 19 nicklas 93             usedBarcodes[barcode]++;
5430 16 May 19 nicklas 94             duplicateBarcodes = true;
5430 16 May 19 nicklas 95           }
5430 16 May 19 nicklas 96           else
5430 16 May 19 nicklas 97           {
5430 16 May 19 nicklas 98             usedBarcodes[barcode] = 1;
5430 16 May 19 nicklas 99           }
5430 16 May 19 nicklas 100         }
5428 15 May 19 nicklas 101       }
5428 15 May 19 nicklas 102     }
5428 15 May 19 nicklas 103     
5428 15 May 19 nicklas 104     if (numSelected == 0)
5428 15 May 19 nicklas 105     {
5428 15 May 19 nicklas 106       Wizard.setInputStatus('bioplate', 'invalid', 'Please select at least one plate.');
5428 15 May 19 nicklas 107       return;
5428 15 May 19 nicklas 108     }
5428 15 May 19 nicklas 109     else if (duplicateBarcodes)
5428 15 May 19 nicklas 110     {
5430 16 May 19 nicklas 111       var numDuplicates = 0;
5430 16 May 19 nicklas 112       for (var v in usedBarcodes)
5430 16 May 19 nicklas 113       {
5430 16 May 19 nicklas 114         if (usedBarcodes[v] > 1) numDuplicates += usedBarcodes[v];
5430 16 May 19 nicklas 115       }
5430 16 May 19 nicklas 116       Wizard.setInputStatus('bioplate', 'invalid', 'The selected plates have ' + numDuplicates + ' libraries with duplicate barcode.');
5428 15 May 19 nicklas 117       return;
5428 15 May 19 nicklas 118     }
5428 15 May 19 nicklas 119     
5428 15 May 19 nicklas 120     poolsAreValid = true;
5428 15 May 19 nicklas 121     Wizard.setInputStatus('bioplate', 'valid');
5428 15 May 19 nicklas 122   }
5428 15 May 19 nicklas 123   
5428 15 May 19 nicklas 124   pool.validateStep1 = function(event)
5428 15 May 19 nicklas 125   {
5428 15 May 19 nicklas 126     if (!poolsAreValid) event.preventDefault();
5428 15 May 19 nicklas 127   }
5428 15 May 19 nicklas 128   
5428 15 May 19 nicklas 129   pool.initializeStep2 = function()
5428 15 May 19 nicklas 130   {
5428 15 May 19 nicklas 131     var frm = document.forms['reggie'];
5428 15 May 19 nicklas 132     Wizard.setCurrentStep(2);
5428 15 May 19 nicklas 133     Doc.show('gocancel');
5428 15 May 19 nicklas 134     Doc.show('goregister');
5428 15 May 19 nicklas 135     
5452 28 May 19 nicklas 136     Reggie.loadProtocols('POOLING_PROTOCOL', 'poolProtocol', 'LIBPREP_TARGET', 'MIPs');
5428 15 May 19 nicklas 137
5428 15 May 19 nicklas 138     frm.poolDate.focus();
5428 15 May 19 nicklas 139   }
5428 15 May 19 nicklas 140   
5428 15 May 19 nicklas 141   pool.validateStep2 = function(event)
5428 15 May 19 nicklas 142   {
5428 15 May 19 nicklas 143     if (!Wizard.isValid('poolDate')) 
5428 15 May 19 nicklas 144     {
5428 15 May 19 nicklas 145       event.preventDefault();
5428 15 May 19 nicklas 146     }
5428 15 May 19 nicklas 147   }
5428 15 May 19 nicklas 148   
5428 15 May 19 nicklas 149   pool.submit = function()
5428 15 May 19 nicklas 150   {
5428 15 May 19 nicklas 151     var frm = document.forms['reggie'];
5428 15 May 19 nicklas 152     
5428 15 May 19 nicklas 153     var plates = [];
5428 15 May 19 nicklas 154     for (var i = 0; i < frm.bioplate.length; i++)
5428 15 May 19 nicklas 155     {
5428 15 May 19 nicklas 156       if (frm.bioplate[i].selected)
5428 15 May 19 nicklas 157       {
5428 15 May 19 nicklas 158         plates[plates.length] = frm.bioplate[i].plate.id;
5428 15 May 19 nicklas 159       }
5428 15 May 19 nicklas 160     }
5428 15 May 19 nicklas 161     
5428 15 May 19 nicklas 162     var submitInfo = {};
5428 15 May 19 nicklas 163     submitInfo.plates = plates;
5428 15 May 19 nicklas 164     submitInfo.poolName = nextPoolName;
5428 15 May 19 nicklas 165     submitInfo.poolDate = frm.poolDate.value;
5428 15 May 19 nicklas 166     submitInfo.poolProtocol = parseInt(frm.poolProtocol.value, 10);
5428 15 May 19 nicklas 167     submitInfo.poolOperator = frm.poolOperator.value;
5428 15 May 19 nicklas 168     
5428 15 May 19 nicklas 169     var url = '../Mips.servlet?ID='+App.getSessionId();
5428 15 May 19 nicklas 170     url += '&cmd=RegisterPooledLibraries';
5428 15 May 19 nicklas 171     Wizard.showLoadingAnimation('Performing registration...');
5428 15 May 19 nicklas 172     Wizard.asyncJsonRequest(url, pool.submissionResults, 'POST', JSON.stringify(submitInfo));
5428 15 May 19 nicklas 173   }
5428 15 May 19 nicklas 174
5428 15 May 19 nicklas 175   pool.submissionResults = function(response)
5428 15 May 19 nicklas 176   {
5428 15 May 19 nicklas 177     Wizard.showFinalMessage(response.messages);
5428 15 May 19 nicklas 178     Doc.show('gorestart');
5428 15 May 19 nicklas 179   }
5428 15 May 19 nicklas 180
5428 15 May 19 nicklas 181   return pool;
5428 15 May 19 nicklas 182 }();
5428 15 May 19 nicklas 183
5428 15 May 19 nicklas 184 Doc.onLoad(Pool.initPage);
5428 15 May 19 nicklas 185