extensions/net.sf.basedb.reggie/trunk/resources/sampleproc/histology_protocol2.jsp

Code
Comments
Other
Rev Date Author Line
1591 21 Mar 12 nicklas 1 <%@ page
1591 21 Mar 12 nicklas 2   pageEncoding="UTF-8"
1591 21 Mar 12 nicklas 3   session="false"
1591 21 Mar 12 nicklas 4   import="net.sf.basedb.core.User"
1591 21 Mar 12 nicklas 5   import="net.sf.basedb.core.DbControl"
1591 21 Mar 12 nicklas 6   import="net.sf.basedb.core.SessionControl"
1591 21 Mar 12 nicklas 7   import="net.sf.basedb.core.Application"
1669 29 May 12 nicklas 8   import="net.sf.basedb.core.Sample"
3247 14 Apr 15 nicklas 9   import="net.sf.basedb.core.ItemList"
1669 29 May 12 nicklas 10   import="net.sf.basedb.core.BioWell"
1591 21 Mar 12 nicklas 11   import="net.sf.basedb.core.BioPlate"
1684 04 Jun 12 nicklas 12   import="net.sf.basedb.core.AnyToAny"
1681 01 Jun 12 nicklas 13   import="net.sf.basedb.core.ItemQuery"
1591 21 Mar 12 nicklas 14   import="net.sf.basedb.core.PermissionDeniedException"
1681 01 Jun 12 nicklas 15   import="net.sf.basedb.core.query.Hql"
1681 01 Jun 12 nicklas 16   import="net.sf.basedb.core.query.Orders"
1591 21 Mar 12 nicklas 17   import="net.sf.basedb.util.Values"
1591 21 Mar 12 nicklas 18   import="net.sf.basedb.util.extensions.Extension"
1591 21 Mar 12 nicklas 19   import="net.sf.basedb.clients.web.Base"  
1591 21 Mar 12 nicklas 20   import="net.sf.basedb.clients.web.util.HTML"
1591 21 Mar 12 nicklas 21   import="net.sf.basedb.clients.web.extensions.ExtensionsControl"
1591 21 Mar 12 nicklas 22   import="java.util.List"
1591 21 Mar 12 nicklas 23   import="java.util.ArrayList"
1591 21 Mar 12 nicklas 24 %>
2785 10 Oct 14 nicklas 25 <%@ taglib prefix="base" uri="/WEB-INF/base.tld" %>
1591 21 Mar 12 nicklas 26 <%!
1669 29 May 12 nicklas 27 String getSampleForLocation(List<Sample> samples, int offset, int position)
1591 21 Mar 12 nicklas 28 {
1667 23 May 12 nicklas 29   String name = "<i>empty</i>";
1669 29 May 12 nicklas 30   int index = offset + position - 1;
1669 29 May 12 nicklas 31   if (index < samples.size())
1591 21 Mar 12 nicklas 32   {
1669 29 May 12 nicklas 33     Sample s = samples.get(index);
1669 29 May 12 nicklas 34     name = "<b>" + HTML.encodeTags(s.getName()) + "</b>";
1591 21 Mar 12 nicklas 35     try
1591 21 Mar 12 nicklas 36     {
1669 29 May 12 nicklas 37       BioWell well = s.getBioWell();
1669 29 May 12 nicklas 38       if (well != null)
1591 21 Mar 12 nicklas 39       {
1669 29 May 12 nicklas 40         BioPlate plate = well.getPlate();
2172 11 Dec 13 nicklas 41         name += "<br>" + plate.getName() + " " + well.getCoordinate();
1591 21 Mar 12 nicklas 42       }
1591 21 Mar 12 nicklas 43     }
1591 21 Mar 12 nicklas 44     catch (PermissionDeniedException ex)
1669 29 May 12 nicklas 45     {}
1591 21 Mar 12 nicklas 46   }
1591 21 Mar 12 nicklas 47   return name;
1591 21 Mar 12 nicklas 48 }
1591 21 Mar 12 nicklas 49 %>
1591 21 Mar 12 nicklas 50 <%
3976 26 May 16 nicklas 51 final SessionControl sc = Base.getExistingSessionControl(request, "net.sf.basedb.reggie", true);
1591 21 Mar 12 nicklas 52 final String ID = sc.getId();
1591 21 Mar 12 nicklas 53 final float scale = Base.getScale(sc);
1591 21 Mar 12 nicklas 54 final String home = ExtensionsControl.getHomeUrl("net.sf.basedb.reggie");
1669 29 May 12 nicklas 55 final String root = request.getContextPath();
1591 21 Mar 12 nicklas 56 final int BLOCKS_PER_PAGE = 3;
1669 29 May 12 nicklas 57 final int SAMPLES_PER_BLOCK = 5;
1591 21 Mar 12 nicklas 58 DbControl dc = null;
1591 21 Mar 12 nicklas 59 try
1591 21 Mar 12 nicklas 60 {
1591 21 Mar 12 nicklas 61   dc = sc.newDbControl();
1591 21 Mar 12 nicklas 62   final Extension reggie = ExtensionsControl.get(dc).getExtension("net.sf.basedb.reggie");
1591 21 Mar 12 nicklas 63   final User user = User.getById(dc, sc.getLoggedInUserId());
1681 01 Jun 12 nicklas 64   final int listId = Values.getInt(request.getParameter("workList"));
3247 14 Apr 15 nicklas 65   ItemList workList = ItemList.getById(dc, listId);
1669 29 May 12 nicklas 66   
3247 14 Apr 15 nicklas 67   ItemQuery<Sample> query = (ItemQuery<Sample>)workList.getMembers();
1681 01 Jun 12 nicklas 68   
1681 01 Jun 12 nicklas 69   query.join(Hql.leftJoin(null, "bioWell", "bw", null, true));
1681 01 Jun 12 nicklas 70   query.join(Hql.leftJoin("bw", "bioPlate", "bp", null, true));
1681 01 Jun 12 nicklas 71   
1681 01 Jun 12 nicklas 72   // Sort by bioplate position
1682 01 Jun 12 nicklas 73   query.order(Orders.asc(Hql.expression("coalesce(bp.name, 'zzzz')", null)));
1681 01 Jun 12 nicklas 74   query.order(Orders.asc(Hql.property("bw", "row")));
1681 01 Jun 12 nicklas 75   query.order(Orders.asc(Hql.property("bw", "column")));
1681 01 Jun 12 nicklas 76   query.order(Orders.asc(Hql.property("id")));
1681 01 Jun 12 nicklas 77
1681 01 Jun 12 nicklas 78   List<Sample> histology = query.list(dc);
1681 01 Jun 12 nicklas 79   
1681 01 Jun 12 nicklas 80   int totalBlocks = 1 + (histology.size()-1) / SAMPLES_PER_BLOCK;
1669 29 May 12 nicklas 81   int totalPages = 1 + (totalBlocks-1) / BLOCKS_PER_PAGE;
1591 21 Mar 12 nicklas 82 %>
3026 11 Dec 14 nicklas 83 <base:page id="protocol" type="iframe" noskin="true"
2785 10 Oct 14 nicklas 84   favicon="<%=home+"/images/microscope.png"%>" 
2785 10 Oct 14 nicklas 85   title="Lab protocol for FFPE/HE">
2785 10 Oct 14 nicklas 86 <base:head
2785 10 Oct 14 nicklas 87   scripts="~../reggie-2.js,~histology_protocol.js" 
2785 10 Oct 14 nicklas 88   styles="~../css/reggie-2.css,~../css/printable.css"
2785 10 Oct 14 nicklas 89   >
1591 21 Mar 12 nicklas 90   <style>
1667 23 May 12 nicklas 91   table.protocolheader
1591 21 Mar 12 nicklas 92   {
1667 23 May 12 nicklas 93     width: 100%;
2172 11 Dec 13 nicklas 94     border: 1px solid #000000;
2172 11 Dec 13 nicklas 95     margin-bottom: 1em;
2172 11 Dec 13 nicklas 96     border-collapse: collapse;
1667 23 May 12 nicklas 97   }
2172 11 Dec 13 nicklas 98
1667 23 May 12 nicklas 99   table.protocolheader > tbody > tr
1667 23 May 12 nicklas 100   {
2172 11 Dec 13 nicklas 101     vertical-align: top;
2172 11 Dec 13 nicklas 102     height: 1.25em;
1667 23 May 12 nicklas 103   }
1667 23 May 12 nicklas 104
2172 11 Dec 13 nicklas 105   table.protocolheader > tbody > tr > th
1667 23 May 12 nicklas 106   {
1667 23 May 12 nicklas 107     text-align: left;
1667 23 May 12 nicklas 108     font-size: 1.25em;
2172 11 Dec 13 nicklas 109     background-color: #F0F0F0;
2172 11 Dec 13 nicklas 110     padding: 2px;
1667 23 May 12 nicklas 111   }
1667 23 May 12 nicklas 112   
2172 11 Dec 13 nicklas 113   table.protocolheader > tbody > tr > td
2172 11 Dec 13 nicklas 114   {
2172 11 Dec 13 nicklas 115     text-align: left;
2172 11 Dec 13 nicklas 116     font-size: 1.25em;
2172 11 Dec 13 nicklas 117     padding: 2px;
2172 11 Dec 13 nicklas 118   }
2172 11 Dec 13 nicklas 119   
2172 11 Dec 13 nicklas 120   
1667 23 May 12 nicklas 121   div.paraffinblock
1667 23 May 12 nicklas 122   {
1591 21 Mar 12 nicklas 123     margin-top: 1em;
1699 12 Jun 12 nicklas 124     margin-bottom: 2em;
2172 11 Dec 13 nicklas 125     height: 7cm;
1591 21 Mar 12 nicklas 126   }
1591 21 Mar 12 nicklas 127   
2172 11 Dec 13 nicklas 128   div.paraffinblock .header
1591 21 Mar 12 nicklas 129   {
2172 11 Dec 13 nicklas 130     border: 1px solid #000000;
2172 11 Dec 13 nicklas 131     width: 100%;
2172 11 Dec 13 nicklas 132     border-collapse: collapse;
2172 11 Dec 13 nicklas 133     height: 7cm;
1667 23 May 12 nicklas 134   }
1667 23 May 12 nicklas 135   
2172 11 Dec 13 nicklas 136   div.paraffinblock .header th
1667 23 May 12 nicklas 137   {
2172 11 Dec 13 nicklas 138     text-align: left;
2172 11 Dec 13 nicklas 139     font-size: 1em;
2172 11 Dec 13 nicklas 140     background-color: #F0F0F0;
2172 11 Dec 13 nicklas 141     padding: 2px;
2172 11 Dec 13 nicklas 142   }
2172 11 Dec 13 nicklas 143   
2172 11 Dec 13 nicklas 144   div.paraffinblock .header td
2172 11 Dec 13 nicklas 145   {
2172 11 Dec 13 nicklas 146   
2172 11 Dec 13 nicklas 147     text-align: left;
2172 11 Dec 13 nicklas 148     font-size: 1em;
2172 11 Dec 13 nicklas 149     padding: 2px;
2172 11 Dec 13 nicklas 150   }
2172 11 Dec 13 nicklas 151   
2172 11 Dec 13 nicklas 152   div.paraffinblock .header .big
2172 11 Dec 13 nicklas 153   {
2172 11 Dec 13 nicklas 154     font-size: 1.25em;
2172 11 Dec 13 nicklas 155   }
2172 11 Dec 13 nicklas 156   
2172 11 Dec 13 nicklas 157   div.paraffinblock .block
2172 11 Dec 13 nicklas 158   {
1591 21 Mar 12 nicklas 159     width: 100%;
2172 11 Dec 13 nicklas 160     height: 7cm;
1591 21 Mar 12 nicklas 161     border-collapse: collapse;
1591 21 Mar 12 nicklas 162     border: 1px solid #000000;
1591 21 Mar 12 nicklas 163   }
1591 21 Mar 12 nicklas 164   
2172 11 Dec 13 nicklas 165   div.paraffinblock .block td
1591 21 Mar 12 nicklas 166   {
1591 21 Mar 12 nicklas 167     vertical-align: top;
1591 21 Mar 12 nicklas 168     border: 1px solid #000000;
2172 11 Dec 13 nicklas 169     padding: 4px;
1668 25 May 12 nicklas 170     width: 50%;
2172 11 Dec 13 nicklas 171     text-align: center;
1591 21 Mar 12 nicklas 172   }
1690 07 Jun 12 nicklas 173   
2172 11 Dec 13 nicklas 174   div.paraffinblock .block td img
1690 07 Jun 12 nicklas 175   {
2172 11 Dec 13 nicklas 176     float: left;
2172 11 Dec 13 nicklas 177     margin-right: -16px;
1690 07 Jun 12 nicklas 178   }
1691 07 Jun 12 nicklas 179   </style>
2785 10 Oct 14 nicklas 180 </base:head>
2785 10 Oct 14 nicklas 181 <base:body>
2785 10 Oct 14 nicklas 182   <div class="paper">
2785 10 Oct 14 nicklas 183
2785 10 Oct 14 nicklas 184   <form name="reggie" id="wizard">
1690 07 Jun 12 nicklas 185   
2785 10 Oct 14 nicklas 186   <div id="all-protocol" style="display: none;">
2785 10 Oct 14 nicklas 187
2785 10 Oct 14 nicklas 188   <div id="print-instructions" class="noprint fullwidth">
2970 24 Nov 14 nicklas 189     <base:button id="print-button" image="<%=home+"/images/print.png"%>" title="Print&hellip;" />
5309 15 Feb 19 nicklas 190       <b>Download labels</b>
5309 15 Feb 19 nicklas 191       <base:icon subclass="link" id="downloadLabelsCsv" image="<%=home + "/images/download.png"%>" 
5309 15 Feb 19 nicklas 192         data-list-id="<%=listId%>" data-format="csv" title="Download labels as a tab-separated text file (csv)">CSV</base:icon>
5309 15 Feb 19 nicklas 193       <base:icon subclass="link" id="downloadLabelsXlsx" image="<%=home + "/images/download.png"%>" 
5309 15 Feb 19 nicklas 194         data-list-id="<%=listId%>" data-format="xlsx" title="Download lables as an Excel worksheet file (xlsx)">Excel</base:icon>
2785 10 Oct 14 nicklas 195     <br clear="all">
1591 21 Mar 12 nicklas 196   </div>
2785 10 Oct 14 nicklas 197
1591 21 Mar 12 nicklas 198   <%
1591 21 Mar 12 nicklas 199   int pageNo = 0;
1669 29 May 12 nicklas 200   for (int blockNo = 0; blockNo < totalBlocks; ++blockNo)
1591 21 Mar 12 nicklas 201   {
1684 04 Jun 12 nicklas 202     AnyToAny link = AnyToAny.getByName(dc, workList, "block."+(blockNo+1));
1684 04 Jun 12 nicklas 203     BioPlate block = (BioPlate)link.getTo();
1669 29 May 12 nicklas 204     int offset = SAMPLES_PER_BLOCK * blockNo;
1591 21 Mar 12 nicklas 205     if (blockNo % BLOCKS_PER_PAGE == 0)
1591 21 Mar 12 nicklas 206     {
1591 21 Mar 12 nicklas 207       pageNo++;
1591 21 Mar 12 nicklas 208       %>
1591 21 Mar 12 nicklas 209       <div class="<%=blockNo > 0 ? "pagebreak" : ""%>"></div>
2785 10 Oct 14 nicklas 210       <h1>Lab protocol for FFPE/HE v.1.0 <span class="reggie">Page <%=pageNo %> of <%=totalPages %></span></h1>
2172 11 Dec 13 nicklas 211       
1667 23 May 12 nicklas 212       <table class="protocolheader">
2172 11 Dec 13 nicklas 213       <tr style="border-bottom: 1px solid #000000;">
2172 11 Dec 13 nicklas 214         <th style="width: 15%;">Work list</th>
2172 11 Dec 13 nicklas 215         <td style="width: 30%; border-right: 1px solid #000000;"><%=HTML.encodeTags(workList.getName())%></td>
1591 21 Mar 12 nicklas 216       </tr>
1591 21 Mar 12 nicklas 217       <tr>
2172 11 Dec 13 nicklas 218         <td rowspan="1" colspan="2" style="width: 50%; border-right: 1px solid #000000;"><%=HTML.niceFormat(workList.getDescription()) %></td>
1681 01 Jun 12 nicklas 219       </tr>
1591 21 Mar 12 nicklas 220       </table>
1591 21 Mar 12 nicklas 221       <%
1591 21 Mar 12 nicklas 222     }
1591 21 Mar 12 nicklas 223     %>
1667 23 May 12 nicklas 224     <div class="paraffinblock">
2595 20 Aug 14 nicklas 225       <table style="width: 100%; border: 1px solid #000000;">
2172 11 Dec 13 nicklas 226       <tr>
2172 11 Dec 13 nicklas 227         <td style="width: 50%;">
2172 11 Dec 13 nicklas 228
2172 11 Dec 13 nicklas 229           <table class="header">
2172 11 Dec 13 nicklas 230           <tr class="big">
2172 11 Dec 13 nicklas 231             <th style="width: 35%;">Block</th>
2172 11 Dec 13 nicklas 232             <td colspan="2" style="width: 65%;"><%=block.getName() %></td>
2172 11 Dec 13 nicklas 233           </tr>
2172 11 Dec 13 nicklas 234           
2172 11 Dec 13 nicklas 235           <tr style="border-top: 1px solid #000000;">
2172 11 Dec 13 nicklas 236             <th>Storage box</th>
2172 11 Dec 13 nicklas 237             <td colspan="2" style="border-right: 1px solid #000000;"></td>
2172 11 Dec 13 nicklas 238           </tr>
2172 11 Dec 13 nicklas 239           
2172 11 Dec 13 nicklas 240           <tr style="border-top: 1px solid #cccccc;">
2172 11 Dec 13 nicklas 241             <th>Embedding</th>
2172 11 Dec 13 nicklas 242             <td style="width: 32%; border-right: 1px solid #cccccc;"></td>
2172 11 Dec 13 nicklas 243             <td style="width: 33%;"></td>
2172 11 Dec 13 nicklas 244           </tr>
2172 11 Dec 13 nicklas 245           
2172 11 Dec 13 nicklas 246           <tr class="big" style="border-top: 1px solid #000000;">
2172 11 Dec 13 nicklas 247             <th>Slides</th>
2172 11 Dec 13 nicklas 248             <td colspan="2"><%=block.getName().replace("PB", "HE") %>.#</td>
2172 11 Dec 13 nicklas 249           </tr>
2172 11 Dec 13 nicklas 250           
2172 11 Dec 13 nicklas 251           <tr style="border-top: 1px solid #000000;">
2172 11 Dec 13 nicklas 252             <th>Storage box/pos</th>
2172 11 Dec 13 nicklas 253             <td style="border-right: 1px solid #cccccc;"></td>
2172 11 Dec 13 nicklas 254             <td></td>
2172 11 Dec 13 nicklas 255           </tr>
2172 11 Dec 13 nicklas 256           
2172 11 Dec 13 nicklas 257           <tr style="border-top: 1px solid #cccccc;">
2172 11 Dec 13 nicklas 258             <th>Sectioning</th>
2172 11 Dec 13 nicklas 259             <td style="border-right: 1px solid #cccccc;"></td>
2172 11 Dec 13 nicklas 260             <td></td>
2172 11 Dec 13 nicklas 261           </tr>
2172 11 Dec 13 nicklas 262
2172 11 Dec 13 nicklas 263           <tr style="border-top: 1px solid #cccccc;">
2172 11 Dec 13 nicklas 264             <th>Staining</th>
2172 11 Dec 13 nicklas 265             <td style="border-right: 1px solid #cccccc;"></td>
2172 11 Dec 13 nicklas 266             <td></td>
2172 11 Dec 13 nicklas 267           </tr>
2172 11 Dec 13 nicklas 268         
2172 11 Dec 13 nicklas 269           <tr style="border-top: 1px solid #000000;">
2172 11 Dec 13 nicklas 270             <td colspan="3" style="height: 5em;">&nbsp;</td>
2172 11 Dec 13 nicklas 271           </tr>
2172 11 Dec 13 nicklas 272           </table>
2172 11 Dec 13 nicklas 273         </td>
2172 11 Dec 13 nicklas 274         
2172 11 Dec 13 nicklas 275         <td style="width: 50%;">
2172 11 Dec 13 nicklas 276           <table class="block">
2172 11 Dec 13 nicklas 277           <tr>
2172 11 Dec 13 nicklas 278           <td>
2172 11 Dec 13 nicklas 279             <img src="../images/3.png"><%=getSampleForLocation(histology, offset, 3) %>
1699 12 Jun 12 nicklas 280           </td>
2172 11 Dec 13 nicklas 281           <td>
2172 11 Dec 13 nicklas 282             <img src="../images/6.png"><i>Not used</i>
2172 11 Dec 13 nicklas 283           </td>
2172 11 Dec 13 nicklas 284           </tr>
1699 12 Jun 12 nicklas 285           
2172 11 Dec 13 nicklas 286           <tr>
2172 11 Dec 13 nicklas 287           <td>
2172 11 Dec 13 nicklas 288             <img src="../images/2.png"><%=getSampleForLocation(histology, offset, 2) %>
1699 12 Jun 12 nicklas 289           </td>
2172 11 Dec 13 nicklas 290           <td>
2172 11 Dec 13 nicklas 291             <img src="../images/5.png"><%=getSampleForLocation(histology, offset, 5) %>
2172 11 Dec 13 nicklas 292           </td>
2172 11 Dec 13 nicklas 293           </tr>
2172 11 Dec 13 nicklas 294           
2172 11 Dec 13 nicklas 295           <tr>
2172 11 Dec 13 nicklas 296           <td>
2172 11 Dec 13 nicklas 297             <img src="../images/1.png"><%=getSampleForLocation(histology, offset, 1) %>
2172 11 Dec 13 nicklas 298           </td>
2172 11 Dec 13 nicklas 299           <td>
2172 11 Dec 13 nicklas 300             <img src="../images/4.png"><%=getSampleForLocation(histology, offset, 4) %>
2172 11 Dec 13 nicklas 301           </td>
2172 11 Dec 13 nicklas 302           </tr>
1699 12 Jun 12 nicklas 303         </table>
1591 21 Mar 12 nicklas 304         
1591 21 Mar 12 nicklas 305         </td>
2172 11 Dec 13 nicklas 306       </tr>
1591 21 Mar 12 nicklas 307       </table>
2172 11 Dec 13 nicklas 308
1591 21 Mar 12 nicklas 309     </div>
1591 21 Mar 12 nicklas 310     <%
1591 21 Mar 12 nicklas 311   }
1591 21 Mar 12 nicklas 312   %>
1849 18 Feb 13 nicklas 313   </div>
2785 10 Oct 14 nicklas 314   </form>
2785 10 Oct 14 nicklas 315   </div>
2785 10 Oct 14 nicklas 316 </base:body>
2785 10 Oct 14 nicklas 317 </base:page>
1591 21 Mar 12 nicklas 318 <%
1591 21 Mar 12 nicklas 319 }
1591 21 Mar 12 nicklas 320 finally
1591 21 Mar 12 nicklas 321 {
1591 21 Mar 12 nicklas 322   if (dc != null) dc.close();
1591 21 Mar 12 nicklas 323 }
1591 21 Mar 12 nicklas 324 %>