www/common/plugin/test_with_file.jsp

Code
Comments
Other
Rev Date Author Line
2655 22 Sep 06 nicklas 1 <%-- $Id$
2655 22 Sep 06 nicklas 2   ------------------------------------------------------------------
3675 16 Aug 07 jari 3   Copyright (C) 2006 Johan Enell, Nicklas Nordborg
3675 16 Aug 07 jari 4   Copyright (C) 2007 Nicklas Nordborg
2655 22 Sep 06 nicklas 5
2655 22 Sep 06 nicklas 6   This file is part of BASE - BioArray Software Environment.
2655 22 Sep 06 nicklas 7   Available at http://base.thep.lu.se/
2655 22 Sep 06 nicklas 8
2655 22 Sep 06 nicklas 9   BASE is free software; you can redistribute it and/or
2655 22 Sep 06 nicklas 10   modify it under the terms of the GNU General Public License
4476 05 Sep 08 jari 11   as published by the Free Software Foundation; either version 3
2655 22 Sep 06 nicklas 12   of the License, or (at your option) any later version.
2655 22 Sep 06 nicklas 13
2655 22 Sep 06 nicklas 14   BASE is distributed in the hope that it will be useful,
2655 22 Sep 06 nicklas 15   but WITHOUT ANY WARRANTY; without even the implied warranty of
2655 22 Sep 06 nicklas 16   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
2655 22 Sep 06 nicklas 17   GNU General Public License for more details.
2655 22 Sep 06 nicklas 18
2655 22 Sep 06 nicklas 19   You should have received a copy of the GNU General Public License
4510 11 Sep 08 jari 20   along with BASE. If not, see <http://www.gnu.org/licenses/>.
2655 22 Sep 06 nicklas 21   ------------------------------------------------------------------
2655 22 Sep 06 nicklas 22
2655 22 Sep 06 nicklas 23   @author Nicklas
2655 22 Sep 06 nicklas 24   @version 2.0
2655 22 Sep 06 nicklas 25 --%>
5426 24 Sep 10 nicklas 26 <%@ page pageEncoding="UTF-8" session="false"
2992 01 Dec 06 enell 27   contentType="text/html; charset=UTF-8"  
2655 22 Sep 06 nicklas 28   import="net.sf.basedb.core.SessionControl"
2655 22 Sep 06 nicklas 29   import="net.sf.basedb.core.DbControl"
2655 22 Sep 06 nicklas 30   import="net.sf.basedb.core.Item"
2992 01 Dec 06 enell 31   import="net.sf.basedb.core.Config"
2655 22 Sep 06 nicklas 32   import="net.sf.basedb.core.Location"
2655 22 Sep 06 nicklas 33   import="net.sf.basedb.util.parser.FlatFileParser"
2655 22 Sep 06 nicklas 34   import="net.sf.basedb.clients.web.Base"
2753 20 Oct 06 nicklas 35   import="net.sf.basedb.util.Values"
4411 25 Aug 08 nicklas 36   import="net.sf.basedb.plugins.util.Parameters"
2655 22 Sep 06 nicklas 37   import="net.sf.basedb.clients.web.util.HTML"
2992 01 Dec 06 enell 38   import="java.nio.charset.Charset"
2655 22 Sep 06 nicklas 39 %>
2655 22 Sep 06 nicklas 40 <%@ taglib prefix="base" uri="/WEB-INF/base.tld" %>
2655 22 Sep 06 nicklas 41 <%@ taglib prefix="m" uri="/WEB-INF/menu.tld" %>
2655 22 Sep 06 nicklas 42
2655 22 Sep 06 nicklas 43 <%
2655 22 Sep 06 nicklas 44 final SessionControl sc = Base.getExistingSessionControl(pageContext, true);
2655 22 Sep 06 nicklas 45 final String ID = sc.getId();
7954 12 May 21 nicklas 46 final DbControl dc = sc.newDbControl(":Test with file");
2655 22 Sep 06 nicklas 47 try
2655 22 Sep 06 nicklas 48 {
2655 22 Sep 06 nicklas 49   %>
2655 22 Sep 06 nicklas 50   <base:page type="popup" title="Test with file">
7654 15 Mar 19 nicklas 51   <base:head scripts="menu.js,~test_with_file.js" styles="menu.css">
7654 15 Mar 19 nicklas 52   <style>
7654 15 Mar 19 nicklas 53   body:not([data-filemode="csv"]) .csv-mode
7654 15 Mar 19 nicklas 54   {
7654 15 Mar 19 nicklas 55     display: none;
7654 15 Mar 19 nicklas 56   }
7654 15 Mar 19 nicklas 57   body:not([data-filemode="excel"]) .excel-mode
7654 15 Mar 19 nicklas 58   {
7654 15 Mar 19 nicklas 59     display: none;
7654 15 Mar 19 nicklas 60   }
7654 15 Mar 19 nicklas 61   </style>
7654 15 Mar 19 nicklas 62   </base:head>
7654 15 Mar 19 nicklas 63   <base:body data-filemode="csv">
2655 22 Sep 06 nicklas 64
2655 22 Sep 06 nicklas 65   <m:menu 
2655 22 Sep 06 nicklas 66     id="predefinedSplitters"
2655 22 Sep 06 nicklas 67     style="display: none;">
2655 22 Sep 06 nicklas 68   
2655 22 Sep 06 nicklas 69     <m:menuitem 
6321 11 Sep 13 nicklas 70       subclass="auto-init"
6321 11 Sep 13 nicklas 71       data-auto-init="set-preset"
6321 11 Sep 13 nicklas 72       data-field="dataSplitter"
6321 11 Sep 13 nicklas 73       data-value="\t"
2655 22 Sep 06 nicklas 74       title="Tab" 
2655 22 Sep 06 nicklas 75       tooltip="Splits data on tab"
2655 22 Sep 06 nicklas 76     />
2655 22 Sep 06 nicklas 77     <m:menuitem 
6321 11 Sep 13 nicklas 78       subclass="auto-init"
6321 11 Sep 13 nicklas 79       data-auto-init="set-preset"
6321 11 Sep 13 nicklas 80       data-field="dataSplitter"
6321 11 Sep 13 nicklas 81       data-value=","
2655 22 Sep 06 nicklas 82       title="Comma" 
2655 22 Sep 06 nicklas 83       tooltip="Splits data on comma"
2655 22 Sep 06 nicklas 84     />
2655 22 Sep 06 nicklas 85     <m:menuitem 
6321 11 Sep 13 nicklas 86       subclass="auto-init"
6321 11 Sep 13 nicklas 87       data-auto-init="set-preset"
6321 11 Sep 13 nicklas 88       data-field="dataSplitter"
6321 11 Sep 13 nicklas 89       data-value=";"
2655 22 Sep 06 nicklas 90       title="Semicolon" 
2655 22 Sep 06 nicklas 91       tooltip="Splits data on semicolon"
2655 22 Sep 06 nicklas 92     />
2655 22 Sep 06 nicklas 93     <m:menuseparator />
2655 22 Sep 06 nicklas 94     <m:menuitem 
6321 11 Sep 13 nicklas 95       subclass="auto-init"
6321 11 Sep 13 nicklas 96       data-auto-init="set-preset"
6321 11 Sep 13 nicklas 97       data-field="dataSplitter"
6321 11 Sep 13 nicklas 98       data-value="(?!&#34;)\t(?=&#34;)"
2655 22 Sep 06 nicklas 99       title="Tab with quotes" 
2655 22 Sep 06 nicklas 100       tooltip="Splits data on tab, but only if it is has quotes before and after"
2655 22 Sep 06 nicklas 101     />
2655 22 Sep 06 nicklas 102     <m:menuitem 
6321 11 Sep 13 nicklas 103       subclass="auto-init"
6321 11 Sep 13 nicklas 104       data-auto-init="set-preset"
6321 11 Sep 13 nicklas 105       data-field="dataSplitter"
6321 11 Sep 13 nicklas 106       data-value="(?!&#34;),(?=&#34;)"
2655 22 Sep 06 nicklas 107       title="Comma with quotes" 
2655 22 Sep 06 nicklas 108       tooltip="Splits data on comma, but only if it is has quotes before and after"
2655 22 Sep 06 nicklas 109     />
2655 22 Sep 06 nicklas 110     <m:menuitem 
6321 11 Sep 13 nicklas 111       subclass="auto-init"
6321 11 Sep 13 nicklas 112       data-auto-init="set-preset"
6321 11 Sep 13 nicklas 113       data-field="dataSplitter"
6321 11 Sep 13 nicklas 114       data-value="(?!&#34;);(?=&#34;)"
2655 22 Sep 06 nicklas 115       title="Semicolon with quotes" 
2655 22 Sep 06 nicklas 116       tooltip="Splits data on semicolon, but only if it is has quotes before and after"
2655 22 Sep 06 nicklas 117     />
3620 02 Aug 07 nicklas 118     <m:menuseparator />
3620 02 Aug 07 nicklas 119     <m:menuitem 
6321 11 Sep 13 nicklas 120       subclass="auto-init"
6321 11 Sep 13 nicklas 121       data-auto-init="set-preset"
6321 11 Sep 13 nicklas 122       data-field="dataSplitter"
6321 11 Sep 13 nicklas 123       data-value=",(?=(?:[^&#34;]*&#34;[^&#34;]*&#34;)*(?![^&#34;]*&#34;))"
3620 02 Aug 07 nicklas 124       title="Comma; ignored inside quotes" 
3620 02 Aug 07 nicklas 125       tooltip="Splits data on comma, but not if they are inside quotes"
3620 02 Aug 07 nicklas 126     />
3620 02 Aug 07 nicklas 127     <m:menuitem 
6321 11 Sep 13 nicklas 128       subclass="auto-init"
6321 11 Sep 13 nicklas 129       data-auto-init="set-preset"
6321 11 Sep 13 nicklas 130       data-field="dataSplitter"
6321 11 Sep 13 nicklas 131       data-value=";(?=(?:[^&#34;]*&#34;[^&#34;]*&#34;)*(?![^&#34;]*&#34;))"
6321 11 Sep 13 nicklas 132       title="Semicolon; ignored inside quotes"
3620 02 Aug 07 nicklas 133       tooltip="Splits data on semicolon, but not if they are inside quotes"
3620 02 Aug 07 nicklas 134     />
2655 22 Sep 06 nicklas 135   </m:menu>
2655 22 Sep 06 nicklas 136
2655 22 Sep 06 nicklas 137   <m:menu 
2655 22 Sep 06 nicklas 138     id="predefinedHeaders"
2655 22 Sep 06 nicklas 139     style="display: none;">
2655 22 Sep 06 nicklas 140     <m:menuitem 
6321 11 Sep 13 nicklas 141       subclass="auto-init"
6321 11 Sep 13 nicklas 142       data-auto-init="set-preset"
6321 11 Sep 13 nicklas 143       data-field="header"
6321 11 Sep 13 nicklas 144       data-value="(.+)=(.*)"
2655 22 Sep 06 nicklas 145       title="Key = value" 
2655 22 Sep 06 nicklas 146       tooltip="Headers have a key and value separated by an equal sign"
2655 22 Sep 06 nicklas 147     />
2655 22 Sep 06 nicklas 148     <m:menuitem
6321 11 Sep 13 nicklas 149       subclass="auto-init"
6321 11 Sep 13 nicklas 150       data-auto-init="set-preset"
6321 11 Sep 13 nicklas 151       data-field="header"
6321 11 Sep 13 nicklas 152       data-value="[\s\&#34;]*(.+?)[\s\&#34;]*=[\s\&#34;]*(.*?)[\s\&#34;]*"
2655 22 Sep 06 nicklas 153       title="Key = value; remove whitespace and quotes"
2655 22 Sep 06 nicklas 154       tooltip="Header have a key and value separated by an equal sign; whitespace and quotes are removed"
2655 22 Sep 06 nicklas 155     />
2655 22 Sep 06 nicklas 156   </m:menu>
2655 22 Sep 06 nicklas 157   
2655 22 Sep 06 nicklas 158   <m:menu 
2655 22 Sep 06 nicklas 159     id="predefinedIgnore"
2655 22 Sep 06 nicklas 160     style="display: none;">
2655 22 Sep 06 nicklas 161     <m:menuitem 
6321 11 Sep 13 nicklas 162       subclass="auto-init"
6321 11 Sep 13 nicklas 163       data-auto-init="set-preset"
6321 11 Sep 13 nicklas 164       data-field="ignore"
6321 11 Sep 13 nicklas 165       data-value="#.*"
2655 22 Sep 06 nicklas 166       title="# Comment" 
2655 22 Sep 06 nicklas 167       tooltip="Ignore all lines starting with #"
2655 22 Sep 06 nicklas 168     />
4427 01 Sep 08 nicklas 169     <m:menuitem 
6321 11 Sep 13 nicklas 170       subclass="auto-init"
6321 11 Sep 13 nicklas 171       data-auto-init="set-preset"
6321 11 Sep 13 nicklas 172       data-field="ignore"
6321 11 Sep 13 nicklas 173       data-value="\s*"
4427 01 Sep 08 nicklas 174       title="Empty line" 
4427 01 Sep 08 nicklas 175       tooltip="Ignore all lines that contains nothing but white-space"
4427 01 Sep 08 nicklas 176     />
2655 22 Sep 06 nicklas 177   </m:menu>
5955 13 Feb 12 nicklas 178     <h1>Test with file <base:help helpid="runplugin.testwithfile" /></h1>
6162 10 Oct 12 nicklas 179     <form name="testwithfile" action="parse_file.jsp?ID=<%=ID%>" target="parsed" method="post">
2655 22 Sep 06 nicklas 180     <input type="hidden" name="file_id" value="">
7654 15 Mar 19 nicklas 181     <input type="hidden" name="filemode" value="csv">
7655 19 Mar 19 nicklas 182     <input type="hidden" name="decimalSeparator" value="">
7654 15 Mar 19 nicklas 183     <input type="hidden" name="dateFormat" value="">
7655 19 Mar 19 nicklas 184     <input type="hidden" name="timestampFormat" value="">
2655 22 Sep 06 nicklas 185
5955 13 Feb 12 nicklas 186     <div class="content">
5955 13 Feb 12 nicklas 187       <div class="absolutefull" style="height: 15em;">
5955 13 Feb 12 nicklas 188       <table class="fullform input100 bottomborder">
5955 13 Feb 12 nicklas 189       <tr>
7654 15 Mar 19 nicklas 190         <th>File (CSV or Excel)</th>
2655 22 Sep 06 nicklas 191         <td colspan="3">
5955 13 Feb 12 nicklas 192           <table style="width: 100%;">
2655 22 Sep 06 nicklas 193             <tr>
6322 11 Sep 13 nicklas 194             <td><input type="text" class="text required" name="path" id="path" value=""></td>
6200 05 Nov 12 nicklas 195             <td style="width: 11em;"><base:button id="btnBrowse" title="Browse&hellip;" style="width: 10em;" /></td>
6200 05 Nov 12 nicklas 196             <td style="width: 11em;"><base:button id="btnParse" title="Parse the file" style="width: 10em;" image="gonext.png"/></td>
2655 22 Sep 06 nicklas 197             </tr>
2655 22 Sep 06 nicklas 198           </table>
2655 22 Sep 06 nicklas 199         </td>
2655 22 Sep 06 nicklas 200       </tr>
5955 13 Feb 12 nicklas 201       <tr>
5955 13 Feb 12 nicklas 202         <th>Lines to parse</th>
2992 01 Dec 06 enell 203         <td>
6200 05 Nov 12 nicklas 204           <input type="text" class="text" name="maxLines" 
6200 05 Nov 12 nicklas 205             id="maxLines" style="width: 15em;" maxlength="10"
6200 05 Nov 12 nicklas 206             value="<%=FlatFileParser.DEFAULT_MAX_UNKNOWN_LINES%>">
2655 22 Sep 06 nicklas 207         </td>
7656 19 Mar 19 nicklas 208         <th class="leftborder">Excel sheet</th>
7654 15 Mar 19 nicklas 209         <td>
7654 15 Mar 19 nicklas 210           <select id="sheet" name="sheet" style="min-width: 20em;" disabled>
7654 15 Mar 19 nicklas 211           </select>
7656 19 Mar 19 nicklas 212           <base:icon image="warning.png" id="noSheetSupportWarning" 
7656 19 Mar 19 nicklas 213             tooltip="This plug-in only support import from the first sheet" 
7656 19 Mar 19 nicklas 214             style="display: none;"
7656 19 Mar 19 nicklas 215           />
7654 15 Mar 19 nicklas 216         </td>
7654 15 Mar 19 nicklas 217       </tr>
7654 15 Mar 19 nicklas 218       <tr >
7654 15 Mar 19 nicklas 219         <th>Header regexp</th>
7654 15 Mar 19 nicklas 220         <td>
7654 15 Mar 19 nicklas 221           <table style="width: 100%;">
7654 15 Mar 19 nicklas 222           <tr>
7654 15 Mar 19 nicklas 223           <td><input type="text" class="text" name="header"></td>
7654 15 Mar 19 nicklas 224           <td style="width: 11em;">
7654 15 Mar 19 nicklas 225             <base:button title="Predefined&hellip;" style="width: 10em;"
7654 15 Mar 19 nicklas 226               id="btnHeaderRegexp" data-predefined="predefinedHeaders" />
7654 15 Mar 19 nicklas 227           </td>
7654 15 Mar 19 nicklas 228           </tr>
7654 15 Mar 19 nicklas 229           </table>
7654 15 Mar 19 nicklas 230         </td>
5955 13 Feb 12 nicklas 231         <th class="leftborder">Character set</th>
2992 01 Dec 06 enell 232         <td>
7654 15 Mar 19 nicklas 233           <select name="charset" style="min-width: 20em;">
2992 01 Dec 06 enell 234           <%
2992 01 Dec 06 enell 235           String defaultCharset = Config.getCharset();
5570 16 Feb 11 nicklas 236           int numCommon = Config.getCommonCharsets().size();
5570 16 Feb 11 nicklas 237           int i = 0;
5570 16 Feb 11 nicklas 238           for (String charset : Config.getAllCharsets())
2992 01 Dec 06 enell 239           {
2992 01 Dec 06 enell 240             %>
2992 01 Dec 06 enell 241             <option value="<%=charset%>" 
5570 16 Feb 11 nicklas 242               <%=defaultCharset.equalsIgnoreCase(charset) ? "selected" : ""%> 
5570 16 Feb 11 nicklas 243               <%=i==numCommon ? "style=\"border-top: 1px solid #666666;\"" : "" %>><%=charset%>
2992 01 Dec 06 enell 244             <%
5570 16 Feb 11 nicklas 245             i++;
2992 01 Dec 06 enell 246           }
2992 01 Dec 06 enell 247           %>
2992 01 Dec 06 enell 248           </select>
2992 01 Dec 06 enell 249         </td>
2655 22 Sep 06 nicklas 250       </tr>
7654 15 Mar 19 nicklas 251       <tr>
7654 15 Mar 19 nicklas 252         <th>Data splitter regexp</th>
2655 22 Sep 06 nicklas 253         <td>
5955 13 Feb 12 nicklas 254           <table style="width: 100%;">
2655 22 Sep 06 nicklas 255           <tr>
7654 15 Mar 19 nicklas 256           <td><input type="text" class="text required" name="dataSplitter"></td>
5955 13 Feb 12 nicklas 257           <td style="width: 11em;">
5955 13 Feb 12 nicklas 258             <base:button title="Predefined&hellip;" style="width: 10em;"
7654 15 Mar 19 nicklas 259               id="btnSplitterRegexp" data-predefined="predefinedSplitters" />
2655 22 Sep 06 nicklas 260           </td>
2655 22 Sep 06 nicklas 261           </tr>
2655 22 Sep 06 nicklas 262           </table>
2655 22 Sep 06 nicklas 263         </td>
5955 13 Feb 12 nicklas 264         <th class="leftborder">Min data columns</th>
2655 22 Sep 06 nicklas 265         <td>
6200 05 Nov 12 nicklas 266           <input type="text" class="text" name="minDataColumns" 
6200 05 Nov 12 nicklas 267             id="minDataColumns"  style="width: 15em;" maxlength="10">
2655 22 Sep 06 nicklas 268         </td>
2655 22 Sep 06 nicklas 269       </tr>
5905 12 Dec 11 nicklas 270       <tr >
7654 15 Mar 19 nicklas 271         <th>Ignore regexp</th>
2655 22 Sep 06 nicklas 272         <td>
5955 13 Feb 12 nicklas 273           <table style="width: 100%;">
2655 22 Sep 06 nicklas 274           <tr>
7654 15 Mar 19 nicklas 275           <td><input type="text" class="text" name="ignore"></td>
5955 13 Feb 12 nicklas 276           <td style="width: 11em;">
5955 13 Feb 12 nicklas 277             <base:button title="Predefined&hellip;" style="width: 10em;"
7654 15 Mar 19 nicklas 278               id="btnIgnoreRegexp" data-predefined="predefinedIgnore" />
2655 22 Sep 06 nicklas 279           </td>
2655 22 Sep 06 nicklas 280           </tr>
2655 22 Sep 06 nicklas 281           </table>
2655 22 Sep 06 nicklas 282         </td>
5955 13 Feb 12 nicklas 283         <th class="leftborder">Max data columns</th>
2655 22 Sep 06 nicklas 284         <td>
6200 05 Nov 12 nicklas 285           <input type="text" class="text" name="maxDataColumns" 
6200 05 Nov 12 nicklas 286             id="maxDataColumns"  style="width: 15em;" maxlength="10">
2655 22 Sep 06 nicklas 287         </td>
2655 22 Sep 06 nicklas 288       </tr>
5905 12 Dec 11 nicklas 289       <tr >
7654 15 Mar 19 nicklas 290         <th>Data header regexp</th>
7654 15 Mar 19 nicklas 291         <td><input type="text" class="text" name="dataHeader"></td>
5955 13 Feb 12 nicklas 292         <th class="leftborder"><label for="trimQuotes">Remove quotes</label></th>
5812 17 Oct 11 nicklas 293         <td><input type="checkbox" name="trimQuotes" id="trimQuotes" value="1"></td>
2655 22 Sep 06 nicklas 294       </tr>
5955 13 Feb 12 nicklas 295       <tr class="dynamic">
5955 13 Feb 12 nicklas 296         <th>Data footer regexp</th>
5955 13 Feb 12 nicklas 297         <td><input type="text" class="text" name="dataFooter"></td>
5955 13 Feb 12 nicklas 298         <th class="subprompt leftborder"></th>
5955 13 Feb 12 nicklas 299         <td></td>
2655 22 Sep 06 nicklas 300       </tr>
5955 13 Feb 12 nicklas 301         
2655 22 Sep 06 nicklas 302       </table>
5955 13 Feb 12 nicklas 303     </div>
2655 22 Sep 06 nicklas 304       
6139 19 Sep 12 nicklas 305     <div class="absolutefull" style="top: 16em;"><iframe class="absolutefull"
6021 19 Mar 12 nicklas 306       name="parsed" id="idParsed" src="parse_file.jsp?ID=<%=ID%>" 
6021 19 Mar 12 nicklas 307         style="width: 100%; height: 100%;"></iframe></div>
5955 13 Feb 12 nicklas 308   
5955 13 Feb 12 nicklas 309     </div>
2655 22 Sep 06 nicklas 310     </form>
2655 22 Sep 06 nicklas 311   
5955 13 Feb 12 nicklas 312     <base:buttongroup subclass="dialogbuttons">
6200 05 Nov 12 nicklas 313       <base:button id="btnSave" title="Ok" />
6200 05 Nov 12 nicklas 314       <base:button id="close" title="Cancel" />
5955 13 Feb 12 nicklas 315     </base:buttongroup>
2655 22 Sep 06 nicklas 316   </base:body>
2655 22 Sep 06 nicklas 317   </base:page>
2655 22 Sep 06 nicklas 318   <%
2655 22 Sep 06 nicklas 319 }
2655 22 Sep 06 nicklas 320 finally
2655 22 Sep 06 nicklas 321 {
2655 22 Sep 06 nicklas 322   if (dc != null) dc.close();
2655 22 Sep 06 nicklas 323 }
2655 22 Sep 06 nicklas 324 %>
2655 22 Sep 06 nicklas 325