extensions/net.sf.basedb.reggie/trunk/resources/mipsprep/import_plates.jsp

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