extensions/net.sf.basedb.reggie/trunk/resources/batch/import-external-specimen.js

Code
Comments
Other
Rev Date Author Line
6178 23 Mar 21 nicklas 1 var ImportSpecimen = function()
6178 23 Mar 21 nicklas 2 {
6178 23 Mar 21 nicklas 3   var specimen = {};
7235 07 Jun 23 nicklas 4   var debug = 0;
6178 23 Mar 21 nicklas 5   var importItems;
6178 23 Mar 21 nicklas 6
6211 14 Apr 21 nicklas 7   var autoAnalyzeIsValid = false;
6178 23 Mar 21 nicklas 8
6178 23 Mar 21 nicklas 9   specimen.initPage = function()
6178 23 Mar 21 nicklas 10   {
6178 23 Mar 21 nicklas 11     // Step 1
6178 23 Mar 21 nicklas 12     Events.addEventHandler('step-1', 'wizard-validate', specimen.validateStep1);
6899 29 Nov 22 nicklas 13     Events.addEventHandler('validate-all', 'click', specimen.fullyValidateAll);
6901 29 Nov 22 nicklas 14     Events.addEventHandler('lessMessages', 'change', specimen.showLessMessages);
6198 07 Apr 21 nicklas 15     // Step 2
6178 23 Mar 21 nicklas 16     Events.addEventHandler('step-2', 'wizard-initialize', specimen.initializeStep2);
6178 23 Mar 21 nicklas 17     Events.addEventHandler('step-2', 'wizard-validate', specimen.validateStep2);
6178 23 Mar 21 nicklas 18     Events.addEventHandler('clusters', 'change', specimen.clusterOnChange);
6211 14 Apr 21 nicklas 19     Events.addEventHandler('autoAnalyzeYes', 'click', specimen.autoAnalyzeOnChange);
6211 14 Apr 21 nicklas 20     Events.addEventHandler('autoAnalyzeNo', 'click', specimen.autoAnalyzeOnChange);
6178 23 Mar 21 nicklas 21
6178 23 Mar 21 nicklas 22     // Navigation
6178 23 Mar 21 nicklas 23     Buttons.addClickHandler('gocancel', Wizard.cancelWizard);
6178 23 Mar 21 nicklas 24     Buttons.addClickHandler('gonext', Wizard.goNextOnClick);
6178 23 Mar 21 nicklas 25     Buttons.addClickHandler('gorestart', Wizard.restartWizard);
6178 23 Mar 21 nicklas 26     Buttons.addClickHandler('goregister', Wizard.goRegister);
6178 23 Mar 21 nicklas 27
6178 23 Mar 21 nicklas 28     // Final registration
6178 23 Mar 21 nicklas 29     Events.addEventHandler('wizard', 'wizard-submit', specimen.submit);
6898 29 Nov 22 nicklas 30     
6898 29 Nov 22 nicklas 31     Wizard.showLoadingAnimation('Scanning for JSON files...', 'scan-json-progress');
6510 03 Dec 21 nicklas 32     var url = '../ExternalSpecimen.servlet?ID='+App.getSessionId();
6178 23 Mar 21 nicklas 33     url += '&cmd=GetImportInformation';
6178 23 Mar 21 nicklas 34     Wizard.asyncJsonRequest(url, specimen.initializeStep1);
6178 23 Mar 21 nicklas 35   }
6178 23 Mar 21 nicklas 36
6178 23 Mar 21 nicklas 37   // --- Step 1 -----------------------------------
6178 23 Mar 21 nicklas 38   specimen.initializeStep1 = function(response)
6178 23 Mar 21 nicklas 39   {
6178 23 Mar 21 nicklas 40     importItems = response.importItems;
6178 23 Mar 21 nicklas 41     if (importItems.length == 0)
6178 23 Mar 21 nicklas 42     {
6178 23 Mar 21 nicklas 43       Wizard.setFatalError('No items available for importing.');
6178 23 Mar 21 nicklas 44       return;
6178 23 Mar 21 nicklas 45     }
6178 23 Mar 21 nicklas 46     
6897 29 Nov 22 nicklas 47     importItems.sort(specimen.sortByValidatedAndFileDate);
6353 18 Aug 21 nicklas 48     
6899 29 Nov 22 nicklas 49     var numJsonFiles = 0;
6924 02 Dec 22 nicklas 50     var numNoJsonFiles = 0;
6929 02 Dec 22 nicklas 51     var numStrayFastq = 0;
6899 29 Nov 22 nicklas 52     var numValidated = 0;
6895 25 Nov 22 nicklas 53     var numImportable = 0;
6915 01 Dec 22 nicklas 54     var numWithWarnings = 0;
6921 02 Dec 22 nicklas 55     var numNew = 0;
6921 02 Dec 22 nicklas 56     var numConvertToSpecimen = 0;
7230 02 Jun 23 nicklas 57     var numMergeWithExisting = 0;
6899 29 Nov 22 nicklas 58     var numFlowCells = 0;
6897 29 Nov 22 nicklas 59     var lastFlowCellId = null;
6901 29 Nov 22 nicklas 60     var html = '';
6178 23 Mar 21 nicklas 61     for (var itemNo = 0; itemNo < importItems.length; itemNo++)
6178 23 Mar 21 nicklas 62     {
6178 23 Mar 21 nicklas 63       var item = importItems[itemNo];
6897 29 Nov 22 nicklas 64       var rowClass = 'highlight';
6899 29 Nov 22 nicklas 65       if (item.jsonFile)
6897 29 Nov 22 nicklas 66       {
6899 29 Nov 22 nicklas 67         numJsonFiles++;
6899 29 Nov 22 nicklas 68         if (item.jsonFile.fullyValidated) numValidated++;
6899 29 Nov 22 nicklas 69         if (item.jsonFile.flowCellId != lastFlowCellId)
6899 29 Nov 22 nicklas 70         {
6899 29 Nov 22 nicklas 71           numFlowCells++;
6899 29 Nov 22 nicklas 72           if (lastFlowCellId) rowClass += ' newflowcell';
6899 29 Nov 22 nicklas 73           lastFlowCellId = item.jsonFile.flowCellId;
6899 29 Nov 22 nicklas 74         }
6897 29 Nov 22 nicklas 75       }
6929 02 Dec 22 nicklas 76       else if (item.itemType == 'StrayFastq')
6929 02 Dec 22 nicklas 77       {
6929 02 Dec 22 nicklas 78         numStrayFastq++;
6929 02 Dec 22 nicklas 79       }
6924 02 Dec 22 nicklas 80       else
6924 02 Dec 22 nicklas 81       {
6924 02 Dec 22 nicklas 82         numNoJsonFiles++;
6924 02 Dec 22 nicklas 83       }
6897 29 Nov 22 nicklas 84       rowClass += (numFlowCells % 2 == 0 ? ' evenflowcell': ' oddflowcell')
6897 29 Nov 22 nicklas 85       html += '<tr class="'+rowClass+'" id="itemRow.'+itemNo+'">';
6896 28 Nov 22 nicklas 86       html += specimen.createTableRowColumns(item, itemNo);
6896 28 Nov 22 nicklas 87       html += '</tr>';
6915 01 Dec 22 nicklas 88       if (item.canImport) 
6915 01 Dec 22 nicklas 89       {
6915 01 Dec 22 nicklas 90         numImportable++;
6915 01 Dec 22 nicklas 91         if (item.jsonFile && item.jsonFile.warnings) numWithWarnings++;
6921 02 Dec 22 nicklas 92         if (!item.id) numNew++;
6921 02 Dec 22 nicklas 93         if (item.convertToSpecimen) numConvertToSpecimen++;
7230 02 Jun 23 nicklas 94         if (item.mergeWithExisting) numMergeWithExisting++;
6915 01 Dec 22 nicklas 95       }
6896 28 Nov 22 nicklas 96     }
6178 23 Mar 21 nicklas 97
6896 28 Nov 22 nicklas 98     html += '</tbody>';
6896 28 Nov 22 nicklas 99     html += '</table>';
6896 28 Nov 22 nicklas 100     Doc.element('itemTable').innerHTML = html;
6896 28 Nov 22 nicklas 101     
6896 28 Nov 22 nicklas 102     specimen.addEventHandlers(Doc.element('itemTable'));
6896 28 Nov 22 nicklas 103     
6899 29 Nov 22 nicklas 104     Doc.element('num-json-files').innerHTML = numJsonFiles;
6924 02 Dec 22 nicklas 105     Doc.element('num-no-json-files').innerHTML = numNoJsonFiles;
6899 29 Nov 22 nicklas 106     Doc.element('num-validated-files').innerHTML = numValidated;
6899 29 Nov 22 nicklas 107     Doc.element('num-importable').innerHTML = numImportable;
6915 01 Dec 22 nicklas 108     Doc.element('num-importable-with-warnings').innerHTML = numWithWarnings;
6921 02 Dec 22 nicklas 109     Doc.element('num-importable-new').innerHTML = numNew;
6921 02 Dec 22 nicklas 110     Doc.element('num-importable-convert').innerHTML = numConvertToSpecimen;
7230 02 Jun 23 nicklas 111     Doc.element('num-importable-merge').innerHTML = numMergeWithExisting;
6929 02 Dec 22 nicklas 112     Doc.element('num-stray-fastq-files').innerHTML = numStrayFastq;
6899 29 Nov 22 nicklas 113     if (numValidated < numJsonFiles) Doc.show('validate-all', 'inline');
6899 29 Nov 22 nicklas 114     
6896 28 Nov 22 nicklas 115     Doc.show('step-1');
6896 28 Nov 22 nicklas 116     Doc.show('gonext');
6896 28 Nov 22 nicklas 117     if (numImportable == 0) 
6896 28 Nov 22 nicklas 118     {
6896 28 Nov 22 nicklas 119       Wizard.showGoNextConfirmation(false, 'There are no JSON files that can be imported');
6896 28 Nov 22 nicklas 120       Doc.addClass('gonext', 'disabled');
6896 28 Nov 22 nicklas 121     }
6896 28 Nov 22 nicklas 122     else
6896 28 Nov 22 nicklas 123     {
6896 28 Nov 22 nicklas 124       Wizard.hideGoNextConfirmation();
6896 28 Nov 22 nicklas 125       Doc.removeClass('gonext', 'disabled');
6896 28 Nov 22 nicklas 126     }
6896 28 Nov 22 nicklas 127   }
6896 28 Nov 22 nicklas 128   
6896 28 Nov 22 nicklas 129   specimen.createTableRowColumns = function(item, itemNo)
6896 28 Nov 22 nicklas 130   {
6896 28 Nov 22 nicklas 131     var jsonFile = item.jsonFile;
6929 02 Dec 22 nicklas 132     item.isStrayFastq = item.itemType == 'StrayFastq';
6896 28 Nov 22 nicklas 133     item.canImport = item.name && jsonFile && jsonFile.fullyValidated && !jsonFile.errors;
6896 28 Nov 22 nicklas 134
6896 28 Nov 22 nicklas 135     var html = '';
6896 28 Nov 22 nicklas 136     var icon = null;
6896 28 Nov 22 nicklas 137     if (jsonFile)
6896 28 Nov 22 nicklas 138     {
6896 28 Nov 22 nicklas 139       icon = 'ok.png';
6896 28 Nov 22 nicklas 140       if (jsonFile.warnings) icon = 'warning.png';
6896 28 Nov 22 nicklas 141       if (!jsonFile.fullyValidated) icon = 'info.png';
6896 28 Nov 22 nicklas 142       if (jsonFile.errors) icon = 'error.png';
6896 28 Nov 22 nicklas 143     }
6896 28 Nov 22 nicklas 144
6896 28 Nov 22 nicklas 145     html += '<th>'+(itemNo+1)+'</th>';
6896 28 Nov 22 nicklas 146     html += '<td class="dottedleft">';
6929 02 Dec 22 nicklas 147     if (item.isStrayFastq)
6896 28 Nov 22 nicklas 148     {
6929 02 Dec 22 nicklas 149       html += item.itemType;
6929 02 Dec 22 nicklas 150     }
6929 02 Dec 22 nicklas 151     else if (item.name)
6929 02 Dec 22 nicklas 152     {
6896 28 Nov 22 nicklas 153       html += Strings.encodeTags(item.name);
6896 28 Nov 22 nicklas 154       if (!item.id) html += ' <img src="../images/new.png" title="This item will be created by the importer">';
6896 28 Nov 22 nicklas 155       if (item.itemType) html += ' <span class="itemsubtype">('+Strings.encodeTags(item.itemType)+')</span>';
6896 28 Nov 22 nicklas 156     }
6896 28 Nov 22 nicklas 157     else
6896 28 Nov 22 nicklas 158     {
6896 28 Nov 22 nicklas 159       html += '-';
6896 28 Nov 22 nicklas 160     }
6896 28 Nov 22 nicklas 161     html += '<td class="dottedleft">';
6896 28 Nov 22 nicklas 162     if (item.currentCase)
6896 28 Nov 22 nicklas 163     {
6896 28 Nov 22 nicklas 164       html += Strings.encodeTags(item.currentCase.name);
6896 28 Nov 22 nicklas 165       html += '<img src="../images/case_summary.png" class="link case-summary" data-name="'+Strings.encodeTags(item.currentCase.name)+'" title="Show case summary (popup window)">';
6896 28 Nov 22 nicklas 166     }
6896 28 Nov 22 nicklas 167     else
6896 28 Nov 22 nicklas 168     {
6896 28 Nov 22 nicklas 169       html += '-';
6896 28 Nov 22 nicklas 170     }
6896 28 Nov 22 nicklas 171     html += '</td>';
6896 28 Nov 22 nicklas 172     if (jsonFile)
6896 28 Nov 22 nicklas 173     {
6896 28 Nov 22 nicklas 174       html += '<td class="dottedleft" style="white-space: nowrap;">';
6896 28 Nov 22 nicklas 175       html += Strings.encodeTags(jsonFile.name);
6896 28 Nov 22 nicklas 176       html += ' <span class="link download-file" data-file-no="'+itemNo+'" title="Download and view this file"><img src="../images/download.png"></span>';
6897 29 Nov 22 nicklas 177       html += '<br><span class="file-data">('+Numbers.formatBytes(jsonFile.size)+'; '+Reggie.reformatDate(jsonFile.lastModified)+')</span>';
6896 28 Nov 22 nicklas 178       html += '</td>';
6896 28 Nov 22 nicklas 179       html += '<td style="white-space: nowrap;">';
6911 30 Nov 22 nicklas 180       html += Strings.encodeTags(jsonFile.flowCellId);
6911 30 Nov 22 nicklas 181       html += '<br><span class="file-data">('+Strings.encodeTags(jsonFile.sequencingStartDate)+')</span>';
6896 28 Nov 22 nicklas 182       html += '</td>';
6896 28 Nov 22 nicklas 183       html += '<td>';
6896 28 Nov 22 nicklas 184       html += Reggie.formatCount(jsonFile.PF_READS, '-');
6896 28 Nov 22 nicklas 185       html += '</td>';
6896 28 Nov 22 nicklas 186       html += '<td class="fastq" style="white-space: nowrap;">';
6896 28 Nov 22 nicklas 187       if (jsonFile && jsonFile.fastq && jsonFile.fastq.length)
6510 03 Dec 21 nicklas 188       {
6896 28 Nov 22 nicklas 189         for (var fqNo = 0; fqNo < jsonFile.fastq.length; fqNo++)
6896 28 Nov 22 nicklas 190         {
6896 28 Nov 22 nicklas 191           var fq = jsonFile.fastq[fqNo];
6896 28 Nov 22 nicklas 192           html += Strings.encodeTags(fq.name);
6896 28 Nov 22 nicklas 193           html += ' <span class="file-data">('
6896 28 Nov 22 nicklas 194           if (fq.size > 0) 
6896 28 Nov 22 nicklas 195           {
6897 29 Nov 22 nicklas 196             html += Numbers.formatBytes(fq.size);
6896 28 Nov 22 nicklas 197           }
6896 28 Nov 22 nicklas 198           else
6896 28 Nov 22 nicklas 199           {
6896 28 Nov 22 nicklas 200             html += 'missing';
6896 28 Nov 22 nicklas 201           }
6896 28 Nov 22 nicklas 202           html += ')</span><br>';
6896 28 Nov 22 nicklas 203         }
6510 03 Dec 21 nicklas 204       }
6896 28 Nov 22 nicklas 205       html += '</td>';
6896 28 Nov 22 nicklas 206     }
6929 02 Dec 22 nicklas 207     else if (item.isStrayFastq)
6929 02 Dec 22 nicklas 208     {
6929 02 Dec 22 nicklas 209       html += '<td class="dottedleft" colspan="4" style="text-align: left;">';
6929 02 Dec 22 nicklas 210       html += Strings.encodeTags(item.name);
6929 02 Dec 22 nicklas 211       html += ' <span class="file-data">('
6929 02 Dec 22 nicklas 212       html += Numbers.formatBytes(item.size);
6929 02 Dec 22 nicklas 213       html += '; '+ Reggie.reformatDate(item.lastModified);
6929 02 Dec 22 nicklas 214       html += ')</span>';
6929 02 Dec 22 nicklas 215       html += '</td>';
6929 02 Dec 22 nicklas 216     }
6896 28 Nov 22 nicklas 217     else
6896 28 Nov 22 nicklas 218     {
6896 28 Nov 22 nicklas 219       html += '<td class="dottedleft" colspan="4" style="text-align: left;">';
6896 28 Nov 22 nicklas 220       if (item.externalSpecimenExists)
6510 03 Dec 21 nicklas 221       {
6896 28 Nov 22 nicklas 222         html += '<b>Specimen exists:</b> '+Strings.encodeTags(item.externalSpecimenExists);
6896 28 Nov 22 nicklas 223         if (item.externalOperator) html += '/'+Strings.encodeTags(item.externalOperator);
6510 03 Dec 21 nicklas 224       }
6896 28 Nov 22 nicklas 225       if (item.samplingDate)
6510 03 Dec 21 nicklas 226       {
6896 28 Nov 22 nicklas 227         html += '; <b>Sampling date:</b> '+Reggie.reformatDate(item.samplingDate);
6510 03 Dec 21 nicklas 228       }
6896 28 Nov 22 nicklas 229       if (item.registered)
6510 03 Dec 21 nicklas 230       {
6896 28 Nov 22 nicklas 231         html += '; <b>Registration date:</b> '+Reggie.reformatDate(item.registered);
6510 03 Dec 21 nicklas 232       }
6924 02 Dec 22 nicklas 233       if (item.otherPathNote)
6924 02 Dec 22 nicklas 234       {
6924 02 Dec 22 nicklas 235         html += '; <b>Other path note:</b> '+Strings.encodeTags(item.otherPathNote);
6924 02 Dec 22 nicklas 236       }
6510 03 Dec 21 nicklas 237       html += '</td>';
6896 28 Nov 22 nicklas 238     }
6896 28 Nov 22 nicklas 239     html += '<td class="icon">';
6896 28 Nov 22 nicklas 240     if (icon) html+= '<img src="../images/'+icon+'">';
6896 28 Nov 22 nicklas 241     html += '</td>';
6896 28 Nov 22 nicklas 242     html += '<td class="valid dottedleft">';
6896 28 Nov 22 nicklas 243     if (item.canImport)
6896 28 Nov 22 nicklas 244     {
6901 29 Nov 22 nicklas 245       html += '<div class="action">';
6896 28 Nov 22 nicklas 246       html += '<label><input type="checkbox" id="import.'+itemNo+'" class="import-action" data-item-no="'+itemNo+'">';
7229 02 Jun 23 nicklas 247       var importOrMerge = item.mergeWithExisting ? 'Merge with' : 'Import to';
7229 02 Jun 23 nicklas 248       importOrMerge += (item.id ? ' existing' : ' new');
6896 28 Nov 22 nicklas 249       if (item.endPoint.id == 'SPECIMEN' && item.itemType == 'Specimen')
6208 12 Apr 21 nicklas 250       {
7229 02 Jun 23 nicklas 251         html += importOrMerge+' <b>Specimen</b> only</label>';
6198 07 Apr 21 nicklas 252       }
6582 11 Feb 22 nicklas 253       else
6582 11 Feb 22 nicklas 254       {
7229 02 Jun 23 nicklas 255         html += importOrMerge+' <b>'+Strings.encodeTags(item.itemType) + '</b> â€ºâ€º <b>'+item.endPoint.name+'</b></label>';
6582 11 Feb 22 nicklas 256       }
6896 28 Nov 22 nicklas 257       if (item.endPoint.id != 'DEMUX' && item.endPoint.ordinal >= item.endPointRNA.ordinal)
6212 14 Apr 21 nicklas 258       {
6896 28 Nov 22 nicklas 259         html += '<br><label><input type="checkbox" id="flagrna.'+itemNo+'" disabled>Flag RNA</label>';
6896 28 Nov 22 nicklas 260       }
6901 29 Nov 22 nicklas 261       html += '</div>';
6896 28 Nov 22 nicklas 262     }
6896 28 Nov 22 nicklas 263     var startNo = 1;
6896 28 Nov 22 nicklas 264     if (jsonFile)
6896 28 Nov 22 nicklas 265     {
6896 28 Nov 22 nicklas 266       if (jsonFile.errors)
6896 28 Nov 22 nicklas 267       {
6896 28 Nov 22 nicklas 268         html += '<div class="messagecontainer error"><ol start="'+startNo+'">';
6896 28 Nov 22 nicklas 269         for (var errNo = 0; errNo < jsonFile.errors.length; errNo++)
6738 10 May 22 nicklas 270         {
6896 28 Nov 22 nicklas 271           var msg = jsonFile.errors[errNo];
6896 28 Nov 22 nicklas 272           if (msg.indexOf('[HTML]')==0)
6896 28 Nov 22 nicklas 273           {
6896 28 Nov 22 nicklas 274             html += '<li>'+msg.replace('[HTML]', '');
6896 28 Nov 22 nicklas 275           }
6896 28 Nov 22 nicklas 276           else
6896 28 Nov 22 nicklas 277           {
6896 28 Nov 22 nicklas 278             html += '<li>'+Strings.encodeTags(msg);
6896 28 Nov 22 nicklas 279           }
6738 10 May 22 nicklas 280         }
6896 28 Nov 22 nicklas 281         html += '</ol></div>';
6896 28 Nov 22 nicklas 282         startNo += jsonFile.errors.length;
6212 14 Apr 21 nicklas 283       }
6896 28 Nov 22 nicklas 284       else if (!jsonFile.fullyValidated)
6734 09 May 22 nicklas 285       {
6901 29 Nov 22 nicklas 286         html += '<div class="action">';
6896 28 Nov 22 nicklas 287         html += 'This JSON file has not been fully validated.';
6896 28 Nov 22 nicklas 288         html += '<span class="fully-validate link" data-item-no="'+itemNo+'">Validate it!</span>';
6901 29 Nov 22 nicklas 289         html += '</div>';
6734 09 May 22 nicklas 290       }
6924 02 Dec 22 nicklas 291       if (jsonFile.fullyValidated && (item.otherPathNote || item.liasonComment))
6924 02 Dec 22 nicklas 292       {
6924 02 Dec 22 nicklas 293         html += '<div class="notes">';
6924 02 Dec 22 nicklas 294         html += Strings.encodeTags(item.otherPathNote);
6924 02 Dec 22 nicklas 295         html += (item.otherPathNote && item.liasonComment ? '; ' : '')+Strings.encodeTags(item.liasonComment);
6924 02 Dec 22 nicklas 296         html += '</div>';
6924 02 Dec 22 nicklas 297       }
6896 28 Nov 22 nicklas 298       if (jsonFile.warnings && jsonFile.fullyValidated)
6198 07 Apr 21 nicklas 299       {
6905 30 Nov 22 nicklas 300         var allVisible = jsonFile.warnings.length < 6 ?' allvisible':'';
6905 30 Nov 22 nicklas 301         html += '<div class="messagecontainer note minimal '+allVisible+'" id="warnings.'+itemNo+'">';
6901 29 Nov 22 nicklas 302         html += '<ol start="'+startNo+'">';
6896 28 Nov 22 nicklas 303         for (var warnNo = 0; warnNo < jsonFile.warnings.length; warnNo++)
6205 12 Apr 21 nicklas 304         {
6896 28 Nov 22 nicklas 305           var msg = jsonFile.warnings[warnNo];
6896 28 Nov 22 nicklas 306           if (msg.indexOf('[HTML]')==0)
6573 07 Feb 22 nicklas 307           {
6896 28 Nov 22 nicklas 308             html += '<li>'+msg.replace('[HTML]', '');
6573 07 Feb 22 nicklas 309           }
6896 28 Nov 22 nicklas 310           else
6896 28 Nov 22 nicklas 311           {
6896 28 Nov 22 nicklas 312             html += '<li>'+Strings.encodeTags(msg);
6896 28 Nov 22 nicklas 313           }
6205 12 Apr 21 nicklas 314         }
6901 29 Nov 22 nicklas 315         html += '</ol>';
6901 29 Nov 22 nicklas 316         html += '</div>';
6905 30 Nov 22 nicklas 317         html += '<div class="morewarnings'+allVisible+'">'+jsonFile.warnings.length+' warnings - <span class="showmore-warnings link" data-item-no="'+itemNo+'">Show more...</span></div>';
6901 29 Nov 22 nicklas 318         startNo += jsonFile.warnings.length;
6198 07 Apr 21 nicklas 319       }
6178 23 Mar 21 nicklas 320     }
6896 28 Nov 22 nicklas 321     html += '</td>';
6896 28 Nov 22 nicklas 322     return html;
6896 28 Nov 22 nicklas 323   }
6896 28 Nov 22 nicklas 324   
6896 28 Nov 22 nicklas 325   specimen.addEventHandlers = function(topElement)
6896 28 Nov 22 nicklas 326   {
6896 28 Nov 22 nicklas 327     Forms.linkCheckboxesWithLabels(topElement);
6896 28 Nov 22 nicklas 328     var checkboxes = topElement.getElementsByClassName('import-action');
6736 10 May 22 nicklas 329     for (var chkNo = 0; chkNo < checkboxes.length; chkNo++)
6736 10 May 22 nicklas 330     {
6736 10 May 22 nicklas 331       Events.addEventHandler(checkboxes[chkNo], 'click', specimen.toggleImport);
6736 10 May 22 nicklas 332     }
6178 23 Mar 21 nicklas 333     
6896 28 Nov 22 nicklas 334     var downloadable = topElement.getElementsByClassName('download-file');
6208 12 Apr 21 nicklas 335     for (var fileNo = 0; fileNo < downloadable.length; fileNo++)
6208 12 Apr 21 nicklas 336     {
6208 12 Apr 21 nicklas 337       Events.addEventHandler(downloadable[fileNo], 'click', specimen.downloadJsonFile);
6208 12 Apr 21 nicklas 338     }
6208 12 Apr 21 nicklas 339
6896 28 Nov 22 nicklas 340     var showMoreWarnings = topElement.getElementsByClassName('showmore-warnings');
6510 03 Dec 21 nicklas 341     for (var itemNo = 0; itemNo < showMoreWarnings.length; itemNo++)
6510 03 Dec 21 nicklas 342     {
6510 03 Dec 21 nicklas 343       Events.addEventHandler(showMoreWarnings[itemNo], 'click', specimen.toggleWarnings);
6510 03 Dec 21 nicklas 344     }
6895 25 Nov 22 nicklas 345     
6896 28 Nov 22 nicklas 346     var validateFile = topElement.getElementsByClassName('fully-validate');
6895 25 Nov 22 nicklas 347     for (var itemNo = 0; itemNo < validateFile.length; itemNo++)
6895 25 Nov 22 nicklas 348     {
6895 25 Nov 22 nicklas 349       Events.addEventHandler(validateFile[itemNo], 'click', specimen.fullyValidate);
6895 25 Nov 22 nicklas 350     }
6510 03 Dec 21 nicklas 351   
6896 28 Nov 22 nicklas 352     var cs = topElement.getElementsByClassName('case-summary');
6510 03 Dec 21 nicklas 353     for (var i = 0; i < cs.length; i++)
6510 03 Dec 21 nicklas 354     {
6510 03 Dec 21 nicklas 355       Events.addEventHandler(cs[i], 'click', Reggie.openCaseSummaryPopupOnEvent);
6510 03 Dec 21 nicklas 356     }
6178 23 Mar 21 nicklas 357   }
6510 03 Dec 21 nicklas 358   
6899 29 Nov 22 nicklas 359   specimen.fullyValidateAll = function(event)
6899 29 Nov 22 nicklas 360   {
6899 29 Nov 22 nicklas 361     Doc.element('itemTable').innerHTML = '';
6899 29 Nov 22 nicklas 362     Doc.hide('validate-all');
6899 29 Nov 22 nicklas 363     Doc.hide('step-1');
6899 29 Nov 22 nicklas 364     Doc.hide('gonext');
6899 29 Nov 22 nicklas 365     
6899 29 Nov 22 nicklas 366     Wizard.showLoadingAnimation('Validating all...', 'scan-json-progress');
6899 29 Nov 22 nicklas 367     var url = '../ExternalSpecimen.servlet?ID='+App.getSessionId();
6899 29 Nov 22 nicklas 368     url += '&cmd=GetImportInformation';
6899 29 Nov 22 nicklas 369     url += '&validateAll=1';
6899 29 Nov 22 nicklas 370     Wizard.asyncJsonRequest(url, specimen.initializeStep1);
6899 29 Nov 22 nicklas 371   }
6899 29 Nov 22 nicklas 372   
6895 25 Nov 22 nicklas 373   specimen.fullyValidate = function(event)
6895 25 Nov 22 nicklas 374   {
6896 28 Nov 22 nicklas 375     var itemNo = Data.get(event.currentTarget, 'item-no');
6896 28 Nov 22 nicklas 376     var file = importItems[itemNo].jsonFile;
6896 28 Nov 22 nicklas 377     
6896 28 Nov 22 nicklas 378     Wizard.showLoadingAnimation('Validating '+file.name+'...');
6896 28 Nov 22 nicklas 379     var url = '../ExternalSpecimen.servlet?ID='+App.getSessionId();
6896 28 Nov 22 nicklas 380     url += '&cmd=GetImportInformation';
6896 28 Nov 22 nicklas 381     url += '&file='+encodeURIComponent(file.name);
6896 28 Nov 22 nicklas 382     url += '&itemNo='+itemNo;
6896 28 Nov 22 nicklas 383     Wizard.asyncJsonRequest(url, specimen.singleFileValidated);
6895 25 Nov 22 nicklas 384   }
6895 25 Nov 22 nicklas 385   
6896 28 Nov 22 nicklas 386   specimen.singleFileValidated = function(response)
6896 28 Nov 22 nicklas 387   {
6896 28 Nov 22 nicklas 388     var items = response.importItems;
6896 28 Nov 22 nicklas 389     if (items.length != 1)
6896 28 Nov 22 nicklas 390     {
6896 28 Nov 22 nicklas 391       Wizard.setFatalError('Expected information about a single JSON file: '+items.length);
6896 28 Nov 22 nicklas 392       return;
6896 28 Nov 22 nicklas 393     }
6896 28 Nov 22 nicklas 394
6896 28 Nov 22 nicklas 395     var item = items[0];
6896 28 Nov 22 nicklas 396     var itemNo = item.itemNo;
6896 28 Nov 22 nicklas 397     importItems[itemNo] = item;
6896 28 Nov 22 nicklas 398     
6896 28 Nov 22 nicklas 399     html = specimen.createTableRowColumns(item, itemNo);
6896 28 Nov 22 nicklas 400     var rowElement = Doc.element('itemRow.'+itemNo);
6896 28 Nov 22 nicklas 401     rowElement.innerHTML = html;
6896 28 Nov 22 nicklas 402     specimen.addEventHandlers(rowElement);
6896 28 Nov 22 nicklas 403
6896 28 Nov 22 nicklas 404     if (item.canImport)
6896 28 Nov 22 nicklas 405     {
6896 28 Nov 22 nicklas 406       Wizard.hideGoNextConfirmation();
6896 28 Nov 22 nicklas 407       Doc.removeClass('gonext', 'disabled');
6896 28 Nov 22 nicklas 408     }
6896 28 Nov 22 nicklas 409
6896 28 Nov 22 nicklas 410   }
6896 28 Nov 22 nicklas 411   
6896 28 Nov 22 nicklas 412   
6510 03 Dec 21 nicklas 413   specimen.toggleWarnings = function(event)
6510 03 Dec 21 nicklas 414   {
6510 03 Dec 21 nicklas 415     var itemNo = Data.get(event.currentTarget, 'item-no');
6510 03 Dec 21 nicklas 416     var warningsDiv = Doc.element('warnings.'+itemNo);
6510 03 Dec 21 nicklas 417     Doc.addOrRemoveClass(warningsDiv, 'minimal');
6510 03 Dec 21 nicklas 418     event.currentTarget.innerHTML = warningsDiv.classList.contains('minimal') ? 'Show more...' : 'Show less...';
6510 03 Dec 21 nicklas 419   }
6178 23 Mar 21 nicklas 420
6736 10 May 22 nicklas 421   specimen.toggleImport = function(event)
6736 10 May 22 nicklas 422   {
6736 10 May 22 nicklas 423     var itemNo = Data.get(event.currentTarget, 'item-no');
6736 10 May 22 nicklas 424     var flag = Doc.element('flagrna.'+itemNo);
6736 10 May 22 nicklas 425     if (flag) flag.disabled = !event.currentTarget.checked;
6736 10 May 22 nicklas 426   }
6901 29 Nov 22 nicklas 427   
6901 29 Nov 22 nicklas 428   specimen.showLessMessages = function(event)
6901 29 Nov 22 nicklas 429   {
6901 29 Nov 22 nicklas 430     Doc.addOrRemoveClass('importItemsTable', 'less-messages', event.currentTarget.checked);
6901 29 Nov 22 nicklas 431   }
6736 10 May 22 nicklas 432
6208 12 Apr 21 nicklas 433   specimen.downloadJsonFile = function(event)
6208 12 Apr 21 nicklas 434   {
6208 12 Apr 21 nicklas 435     var itemNo = Data.get(event.currentTarget, 'file-no');
6208 12 Apr 21 nicklas 436     var file = importItems[itemNo].jsonFile;
6208 12 Apr 21 nicklas 437
6510 03 Dec 21 nicklas 438     var url = '../ExternalSpecimen.servlet?ID='+App.getSessionId();
6208 12 Apr 21 nicklas 439     url += '&cmd=DownloadJsonFile';
6208 12 Apr 21 nicklas 440     url += '&file='+encodeURIComponent(file.name);
6208 12 Apr 21 nicklas 441     
6208 12 Apr 21 nicklas 442     Dialogs.openPopup(url, file.name, 800, 800);
6208 12 Apr 21 nicklas 443   }
6208 12 Apr 21 nicklas 444
6178 23 Mar 21 nicklas 445   specimen.validateStep1 = function(event)
6178 23 Mar 21 nicklas 446   {
6211 14 Apr 21 nicklas 447     Wizard.hideGoNextConfirmation();
6211 14 Apr 21 nicklas 448     var frm = document.forms['reggie'];
6211 14 Apr 21 nicklas 449     for (var itemNo = 0; itemNo < importItems.length; itemNo++)
6211 14 Apr 21 nicklas 450     {
6212 14 Apr 21 nicklas 451       var chk = frm['import.'+itemNo];
6212 14 Apr 21 nicklas 452       if (chk && chk.checked) return;
6211 14 Apr 21 nicklas 453     }
6211 14 Apr 21 nicklas 454     Wizard.showGoNextConfirmation(false, 'Please select at least one item!');
6211 14 Apr 21 nicklas 455     event.preventDefault();
6178 23 Mar 21 nicklas 456   }
6178 23 Mar 21 nicklas 457
6178 23 Mar 21 nicklas 458   // --- Step 2 -----------------------------------
6178 23 Mar 21 nicklas 459   specimen.initializeStep2 = function()
6178 23 Mar 21 nicklas 460   {
6178 23 Mar 21 nicklas 461     Wizard.setCurrentStep(2);
6178 23 Mar 21 nicklas 462     
6178 23 Mar 21 nicklas 463     // Check debug by default if debug is set or not on a secure server (=production server)
6178 23 Mar 21 nicklas 464     var frm = document.forms['reggie'];
6178 23 Mar 21 nicklas 465     frm.debug.checked = debug || location.protocol != 'https:';
6178 23 Mar 21 nicklas 466
6213 15 Apr 21 nicklas 467     Reggie.loadProtocols('MERGE_PROTOCOL', 'mergeProtocol', 'PIPELINE,MERGE_TYPE', 'RNAseq,Import');
6213 15 Apr 21 nicklas 468     Reggie.loadSoftware('MERGE_SOFTWARE', 'mergeSoftware', 'PIPELINE,MERGE_TYPE,PARAMETER_SET', 'RNAseq,Import');
6211 14 Apr 21 nicklas 469
6735 09 May 22 nicklas 470     // Load clusters
6693 22 Apr 22 nicklas 471     var url = '../OpenGrid.servlet?ID='+App.getSessionId() + '&cmd=GetHostInfo&config=demux/execute-import';
6178 23 Mar 21 nicklas 472     Doc.addClass('clusters', 'list-loading');
6178 23 Mar 21 nicklas 473     frm.clusters[0] = new Option('loading...');
6178 23 Mar 21 nicklas 474     Wizard.asyncJsonRequest(url, specimen.clustersLoaded);
6178 23 Mar 21 nicklas 475
6178 23 Mar 21 nicklas 476     Doc.show('goregister');
6178 23 Mar 21 nicklas 477     Doc.show('gocancel');
6178 23 Mar 21 nicklas 478   }
6178 23 Mar 21 nicklas 479   
6178 23 Mar 21 nicklas 480   specimen.validateStep2 = function(event)
6178 23 Mar 21 nicklas 481   {
6211 14 Apr 21 nicklas 482     if (!autoAnalyzeIsValid) event.preventDefault();
6178 23 Mar 21 nicklas 483   }
6178 23 Mar 21 nicklas 484   
6178 23 Mar 21 nicklas 485   specimen.clustersLoaded = function(response)
6178 23 Mar 21 nicklas 486   {
6178 23 Mar 21 nicklas 487     Doc.removeClass('clusters', 'list-loading');
6178 23 Mar 21 nicklas 488     var frm = document.forms['reggie'];
6211 14 Apr 21 nicklas 489     frm.clusters.length = 0;
6178 23 Mar 21 nicklas 490     var clusters = response.hosts;
6736 10 May 22 nicklas 491     Doc.element('autoAnalyzeNo').disabled = false;
6211 14 Apr 21 nicklas 492     if (clusters.length == 0)
6211 14 Apr 21 nicklas 493     {
6211 14 Apr 21 nicklas 494       Doc.element('autoAnalyzeNo').checked = true;
6211 14 Apr 21 nicklas 495       autoAnalyzeIsValid = true;
6736 10 May 22 nicklas 496       Wizard.setInputStatus('autoAnalyze', 'valid');
6736 10 May 22 nicklas 497       Wizard.setInputStatus('clusters', 'warning', 'No available clusters');
6211 14 Apr 21 nicklas 498       return;
6211 14 Apr 21 nicklas 499     }
6211 14 Apr 21 nicklas 500     
6211 14 Apr 21 nicklas 501     Doc.element('autoAnalyzeYes').disabled = false;
6178 23 Mar 21 nicklas 502     for (var i = 0; i < clusters.length; i++)
6178 23 Mar 21 nicklas 503     {
6178 23 Mar 21 nicklas 504       var cl = clusters[i];
6178 23 Mar 21 nicklas 505       var option = new Option(cl.connection.name, cl.id);
6178 23 Mar 21 nicklas 506       option.cluster = cl;
6178 23 Mar 21 nicklas 507       frm.clusters[frm.clusters.length] = option;
6178 23 Mar 21 nicklas 508     }
6211 14 Apr 21 nicklas 509     specimen.autoAnalyzeOnChange();
6211 14 Apr 21 nicklas 510   }
6211 14 Apr 21 nicklas 511   
6211 14 Apr 21 nicklas 512   specimen.autoAnalyzeOnChange = function()
6211 14 Apr 21 nicklas 513   {
6211 14 Apr 21 nicklas 514     Wizard.setInputStatus('autoAnalyze');
6211 14 Apr 21 nicklas 515     autoAnalyzeIsValid = false;
6211 14 Apr 21 nicklas 516     
6211 14 Apr 21 nicklas 517     var frm = document.forms['reggie'];
6211 14 Apr 21 nicklas 518     var yesChecked = Doc.element('autoAnalyzeYes').checked;
6211 14 Apr 21 nicklas 519     var noChecked = Doc.element('autoAnalyzeNo').checked;
6211 14 Apr 21 nicklas 520     
6211 14 Apr 21 nicklas 521     frm.mergeProtocol.disabled = !yesChecked;
6211 14 Apr 21 nicklas 522     frm.mergeSoftware.disabled = !yesChecked;
6211 14 Apr 21 nicklas 523     frm.clusters.disabled = !yesChecked;
6211 14 Apr 21 nicklas 524     frm.priority.disabled = !yesChecked;
6980 17 Jan 23 nicklas 525     frm.partition.disabled = !yesChecked;
6211 14 Apr 21 nicklas 526     frm.autoConfirm.disabled = !yesChecked;
6211 14 Apr 21 nicklas 527     frm.debug.disabled = !yesChecked;
6211 14 Apr 21 nicklas 528
6211 14 Apr 21 nicklas 529     if (!yesChecked && !noChecked)
6178 23 Mar 21 nicklas 530     {
6211 14 Apr 21 nicklas 531       Wizard.setInputStatus('autoAnalyze', 'invalid', 'Must select Yes or No');
6211 14 Apr 21 nicklas 532       return;
6178 23 Mar 21 nicklas 533     }
6211 14 Apr 21 nicklas 534     
6211 14 Apr 21 nicklas 535     autoAnalyzeIsValid = true;
6211 14 Apr 21 nicklas 536     Wizard.setInputStatus('autoAnalyze', 'valid');
6211 14 Apr 21 nicklas 537     
6211 14 Apr 21 nicklas 538     if (yesChecked) specimen.clusterOnChange();
6178 23 Mar 21 nicklas 539   }
6211 14 Apr 21 nicklas 540
6178 23 Mar 21 nicklas 541   
6178 23 Mar 21 nicklas 542   specimen.clusterOnChange = function()
6178 23 Mar 21 nicklas 543   {
6178 23 Mar 21 nicklas 544     var frm = document.forms['reggie'];
6178 23 Mar 21 nicklas 545     var cluster = frm.clusters[frm.clusters.selectedIndex].cluster;
6178 23 Mar 21 nicklas 546     if (cluster.priorities && cluster.priorities.length > 0)
6178 23 Mar 21 nicklas 547     {
6178 23 Mar 21 nicklas 548       frm.priority.length = 0;
6178 23 Mar 21 nicklas 549       for (var pNo = 0; pNo < cluster.priorities.length; pNo++)
6178 23 Mar 21 nicklas 550       {
6178 23 Mar 21 nicklas 551         var p = cluster.priorities[pNo];
6178 23 Mar 21 nicklas 552         frm.priority[frm.priority.length] = new Option(p.name + ' ('+p.value+')', p.value, p['default'], p['default']);
6178 23 Mar 21 nicklas 553       }
6178 23 Mar 21 nicklas 554       Doc.show('job-priority');
6178 23 Mar 21 nicklas 555     }
6178 23 Mar 21 nicklas 556     else
6178 23 Mar 21 nicklas 557     {
6178 23 Mar 21 nicklas 558       Doc.hide('job-priority');
6178 23 Mar 21 nicklas 559     }
6980 17 Jan 23 nicklas 560     if (cluster.partitions && cluster.partitions.length > 0)
6980 17 Jan 23 nicklas 561     {
6980 17 Jan 23 nicklas 562       frm.partition.length = 0;
6980 17 Jan 23 nicklas 563       for (var pNo = 0; pNo < cluster.partitions.length; pNo++)
6980 17 Jan 23 nicklas 564       {
6980 17 Jan 23 nicklas 565         var p = cluster.partitions[pNo];
6980 17 Jan 23 nicklas 566         var title = p.name;
6980 17 Jan 23 nicklas 567         if (p.description) title += ' ('+p.description+')';
6980 17 Jan 23 nicklas 568         frm.partition[frm.partition.length] = new Option(title, p.value, p['default'], p['default']);
6980 17 Jan 23 nicklas 569       }
6980 17 Jan 23 nicklas 570       Doc.show('job-partition');
6980 17 Jan 23 nicklas 571     }
6980 17 Jan 23 nicklas 572     else
6980 17 Jan 23 nicklas 573     {
6980 17 Jan 23 nicklas 574       Doc.hide('job-partition');
6980 17 Jan 23 nicklas 575     }
6178 23 Mar 21 nicklas 576   }
6178 23 Mar 21 nicklas 577
6353 18 Aug 21 nicklas 578   /**
6582 11 Feb 22 nicklas 579     Sort by file date of JSON files. Items without a file are sorted last by registration date and name.
6353 18 Aug 21 nicklas 580   */
6897 29 Nov 22 nicklas 581   specimen.sortByValidatedAndFileDate = function(a, b)
6353 18 Aug 21 nicklas 582   {
6353 18 Aug 21 nicklas 583     var fa = a.jsonFile;
6353 18 Aug 21 nicklas 584     var fb = b.jsonFile;
6353 18 Aug 21 nicklas 585     
6353 18 Aug 21 nicklas 586     if (fa && fb)
6353 18 Aug 21 nicklas 587     {
6897 29 Nov 22 nicklas 588       if (fa.fullyValidated != fb.fullyValidated)
6897 29 Nov 22 nicklas 589       {
6897 29 Nov 22 nicklas 590         return fa.fullyValidated ? -1 : 1;
6897 29 Nov 22 nicklas 591       }
6911 30 Nov 22 nicklas 592       if (fa.sequencingStartDate != fb.sequencingStartDate)
6911 30 Nov 22 nicklas 593       {
6911 30 Nov 22 nicklas 594         return fa.sequencingStartDate < fb.sequencingStartDate ? -1 : 1;
6911 30 Nov 22 nicklas 595       }
6897 29 Nov 22 nicklas 596       if (fa.flowCellId != fb.flowCellId)
6897 29 Nov 22 nicklas 597       {
6897 29 Nov 22 nicklas 598         return fa.flowCellId < fb.flowCellId ? -1 : 1;
6897 29 Nov 22 nicklas 599       }
6582 11 Feb 22 nicklas 600       if (fa.lastModified != fb.lastModified) 
6582 11 Feb 22 nicklas 601       {
6582 11 Feb 22 nicklas 602         return fa.lastModified < fb.lastModified ? -1 : 1;
6582 11 Feb 22 nicklas 603       }
6897 29 Nov 22 nicklas 604       return fa.name < fb.name ? -1 : 1;
6353 18 Aug 21 nicklas 605     }
6353 18 Aug 21 nicklas 606     else if (fa)
6353 18 Aug 21 nicklas 607     {
6353 18 Aug 21 nicklas 608       return -1;
6353 18 Aug 21 nicklas 609     }
6353 18 Aug 21 nicklas 610     else if (fb)
6353 18 Aug 21 nicklas 611     {
6353 18 Aug 21 nicklas 612       return 1;
6353 18 Aug 21 nicklas 613     }
6929 02 Dec 22 nicklas 614     if (a.itemType == 'StrayFastq' && b.itemType == 'StrayFastq')
6929 02 Dec 22 nicklas 615     {
6929 02 Dec 22 nicklas 616       if (a.lastModified != b.lastModified)
6929 02 Dec 22 nicklas 617       {
6929 02 Dec 22 nicklas 618         return a.lastModified < b.lastModified ? -1 : 1;
6929 02 Dec 22 nicklas 619       }
6929 02 Dec 22 nicklas 620     }
6582 11 Feb 22 nicklas 621     return specimen.sortBySamplingDate(a, b);
6582 11 Feb 22 nicklas 622   }
6582 11 Feb 22 nicklas 623
6582 11 Feb 22 nicklas 624   // Sort entries by sampling date or registered date
6582 11 Feb 22 nicklas 625   specimen.sortBySamplingDate = function(a, b)
6582 11 Feb 22 nicklas 626   {
6582 11 Feb 22 nicklas 627     var ra = a.samplingDate || a.registered;
6582 11 Feb 22 nicklas 628     var rb = b.samplingDate || b.registered;
6582 11 Feb 22 nicklas 629     if (ra && rb) 
6582 11 Feb 22 nicklas 630     {
6582 11 Feb 22 nicklas 631       if (ra != rb) return ra < rb ? -1 : 1;
6582 11 Feb 22 nicklas 632     }
6582 11 Feb 22 nicklas 633     else if (ra)
6582 11 Feb 22 nicklas 634     {
6582 11 Feb 22 nicklas 635       return -1;
6582 11 Feb 22 nicklas 636     }
6582 11 Feb 22 nicklas 637     else if (rb)
6582 11 Feb 22 nicklas 638     {
6582 11 Feb 22 nicklas 639       return 1;
6582 11 Feb 22 nicklas 640     }
6353 18 Aug 21 nicklas 641     return specimen.sortByName(a, b);
6353 18 Aug 21 nicklas 642   }
6178 23 Mar 21 nicklas 643
6353 18 Aug 21 nicklas 644   // Sort entries by name
6353 18 Aug 21 nicklas 645   specimen.sortByName = function(a, b)
6353 18 Aug 21 nicklas 646   {
6353 18 Aug 21 nicklas 647     return a.name == b.name ? 0 : (a.name < b.name ? -1 : 1);
6353 18 Aug 21 nicklas 648   }
6353 18 Aug 21 nicklas 649
6178 23 Mar 21 nicklas 650   specimen.submit = function()
6178 23 Mar 21 nicklas 651   {
6178 23 Mar 21 nicklas 652     var frm = document.forms['reggie'];
6178 23 Mar 21 nicklas 653     var submitInfo = {};
6212 14 Apr 21 nicklas 654     submitInfo.operator = frm.operator.value;
6914 01 Dec 22 nicklas 655     submitInfo.getDebugMessages = debug ? true : false;
6178 23 Mar 21 nicklas 656     
6178 23 Mar 21 nicklas 657     var items = [];
6178 23 Mar 21 nicklas 658     submitInfo.items = items;
6178 23 Mar 21 nicklas 659     for (var itemNo = 0; itemNo < importItems.length; itemNo++)
6178 23 Mar 21 nicklas 660     {
6212 14 Apr 21 nicklas 661       var chk = frm['import.'+itemNo];
6736 10 May 22 nicklas 662       var flagRNA = frm['flagrna.'+itemNo];
6212 14 Apr 21 nicklas 663       if (chk && chk.checked)
6178 23 Mar 21 nicklas 664       {
6198 07 Apr 21 nicklas 665         var item = importItems[itemNo]
6198 07 Apr 21 nicklas 666         var tmp = {};
6198 07 Apr 21 nicklas 667         tmp.id = item.id;
6198 07 Apr 21 nicklas 668         tmp.jsonFile = item.jsonFile.name;
6736 10 May 22 nicklas 669         tmp.flagRNA = flagRNA && flagRNA.checked;
6198 07 Apr 21 nicklas 670         items[items.length] = tmp;
6178 23 Mar 21 nicklas 671       }
6178 23 Mar 21 nicklas 672     }
6178 23 Mar 21 nicklas 673
6211 14 Apr 21 nicklas 674     if (Doc.element('autoAnalyzeYes').checked)
6211 14 Apr 21 nicklas 675     {
6211 14 Apr 21 nicklas 676       var autoAnalyze = {};
6211 14 Apr 21 nicklas 677       autoAnalyze.mergeSoftware = parseInt(frm.mergeSoftware.value);
6211 14 Apr 21 nicklas 678       autoAnalyze.mergeProtocol = parseInt(frm.mergeProtocol.value);
6211 14 Apr 21 nicklas 679       autoAnalyze.cluster = frm.clusters.value;
6211 14 Apr 21 nicklas 680       autoAnalyze.priority = parseInt(frm.priority.value);
6980 17 Jan 23 nicklas 681       if (frm.partition.selectedIndex >= 0)
6980 17 Jan 23 nicklas 682       {
6980 17 Jan 23 nicklas 683         autoAnalyze.partition = frm.partition.value;
6980 17 Jan 23 nicklas 684       }
6211 14 Apr 21 nicklas 685       autoAnalyze.debug = frm.debug.checked;
6211 14 Apr 21 nicklas 686       autoAnalyze.autoConfirm = frm.autoConfirm.checked;
6211 14 Apr 21 nicklas 687       submitInfo.autoAnalyze = autoAnalyze;
6211 14 Apr 21 nicklas 688     }
6211 14 Apr 21 nicklas 689
6510 03 Dec 21 nicklas 690     var url = '../ExternalSpecimen.servlet?ID='+App.getSessionId();
6178 23 Mar 21 nicklas 691     url += '&cmd=ImportFromJSON';
6178 23 Mar 21 nicklas 692     
6913 30 Nov 22 nicklas 693     Wizard.showLoadingAnimation('Importing external specimen...', 'import-json-progress');
6178 23 Mar 21 nicklas 694     Wizard.asyncJsonRequest(url, specimen.submissionResults, 'POST', JSON.stringify(submitInfo));
6178 23 Mar 21 nicklas 695   }
6178 23 Mar 21 nicklas 696
6178 23 Mar 21 nicklas 697   specimen.submissionResults = function(response)
6178 23 Mar 21 nicklas 698   {
6178 23 Mar 21 nicklas 699     Wizard.showFinalMessage(response.messages);
6178 23 Mar 21 nicklas 700     Doc.show('gorestart');
6178 23 Mar 21 nicklas 701   }
6178 23 Mar 21 nicklas 702
6178 23 Mar 21 nicklas 703   return specimen;
6178 23 Mar 21 nicklas 704 }();
6178 23 Mar 21 nicklas 705
6178 23 Mar 21 nicklas 706 Doc.onLoad(ImportSpecimen.initPage);