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

Code
Comments
Other
Rev Date Author Line
6161 04 Mar 21 nicklas 1 var Install = function()
6161 04 Mar 21 nicklas 2 {
6161 04 Mar 21 nicklas 3   var install = {};
6161 04 Mar 21 nicklas 4   
6161 04 Mar 21 nicklas 5   var checks;
6161 04 Mar 21 nicklas 6   var debug = 0;
6161 04 Mar 21 nicklas 7   
6161 04 Mar 21 nicklas 8   install.initPage = function()
6161 04 Mar 21 nicklas 9   {
6161 04 Mar 21 nicklas 10     Events.addEventHandler('typeFilter', 'change', install.filterOnChange);
6161 04 Mar 21 nicklas 11     Events.addEventHandler('nameFilter', 'change', install.filterOnChange);
6161 04 Mar 21 nicklas 12     Events.addEventHandler('messageFilter', 'change', install.filterOnChange);
6161 04 Mar 21 nicklas 13     
6161 04 Mar 21 nicklas 14     Buttons.addClickHandler('btnFixItems', install.fixInstallation);
6161 04 Mar 21 nicklas 15     Buttons.addClickHandler('btnCreateMissingItems', install.fixInstallation);
6161 04 Mar 21 nicklas 16     
6161 04 Mar 21 nicklas 17     install.checkInstallation('Validate', 'Checking installation...');
6161 04 Mar 21 nicklas 18   }
6161 04 Mar 21 nicklas 19   
6161 04 Mar 21 nicklas 20   install.fixInstallation = function()
6161 04 Mar 21 nicklas 21   {
6161 04 Mar 21 nicklas 22     install.checkInstallation('Install', 'Fixing installation...');
6161 04 Mar 21 nicklas 23   }
6161 04 Mar 21 nicklas 24
6161 04 Mar 21 nicklas 25   
6161 04 Mar 21 nicklas 26   install.checkInstallation = function(cmd, workText, callback, progress)
6161 04 Mar 21 nicklas 27   {
6161 04 Mar 21 nicklas 28     Doc.hide('item-list');
6161 04 Mar 21 nicklas 29     Doc.hide('itemTable');
6161 04 Mar 21 nicklas 30     Doc.hide('createMissingItems');
6161 04 Mar 21 nicklas 31     Doc.hide('fixIncompleteItems');
6161 04 Mar 21 nicklas 32     
6161 04 Mar 21 nicklas 33     var url = '../Install.servlet?ID=' + App.getSessionId();
6161 04 Mar 21 nicklas 34     url += '&cmd='+cmd;
6161 04 Mar 21 nicklas 35     Doc.addClass('workInProgress', 'working');
6161 04 Mar 21 nicklas 36     Wizard.showLoadingAnimation(workText, progress);
6161 04 Mar 21 nicklas 37     Wizard.asyncJsonRequest(url, callback || install.onChecked);
6161 04 Mar 21 nicklas 38   }
6161 04 Mar 21 nicklas 39   
6161 04 Mar 21 nicklas 40   install.onChecked = function(response)
6161 04 Mar 21 nicklas 41   {
6161 04 Mar 21 nicklas 42     Doc.removeClass('workInProgress', 'working');
6161 04 Mar 21 nicklas 43     
6161 04 Mar 21 nicklas 44     checks = response.checks;
6161 04 Mar 21 nicklas 45     
6161 04 Mar 21 nicklas 46     var numMissing = 0;
6161 04 Mar 21 nicklas 47     var numWarnings = 0;
6161 04 Mar 21 nicklas 48     var numErrors = 0;
6161 04 Mar 21 nicklas 49     var numIncomplete = 0;
6161 04 Mar 21 nicklas 50     
6161 04 Mar 21 nicklas 51     var index = 0;
6161 04 Mar 21 nicklas 52     var topLines = []; // Top lines are for items with error/warning/special message
6161 04 Mar 21 nicklas 53     var bottomLines = []; // Bottom lines are for all 'OK' items
6161 04 Mar 21 nicklas 54     var allOk = true;
6161 04 Mar 21 nicklas 55     var clickableItems = [];
6161 04 Mar 21 nicklas 56     var typeFilter = Doc.element('typeFilter');
6161 04 Mar 21 nicklas 57     typeFilter.length = 0;
6161 04 Mar 21 nicklas 58     typeFilter[0] = new Option();
6161 04 Mar 21 nicklas 59     var types = [];
6161 04 Mar 21 nicklas 60     
6161 04 Mar 21 nicklas 61     for (var checkNo = 0; checkNo < checks.length; checkNo++)
6161 04 Mar 21 nicklas 62     {
6161 04 Mar 21 nicklas 63       var check = checks[checkNo];
6161 04 Mar 21 nicklas 64       
6161 04 Mar 21 nicklas 65       var icon = 'ok.png';
6161 04 Mar 21 nicklas 66       check.ok = true;
6161 04 Mar 21 nicklas 67       if (check.status == 'missing') 
6161 04 Mar 21 nicklas 68       {
6161 04 Mar 21 nicklas 69         numMissing++;
6161 04 Mar 21 nicklas 70         icon = 'warning.png';
6161 04 Mar 21 nicklas 71         check.ok = false;
6161 04 Mar 21 nicklas 72       }
6161 04 Mar 21 nicklas 73       if (check.status == 'incomplete')
6161 04 Mar 21 nicklas 74       {
6161 04 Mar 21 nicklas 75         numIncomplete++;
6161 04 Mar 21 nicklas 76         icon = 'warning.png';
6161 04 Mar 21 nicklas 77         check.ok = false;
6161 04 Mar 21 nicklas 78       }
6161 04 Mar 21 nicklas 79       if (check.status == 'error') 
6161 04 Mar 21 nicklas 80       {
6161 04 Mar 21 nicklas 81         numErrors++;
6161 04 Mar 21 nicklas 82         icon = 'error.png';
6161 04 Mar 21 nicklas 83         check.ok = false;
6161 04 Mar 21 nicklas 84       }
6161 04 Mar 21 nicklas 85       if (check.status == 'warning') 
6161 04 Mar 21 nicklas 86       {
6161 04 Mar 21 nicklas 87         numWarnings++;
6161 04 Mar 21 nicklas 88         icon = 'warning.png';
6161 04 Mar 21 nicklas 89         check.ok = false;
6161 04 Mar 21 nicklas 90       }
6161 04 Mar 21 nicklas 91       allOk &= check.ok;
6161 04 Mar 21 nicklas 92       
6161 04 Mar 21 nicklas 93       if (!types[check.itemType])
6161 04 Mar 21 nicklas 94       {
6161 04 Mar 21 nicklas 95         typeFilter[typeFilter.length] = new Option(check.itemType);
6161 04 Mar 21 nicklas 96         types[check.itemType] = 1;
6161 04 Mar 21 nicklas 97       }
6161 04 Mar 21 nicklas 98       
6161 04 Mar 21 nicklas 99       var line = '<tr id="check'+checkNo+'" class="highlight '+check.itemType+' ' + (check.ok ? 'check-ok' : 'check-not-ok') + '">';
6161 04 Mar 21 nicklas 100       line += '<td class="indexCol"><span id="index.'+checkNo+'">'+(checkNo+1)+'</span></td>';
6161 04 Mar 21 nicklas 101       line += '<td class="dottedleft">'+Strings.encodeTags(check.itemType)+'</td>';
6161 04 Mar 21 nicklas 102       var name = Strings.encodeTags(check.name);
6161 04 Mar 21 nicklas 103       if (check.mainType) name += ' <span class="itemsubtype">[' + Strings.encodeTags(check.mainType) + ']</span>'; 
6161 04 Mar 21 nicklas 104       if (check.id)
6161 04 Mar 21 nicklas 105       {
6161 04 Mar 21 nicklas 106         clickableItems[clickableItems.length] = check.itemType+check.id;
6161 04 Mar 21 nicklas 107         line += '<td><div class="link" id="'+check.itemType+check.id+'" data-item-type="'+check.itemType+'" data-item-id="'+check.id+'"';
6161 04 Mar 21 nicklas 108         line += ' title="View this item (use CTRL, ALT or SHIFT to edit)">'+name+'</div></td>';
6161 04 Mar 21 nicklas 109       }
6161 04 Mar 21 nicklas 110       else
6161 04 Mar 21 nicklas 111       {
6161 04 Mar 21 nicklas 112         line += '<td><i>' + name + '</i></td>';
6161 04 Mar 21 nicklas 113       }
6161 04 Mar 21 nicklas 114       line += '<td class="iconCol"><img src="../images/'+icon+'"></td>';
6161 04 Mar 21 nicklas 115       line += '<td>';
6161 04 Mar 21 nicklas 116       if (check.messages.length > 1)
6161 04 Mar 21 nicklas 117       {
6161 04 Mar 21 nicklas 118         for (var m = 0; m < check.messages.length; m++)
6161 04 Mar 21 nicklas 119         {
6161 04 Mar 21 nicklas 120           line += '• '+check.messages[m] + '<br>';
6161 04 Mar 21 nicklas 121         }
6161 04 Mar 21 nicklas 122       }
6161 04 Mar 21 nicklas 123       else
6161 04 Mar 21 nicklas 124       {
6161 04 Mar 21 nicklas 125         line += check.messages;
6161 04 Mar 21 nicklas 126       }
6161 04 Mar 21 nicklas 127       line += '</td></tr>';
6161 04 Mar 21 nicklas 128       
6161 04 Mar 21 nicklas 129       if (!check.ok || check.messages != 'Ok')
6161 04 Mar 21 nicklas 130       {
6161 04 Mar 21 nicklas 131         topLines[topLines.length] = line;
6161 04 Mar 21 nicklas 132       }
6161 04 Mar 21 nicklas 133       else
6161 04 Mar 21 nicklas 134       {
6161 04 Mar 21 nicklas 135         bottomLines[bottomLines.length] = line;
6161 04 Mar 21 nicklas 136       }
6161 04 Mar 21 nicklas 137       index++;
6161 04 Mar 21 nicklas 138     }
6161 04 Mar 21 nicklas 139     
6161 04 Mar 21 nicklas 140     if (topLines.length + bottomLines.length > 0)
6161 04 Mar 21 nicklas 141     {
6161 04 Mar 21 nicklas 142       Doc.element('item-list').innerHTML = topLines.join('') + bottomLines.join('');
6161 04 Mar 21 nicklas 143       Doc.show('item-list');
6161 04 Mar 21 nicklas 144     }
6161 04 Mar 21 nicklas 145     Doc.show('itemTable', 'table');
6161 04 Mar 21 nicklas 146
6161 04 Mar 21 nicklas 147     // Add click handler to items
6161 04 Mar 21 nicklas 148     for (var i = 0; i < clickableItems.length; i++)
6161 04 Mar 21 nicklas 149     {
6161 04 Mar 21 nicklas 150       Events.addEventHandler(clickableItems[i], 'click', Items.itemOnClick);
6161 04 Mar 21 nicklas 151     }
6161 04 Mar 21 nicklas 152     
6161 04 Mar 21 nicklas 153     if (numErrors > 0)
6161 04 Mar 21 nicklas 154     {
6161 04 Mar 21 nicklas 155       Wizard.setWizardStatus('messagecontainer error', numErrors+' errors was detected. You need to fix those manually.');  
6161 04 Mar 21 nicklas 156     }
6161 04 Mar 21 nicklas 157     else if (numWarnings > 0)
6161 04 Mar 21 nicklas 158     {
6161 04 Mar 21 nicklas 159       Wizard.setWizardStatus('messagecontainer note', numWarnings+' warnings was detected. The Variant Search may still work. If not, you need to fix it manually.');
6161 04 Mar 21 nicklas 160     }
6161 04 Mar 21 nicklas 161     if (numMissing > 0)
6161 04 Mar 21 nicklas 162     {
6161 04 Mar 21 nicklas 163       Doc.show('createMissingItems');
6161 04 Mar 21 nicklas 164     }
6161 04 Mar 21 nicklas 165     else if (numIncomplete > 0)
6161 04 Mar 21 nicklas 166     {
6161 04 Mar 21 nicklas 167       Doc.show('fixIncompleteItems');
6161 04 Mar 21 nicklas 168     }
6161 04 Mar 21 nicklas 169     if (allOk) 
6161 04 Mar 21 nicklas 170     {
6161 04 Mar 21 nicklas 171       Wizard.setWizardStatus('all-checks-passed', 'All checks passed');
6161 04 Mar 21 nicklas 172     }
6161 04 Mar 21 nicklas 173   }
6161 04 Mar 21 nicklas 174   
6161 04 Mar 21 nicklas 175   install.showMessages = function(response)
6161 04 Mar 21 nicklas 176   {
6161 04 Mar 21 nicklas 177     Doc.removeClass('workInProgress', 'working');
6161 04 Mar 21 nicklas 178     Wizard.showFinalMessage(response.messages);
6161 04 Mar 21 nicklas 179   }
6161 04 Mar 21 nicklas 180   
6161 04 Mar 21 nicklas 181   install.filterOnChange = function()
6161 04 Mar 21 nicklas 182   {
6161 04 Mar 21 nicklas 183     
6161 04 Mar 21 nicklas 184     var filter = new Filter();
6161 04 Mar 21 nicklas 185     filter.addTextCriteria(ItemProperty.ItemType, Doc.element('typeFilter').value);
6161 04 Mar 21 nicklas 186     filter.addContainsCriteria(ItemProperty.Name, Doc.element('nameFilter').value);
6161 04 Mar 21 nicklas 187     filter.addContainsCriteria(ItemProperty.Messages, Doc.element('messageFilter').value);
6161 04 Mar 21 nicklas 188
6161 04 Mar 21 nicklas 189     var numMatch = 0;
6161 04 Mar 21 nicklas 190     for (var checkNo = 0; checkNo < checks.length; checkNo++)
6161 04 Mar 21 nicklas 191     {
6161 04 Mar 21 nicklas 192       var check = checks[checkNo];
6161 04 Mar 21 nicklas 193       
6161 04 Mar 21 nicklas 194       check.include = filter.check(check);
6161 04 Mar 21 nicklas 195       if (check.include)
6161 04 Mar 21 nicklas 196       {
6161 04 Mar 21 nicklas 197         numMatch++;
6161 04 Mar 21 nicklas 198         Doc.show('check'+checkNo);
6161 04 Mar 21 nicklas 199       }
6161 04 Mar 21 nicklas 200       else
6161 04 Mar 21 nicklas 201       {
6161 04 Mar 21 nicklas 202         Doc.hide('check'+checkNo);
6161 04 Mar 21 nicklas 203       }
6161 04 Mar 21 nicklas 204     }
6161 04 Mar 21 nicklas 205     
6161 04 Mar 21 nicklas 206     Doc.showHide('item-list', numMatch > 0);
6161 04 Mar 21 nicklas 207     Doc.showHide('no-matching-items', numMatch==0);
6161 04 Mar 21 nicklas 208   }
6161 04 Mar 21 nicklas 209   
6161 04 Mar 21 nicklas 210   return install;
6161 04 Mar 21 nicklas 211 }();
6161 04 Mar 21 nicklas 212
6161 04 Mar 21 nicklas 213 Doc.onLoad(Install.initPage);
6161 04 Mar 21 nicklas 214
6161 04 Mar 21 nicklas 215 var ItemProperty = function()
6161 04 Mar 21 nicklas 216 {
6161 04 Mar 21 nicklas 217   var p = {};
6161 04 Mar 21 nicklas 218   
6161 04 Mar 21 nicklas 219   p.Name = function(item)
6161 04 Mar 21 nicklas 220   {
6161 04 Mar 21 nicklas 221     return item.name;
6161 04 Mar 21 nicklas 222   }
6161 04 Mar 21 nicklas 223   
6161 04 Mar 21 nicklas 224   p.ItemType = function(item)
6161 04 Mar 21 nicklas 225   {
6161 04 Mar 21 nicklas 226     return item.itemType;
6161 04 Mar 21 nicklas 227   }
6161 04 Mar 21 nicklas 228
6161 04 Mar 21 nicklas 229   p.Messages = function(item)
6161 04 Mar 21 nicklas 230   {
6161 04 Mar 21 nicklas 231     return item.messages.join('');
6161 04 Mar 21 nicklas 232   }
6161 04 Mar 21 nicklas 233   
6161 04 Mar 21 nicklas 234   return p;
6161 04 Mar 21 nicklas 235 }();
6161 04 Mar 21 nicklas 236