www/common/plugin/test_with_file.js

Code
Comments
Other
Rev Date Author Line
7604 25 Feb 19 nicklas 1 /* $Id $
7604 25 Feb 19 nicklas 2   ------------------------------------------------------------------
7604 25 Feb 19 nicklas 3   Copyright (C) 2012 Nicklas Nordborg
7604 25 Feb 19 nicklas 4
7604 25 Feb 19 nicklas 5   This file is part of BASE - BioArray Software Environment.
7604 25 Feb 19 nicklas 6   Available at http://base.thep.lu.se/
7604 25 Feb 19 nicklas 7
7604 25 Feb 19 nicklas 8   BASE is free software; you can redistribute it and/or
7604 25 Feb 19 nicklas 9   modify it under the terms of the GNU General Public License
7604 25 Feb 19 nicklas 10   as published by the Free Software Foundation; either version 3
7604 25 Feb 19 nicklas 11   of the License, or (at your option) any later version.
7604 25 Feb 19 nicklas 12
7604 25 Feb 19 nicklas 13   BASE is distributed in the hope that it will be useful,
7604 25 Feb 19 nicklas 14   but WITHOUT ANY WARRANTY; without even the implied warranty of
7604 25 Feb 19 nicklas 15   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
7604 25 Feb 19 nicklas 16   GNU General Public License for more details.
7604 25 Feb 19 nicklas 17
7604 25 Feb 19 nicklas 18   You should have received a copy of the GNU General Public License
7604 25 Feb 19 nicklas 19   along with BASE. If not, see <http://www.gnu.org/licenses/>.
7604 25 Feb 19 nicklas 20   ------------------------------------------------------------------
7604 25 Feb 19 nicklas 21
7604 25 Feb 19 nicklas 22   @author Nicklas
7604 25 Feb 19 nicklas 23 */
7604 25 Feb 19 nicklas 24 'use strict';
7604 25 Feb 19 nicklas 25
7604 25 Feb 19 nicklas 26 var TestWithFile = function()
7604 25 Feb 19 nicklas 27 {
7604 25 Feb 19 nicklas 28   var test = {};
7604 25 Feb 19 nicklas 29
7656 19 Mar 19 nicklas 30   var hasExcelSheetParameter = false;
7656 19 Mar 19 nicklas 31   var currentExcelSheet;
7656 19 Mar 19 nicklas 32   
7604 25 Feb 19 nicklas 33   test.PRE_QUOTE = '(?!")';
7604 25 Feb 19 nicklas 34   test.POST_QUOTE = '(?=")';
7604 25 Feb 19 nicklas 35   test.WHITESPACE_OR_QUOTE = '[\\s\\"]*';
7604 25 Feb 19 nicklas 36   test.NOT_INSIDE_QUOTE = '(?=(?:[^"]*"[^"]*")*(?![^"]*"))';
7604 25 Feb 19 nicklas 37   
7604 25 Feb 19 nicklas 38   /**
7604 25 Feb 19 nicklas 39     Initialize the page.
7604 25 Feb 19 nicklas 40   */
7604 25 Feb 19 nicklas 41   test.initPage = function()
7604 25 Feb 19 nicklas 42   {
7604 25 Feb 19 nicklas 43     // Buttons
7604 25 Feb 19 nicklas 44     Buttons.addClickHandler('close', App.closeWindow);
7604 25 Feb 19 nicklas 45     Buttons.addClickHandler('btnSave', test.save);
7604 25 Feb 19 nicklas 46     Buttons.addClickHandler('btnBrowse', test.selectFile);
7604 25 Feb 19 nicklas 47     Events.addEventHandler('path', 'base-selected', test.setFileCallback);
7604 25 Feb 19 nicklas 48     Buttons.addClickHandler('btnParse', test.parseFile);
7654 15 Mar 19 nicklas 49
7654 15 Mar 19 nicklas 50     Events.addEventHandler('sheet', 'change', test.autoParse);
7604 25 Feb 19 nicklas 51     Events.addEventHandler('maxLines', 'keypress', Events.integerOnly)
7604 25 Feb 19 nicklas 52     Events.addEventHandler('maxDataColumns', 'keypress', Events.integerOnly)
7604 25 Feb 19 nicklas 53     Events.addEventHandler('minDataColumns', 'keypress', Events.integerOnly)
7604 25 Feb 19 nicklas 54
7604 25 Feb 19 nicklas 55     Buttons.addClickHandler('btnHeaderRegexp', test.showPredefined);
7604 25 Feb 19 nicklas 56     Buttons.addClickHandler('btnSplitterRegexp', test.showPredefined);
7604 25 Feb 19 nicklas 57     Buttons.addClickHandler('btnIgnoreRegexp', test.showPredefined);
7604 25 Feb 19 nicklas 58     
7604 25 Feb 19 nicklas 59     test.initParameters();
7654 15 Mar 19 nicklas 60     var frm = document.forms['testwithfile'];
7654 15 Mar 19 nicklas 61     test.getFileInfo(Strings.trim(frm.path.value));
7604 25 Feb 19 nicklas 62   }
7604 25 Feb 19 nicklas 63   
7604 25 Feb 19 nicklas 64   test.initElements = function(element, autoInit)
7604 25 Feb 19 nicklas 65   {
7604 25 Feb 19 nicklas 66     if (autoInit == 'set-preset')
7604 25 Feb 19 nicklas 67     {
7604 25 Feb 19 nicklas 68       Events.addEventHandler(element, 'click', test.presetOnClick);
7604 25 Feb 19 nicklas 69     }
7604 25 Feb 19 nicklas 70   }
7604 25 Feb 19 nicklas 71   
7604 25 Feb 19 nicklas 72   test.selectFile = function()
7604 25 Feb 19 nicklas 73   {
7604 25 Feb 19 nicklas 74     var url = '&title=Test+with+file';
7604 25 Feb 19 nicklas 75     Dialogs.selectItem('FILE', 'path', 0, url);
7604 25 Feb 19 nicklas 76   }
7604 25 Feb 19 nicklas 77
7604 25 Feb 19 nicklas 78   test.setFileCallback = function(event)
7604 25 Feb 19 nicklas 79   {
7604 25 Feb 19 nicklas 80     var frm = document.forms['testwithfile'];
7604 25 Feb 19 nicklas 81     frm.file_id.value = event.detail.id;
7604 25 Feb 19 nicklas 82     frm.path.value = event.detail.name;
7654 15 Mar 19 nicklas 83     test.getFileInfo(event.detail.name, event.detail.id);
7604 25 Feb 19 nicklas 84   }
7604 25 Feb 19 nicklas 85   
7654 15 Mar 19 nicklas 86   test.getFileInfo = function(path, fileId)
7604 25 Feb 19 nicklas 87   {
7604 25 Feb 19 nicklas 88     var request = Ajax.getXmlHttpRequest();
7604 25 Feb 19 nicklas 89     if (request != null)
7604 25 Feb 19 nicklas 90     {
7604 25 Feb 19 nicklas 91       var url = App.getRoot()+'filemanager/files/ajax.jsp?ID='+App.getSessionId();
7654 15 Mar 19 nicklas 92       url += '&cmd=GetFileInfo&checktype=1';
7654 15 Mar 19 nicklas 93       if (fileId) 
7654 15 Mar 19 nicklas 94       {
7654 15 Mar 19 nicklas 95         url += '&item_id=' + fileId;
7654 15 Mar 19 nicklas 96       }
7654 15 Mar 19 nicklas 97       else if (path)
7654 15 Mar 19 nicklas 98       {
7654 15 Mar 19 nicklas 99         url += '&path=' + encodeURIComponent(path);
7654 15 Mar 19 nicklas 100       }
7654 15 Mar 19 nicklas 101       else
7654 15 Mar 19 nicklas 102       {
7654 15 Mar 19 nicklas 103         return false;
7654 15 Mar 19 nicklas 104       }
7654 15 Mar 19 nicklas 105       var frm = document.forms['testwithfile'];
7654 15 Mar 19 nicklas 106       Doc.addClass('btnParse', 'disabled');
7654 15 Mar 19 nicklas 107       frm.sheet.disabled = true;
7654 15 Mar 19 nicklas 108
7604 25 Feb 19 nicklas 109       request.open("GET", url, true);
7654 15 Mar 19 nicklas 110       Ajax.setReadyStateHandler(request, test.fileInfoCallback);
7604 25 Feb 19 nicklas 111       request.send(null);
7604 25 Feb 19 nicklas 112     }
7604 25 Feb 19 nicklas 113     return request != null;
7604 25 Feb 19 nicklas 114   }
7604 25 Feb 19 nicklas 115   
7654 15 Mar 19 nicklas 116   test.fileInfoCallback = function(request)
7604 25 Feb 19 nicklas 117   {
7654 15 Mar 19 nicklas 118     var frm = document.forms['testwithfile'];
7654 15 Mar 19 nicklas 119     Doc.removeClass('btnParse', 'disabled');
7654 15 Mar 19 nicklas 120     
7604 25 Feb 19 nicklas 121     var response = JSON.parse(request.responseText);
8013 13 Aug 21 nicklas 122     var excelMode = response.excelMode || false;
7654 15 Mar 19 nicklas 123
7654 15 Mar 19 nicklas 124     frm.filemode.value = excelMode ? 'excel' : 'csv';
7654 15 Mar 19 nicklas 125     Data.set(document.body, 'filemode', frm.filemode.value);
7654 15 Mar 19 nicklas 126
7654 15 Mar 19 nicklas 127     frm.sheet.length = 0;
7654 15 Mar 19 nicklas 128     frm.sheet.disabled = !excelMode;
7654 15 Mar 19 nicklas 129     frm.charset.disabled = excelMode;
7654 15 Mar 19 nicklas 130     frm.dataSplitter.disabled = excelMode;
7654 15 Mar 19 nicklas 131     Doc.addOrRemoveClass('btnSplitterRegexp', 'disabled', excelMode);
7654 15 Mar 19 nicklas 132     frm.trimQuotes.disabled = excelMode;
7654 15 Mar 19 nicklas 133     if (excelMode)
7604 25 Feb 19 nicklas 134     {
7654 15 Mar 19 nicklas 135       frm.dataSplitter.value = '\\t';
7654 15 Mar 19 nicklas 136       Forms.selectListOption(frm.charset, 'UTF-8');
7654 15 Mar 19 nicklas 137       frm.trimQuotes.checked = false;
7654 15 Mar 19 nicklas 138       for (var i = 0; i < response.sheets.length; i++)
7654 15 Mar 19 nicklas 139       {
7656 19 Mar 19 nicklas 140         var sheet = response.sheets[i];
7656 19 Mar 19 nicklas 141         frm.sheet[frm.sheet.length] = new Option((i+1) + ': '+sheet, sheet, false, currentExcelSheet == sheet);
7654 15 Mar 19 nicklas 142       }
7656 19 Mar 19 nicklas 143       if (!hasExcelSheetParameter && frm.sheet.length > 1)
7656 19 Mar 19 nicklas 144       {
7656 19 Mar 19 nicklas 145         Doc.show('noSheetSupportWarning', 'inline');
7656 19 Mar 19 nicklas 146       }
7656 19 Mar 19 nicklas 147       else
7656 19 Mar 19 nicklas 148       {
7656 19 Mar 19 nicklas 149         Doc.hide('noSheetSupportWarning');
7656 19 Mar 19 nicklas 150       }
7604 25 Feb 19 nicklas 151     }
7654 15 Mar 19 nicklas 152     else
7654 15 Mar 19 nicklas 153     {
7654 15 Mar 19 nicklas 154       if (charset)
7654 15 Mar 19 nicklas 155       {
7654 15 Mar 19 nicklas 156         var charset = response.characterSet;
7654 15 Mar 19 nicklas 157         Forms.selectListOption(frm.charset, charset);
7654 15 Mar 19 nicklas 158       }
7654 15 Mar 19 nicklas 159       frm.trimQuotes.checked = true;
7654 15 Mar 19 nicklas 160     }
7604 25 Feb 19 nicklas 161     test.autoParse();
7604 25 Feb 19 nicklas 162   }
7604 25 Feb 19 nicklas 163   
7604 25 Feb 19 nicklas 164   // Parse the selected file if we have the required parameters
7604 25 Feb 19 nicklas 165   test.autoParse = function()
7604 25 Feb 19 nicklas 166   {
7604 25 Feb 19 nicklas 167     var frm = document.forms['testwithfile'];
7604 25 Feb 19 nicklas 168     if (Strings.trim(frm.path.value) != '' && Strings.trim(frm.dataSplitter.value) != '')
7604 25 Feb 19 nicklas 169     {
7604 25 Feb 19 nicklas 170       test.parseFile();
7604 25 Feb 19 nicklas 171     }
7604 25 Feb 19 nicklas 172   }
7604 25 Feb 19 nicklas 173   
7604 25 Feb 19 nicklas 174   test.parseFile = function()
7604 25 Feb 19 nicklas 175   {
7604 25 Feb 19 nicklas 176     var frm = document.forms['testwithfile'];
7604 25 Feb 19 nicklas 177     if (Strings.trim(frm.path.value) == '')
7604 25 Feb 19 nicklas 178     {
7604 25 Feb 19 nicklas 179       Forms.showNotification('btnBrowse', 'You must select a file');
7604 25 Feb 19 nicklas 180       return false;
7604 25 Feb 19 nicklas 181     }
7604 25 Feb 19 nicklas 182     else if (Strings.trim(frm.dataSplitter.value) == '')
7604 25 Feb 19 nicklas 183     {
7604 25 Feb 19 nicklas 184       Forms.showNotification(frm.dataSplitter, 'You must specify a data splitter regular expression');
7604 25 Feb 19 nicklas 185       return false;
7604 25 Feb 19 nicklas 186     }
7654 15 Mar 19 nicklas 187     
7654 15 Mar 19 nicklas 188     var parseWin = window.frames['parsed'];
7655 19 Mar 19 nicklas 189     if (parseWin && parseWin.ParseFile)
7655 19 Mar 19 nicklas 190     {
7655 19 Mar 19 nicklas 191       parseWin.ParseFile.pleaseWaitWhileParsing();
7655 19 Mar 19 nicklas 192     }
7604 25 Feb 19 nicklas 193     frm.submit();
7604 25 Feb 19 nicklas 194   }
7604 25 Feb 19 nicklas 195   
7604 25 Feb 19 nicklas 196   test.initParameters = function()
7604 25 Feb 19 nicklas 197   {
7604 25 Feb 19 nicklas 198     var frm = document.forms['testwithfile'];
7604 25 Feb 19 nicklas 199     var configWin = window.opener;
7604 25 Feb 19 nicklas 200     frm.path.value = configWin.Configure.getParameterValue('file');
7604 25 Feb 19 nicklas 201     frm.header.value = configWin.Configure.getParameterValue('headerRegexp');
7604 25 Feb 19 nicklas 202     frm.dataHeader.value = configWin.Configure.getParameterValue('dataHeaderRegexp');
7604 25 Feb 19 nicklas 203     frm.dataSplitter.value = configWin.Configure.getParameterValue('dataSplitterRegexp');
7604 25 Feb 19 nicklas 204     frm.dataFooter.value = configWin.Configure.getParameterValue('dataFooterRegexp');
7604 25 Feb 19 nicklas 205     frm.ignore.value = configWin.Configure.getParameterValue('ignoreRegexp');
7604 25 Feb 19 nicklas 206     frm.minDataColumns.value = configWin.Configure.getParameterValue('minDataColumns');
7604 25 Feb 19 nicklas 207     frm.maxDataColumns.value = configWin.Configure.getParameterValue('maxDataColumns');
7604 25 Feb 19 nicklas 208     frm.trimQuotes.checked = configWin.Configure.getParameterValue('trimQuotes') != 'false';
7655 19 Mar 19 nicklas 209     frm.decimalSeparator.value = configWin.Configure.getParameterValue('decimalSeparator');
7654 15 Mar 19 nicklas 210     frm.dateFormat.value = configWin.Configure.getParameterValue('dateFormat');
7655 19 Mar 19 nicklas 211     frm.timestampFormat.value = configWin.Configure.getParameterValue('timestampFormat');
7656 19 Mar 19 nicklas 212     hasExcelSheetParameter = configWin.Configure.getParameterDef('excelSheet') != null;
7656 19 Mar 19 nicklas 213     currentExcelSheet = configWin.Configure.getParameterValue('excelSheet');
7656 19 Mar 19 nicklas 214     
7627 08 Mar 19 nicklas 215     // Copy the list since ith is not certain that it is the same as Config.allCharsets() 
7627 08 Mar 19 nicklas 216     var allCharsets = configWin.Doc.element('parameter-charset');
7627 08 Mar 19 nicklas 217     if (allCharsets)
7627 08 Mar 19 nicklas 218     {
7627 08 Mar 19 nicklas 219       frm.charset.length = 0;
7627 08 Mar 19 nicklas 220       for (var i = 0; i < allCharsets.length; i++)
7627 08 Mar 19 nicklas 221       {
7627 08 Mar 19 nicklas 222         var cs = allCharsets[i];
7627 08 Mar 19 nicklas 223         if (cs.value != '') frm.charset[frm.charset.length] = new Option(cs.text, cs.value);
7627 08 Mar 19 nicklas 224       }
7627 08 Mar 19 nicklas 225     }
7604 25 Feb 19 nicklas 226     Forms.selectListOption(frm.charset, configWin.Configure.getParameterValue('charset'));
7604 25 Feb 19 nicklas 227     
7604 25 Feb 19 nicklas 228     var allParameters = configWin.Configure.getAllParameters();
7604 25 Feb 19 nicklas 229     var parameterNames = [];
7604 25 Feb 19 nicklas 230     for (var i = 0; i < allParameters.length; i++)
7604 25 Feb 19 nicklas 231     {
7604 25 Feb 19 nicklas 232       var param = allParameters[i];
7604 25 Feb 19 nicklas 233       if (param.name.indexOf('Mapping') >= 0)
7604 25 Feb 19 nicklas 234       {
7604 25 Feb 19 nicklas 235         parameterNames[parameterNames.length] = param.name;
7604 25 Feb 19 nicklas 236         Forms.addHidden(frm, 'mapping.'+param.name+'.label', param.label);
7604 25 Feb 19 nicklas 237         Forms.addHidden(frm, 'mapping.'+param.name+'.expression', param.values.length == 0 ? '' : param.values[0]);
7604 25 Feb 19 nicklas 238       }
7604 25 Feb 19 nicklas 239     }
7604 25 Feb 19 nicklas 240     if (parameterNames.length > 0)
7604 25 Feb 19 nicklas 241     {
7604 25 Feb 19 nicklas 242       Forms.addHidden(frm, 'mappingParameterNames', parameterNames.join(','));
7604 25 Feb 19 nicklas 243     }
7604 25 Feb 19 nicklas 244   }
7604 25 Feb 19 nicklas 245   
7604 25 Feb 19 nicklas 246   test.save = function()
7604 25 Feb 19 nicklas 247   {
7604 25 Feb 19 nicklas 248     var frm = document.forms['testwithfile'];
7604 25 Feb 19 nicklas 249     var configWin = window.opener;
7604 25 Feb 19 nicklas 250     configWin.Configure.setParameterValue('file', frm.path.value);
7604 25 Feb 19 nicklas 251     configWin.Configure.setParameterValue('headerRegexp', frm.header.value);
7604 25 Feb 19 nicklas 252     configWin.Configure.setParameterValue('dataHeaderRegexp', frm.dataHeader.value);
7604 25 Feb 19 nicklas 253     configWin.Configure.setParameterValue('dataSplitterRegexp', frm.dataSplitter.value);
7604 25 Feb 19 nicklas 254     configWin.Configure.setParameterValue('dataFooterRegexp', frm.dataFooter.value);
7604 25 Feb 19 nicklas 255     configWin.Configure.setParameterValue('ignoreRegexp', frm.ignore.value);
7604 25 Feb 19 nicklas 256     configWin.Configure.setParameterValue('minDataColumns', frm.minDataColumns.value);
7604 25 Feb 19 nicklas 257     configWin.Configure.setParameterValue('maxDataColumns', frm.maxDataColumns.value);
7604 25 Feb 19 nicklas 258     configWin.Configure.setParameterValue('trimQuotes', frm.trimQuotes.checked ? 'true' : 'false');
7604 25 Feb 19 nicklas 259     configWin.Configure.setParameterValue('charset', frm.charset.value);
7656 19 Mar 19 nicklas 260     configWin.Configure.setParameterValue('excelSheet', frm.sheet.value);
7604 25 Feb 19 nicklas 261     
7604 25 Feb 19 nicklas 262     var allParameters = configWin.Configure.getAllParameters();
7604 25 Feb 19 nicklas 263     for (var i = 0; i < allParameters.length; i++)
7604 25 Feb 19 nicklas 264     {
7604 25 Feb 19 nicklas 265       var name = allParameters[i].name;
7604 25 Feb 19 nicklas 266       if (name.indexOf('Mapping') >= 0)
7604 25 Feb 19 nicklas 267       {
7604 25 Feb 19 nicklas 268         configWin.Configure.setParameterValue(name, frm['mapping.'+name+'.expression'].value);
7604 25 Feb 19 nicklas 269       }
7604 25 Feb 19 nicklas 270     }
7604 25 Feb 19 nicklas 271     window.close();
7604 25 Feb 19 nicklas 272   }
7604 25 Feb 19 nicklas 273   
7604 25 Feb 19 nicklas 274   test.showPredefined = function(event)
7604 25 Feb 19 nicklas 275   {
7604 25 Feb 19 nicklas 276     var menu = Data.get(event.currentTarget, 'predefined');
7604 25 Feb 19 nicklas 277     Menu.toggleTopMenu(menu, event.clientX, event.clientY); 
7604 25 Feb 19 nicklas 278     event.stopPropagation();
7604 25 Feb 19 nicklas 279   }
7604 25 Feb 19 nicklas 280   
7604 25 Feb 19 nicklas 281   test.presetOnClick = function(event)
7604 25 Feb 19 nicklas 282   {
7604 25 Feb 19 nicklas 283     var field = Data.get(event.currentTarget, 'field');
7604 25 Feb 19 nicklas 284     var value = Data.get(event.currentTarget, 'value');
7604 25 Feb 19 nicklas 285     test.setFormValue(field, value);
7604 25 Feb 19 nicklas 286   }
7604 25 Feb 19 nicklas 287   
7604 25 Feb 19 nicklas 288   test.setFormValue = function(field, value)
7604 25 Feb 19 nicklas 289   {
7604 25 Feb 19 nicklas 290     var frm = document.forms['testwithfile'];
7604 25 Feb 19 nicklas 291     frm[field].value = value;
7604 25 Feb 19 nicklas 292   }
7604 25 Feb 19 nicklas 293
7604 25 Feb 19 nicklas 294   return test;
7604 25 Feb 19 nicklas 295 }();
7604 25 Feb 19 nicklas 296
7604 25 Feb 19 nicklas 297 Doc.onLoad(TestWithFile.initPage);
7604 25 Feb 19 nicklas 298 Doc.addElementInitializer(TestWithFile.initElements);