extensions/net.sf.basedb.reggie/trunk/resources/libprep/external_protocol2.jsp

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