Changeset 7654
- Timestamp:
- Mar 15, 2019, 2:35:35 PM (4 years ago)
- Location:
- trunk
- Files:
-
- 1 added
- 6 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/src/core/net/sf/basedb/core/Install.java
r7653 r7654 71 71 import net.sf.basedb.util.Values; 72 72 import net.sf.basedb.util.XmlUtil2; 73 import net.sf.basedb.util.excel.XlsxToCsvUtil; 73 74 import net.sf.basedb.util.extensions.manager.Settings; 74 75 import net.sf.basedb.util.extensions.xml.PluginInfo; … … 627 628 createMimeType("application/vnd.ms-excel", "Excel spreadsheet (Microsoft)", "xlm", null, true); 628 629 createMimeType("application/vnd.ms-excel", "Excel spreadsheet (Microsoft)", "xlw", null, true); 629 createMimeType( "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet", "Microsoft Office Excel 2007 workbook", "xlsx", null, false);630 createMimeType(XlsxToCsvUtil.XLSX_MIME_TYPE, "Microsoft Office Excel 2007 workbook", "xlsx", null, false); 630 631 createMimeType("application/x-compress", "Unix compressed file", "z", null, false); 631 632 createMimeType("application/zip", "DOS/PC - Pkzipped archive", "zip", null, false); -
trunk/www/common/plugin/parse_file.js
r7604 r7654 44 44 } 45 45 46 parse.pleaseWaitWhileParsing = function() 47 { 48 TabControl.setActiveTab('parsedFile.filedata'); 49 Doc.hide('myContent'); 50 Doc.show('waitWhileParsing'); 51 } 52 46 53 parse.initColumnMapping = function(element, autoInit) 47 54 { -
trunk/www/common/plugin/parse_file.jsp
r7605 r7654 39 39 import="net.sf.basedb.clients.web.Base" 40 40 import="net.sf.basedb.util.Values" 41 import="net.sf.basedb.util.formatter.DateFormatter" 42 import="net.sf.basedb.util.NumberFormatUtil" 43 import="net.sf.basedb.util.excel.XlsxToCsvUtil" 44 import="net.sf.basedb.util.excel.XlsxToCsvUtil.SheetInfo" 41 45 import="net.sf.basedb.util.fuzzy.StringMatcher" 42 46 import="net.sf.basedb.util.fuzzy.StringMatcher.FuzzyMatch" … … 65 69 { 66 70 String path = request.getParameter("path"); 67 String charsetName = Values.getString(request.getParameter("charset"), Config.getCharset()); 71 boolean excelMode = "excel".equals(Values.getString(request.getParameter("filemode"))); 72 String charsetName = Values.getString(request.getParameter("charset"), excelMode ? "UTF-8" : Config.getCharset()); 73 String sheet = Values.getStringOrNull(request.getParameter("sheet")); 68 74 PluginConfigurationRequest pcRequest = sc.getSessionSetting("plugin.configure.request"); 69 75 Plugin plugin = pcRequest.getPlugin(); … … 100 106 } 101 107 102 String dataSplitter = Values.getString OrNull(request.getParameter("dataSplitter"));108 String dataSplitter = Values.getString(request.getParameter("dataSplitter"), excelMode ? "\\t" : null); 103 109 if (dataSplitter != null) 104 110 { … … 163 169 fileInputStream = wex.wrapInputStream(fileInputStream); 164 170 } 171 172 if (excelMode) 173 { 174 // TODO - this should be inside the FlatFileParser 175 String dateFormat = Values.getString(request.getParameter("dateFormat"), "yyyy-MM-dd"); 176 XlsxToCsvUtil util = new XlsxToCsvUtil(); 177 util.setDateFormat(new DateFormatter(dateFormat)); 178 util.setEvaluateFormulas(true); 179 util.readWorkbook(fileInputStream); 180 SheetInfo sheetInfo = util.getSheetAsCsv(sheet); 181 fileInputStream = sheetInfo.parseToCsv(); 182 } 183 165 184 parser.setInputStream(fileInputStream, charsetName); 166 185 lastLine = parser.parseHeaders(); … … 207 226 title="File data" 208 227 > 209 228 <div id="waitWhileParsing" class="absolutefull bg-filled-100" style="display: none;"> 229 <div class="messagecontainer error"> 230 Parsing file. Please wait... 231 </div> 232 </div> 233 <div id="myContent"> 210 234 <% 211 235 if (file == null) 212 236 { 213 237 %> 214 <div class="absolutefull bg-filled- 50">238 <div class="absolutefull bg-filled-100"> 215 239 <div class="messagecontainer error"> 216 240 No file selected. Please select a file to test above. … … 224 248 { 225 249 %> 226 <div class="bg-filled- 50" style="padding: 5px;">250 <div class="bg-filled-100" style="padding: 5px;"> 227 251 <div class="messagecontainer error" style="margin: 0;"> 228 252 <b>Could not parse the file <code><%=HTML.encodeTags(path)%></code></b> … … 384 408 } 385 409 %> 410 </div> 386 411 </t:tab> 387 412 -
trunk/www/common/plugin/test_with_file.js
r7627 r7654 44 44 Events.addEventHandler('path', 'base-selected', test.setFileCallback); 45 45 Buttons.addClickHandler('btnParse', test.parseFile); 46 46 47 Events.addEventHandler('sheet', 'change', test.autoParse); 47 48 Events.addEventHandler('maxLines', 'keypress', Events.integerOnly) 48 49 Events.addEventHandler('maxDataColumns', 'keypress', Events.integerOnly) … … 54 55 55 56 test.initParameters(); 56 test.autoParse(); 57 var frm = document.forms['testwithfile']; 58 test.getFileInfo(Strings.trim(frm.path.value)); 57 59 } 58 60 … … 76 78 frm.file_id.value = event.detail.id; 77 79 frm.path.value = event.detail.name; 78 test. updateCharset(event.detail.id);79 } 80 81 test. updateCharset = function(fileId)80 test.getFileInfo(event.detail.name, event.detail.id); 81 } 82 83 test.getFileInfo = function(path, fileId) 82 84 { 83 85 var request = Ajax.getXmlHttpRequest(); … … 85 87 { 86 88 var url = App.getRoot()+'filemanager/files/ajax.jsp?ID='+App.getSessionId(); 87 url += '&cmd=GetFileInfo&item_id=' + fileId; 89 url += '&cmd=GetFileInfo&checktype=1'; 90 if (fileId) 91 { 92 url += '&item_id=' + fileId; 93 } 94 else if (path) 95 { 96 url += '&path=' + encodeURIComponent(path); 97 } 98 else 99 { 100 return false; 101 } 102 var frm = document.forms['testwithfile']; 103 Doc.addClass('btnParse', 'disabled'); 104 frm.sheet.disabled = true; 105 88 106 request.open("GET", url, true); 89 Ajax.setReadyStateHandler(request, test. updateCharsetCallback);107 Ajax.setReadyStateHandler(request, test.fileInfoCallback); 90 108 request.send(null); 91 109 } … … 93 111 } 94 112 95 test.updateCharsetCallback = function(request) 96 { 113 test.fileInfoCallback = function(request) 114 { 115 var frm = document.forms['testwithfile']; 116 Doc.removeClass('btnParse', 'disabled'); 117 97 118 var response = JSON.parse(request.responseText); 98 var charset = response.characterSet; 99 var frm = document.forms['testwithfile']; 100 if (charset) 101 { 102 Forms.selectListOption(frm.charset, charset); 119 var excelMode = response.excelMode; 120 121 frm.filemode.value = excelMode ? 'excel' : 'csv'; 122 Data.set(document.body, 'filemode', frm.filemode.value); 123 124 frm.sheet.length = 0; 125 frm.sheet.disabled = !excelMode; 126 frm.charset.disabled = excelMode; 127 frm.dataSplitter.disabled = excelMode; 128 Doc.addOrRemoveClass('btnSplitterRegexp', 'disabled', excelMode); 129 frm.trimQuotes.disabled = excelMode; 130 if (excelMode) 131 { 132 frm.dataSplitter.value = '\\t'; 133 Forms.selectListOption(frm.charset, 'UTF-8'); 134 frm.trimQuotes.checked = false; 135 for (var i = 0; i < response.sheets.length; i++) 136 { 137 frm.sheet[frm.sheet.length] = new Option(response.sheets[i]); 138 } 139 } 140 else 141 { 142 if (charset) 143 { 144 var charset = response.characterSet; 145 Forms.selectListOption(frm.charset, charset); 146 } 147 frm.trimQuotes.checked = true; 103 148 } 104 149 test.autoParse(); … … 128 173 return false; 129 174 } 175 176 var parseWin = window.frames['parsed']; 177 parseWin.ParseFile.pleaseWaitWhileParsing(); 130 178 frm.submit(); 131 179 } 132 133 180 134 181 test.initParameters = function() … … 145 192 frm.maxDataColumns.value = configWin.Configure.getParameterValue('maxDataColumns'); 146 193 frm.trimQuotes.checked = configWin.Configure.getParameterValue('trimQuotes') != 'false'; 147 194 frm.dateFormat.value = configWin.Configure.getParameterValue('dateFormat'); 195 148 196 // Copy the list since ith is not certain that it is the same as Config.allCharsets() 149 197 var allCharsets = configWin.Doc.element('parameter-charset'); -
trunk/www/common/plugin/test_with_file.jsp
r6322 r7654 49 49 %> 50 50 <base:page type="popup" title="Test with file"> 51 <base:head scripts="menu.js,~test_with_file.js" styles="menu.css" /> 52 <base:body> 51 <base:head scripts="menu.js,~test_with_file.js" styles="menu.css"> 52 <style> 53 body:not([data-filemode="csv"]) .csv-mode 54 { 55 display: none; 56 } 57 body:not([data-filemode="excel"]) .excel-mode 58 { 59 display: none; 60 } 61 </style> 62 </base:head> 63 <base:body data-filemode="csv"> 53 64 54 65 <m:menu … … 168 179 <form name="testwithfile" action="parse_file.jsp?ID=<%=ID%>" target="parsed" method="post"> 169 180 <input type="hidden" name="file_id" value=""> 181 <input type="hidden" name="filemode" value="csv"> 182 <input type="hidden" name="dateFormat" value=""> 170 183 171 184 <div class="content"> … … 173 186 <table class="fullform input100 bottomborder"> 174 187 <tr> 175 <th>File to test</th>188 <th>File (CSV or Excel)</th> 176 189 <td colspan="3"> 177 190 <table style="width: 100%;"> … … 191 204 value="<%=FlatFileParser.DEFAULT_MAX_UNKNOWN_LINES%>"> 192 205 </td> 206 <th class="leftborder">Excel Sheet</th> 207 <td> 208 <select id="sheet" name="sheet" style="min-width: 20em;" disabled> 209 </select> 210 </td> 211 </tr> 212 <tr > 213 <th>Header regexp</th> 214 <td> 215 <table style="width: 100%;"> 216 <tr> 217 <td><input type="text" class="text" name="header"></td> 218 <td style="width: 11em;"> 219 <base:button title="Predefined…" style="width: 10em;" 220 id="btnHeaderRegexp" data-predefined="predefinedHeaders" /> 221 </td> 222 </tr> 223 </table> 224 </td> 193 225 <th class="leftborder">Character set</th> 194 226 <td> 195 <select name="charset" >227 <select name="charset" style="min-width: 20em;"> 196 228 <% 197 229 String defaultCharset = Config.getCharset(); … … 211 243 </td> 212 244 </tr> 213 <tr 214 <th> Header regexp</th>245 <tr> 246 <th>Data splitter regexp</th> 215 247 <td> 216 248 <table style="width: 100%;"> 217 249 <tr> 218 <td><input type="text" class="text" name="header"></td> 219 <td style="width: 11em;"> 220 <base:button title="Predefined…" style="width: 10em;" 221 id="btnHeaderRegexp" data-predefined="predefinedHeaders" /> 222 </td> 223 </tr> 224 </table> 225 </td> 226 <th class="leftborder">Min data columns</th> 227 <td> 228 <input type="text" class="text" name="minDataColumns" 229 id="minDataColumns" style="width: 15em;" maxlength="10"> 230 </td> 231 </tr> 232 <tr > 233 <th>Data splitter regexp</th> 234 <td> 235 <table style="width: 100%;"> 236 <tr> 237 <td><input type="text" class="text required" name="dataSplitter" ></td> 250 <td><input type="text" class="text required" name="dataSplitter"></td> 238 251 <td style="width: 11em;"> 239 252 <base:button title="Predefined…" style="width: 10em;" … … 243 256 </table> 244 257 </td> 245 <th class="leftborder">M axdata columns</th>246 <td> 247 <input type="text" class="text" name="m axDataColumns"248 id="m axDataColumns" style="width: 15em;" maxlength="10">258 <th class="leftborder">Min data columns</th> 259 <td> 260 <input type="text" class="text" name="minDataColumns" 261 id="minDataColumns" style="width: 15em;" maxlength="10"> 249 262 </td> 250 263 </tr> … … 262 275 </table> 263 276 </td> 264 <th class="leftborder"><label for="trimQuotes">Remove quotes</label></th> 265 <td><input type="checkbox" name="trimQuotes" id="trimQuotes" value="1"></td> 277 <th class="leftborder">Max data columns</th> 278 <td> 279 <input type="text" class="text" name="maxDataColumns" 280 id="maxDataColumns" style="width: 15em;" maxlength="10"> 281 </td> 266 282 </tr> 267 283 <tr > 268 284 <th>Data header regexp</th> 269 285 <td><input type="text" class="text" name="dataHeader"></td> 270 <th class=" subprompt leftborder"></th>271 <td>< /td>286 <th class="leftborder"><label for="trimQuotes">Remove quotes</label></th> 287 <td><input type="checkbox" name="trimQuotes" id="trimQuotes" value="1"></td> 272 288 </tr> 273 289 <tr class="dynamic"> -
trunk/www/filemanager/files/ajax.jsp
r7626 r7654 28 28 import="net.sf.basedb.core.File" 29 29 import="net.sf.basedb.core.InvalidDataException" 30 import="net.sf.basedb.core.Path" 30 31 import="net.sf.basedb.util.Values" 31 32 import="net.sf.basedb.util.FileUtil" 33 import="net.sf.basedb.util.excel.XlsxToCsvUtil" 32 34 import="net.sf.basedb.util.error.ThrowableUtil" 33 35 import="net.sf.basedb.clients.web.Base" … … 49 51 final String root = request.getContextPath()+"/"; 50 52 final int itemId = Values.getInt(request.getParameter("item_id")); 53 final String path = Values.getStringOrNull(request.getParameter("path")); 51 54 DbControl dc = null; 52 55 out.clear(); … … 58 61 { 59 62 dc = sc.newDbControl(); 60 File f = File.getById(dc, itemId); 63 File f = null; 64 if (itemId != 0) 65 { 66 f = File.getById(dc, itemId); 67 } 68 else 69 { 70 f = File.getByPath(dc, new Path(path, Path.Type.FILE), false); 71 } 61 72 json.put("id", f.getId()); 62 73 json.put("name", f.getName()); 63 74 json.put("characterSet", f.getCharacterSet()); 75 json.put("mimeType", f.getMimeType()); 76 if (Values.getBoolean(request.getParameter("checktype"))) 77 { 78 if (XlsxToCsvUtil.seemsLikeAnExcelFile(f)) 79 { 80 XlsxToCsvUtil util = new XlsxToCsvUtil(); 81 try 82 { 83 util.readWorkbook(f.getDownloadStream(0)); 84 json.put("excelMode", true); 85 json.put("sheets", util.getSheetNames()); 86 } 87 catch (Exception ex) 88 {} // It was maybe not an Excel file after all 89 } 90 } 64 91 dc.close(); 65 92 }
Note: See TracChangeset
for help on using the changeset viewer.