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

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