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

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