extensions/net.sf.basedb.reggie/trunk/resources/libprep/import-external-rna.jsp

Code
Comments
Other
Rev Date Author Line
5631 27 Sep 19 nicklas 1 <%@ page
5631 27 Sep 19 nicklas 2   pageEncoding="UTF-8"
5631 27 Sep 19 nicklas 3   session="false"
5631 27 Sep 19 nicklas 4   import="net.sf.basedb.core.Application"
5631 27 Sep 19 nicklas 5   import="net.sf.basedb.core.User"
5631 27 Sep 19 nicklas 6   import="net.sf.basedb.core.DbControl"
5631 27 Sep 19 nicklas 7   import="net.sf.basedb.core.SessionControl"
5631 27 Sep 19 nicklas 8   import="net.sf.basedb.clients.web.Base"
5631 27 Sep 19 nicklas 9   import="net.sf.basedb.clients.web.util.HTML"
5631 27 Sep 19 nicklas 10   import="net.sf.basedb.clients.web.extensions.ExtensionsControl"
5631 27 Sep 19 nicklas 11   import="net.sf.basedb.util.Values"
5631 27 Sep 19 nicklas 12   import="net.sf.basedb.util.formatter.WellCoordinateFormatter"
5631 27 Sep 19 nicklas 13   import="java.util.regex.Pattern"
5631 27 Sep 19 nicklas 14   import="java.util.regex.Matcher"
5631 27 Sep 19 nicklas 15 %>
5631 27 Sep 19 nicklas 16 <%@ taglib prefix="base" uri="/WEB-INF/base.tld" %>
5631 27 Sep 19 nicklas 17 <%@ taglib prefix="m" uri="/WEB-INF/menu.tld" %>
5631 27 Sep 19 nicklas 18 <%@ taglib prefix="p" uri="/WEB-INF/path.tld" %>
5631 27 Sep 19 nicklas 19 <%@ taglib prefix="tbl" uri="/WEB-INF/table.tld" %>
5631 27 Sep 19 nicklas 20 <%
5631 27 Sep 19 nicklas 21 final SessionControl sc = Base.getExistingSessionControl(request, "net.sf.basedb.reggie", true);
5631 27 Sep 19 nicklas 22 final String ID = sc.getId();
5631 27 Sep 19 nicklas 23 final float scale = Base.getScale(sc);
5631 27 Sep 19 nicklas 24 final String home = ExtensionsControl.getHomeUrl("net.sf.basedb.reggie");
5631 27 Sep 19 nicklas 25 DbControl dc = null;
5631 27 Sep 19 nicklas 26 try
5631 27 Sep 19 nicklas 27 {
5631 27 Sep 19 nicklas 28   dc = sc.newDbControl();
5631 27 Sep 19 nicklas 29   final User user = User.getById(dc, sc.getLoggedInUserId());
5631 27 Sep 19 nicklas 30   String defaultPrefix = sc.getUserClientSetting("reggie.rna.last-import-prefix");
5631 27 Sep 19 nicklas 31   if (defaultPrefix == null)
5631 27 Sep 19 nicklas 32   {
5631 27 Sep 19 nicklas 33     // Generate a default prefix by using first letters from the logged in user's name
5631 27 Sep 19 nicklas 34     defaultPrefix = "";
5631 27 Sep 19 nicklas 35     Pattern p = Pattern.compile("\\b\\w");
5631 27 Sep 19 nicklas 36     Matcher m = p.matcher(user.getName());
5631 27 Sep 19 nicklas 37     while (m.find()) defaultPrefix += m.group();
5631 27 Sep 19 nicklas 38     if (defaultPrefix.length() < 2)
5631 27 Sep 19 nicklas 39     {
5631 27 Sep 19 nicklas 40       // If the prefix is too whort we take the first two letters
5631 27 Sep 19 nicklas 41       defaultPrefix = user.getName().substring(0, 2);
5631 27 Sep 19 nicklas 42     }
5631 27 Sep 19 nicklas 43     defaultPrefix = defaultPrefix.toUpperCase() + "_";
5631 27 Sep 19 nicklas 44   }
5631 27 Sep 19 nicklas 45 %>
5631 27 Sep 19 nicklas 46 <base:page type="default">
5631 27 Sep 19 nicklas 47 <base:head 
5631 27 Sep 19 nicklas 48   scripts="~../reggie-2.js,~import-external-rna.js,~plate.js" 
5631 27 Sep 19 nicklas 49   styles="path.css,toolbar.css,~../css/reggie-2.css,~../css/plate.css"
5631 27 Sep 19 nicklas 50   >
5631 27 Sep 19 nicklas 51 <style>
5631 27 Sep 19 nicklas 52
5631 27 Sep 19 nicklas 53 /* Empty wells should have greyed, italic text */
5631 27 Sep 19 nicklas 54 .well.empty
5631 27 Sep 19 nicklas 55 {
5631 27 Sep 19 nicklas 56   text-align: center;
5631 27 Sep 19 nicklas 57   vertical-align: middle;
5631 27 Sep 19 nicklas 58   font-style: italic;
5631 27 Sep 19 nicklas 59   color: #999999;
5631 27 Sep 19 nicklas 60 }
5631 27 Sep 19 nicklas 61
5633 30 Sep 19 nicklas 62 /* Wells with an existing aliquot */
5633 30 Sep 19 nicklas 63 .well.existing
5633 30 Sep 19 nicklas 64 {
5633 30 Sep 19 nicklas 65   font-style: italic;
5633 30 Sep 19 nicklas 66   color: #999999;
5633 30 Sep 19 nicklas 67 }
5633 30 Sep 19 nicklas 68
5633 30 Sep 19 nicklas 69
5631 27 Sep 19 nicklas 70 .well .missing
5631 27 Sep 19 nicklas 71 {
5631 27 Sep 19 nicklas 72   font-style: italic;
5631 27 Sep 19 nicklas 73 }
5631 27 Sep 19 nicklas 74
5631 27 Sep 19 nicklas 75 .comment
5631 27 Sep 19 nicklas 76 {
5631 27 Sep 19 nicklas 77   font-style: italic;
5631 27 Sep 19 nicklas 78 }
5631 27 Sep 19 nicklas 79
5631 27 Sep 19 nicklas 80 #plateSummary
5631 27 Sep 19 nicklas 81 {
5631 27 Sep 19 nicklas 82   margin: 0.5em;
5631 27 Sep 19 nicklas 83   border-width: 1px;
5631 27 Sep 19 nicklas 84 }
5631 27 Sep 19 nicklas 85 #plateSummary b
5631 27 Sep 19 nicklas 86 {
5631 27 Sep 19 nicklas 87   display: inline-block;
5631 27 Sep 19 nicklas 88   background: #F0F0F0;
5631 27 Sep 19 nicklas 89   padding: 0.3em 0.6em;
5631 27 Sep 19 nicklas 90   margin-right: 0.25em;
5631 27 Sep 19 nicklas 91 }
5631 27 Sep 19 nicklas 92 #plateSummary span
5631 27 Sep 19 nicklas 93 {
5631 27 Sep 19 nicklas 94   margin-right: 1em;
5631 27 Sep 19 nicklas 95 }
5631 27 Sep 19 nicklas 96 #plateSummary div + div
5631 27 Sep 19 nicklas 97 {
5631 27 Sep 19 nicklas 98   border-top-width: 1px;
5631 27 Sep 19 nicklas 99   border-top-style: dotted;
5631 27 Sep 19 nicklas 100 }
5631 27 Sep 19 nicklas 101 #importPossible
5631 27 Sep 19 nicklas 102 {
5631 27 Sep 19 nicklas 103   font-weight: bold;
5631 27 Sep 19 nicklas 104 }
5631 27 Sep 19 nicklas 105 #importPossible img
5631 27 Sep 19 nicklas 106 {
5631 27 Sep 19 nicklas 107   margin-right: 0.25em;
5631 27 Sep 19 nicklas 108 }
5631 27 Sep 19 nicklas 109
5632 30 Sep 19 nicklas 110 .volumes
5632 30 Sep 19 nicklas 111 {
5632 30 Sep 19 nicklas 112   overflow: auto;
5632 30 Sep 19 nicklas 113 }
5632 30 Sep 19 nicklas 114
5632 30 Sep 19 nicklas 115 .quantity
5632 30 Sep 19 nicklas 116 {
5632 30 Sep 19 nicklas 117   float: left;
5632 30 Sep 19 nicklas 118   color: #0000C8;
5632 30 Sep 19 nicklas 119 }
5632 30 Sep 19 nicklas 120
5632 30 Sep 19 nicklas 121 .volume
5632 30 Sep 19 nicklas 122 {
5632 30 Sep 19 nicklas 123   float: right;
5632 30 Sep 19 nicklas 124   color: #C80000;
5632 30 Sep 19 nicklas 125 }
5632 30 Sep 19 nicklas 126
5631 27 Sep 19 nicklas 127 </style>
5631 27 Sep 19 nicklas 128 </base:head>
5631 27 Sep 19 nicklas 129 <base:body>
5631 27 Sep 19 nicklas 130   <p:path><p:pathelement 
5631 27 Sep 19 nicklas 131     title="Reggie" href="<%="../index.jsp?ID="+ID%>" 
5631 27 Sep 19 nicklas 132     /><p:pathelement title="Import external RNA" 
5631 27 Sep 19 nicklas 133     /></p:path>
5631 27 Sep 19 nicklas 134   
5631 27 Sep 19 nicklas 135   <div class="content">
5631 27 Sep 19 nicklas 136
5631 27 Sep 19 nicklas 137   <form name="reggie" id="wizard" class="wizard">
5631 27 Sep 19 nicklas 138   
5631 27 Sep 19 nicklas 139   <div class="step" id="step-1">
5631 27 Sep 19 nicklas 140     <div class="step-no">1</div>
5631 27 Sep 19 nicklas 141     <div class="step-title">File</div>
5631 27 Sep 19 nicklas 142     <div class="step-content">
5631 27 Sep 19 nicklas 143
5631 27 Sep 19 nicklas 144       <table class="step-form">
5631 27 Sep 19 nicklas 145       <tr>
5631 27 Sep 19 nicklas 146         <td class="prompt">Prefix</td>
5631 27 Sep 19 nicklas 147         <td class="input">
5631 27 Sep 19 nicklas 148           <input type="text" name="prefix" id="prefix" value="<%=HTML.encodeTags(defaultPrefix)%>"
5631 27 Sep 19 nicklas 149             class="required auto-init" data-auto-init="focus" data-next-focus="importfile"
5631 27 Sep 19 nicklas 150             style="width: 12em;" maxlength="12">
5631 27 Sep 19 nicklas 151         </td>
5631 27 Sep 19 nicklas 152         <td class="status" id="prefix.status"></td>
5631 27 Sep 19 nicklas 153         <td class="help">
5631 27 Sep 19 nicklas 154           <span id="prefix.message" class="message"></span>
5631 27 Sep 19 nicklas 155           All aliquots that are imported must have a prefix. The prefix should be
5631 27 Sep 19 nicklas 156           at least 2 letters followed by an underscore.
5631 27 Sep 19 nicklas 157         </td>
5631 27 Sep 19 nicklas 158       </tr>
5631 27 Sep 19 nicklas 159       <tr class="align-top">
5631 27 Sep 19 nicklas 160         <td class="prompt">Select file</td>
5631 27 Sep 19 nicklas 161         <td class="input">
5631 27 Sep 19 nicklas 162           <table style="width: 100%;">
5631 27 Sep 19 nicklas 163           <tr>
5631 27 Sep 19 nicklas 164           <td>
5631 27 Sep 19 nicklas 165             <input class="text required" type="text" name="importfile" id="importfile" 
5631 27 Sep 19 nicklas 166               data-name-filter="%.csv|%.xlsx"
5631 27 Sep 19 nicklas 167               data-directory="/home/SCANB/MIPsImportFiles"
5631 27 Sep 19 nicklas 168             >
5631 27 Sep 19 nicklas 169           </td>
5631 27 Sep 19 nicklas 170           <td style="padding-left: 4px; width: 7em;">
5631 27 Sep 19 nicklas 171             <base:button 
5631 27 Sep 19 nicklas 172               title="Browse&hellip;"
5631 27 Sep 19 nicklas 173               id="importfile.btn"
5631 27 Sep 19 nicklas 174             />
5631 27 Sep 19 nicklas 175           </td>
5631 27 Sep 19 nicklas 176           </tr>
5631 27 Sep 19 nicklas 177           </table>
5631 27 Sep 19 nicklas 178         </td>
5631 27 Sep 19 nicklas 179         <td class="status" id="importfile.status"></td>
5631 27 Sep 19 nicklas 180         <td class="help" rowspan="2">
5631 27 Sep 19 nicklas 181           <span id="importfile.message" class="message"></span>
5631 27 Sep 19 nicklas 182           Select the <b>CSV</b> or <b>Excel</b> file that contains information about DNA aliquots.
5631 27 Sep 19 nicklas 183           The following columns are required: <b>Name</b>, <b>Plate</b>, <b>Row</b>,
5631 27 Sep 19 nicklas 184           and <b>Column</b>. 
5632 30 Sep 19 nicklas 185           Optional columns are: <b>Quantity</b>, <b>NDConc</b>, <b>ND260by230</b>, <b>ND260by280</b>,
5632 30 Sep 19 nicklas 186           <b>RIN</b>, <b>RQS</b> and <b>Comment</b>. All other columns are ignored.
5631 27 Sep 19 nicklas 187           More information <base:help helpid="net.sf.basedb.reggie.rna-import-file" />
5631 27 Sep 19 nicklas 188           <div id="worksheetSection.help" style="display:none;">
5631 27 Sep 19 nicklas 189             Note that it is only possible to import from one worksheet at a time.
5631 27 Sep 19 nicklas 190           </div>
5631 27 Sep 19 nicklas 191         </td>
5631 27 Sep 19 nicklas 192       </tr>
5631 27 Sep 19 nicklas 193       <tr id="worksheetSection" style="display: none;">
5631 27 Sep 19 nicklas 194         <td class="subprompt">- worksheet</td>
5631 27 Sep 19 nicklas 195         <td class="input">
5631 27 Sep 19 nicklas 196           <select name="sheet" id="sheet" class="required" style="width: auto; min-width: 10em;"></select>
5631 27 Sep 19 nicklas 197         </td>
5631 27 Sep 19 nicklas 198         <td class="status" id="sheet.status"></td>
5631 27 Sep 19 nicklas 199       </tr>
5631 27 Sep 19 nicklas 200       </table>
5631 27 Sep 19 nicklas 201       
5631 27 Sep 19 nicklas 202       <div id="platePreview" class="topborder" style="display: none;">
5631 27 Sep 19 nicklas 203       <table style="margin: 0.5em auto 0 auto;"><tr><td>
5631 27 Sep 19 nicklas 204         <div id="plateSummary">
5631 27 Sep 19 nicklas 205           <div>
5631 27 Sep 19 nicklas 206             <b style="width: 12em;">Summary of file</b><span id="filename"></span>
5631 27 Sep 19 nicklas 207             <b>Plates</b><span id="numPlates"></span>
5631 27 Sep 19 nicklas 208             <b>Aliquots</b><span id="numAliquots"></span>
5631 27 Sep 19 nicklas 209             <b>Errors</b><span id="numErrors"></span>
5631 27 Sep 19 nicklas 210             <b>Warnings</b><span id="numWarnings"></span>
5631 27 Sep 19 nicklas 211           </div>
5631 27 Sep 19 nicklas 212           <div>
5631 27 Sep 19 nicklas 213             <b style="width: 12em;">Preview of plate</b>
5631 27 Sep 19 nicklas 214             <span><select name="plateNames" id="plateNames" style="min-width: 15em;"></select></span>
5631 27 Sep 19 nicklas 215             <span id="importPossible"></span>
5631 27 Sep 19 nicklas 216           </div>
5631 27 Sep 19 nicklas 217         </div>
5631 27 Sep 19 nicklas 218         <table id="plate" class="plate">
5631 27 Sep 19 nicklas 219         <%
5631 27 Sep 19 nicklas 220         int columns = 9;
5631 27 Sep 19 nicklas 221         int rows = 9;
5631 27 Sep 19 nicklas 222         WellCoordinateFormatter rowF = new WellCoordinateFormatter(true);
5631 27 Sep 19 nicklas 223         WellCoordinateFormatter colF = new WellCoordinateFormatter(false);
5631 27 Sep 19 nicklas 224         %>
5631 27 Sep 19 nicklas 225         <tr class="header">
5631 27 Sep 19 nicklas 226           <th></th>
5631 27 Sep 19 nicklas 227           <%
5631 27 Sep 19 nicklas 228           for (int c = 0; c < columns; ++c)
5631 27 Sep 19 nicklas 229           {
5631 27 Sep 19 nicklas 230             %>
5631 27 Sep 19 nicklas 231             <th class="link auto-init" id="col.<%=c%>"
5631 27 Sep 19 nicklas 232               data-auto-init="plate-col" data-col="<%=c%>"
5631 27 Sep 19 nicklas 233               title="Select/deselect all wells in this column"><%=colF.format(c)%></th>
5631 27 Sep 19 nicklas 234             <%
5631 27 Sep 19 nicklas 235           }
5631 27 Sep 19 nicklas 236           %>
5631 27 Sep 19 nicklas 237         </tr>
5631 27 Sep 19 nicklas 238         <tbody>
5631 27 Sep 19 nicklas 239         <%
5631 27 Sep 19 nicklas 240         for (int r = 0; r < rows; ++r)
5631 27 Sep 19 nicklas 241         {
5631 27 Sep 19 nicklas 242           String row = rowF.format(r);
5631 27 Sep 19 nicklas 243           %>
5631 27 Sep 19 nicklas 244           <tr class="row-<%=r%>">
5631 27 Sep 19 nicklas 245             <th class="link auto-init" id="row.<%=r%>"
5631 27 Sep 19 nicklas 246               data-auto-init="plate-row" data-row="<%=r%>"
5631 27 Sep 19 nicklas 247               title="Select/deselect all wells in this row"><%=row%></th>
5631 27 Sep 19 nicklas 248             <%
5631 27 Sep 19 nicklas 249             for (int c = 0; c < columns; ++c)
5631 27 Sep 19 nicklas 250             {
5631 27 Sep 19 nicklas 251               %>
5631 27 Sep 19 nicklas 252               <td id="well.<%=r%>.<%=c%>" class="well empty auto-init"
5631 27 Sep 19 nicklas 253                 data-auto-init="plate-well" data-col="<%=c%>" data-row="<%=r%>"
5631 27 Sep 19 nicklas 254                 title="Select/deselect this well">empty</td>
5631 27 Sep 19 nicklas 255               <%
5631 27 Sep 19 nicklas 256             }
5631 27 Sep 19 nicklas 257             %>
5631 27 Sep 19 nicklas 258           </tr>
5631 27 Sep 19 nicklas 259           <%
5631 27 Sep 19 nicklas 260         }
5631 27 Sep 19 nicklas 261         %>
5631 27 Sep 19 nicklas 262         </tbody>
5631 27 Sep 19 nicklas 263         <tr id="pool-row" style="display: none;">
5631 27 Sep 19 nicklas 264           <th colspan=<%=columns+1 %>>&nbsp;</th>
5631 27 Sep 19 nicklas 265         </tr>
5631 27 Sep 19 nicklas 266         </table>
5631 27 Sep 19 nicklas 267         <div style="margin: 0.5em; text-align: center;">
5631 27 Sep 19 nicklas 268           <base:icon image="<%=home+"/images/error.png"%>" style="padding-left: 1em;" />=Error that prevent plate import
5631 27 Sep 19 nicklas 269           <base:icon image="<%=home+"/images/warning.png"%>" style="padding-left: 1em;" />=Warning but plate can be imported
5631 27 Sep 19 nicklas 270         </div>
5631 27 Sep 19 nicklas 271       </td></tr></table>
5631 27 Sep 19 nicklas 272       </div>
5631 27 Sep 19 nicklas 273   
5631 27 Sep 19 nicklas 274       
5631 27 Sep 19 nicklas 275     </div>
5631 27 Sep 19 nicklas 276   </div>
5631 27 Sep 19 nicklas 277
5631 27 Sep 19 nicklas 278   <div id="wizard-status"></div>
5631 27 Sep 19 nicklas 279   
5631 27 Sep 19 nicklas 280   <table class="navigation" id="navigation">
5631 27 Sep 19 nicklas 281   <tr>
5631 27 Sep 19 nicklas 282     <td><base:button id="gocancel" title="Cancel" /></td>
5631 27 Sep 19 nicklas 283     <td><base:button id="gonext" title="Next" image="<%=home+"/images/gonext.png"%>" /></td>
5631 27 Sep 19 nicklas 284     <td><base:button id="goregister" title="Register" image="<%=home+"/images/import.png"%>"  /></td>
5631 27 Sep 19 nicklas 285     <td><base:button id="gorestart" title="Restart" image="<%=home+"/images/goback.png"%>" /></td>
5631 27 Sep 19 nicklas 286     <td id="gonext-message" class="message"></td>
5631 27 Sep 19 nicklas 287   </tr>
5631 27 Sep 19 nicklas 288   </table>
5631 27 Sep 19 nicklas 289   
5631 27 Sep 19 nicklas 290   </form>
5631 27 Sep 19 nicklas 291   </div>
5631 27 Sep 19 nicklas 292   </div>
5631 27 Sep 19 nicklas 293 </base:body>
5631 27 Sep 19 nicklas 294 </base:page>
5631 27 Sep 19 nicklas 295 <%
5631 27 Sep 19 nicklas 296 }
5631 27 Sep 19 nicklas 297 finally
5631 27 Sep 19 nicklas 298 {
5631 27 Sep 19 nicklas 299   if (dc != null) dc.close();
5631 27 Sep 19 nicklas 300 }
5631 27 Sep 19 nicklas 301 %>