extensions/net.sf.basedb.meludi/trunk/resources/libprep/dna_protocol2.jsp

Code
Comments
Other
Rev Date Author Line
3449 28 Jul 15 olle 1 <%@ page
3449 28 Jul 15 olle 2   pageEncoding="UTF-8"
3449 28 Jul 15 olle 3   session="false"
3449 28 Jul 15 olle 4   import="net.sf.basedb.core.User"
3449 28 Jul 15 olle 5   import="net.sf.basedb.core.DbControl"
3449 28 Jul 15 olle 6   import="net.sf.basedb.core.SessionControl"
3449 28 Jul 15 olle 7   import="net.sf.basedb.core.Application"
3449 28 Jul 15 olle 8   import="net.sf.basedb.core.Extract"
3449 28 Jul 15 olle 9   import="net.sf.basedb.core.BioMaterial"
3449 28 Jul 15 olle 10   import="net.sf.basedb.core.MeasuredBioMaterial"
3449 28 Jul 15 olle 11   import="net.sf.basedb.core.BioMaterialEventSource"
3449 28 Jul 15 olle 12   import="net.sf.basedb.core.BioPlate"
3449 28 Jul 15 olle 13   import="net.sf.basedb.core.BioWell"
3449 28 Jul 15 olle 14   import="net.sf.basedb.core.PermissionDeniedException"
3449 28 Jul 15 olle 15   import="net.sf.basedb.core.ItemQuery"
3449 28 Jul 15 olle 16   import="net.sf.basedb.core.query.Restrictions"
3449 28 Jul 15 olle 17   import="net.sf.basedb.core.query.Hql"
3449 28 Jul 15 olle 18   import="net.sf.basedb.util.Values"
3449 28 Jul 15 olle 19   import="net.sf.basedb.util.formatter.WellCoordinateFormatter"
3449 28 Jul 15 olle 20   import="net.sf.basedb.util.extensions.Extension"
3449 28 Jul 15 olle 21   import="net.sf.basedb.clients.web.Base"  
3449 28 Jul 15 olle 22   import="net.sf.basedb.clients.web.util.HTML"
3449 28 Jul 15 olle 23   import="net.sf.basedb.clients.web.extensions.ExtensionsControl"
3449 28 Jul 15 olle 24   import="java.util.List"
3449 28 Jul 15 olle 25   import="java.util.ArrayList"
3449 28 Jul 15 olle 26 %>
3449 28 Jul 15 olle 27 <%@ taglib prefix="base" uri="/WEB-INF/base.tld" %>
3449 28 Jul 15 olle 28 <%
3449 28 Jul 15 olle 29 final SessionControl sc = Base.getExistingSessionControl(request, true);
3449 28 Jul 15 olle 30 final String ID = sc.getId();
3449 28 Jul 15 olle 31 final String home = ExtensionsControl.getHomeUrl("net.sf.basedb.meludi");
3449 28 Jul 15 olle 32 final String root = request.getContextPath();
3449 28 Jul 15 olle 33 DbControl dc = null;
3449 28 Jul 15 olle 34 try
3449 28 Jul 15 olle 35 {
3449 28 Jul 15 olle 36   dc = sc.newDbControl();
3449 28 Jul 15 olle 37   final Extension meludi = ExtensionsControl.get(dc).getExtension("net.sf.basedb.meludi");
3449 28 Jul 15 olle 38   final User user = User.getById(dc, sc.getLoggedInUserId());
3449 28 Jul 15 olle 39   int dnaPlateId = Values.getInt(request.getParameter("bioplate"));
3449 28 Jul 15 olle 40   final Float stratageneConc = Values.getFloat(request.getParameter("stratageneConc"), null);
3449 28 Jul 15 olle 41   String poolSchema = request.getParameter("poolSchema");
3449 28 Jul 15 olle 42   System.out.println("dna_protocol2.jsp:: dnaPlateId = " + dnaPlateId + " poolSchema = " + poolSchema);
3449 28 Jul 15 olle 43   
3449 28 Jul 15 olle 44   BioPlate plate = BioPlate.getById(dc, dnaPlateId);
3449 28 Jul 15 olle 45   int columns = plate.getColumns();
3449 28 Jul 15 olle 46   int rows = plate.getRows();
3449 28 Jul 15 olle 47   String view = Values.getString(request.getParameter("view"), "list");
3449 28 Jul 15 olle 48   String title = "Lab protocol for " + HTML.encodeTags(plate.getName()) + " - " + (view.equals("list") ? "list" : "table");
3449 28 Jul 15 olle 49   System.out.println("dna_protocol2.jsp:: view = " + view + " title = " + title);
3449 28 Jul 15 olle 50 %>
3449 28 Jul 15 olle 51 <base:page id="protocol" type="iframe" favicon="<%=home+"/images/pipette.png"%>" title="<%=title%>" noskin="true">
3449 28 Jul 15 olle 52 <base:head
3449 28 Jul 15 olle 53   scripts="~../meludi-2.js,~pools.js,~plate.js,~dna_protocol.js" 
3449 28 Jul 15 olle 54   styles="~../css/meludi-2.css,~../css/printable.css,~../css/plate.css"
3449 28 Jul 15 olle 55   >
3449 28 Jul 15 olle 56   <style>
3449 28 Jul 15 olle 57   table.protocolheader
3449 28 Jul 15 olle 58   {
3449 28 Jul 15 olle 59     width: 100%;
3449 28 Jul 15 olle 60     border: 1px solid #000000;
3449 28 Jul 15 olle 61     margin-bottom: 1em;
3449 28 Jul 15 olle 62     border-collapse: collapse;
3449 28 Jul 15 olle 63   }
3449 28 Jul 15 olle 64
3449 28 Jul 15 olle 65   table.protocolheader > tbody > tr
3449 28 Jul 15 olle 66   {
3449 28 Jul 15 olle 67     vertical-align: top;
3449 28 Jul 15 olle 68     height: 1.25em;
3449 28 Jul 15 olle 69   }
3449 28 Jul 15 olle 70
3449 28 Jul 15 olle 71   table.protocolheader > tbody > tr > th
3449 28 Jul 15 olle 72   {
3449 28 Jul 15 olle 73     text-align: left;
3449 28 Jul 15 olle 74     font-size: 1em;
3449 28 Jul 15 olle 75     background-color: #F0F0F0;
3449 28 Jul 15 olle 76     padding: 2px;
3449 28 Jul 15 olle 77   }
3449 28 Jul 15 olle 78   
3449 28 Jul 15 olle 79   table.protocolheader > tbody > tr > td
3449 28 Jul 15 olle 80   {
3449 28 Jul 15 olle 81     text-align: left;
3449 28 Jul 15 olle 82     font-size: 1em;
3449 28 Jul 15 olle 83     padding: 2px;
3449 28 Jul 15 olle 84   }
3449 28 Jul 15 olle 85   
3449 28 Jul 15 olle 86   #listview
3449 28 Jul 15 olle 87   {
3449 28 Jul 15 olle 88     width: 100%;
3449 28 Jul 15 olle 89     font-size: 85%;
3449 28 Jul 15 olle 90     border-collapse: collapse;
3449 28 Jul 15 olle 91     border: 1px solid #000000;
3449 28 Jul 15 olle 92   }
3449 28 Jul 15 olle 93   
3449 28 Jul 15 olle 94   #listview tr.evencol
3449 28 Jul 15 olle 95   {
3449 28 Jul 15 olle 96     background-color: #F0F0F0;
3449 28 Jul 15 olle 97   }
3449 28 Jul 15 olle 98   
3449 28 Jul 15 olle 99   #listview thead
3449 28 Jul 15 olle 100   {
3449 28 Jul 15 olle 101     border: 1px solid #000000;
3449 28 Jul 15 olle 102     background-color: #F0F0F0;
3449 28 Jul 15 olle 103   }
3449 28 Jul 15 olle 104   
3449 28 Jul 15 olle 105   #listview tbody
3449 28 Jul 15 olle 106   {
3449 28 Jul 15 olle 107     page-break-inside: avoid;
3449 28 Jul 15 olle 108     border-top: 1px solid #000000;
3449 28 Jul 15 olle 109     border-bottom: 1px solid #000000;
3449 28 Jul 15 olle 110   }
3449 28 Jul 15 olle 111   
3449 28 Jul 15 olle 112   #listview th
3449 28 Jul 15 olle 113   {
3449 28 Jul 15 olle 114     border-left: 1px solid #000000;
3449 28 Jul 15 olle 115   }
3449 28 Jul 15 olle 116   
3449 28 Jul 15 olle 117   #listview td
3449 28 Jul 15 olle 118   {
3449 28 Jul 15 olle 119     border-left: 1px solid #000000;
3449 28 Jul 15 olle 120     border-top: 1px dotted #666666;
3449 28 Jul 15 olle 121     vertical-align: middle;
3449 28 Jul 15 olle 122   }
3449 28 Jul 15 olle 123   
3449 28 Jul 15 olle 124   #listview .col-num
3449 28 Jul 15 olle 125   {
3449 28 Jul 15 olle 126     width: 1.75em;
3449 28 Jul 15 olle 127     text-align: center;
3449 28 Jul 15 olle 128     font-size: 125%;
3449 28 Jul 15 olle 129     font-weight: bold;
3449 28 Jul 15 olle 130     vertical-align: top;
3449 28 Jul 15 olle 131   }
3449 28 Jul 15 olle 132   
3449 28 Jul 15 olle 133   #listview .rna
3449 28 Jul 15 olle 134   {
3449 28 Jul 15 olle 135     width: 9em;
3449 28 Jul 15 olle 136     text-align: center;
3449 28 Jul 15 olle 137   }
3449 28 Jul 15 olle 138   
3449 28 Jul 15 olle 139   #listview .empty .rna
3449 28 Jul 15 olle 140   {
3449 28 Jul 15 olle 141     font-style: italic;
3449 28 Jul 15 olle 142     color: #666666;
3449 28 Jul 15 olle 143     text-align: center;
3449 28 Jul 15 olle 144   }
3449 28 Jul 15 olle 145   
3449 28 Jul 15 olle 146   .external .rna:before
3449 28 Jul 15 olle 147   {
3449 28 Jul 15 olle 148     content: '[';
3449 28 Jul 15 olle 149   }
3449 28 Jul 15 olle 150   .external .rna:after
3449 28 Jul 15 olle 151   {
3449 28 Jul 15 olle 152     content: ']';
3449 28 Jul 15 olle 153   }
3449 28 Jul 15 olle 154   
3449 28 Jul 15 olle 155   #listview .box
3449 28 Jul 15 olle 156   {
3449 28 Jul 15 olle 157     width: 8em;
3449 28 Jul 15 olle 158     text-align: center;
3449 28 Jul 15 olle 159   }
3449 28 Jul 15 olle 160   #listview .workplate
3449 28 Jul 15 olle 161   {
3449 28 Jul 15 olle 162     width: 5em;
3449 28 Jul 15 olle 163     text-align: center;
3449 28 Jul 15 olle 164   }
3449 28 Jul 15 olle 165   #listview .ndconc
3449 28 Jul 15 olle 166   {
3449 28 Jul 15 olle 167     width: 4.5em;
3449 28 Jul 15 olle 168     padding-right: 0.5em;
3449 28 Jul 15 olle 169     text-align: right;
3449 28 Jul 15 olle 170   }
3449 28 Jul 15 olle 171   #listview .remain
3449 28 Jul 15 olle 172   {
3449 28 Jul 15 olle 173     width: 4.5em;
3449 28 Jul 15 olle 174     padding-right: 0.5em;
3449 28 Jul 15 olle 175     text-align: right;
3449 28 Jul 15 olle 176   }
3449 28 Jul 15 olle 177   #listview .volume
3449 28 Jul 15 olle 178   {
3449 28 Jul 15 olle 179     width: 3.5em;
3449 28 Jul 15 olle 180     padding-right: 0.5em;
3449 28 Jul 15 olle 181     text-align: right;
3449 28 Jul 15 olle 182     color: #C80000;
3449 28 Jul 15 olle 183   }
3449 28 Jul 15 olle 184   #listview .water
3449 28 Jul 15 olle 185   {
3449 28 Jul 15 olle 186     width: 3.5em;
3449 28 Jul 15 olle 187     padding-right: 0.5em;
3449 28 Jul 15 olle 188     text-align: right;
3449 28 Jul 15 olle 189     color: #0000C8;
3449 28 Jul 15 olle 190   }
3449 28 Jul 15 olle 191   #listview .remarks
3449 28 Jul 15 olle 192   {
3449 28 Jul 15 olle 193     vertical-align: top;
3449 28 Jul 15 olle 194     padding-left: 0.25em;
3449 28 Jul 15 olle 195   }
3449 28 Jul 15 olle 196   
3449 28 Jul 15 olle 197   /* Divide the 12 wells across the full page */
3449 28 Jul 15 olle 198   #plateview .well
3449 28 Jul 15 olle 199   {
3449 28 Jul 15 olle 200     width: 8.2%;
3449 28 Jul 15 olle 201     max-width: 8.2%;
3449 28 Jul 15 olle 202     min-width: 8.2%;
3449 28 Jul 15 olle 203     background-color: #FFFFFF;
3449 28 Jul 15 olle 204     padding: 4px;
3449 28 Jul 15 olle 205   }
3449 28 Jul 15 olle 206   
3449 28 Jul 15 olle 207   #plateview .well:hover
3449 28 Jul 15 olle 208   {
3449 28 Jul 15 olle 209     padding: 3px;
3449 28 Jul 15 olle 210   }
3449 28 Jul 15 olle 211     
3449 28 Jul 15 olle 212   #plateview .rowheader
3449 28 Jul 15 olle 213   {
3449 28 Jul 15 olle 214     width: 2em;
3449 28 Jul 15 olle 215   }
3449 28 Jul 15 olle 216   
3449 28 Jul 15 olle 217   #plateview .rna
3449 28 Jul 15 olle 218   {
3449 28 Jul 15 olle 219     font-weight: bold;
3449 28 Jul 15 olle 220     margin-bottom: 0.25em;
3449 28 Jul 15 olle 221   }
3449 28 Jul 15 olle 222   #plateview .box
3449 28 Jul 15 olle 223   {
3449 28 Jul 15 olle 224     margin-bottom: 0.25em;
3449 28 Jul 15 olle 225   }
3449 28 Jul 15 olle 226   #plateview .ndconc
3449 28 Jul 15 olle 227   {
3449 28 Jul 15 olle 228     display: none;
3449 28 Jul 15 olle 229   }
3449 28 Jul 15 olle 230   #plateview .remain
3449 28 Jul 15 olle 231   {
3449 28 Jul 15 olle 232     display: none;
3449 28 Jul 15 olle 233   }
3449 28 Jul 15 olle 234   #plateview .volume
3449 28 Jul 15 olle 235   {
3449 28 Jul 15 olle 236     color: #C80000;
3449 28 Jul 15 olle 237   }
3449 28 Jul 15 olle 238   #plateview .water
3449 28 Jul 15 olle 239   {
3449 28 Jul 15 olle 240     color: #0000C8;
3449 28 Jul 15 olle 241     float: right;
3449 28 Jul 15 olle 242   }
3449 28 Jul 15 olle 243   #plateview .remarks
3449 28 Jul 15 olle 244   {
3449 28 Jul 15 olle 245     color: #C80000;
3449 28 Jul 15 olle 246     font-style: italic;
3449 28 Jul 15 olle 247   }
3449 28 Jul 15 olle 248   #plateview .qc
3449 28 Jul 15 olle 249   {
3449 28 Jul 15 olle 250     background-image: url('../images/mrnaqc.png');
3449 28 Jul 15 olle 251     background-position: 95% 25%;
3449 28 Jul 15 olle 252     background-repeat: no-repeat;
3449 28 Jul 15 olle 253   }
3449 28 Jul 15 olle 254   </style>
3449 28 Jul 15 olle 255 </base:head>
3449 28 Jul 15 olle 256 <base:body>
3449 28 Jul 15 olle 257
3449 28 Jul 15 olle 258   <div class="paper <%=view.equals("list") ? "" : "landscape"%>">
3449 28 Jul 15 olle 259
3449 28 Jul 15 olle 260   <form name="meludi" id="wizard">
3449 28 Jul 15 olle 261   
3449 28 Jul 15 olle 262   <div id="page-data" class="datacontainer"
3449 28 Jul 15 olle 263     data-view="<%=view%>"
3449 28 Jul 15 olle 264     data-dna-plate="<%=dnaPlateId %>"
3449 28 Jul 15 olle 265     data-stratagene-conc="<%=stratageneConc%>"
3449 28 Jul 15 olle 266   ></div>
3449 28 Jul 15 olle 267   
3449 28 Jul 15 olle 268   <div id="wizard-status"></div>
3449 28 Jul 15 olle 269
3449 28 Jul 15 olle 270   <div id="all-protocol" style="display: none;">
3449 28 Jul 15 olle 271   <div id="print-instructions" class="noprint fullwidth">
3449 28 Jul 15 olle 272     <base:button id="print-button" image="<%=home+"/images/print.png"%>" title="Print&hellip;" />
3449 28 Jul 15 olle 273     <span id="printNote">
3449 28 Jul 15 olle 274     <b>Note!</b> 
3449 28 Jul 15 olle 275     <%
3449 28 Jul 15 olle 276     if (view.equals("list"))
3449 28 Jul 15 olle 277     {
3449 28 Jul 15 olle 278       %>
3449 28 Jul 15 olle 279       For better printing reduce margins to about <i>5mm</i> and set page orientation
3449 28 Jul 15 olle 280       to <i>portrait</i>. To fit everything on a single page, scale down to <i>60-70%</i>.
3449 28 Jul 15 olle 281       <%
3449 28 Jul 15 olle 282     }
3449 28 Jul 15 olle 283     else
3449 28 Jul 15 olle 284     {
3449 28 Jul 15 olle 285       %>
3449 28 Jul 15 olle 286       For better printing reduce margins to about <i>5mm</i> and set page orientation
3449 28 Jul 15 olle 287       to <i>landscape</i>. The recommended scale is <i>100%</i>.
3449 28 Jul 15 olle 288       <%
3449 28 Jul 15 olle 289     }
3449 28 Jul 15 olle 290     %>
3449 28 Jul 15 olle 291     </span>
3449 28 Jul 15 olle 292     <br clear="all">
3449 28 Jul 15 olle 293   </div>
3449 28 Jul 15 olle 294
3449 28 Jul 15 olle 295   
3449 28 Jul 15 olle 296   <h1>Lab protocol for DNA preparation <span class="meludi">MeLuDI <%=meludi.getAbout().getVersion() %></span></h1>
3449 28 Jul 15 olle 297
3449 28 Jul 15 olle 298   <table style="width: 100%;" class="protocolheader">
3449 28 Jul 15 olle 299   <tr style="border-bottom: 1px solid #000000;">
3449 28 Jul 15 olle 300     <th style="width: 15%;">Work plate</th>
3449 28 Jul 15 olle 301     <td style="width: 30%; border-right: 1px solid #000000;"><%=HTML.encodeTags(plate.getName())%></td>
3449 28 Jul 15 olle 302     <th style="width: 15%;">DNA</th>
3449 28 Jul 15 olle 303     <th style="width: 20%;">Date</th>
3449 28 Jul 15 olle 304     <th style="width: 20%;">Operator</th>
3449 28 Jul 15 olle 305   </tr>
3449 28 Jul 15 olle 306   <tr>
3449 28 Jul 15 olle 307     <td rowspan="5" colspan="2" style="width: 50%; border-right: 1px solid #000000;"><%=HTML.niceFormat(plate.getDescription()) %></td>
3449 28 Jul 15 olle 308     <td style="border-right: 1px solid #000000;">Dilution</td>
3449 28 Jul 15 olle 309     <td style="border-right: 1px solid #000000;" id="dilution-date"></td>
3449 28 Jul 15 olle 310     <td id="dilution-operator"></td>
3449 28 Jul 15 olle 311   </tr>
3449 28 Jul 15 olle 312   <tr style="border-top: 1px solid #CCCCCC;">
3449 28 Jul 15 olle 313     <td style="border-right: 1px solid #000000;">Purification</td>
3449 28 Jul 15 olle 314     <td style="border-right: 1px solid #000000;"></td>
3449 28 Jul 15 olle 315     <td></td>
3449 28 Jul 15 olle 316   </tr>
3449 28 Jul 15 olle 317   <tr style="border-top: 1px solid #CCCCCC;">
3449 28 Jul 15 olle 318     <td style="border-right: 1px solid #000000;">Fragmentation</td>
3449 28 Jul 15 olle 319     <td style="border-right: 1px solid #000000;"></td>
3449 28 Jul 15 olle 320     <td></td>
3449 28 Jul 15 olle 321   </tr>
3449 28 Jul 15 olle 322   <tr style="border-top: 1px solid #CCCCCC;">
3449 28 Jul 15 olle 323     <td style="border-right: 1px solid #000000;">Cleanup</td>
3449 28 Jul 15 olle 324     <td style="border-right: 1px solid #000000;"></td>
3449 28 Jul 15 olle 325     <td></td>
3449 28 Jul 15 olle 326   </tr>
3449 28 Jul 15 olle 327   <tr valign="top" style="border-top: 1px solid #000000;">
3449 28 Jul 15 olle 328     <th style="border-right: 1px solid #000000;">cDNA synth.</th>
3449 28 Jul 15 olle 329     <td style="border-right: 1px solid #000000;"></td>
3449 28 Jul 15 olle 330     <td></td>
3449 28 Jul 15 olle 331   </tr>
3449 28 Jul 15 olle 332   </table>
3449 28 Jul 15 olle 333
3449 28 Jul 15 olle 334   <%
3449 28 Jul 15 olle 335   if (view.equals("list"))
3449 28 Jul 15 olle 336   {
3449 28 Jul 15 olle 337     %>
3449 28 Jul 15 olle 338     <table style="width: 100%;" id="listview">
3449 28 Jul 15 olle 339     <thead>
3449 28 Jul 15 olle 340       <tr class="toprow">
3449 28 Jul 15 olle 341         <th></th>
3449 28 Jul 15 olle 342         <th class="rna"></th>
3449 28 Jul 15 olle 343         <th class="box">Storage</th>
3449 28 Jul 15 olle 344         <th>NDConc</th>
3449 28 Jul 15 olle 345         <th>Remain</th>
3449 28 Jul 15 olle 346         <th class="workplate">Work</th>
3449 28 Jul 15 olle 347         <th colspan="2">Volume</th>
3449 28 Jul 15 olle 348         <th></th>
3449 28 Jul 15 olle 349       </tr>
3449 28 Jul 15 olle 350       <tr>
3449 28 Jul 15 olle 351         <th></th>
3449 28 Jul 15 olle 352         <th class="rna">RNA</th>
3449 28 Jul 15 olle 353         <th class="box">box</th>
3449 28 Jul 15 olle 354         <th>(ng/µl)</th>
3449 28 Jul 15 olle 355         <th>(µg)</th>
3449 28 Jul 15 olle 356         <th class="workplate">plate</th>
3449 28 Jul 15 olle 357         <th>(µl)</th>
3449 28 Jul 15 olle 358         <th>H<sub>2</sub>O</th>
3449 28 Jul 15 olle 359         <th>Remarks</th>
3449 28 Jul 15 olle 360       </tr>
3449 28 Jul 15 olle 361     </thead>
3449 28 Jul 15 olle 362     <%
3449 28 Jul 15 olle 363     WellCoordinateFormatter rowF = new WellCoordinateFormatter(true);
3449 28 Jul 15 olle 364     WellCoordinateFormatter colF = new WellCoordinateFormatter(false);
3449 28 Jul 15 olle 365     for (int c = 0; c < columns; ++c)
3449 28 Jul 15 olle 366     {
3449 28 Jul 15 olle 367       String rowClass = c % 2 == 0 ? "evencol" : "oddcol";
3449 28 Jul 15 olle 368       %>
3449 28 Jul 15 olle 369       <tbody>
3449 28 Jul 15 olle 370       <%
3449 28 Jul 15 olle 371       for (int r = 0; r < rows; ++r)
3449 28 Jul 15 olle 372       {
3449 28 Jul 15 olle 373         String idSuffix = c + "." + r;
3449 28 Jul 15 olle 374         %>
3449 28 Jul 15 olle 375         <tr class="<%=rowClass%> empty" id="row.<%=idSuffix%>">
3449 28 Jul 15 olle 376           <%
3449 28 Jul 15 olle 377           if (r == 0)
3449 28 Jul 15 olle 378           {
3449 28 Jul 15 olle 379             %>
3449 28 Jul 15 olle 380             <td class="col-num" rowspan="<%=rows%>"><%=c+1%></td>
3449 28 Jul 15 olle 381             <%
3449 28 Jul 15 olle 382           }
3449 28 Jul 15 olle 383           %>
3449 28 Jul 15 olle 384           <td class="rna" id="rna.<%=idSuffix%>">empty</td>
3449 28 Jul 15 olle 385           <td class="box" id="box.<%=idSuffix%>"></td>
3449 28 Jul 15 olle 386           <td class="ndconc" id="ndconc.<%=idSuffix%>"></td>
3449 28 Jul 15 olle 387           <td class="remain" id="remain.<%=idSuffix%>"></td>
3449 28 Jul 15 olle 388           <td class="workplate"><%=rowF.format(r)+colF.format(c)%></td>
3449 28 Jul 15 olle 389           <td class="volume" id="volume.<%=idSuffix%>"></td>
3449 28 Jul 15 olle 390           <td class="water" id="water.<%=idSuffix%>"></td>
3449 28 Jul 15 olle 391           <td class="remarks" id="remarks.<%=idSuffix%>"></td>
3449 28 Jul 15 olle 392         </tr>
3449 28 Jul 15 olle 393         <%
3449 28 Jul 15 olle 394       }
3449 28 Jul 15 olle 395       %>
3449 28 Jul 15 olle 396       </tbody>
3449 28 Jul 15 olle 397       <%
3449 28 Jul 15 olle 398     }
3449 28 Jul 15 olle 399     %>
3449 28 Jul 15 olle 400     </table>
3449 28 Jul 15 olle 401     <%
3449 28 Jul 15 olle 402   }
3449 28 Jul 15 olle 403   else
3449 28 Jul 15 olle 404   {
3449 28 Jul 15 olle 405     %>
3449 28 Jul 15 olle 406     <table class="plate" style="margin: 0em 0 0 0; width: 100%;" id="plateview">
3449 28 Jul 15 olle 407     <%
3449 28 Jul 15 olle 408     WellCoordinateFormatter rowF = new WellCoordinateFormatter(true);
3449 28 Jul 15 olle 409     WellCoordinateFormatter colF = new WellCoordinateFormatter(false);
3449 28 Jul 15 olle 410     %>
3449 28 Jul 15 olle 411     <tr class="header">
3449 28 Jul 15 olle 412       <th></th>
3449 28 Jul 15 olle 413       <%
3449 28 Jul 15 olle 414       for (int c = 0; c < columns; ++c)
3449 28 Jul 15 olle 415       {
3449 28 Jul 15 olle 416         %>
3449 28 Jul 15 olle 417         <th id="col.<%=c%>"><%=colF.format(c)%></th>
3449 28 Jul 15 olle 418         <%
3449 28 Jul 15 olle 419       }
3449 28 Jul 15 olle 420       %>
3449 28 Jul 15 olle 421     </tr>
3449 28 Jul 15 olle 422     <tbody>
3449 28 Jul 15 olle 423     <%
3449 28 Jul 15 olle 424     for (int r = 0; r < rows; ++r)
3449 28 Jul 15 olle 425     {
3449 28 Jul 15 olle 426       String row = rowF.format(r);
3449 28 Jul 15 olle 427       %>
3449 28 Jul 15 olle 428       <tr class="row-<%=r%>">
3449 28 Jul 15 olle 429         <th id="row.<%=r%>" class="rowheader"><%=row%></th>
3449 28 Jul 15 olle 430         <%
3449 28 Jul 15 olle 431         for (int c = 0; c < columns; ++c)
3449 28 Jul 15 olle 432         {
3449 28 Jul 15 olle 433           %>
3449 28 Jul 15 olle 434           <td class="well col-<%=c%>" id="well.<%=r%>.<%=c%>"></td>
3449 28 Jul 15 olle 435           <%
3449 28 Jul 15 olle 436         }
3449 28 Jul 15 olle 437         %>
3449 28 Jul 15 olle 438       </tr>
3449 28 Jul 15 olle 439       <%
3449 28 Jul 15 olle 440     }
3449 28 Jul 15 olle 441     %>
3449 28 Jul 15 olle 442     </tbody>
3449 28 Jul 15 olle 443     <tr id="pool-row">
3449 28 Jul 15 olle 444       <th colspan=<%=columns+1 %>>&nbsp;</th>
3449 28 Jul 15 olle 445     </tr>
3449 28 Jul 15 olle 446     </table>
3449 28 Jul 15 olle 447     <%
3449 28 Jul 15 olle 448   }
3449 28 Jul 15 olle 449   %>
3449 28 Jul 15 olle 450   <i>Low quantity = The remaining quantity is too low for the RNA to be re-processed one more time</i>
3449 28 Jul 15 olle 451 </div>
3449 28 Jul 15 olle 452 </form>
3449 28 Jul 15 olle 453 </div>
3449 28 Jul 15 olle 454   
3449 28 Jul 15 olle 455 </base:body>
3449 28 Jul 15 olle 456 </base:page>
3449 28 Jul 15 olle 457 <%
3449 28 Jul 15 olle 458 }
3449 28 Jul 15 olle 459 finally
3449 28 Jul 15 olle 460 {
3449 28 Jul 15 olle 461   if (dc != null) dc.close();
3449 28 Jul 15 olle 462 }
3449 28 Jul 15 olle 463 %>