extensions/net.sf.basedb.meludi/trunk/resources/admin/install.js

Code
Comments
Other
Rev Date Author Line
2933 14 Nov 14 olle 1 var Install = function()
2933 14 Nov 14 olle 2 {
2933 14 Nov 14 olle 3   var install = {};
2933 14 Nov 14 olle 4   var debug = 0;
2933 14 Nov 14 olle 5   
2933 14 Nov 14 olle 6   install.initPage = function()
2933 14 Nov 14 olle 7   {
2933 14 Nov 14 olle 8     if (!App.getActiveProjectId()) return;
2933 14 Nov 14 olle 9     Buttons.addClickHandler('btnFixItems', install.fixInstallation);
2933 14 Nov 14 olle 10     Buttons.addClickHandler('btnCreateMissingItems', install.fixInstallation);
2933 14 Nov 14 olle 11     
2933 14 Nov 14 olle 12     install.checkInstallation('Validate', 'Checking installation...');
2933 14 Nov 14 olle 13   }
2933 14 Nov 14 olle 14   
2933 14 Nov 14 olle 15   install.fixInstallation = function()
2933 14 Nov 14 olle 16   {
2933 14 Nov 14 olle 17     install.checkInstallation('Install', 'Fixing installation...');
2933 14 Nov 14 olle 18   }
2933 14 Nov 14 olle 19
2933 14 Nov 14 olle 20   
2933 14 Nov 14 olle 21   install.checkInstallation = function(cmd, workText)
2933 14 Nov 14 olle 22   {
2933 14 Nov 14 olle 23     Doc.hide('validationResult0');
2933 14 Nov 14 olle 24     Doc.hide('validationResult1');
2933 14 Nov 14 olle 25     Doc.hide('validationResult2');
2933 14 Nov 14 olle 26     Doc.hide('createMissingItems');
2933 14 Nov 14 olle 27     Doc.hide('fixIncompleteItems');
2933 14 Nov 14 olle 28     
2933 14 Nov 14 olle 29     var request = Ajax.getXmlHttpRequest();
2933 14 Nov 14 olle 30     var url = '../Install.servlet?ID=' + App.getSessionId();
2933 14 Nov 14 olle 31     url += '&cmd='+cmd;
2933 14 Nov 14 olle 32     Doc.addClass('workInProgress', 'working');
2933 14 Nov 14 olle 33     Wizard.showLoadingAnimation(workText);
2933 14 Nov 14 olle 34     Wizard.asyncJsonRequest(url, install.onChecked);
2933 14 Nov 14 olle 35   }
2933 14 Nov 14 olle 36   
2933 14 Nov 14 olle 37   install.onChecked = function(response)
2933 14 Nov 14 olle 38   {
2933 14 Nov 14 olle 39     Doc.removeClass('workInProgress', 'working');
2933 14 Nov 14 olle 40     
2933 14 Nov 14 olle 41     var COL_BREAKS = ['ANNOTATIONTYPE', 'PLUGINDEFINITION'];
2933 14 Nov 14 olle 42     var checks = response.checks;
2933 14 Nov 14 olle 43     
2933 14 Nov 14 olle 44     var numMissing = 0;
2933 14 Nov 14 olle 45     var numWarnings = 0;
2933 14 Nov 14 olle 46     var numErrors = 0;
2933 14 Nov 14 olle 47     var numIncomplete = 0;
2933 14 Nov 14 olle 48     var html = '<table class="report">';
2933 14 Nov 14 olle 49     var lastItemType = null;
2933 14 Nov 14 olle 50     var index = 0;
2933 14 Nov 14 olle 51     var topLines = []; // Top lines are for items with error/warning/special message
2933 14 Nov 14 olle 52     var bottomLines = []; // Bottom lines are for all 'OK' items
2933 14 Nov 14 olle 53     var allOk = true;
2933 14 Nov 14 olle 54     var clickableItems = [];
2933 14 Nov 14 olle 55     var showMore = [];
2933 14 Nov 14 olle 56     
2933 14 Nov 14 olle 57     for (var i = 0; i < checks.length; i++)
2933 14 Nov 14 olle 58     {
2933 14 Nov 14 olle 59       var check = checks[i];
2933 14 Nov 14 olle 60       var icon = 'ok.png';
2933 14 Nov 14 olle 61       check.ok = true;
2933 14 Nov 14 olle 62       if (check.status == 'missing') 
2933 14 Nov 14 olle 63       {
2933 14 Nov 14 olle 64         numMissing++;
2933 14 Nov 14 olle 65         icon = 'error.png';
2933 14 Nov 14 olle 66         check.ok = false;
2933 14 Nov 14 olle 67       }
2933 14 Nov 14 olle 68       if (check.status == 'incomplete')
2933 14 Nov 14 olle 69       {
2933 14 Nov 14 olle 70         numIncomplete++;
2933 14 Nov 14 olle 71         icon = 'warning.png';
2933 14 Nov 14 olle 72         check.ok = false;
2933 14 Nov 14 olle 73       }
2933 14 Nov 14 olle 74       if (check.status == 'error') 
2933 14 Nov 14 olle 75       {
2933 14 Nov 14 olle 76         numErrors++;
2933 14 Nov 14 olle 77         icon = 'error.png';
2933 14 Nov 14 olle 78         check.ok = false;
2933 14 Nov 14 olle 79       }
2933 14 Nov 14 olle 80       if (check.status == 'warning') 
2933 14 Nov 14 olle 81       {
2933 14 Nov 14 olle 82         numWarnings++;
2933 14 Nov 14 olle 83         icon = 'warning.png';
2933 14 Nov 14 olle 84         check.ok = false;
2933 14 Nov 14 olle 85       }
2933 14 Nov 14 olle 86       allOk &= check.ok;
2933 14 Nov 14 olle 87       
2933 14 Nov 14 olle 88       var sameSection = lastItemType == check.itemType;
2933 14 Nov 14 olle 89       // Do not start new section when switching between plugin definition and configuration
2933 14 Nov 14 olle 90       if (!sameSection) sameSection = lastItemType == 'PLUGINDEFINITION' && check.itemType == 'PLUGINCONFIGURATION';
2933 14 Nov 14 olle 91       if (!sameSection) sameSection = lastItemType == 'PLUGINCONFIGURATION' && check.itemType == 'PLUGINDEFINITION';
2933 14 Nov 14 olle 92       if (!sameSection)
2933 14 Nov 14 olle 93       {
2933 14 Nov 14 olle 94         html += topLines.join(''); // Always show the top-lines
2933 14 Nov 14 olle 95         if ((topLines.length + bottomLines.length > 13) && bottomLines.length > 0)
2933 14 Nov 14 olle 96         {
2933 14 Nov 14 olle 97           // Show 10 lines and hide the rest
2933 14 Nov 14 olle 98           var showMoreFrom = Math.max(0, 10 - topLines.length);
2933 14 Nov 14 olle 99           if (showMoreFrom > 0)
2933 14 Nov 14 olle 100           {
2933 14 Nov 14 olle 101             html += bottomLines.slice(0, showMoreFrom).join('');
2933 14 Nov 14 olle 102           }
2933 14 Nov 14 olle 103           showMore[showMore.length] = check.itemType;
2933 14 Nov 14 olle 104           html += '<tr class="sameitemtype highlight" id="'+check.itemType+'">';
2933 14 Nov 14 olle 105           html += '<td class="link">&hellip; '+(bottomLines.length-showMoreFrom)+' more</td>';
2933 14 Nov 14 olle 106           html += '<td><img src="../images/ok.png"></td><td>Ok</td></tr></tbody>';
2933 14 Nov 14 olle 107           html += '<tbody id="'+check.itemType+'.more" style="display: none;">';
2933 14 Nov 14 olle 108           html += bottomLines.slice(showMoreFrom).join('');
2933 14 Nov 14 olle 109           html += '</tbody>';
2933 14 Nov 14 olle 110         }
2933 14 Nov 14 olle 111         else
2933 14 Nov 14 olle 112         {
2933 14 Nov 14 olle 113           html += bottomLines.join('')+'</tbody>';
2933 14 Nov 14 olle 114         }
2933 14 Nov 14 olle 115         
2933 14 Nov 14 olle 116         topLines = [];
2933 14 Nov 14 olle 117         bottomLines = [];
2933 14 Nov 14 olle 118         allOk = true;
2933 14 Nov 14 olle 119         index = 0;
2933 14 Nov 14 olle 120         
2933 14 Nov 14 olle 121         var col_break = COL_BREAKS.indexOf(check.itemType);
2933 14 Nov 14 olle 122         if (col_break >= 0)
2933 14 Nov 14 olle 123         {
2933 14 Nov 14 olle 124           // End the left side and start on the right
2933 14 Nov 14 olle 125           html += '</table>';
2933 14 Nov 14 olle 126           Doc.element('validationResult'+col_break).innerHTML = html;
2933 14 Nov 14 olle 127           Doc.show('validationResult'+col_break);
2933 14 Nov 14 olle 128           html = '<table class="report">';
2933 14 Nov 14 olle 129         }
2933 14 Nov 14 olle 130         html += '<tbody><tr class="newitemtype"><td colspan="3">'+check.itemType+'</td></tr>';
2933 14 Nov 14 olle 131       }
2933 14 Nov 14 olle 132       
2933 14 Nov 14 olle 133       var line = '<tr class="sameitemtype highlight '+check.itemType+' ' + (check.ok ? 'check-ok' : 'check-not-ok') + '">';
2933 14 Nov 14 olle 134       lastItemType = check.itemType;
2933 14 Nov 14 olle 135       var name = check.name;
2933 14 Nov 14 olle 136       if (check.mainType) name += ' <span class="itemsubtype">[' + check.mainType + ']</span>'; 
2933 14 Nov 14 olle 137       if (check.id)
2933 14 Nov 14 olle 138       {
2933 14 Nov 14 olle 139         clickableItems[clickableItems.length] = check.itemType+check.id;
2933 14 Nov 14 olle 140         line += '<td class="itemTypeCol"><div class="link" id="'+check.itemType+check.id+'" data-item-type="'+check.itemType+'" data-item-id="'+check.id+'"';
2933 14 Nov 14 olle 141         line += ' title="View this item (use CTRL, ALT or SHIFT to edit)">'+name+'</div></td>';
2933 14 Nov 14 olle 142       }
2933 14 Nov 14 olle 143       else
2933 14 Nov 14 olle 144       {
2933 14 Nov 14 olle 145         line += '<td class="itemTypeCol"><i>' + name + '</i></td>';
2933 14 Nov 14 olle 146       }
2933 14 Nov 14 olle 147       line += '<td class="iconCol"><img src="../images/'+icon+'"></td>';
2933 14 Nov 14 olle 148       line += '<td class="statusCol">';
2933 14 Nov 14 olle 149       if (check.messages.length > 1)
2933 14 Nov 14 olle 150       {
2933 14 Nov 14 olle 151         for (var m = 0; m < check.messages.length; m++)
2933 14 Nov 14 olle 152         {
2933 14 Nov 14 olle 153           line += '• '+check.messages[m] + '<br>';
2933 14 Nov 14 olle 154         }
2933 14 Nov 14 olle 155       }
2933 14 Nov 14 olle 156       else
2933 14 Nov 14 olle 157       {
2933 14 Nov 14 olle 158         line += check.messages;
2933 14 Nov 14 olle 159       }
2933 14 Nov 14 olle 160       line += '</td></tr>';
2933 14 Nov 14 olle 161       
2933 14 Nov 14 olle 162       if (!check.ok || check.messages != 'Ok')
2933 14 Nov 14 olle 163       {
2933 14 Nov 14 olle 164         topLines[topLines.length] = line;
2933 14 Nov 14 olle 165       }
2933 14 Nov 14 olle 166       else
2933 14 Nov 14 olle 167       {
2933 14 Nov 14 olle 168         bottomLines[bottomLines.length] = line;
2933 14 Nov 14 olle 169       }
2933 14 Nov 14 olle 170       index++;
2933 14 Nov 14 olle 171     }
2933 14 Nov 14 olle 172     
2933 14 Nov 14 olle 173     html += topLines.join('');
2933 14 Nov 14 olle 174     if ((topLines.length + bottomLines.length > 13) && bottomLines.length > 0)
2933 14 Nov 14 olle 175     {
2933 14 Nov 14 olle 176       // Show 10 lines and hide the rest
2933 14 Nov 14 olle 177       var showMoreFrom = Math.max(0, 10 - topLines.length);
2933 14 Nov 14 olle 178       if (showMoreFrom > 0)
2933 14 Nov 14 olle 179       {
2933 14 Nov 14 olle 180         html += bottomLines.slice(0, showMoreFrom).join('');
2933 14 Nov 14 olle 181       }
2933 14 Nov 14 olle 182       showMore[showMore.length] = check.itemType;
2933 14 Nov 14 olle 183       html += '<tr class="sameitemtype highlight" id="'+check.itemType+'">';
2933 14 Nov 14 olle 184       html += '<td class="link">&hellip; '+(bottomLines.length-showMoreFrom)+' more</td>';
2933 14 Nov 14 olle 185       html += '<td><img src="../images/ok.png"></td><td>Ok</td></tr></tbody>';
2933 14 Nov 14 olle 186       html += '<tbody id="'+check.itemType+'.more" style="display: none;">';
2933 14 Nov 14 olle 187       html += bottomLines.slice(showMoreFrom).join('');
2933 14 Nov 14 olle 188       html += '</tbody>';
2933 14 Nov 14 olle 189     }
2933 14 Nov 14 olle 190     else
2933 14 Nov 14 olle 191     {
2933 14 Nov 14 olle 192       html += bottomLines.join('')+'</tbody>';
2933 14 Nov 14 olle 193     }
2933 14 Nov 14 olle 194     
2933 14 Nov 14 olle 195     html += '</table>';
2933 14 Nov 14 olle 196     Doc.element('validationResult'+COL_BREAKS.length).innerHTML = html;
2933 14 Nov 14 olle 197     Doc.show('validationResult'+COL_BREAKS.length);
2933 14 Nov 14 olle 198
2933 14 Nov 14 olle 199     // Add click handler to items
2933 14 Nov 14 olle 200     for (var i = 0; i < clickableItems.length; i++)
2933 14 Nov 14 olle 201     {
2933 14 Nov 14 olle 202       Events.addEventHandler(clickableItems[i], 'click', Items.itemOnClick);
2933 14 Nov 14 olle 203     }
2933 14 Nov 14 olle 204     // Add click handler to 'show more...'
2933 14 Nov 14 olle 205     for (var i = 0; i < showMore.length; i++)
2933 14 Nov 14 olle 206     {
2933 14 Nov 14 olle 207       Events.addEventHandler(showMore[i], 'click', install.showMore);
2933 14 Nov 14 olle 208     }
2933 14 Nov 14 olle 209     
2933 14 Nov 14 olle 210     if (numErrors > 0)
2933 14 Nov 14 olle 211     {
2933 14 Nov 14 olle 212       Wizard.setFatalError(numErrors+' errors was detected. You need to fix those manually.');  
2933 14 Nov 14 olle 213     }
2933 14 Nov 14 olle 214     else if (numMissing > 0)
2933 14 Nov 14 olle 215     {
2933 14 Nov 14 olle 216       Doc.show('createMissingItems');
2933 14 Nov 14 olle 217     }
2933 14 Nov 14 olle 218     else if (numIncomplete > 0)
2933 14 Nov 14 olle 219     {
2933 14 Nov 14 olle 220       Doc.show('fixIncompleteItems');
2933 14 Nov 14 olle 221     }
2933 14 Nov 14 olle 222     else if (numWarnings > 0)
2933 14 Nov 14 olle 223     {
2933 14 Nov 14 olle 224       Wizard.showStatusMessage(numWarnings+' warnings was detected. MeLuDi may still work. If not, you need to fix it manually.');
2933 14 Nov 14 olle 225     }
2933 14 Nov 14 olle 226   }
2933 14 Nov 14 olle 227   
2933 14 Nov 14 olle 228   install.showMore = function(event)
2933 14 Nov 14 olle 229   {
2933 14 Nov 14 olle 230     var target = event.currentTarget;
2933 14 Nov 14 olle 231     Doc.show(target.id + '.more');
2933 14 Nov 14 olle 232     Doc.hide(target.id);
2933 14 Nov 14 olle 233   }
2933 14 Nov 14 olle 234
2933 14 Nov 14 olle 235   
2933 14 Nov 14 olle 236   return install;
2933 14 Nov 14 olle 237 }();
2933 14 Nov 14 olle 238
2933 14 Nov 14 olle 239 Doc.onLoad(Install.initPage);