www/biomaterials/wizards/create_child_bioplate_step2.jsp

Code
Comments
Other
Rev Date Author Line
5548 24 Jan 11 nicklas 1 <%-- $Id$
5548 24 Jan 11 nicklas 2   ------------------------------------------------------------------
5548 24 Jan 11 nicklas 3   Copyright (C) 2011 Nicklas Nordborg
5548 24 Jan 11 nicklas 4
5548 24 Jan 11 nicklas 5   This file is part of BASE - BioArray Software Environment.
5548 24 Jan 11 nicklas 6   Available at http://base.thep.lu.se/
5548 24 Jan 11 nicklas 7
5548 24 Jan 11 nicklas 8   BASE is free software; you can redistribute it and/or
5548 24 Jan 11 nicklas 9   modify it under the terms of the GNU General Public License
5548 24 Jan 11 nicklas 10   as published by the Free Software Foundation; either version 3
5548 24 Jan 11 nicklas 11   of the License, or (at your option) any later version.
5548 24 Jan 11 nicklas 12
5548 24 Jan 11 nicklas 13   BASE is distributed in the hope that it will be useful,
5548 24 Jan 11 nicklas 14   but WITHOUT ANY WARRANTY; without even the implied warranty of
5548 24 Jan 11 nicklas 15   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
5548 24 Jan 11 nicklas 16   GNU General Public License for more details.
5548 24 Jan 11 nicklas 17
5548 24 Jan 11 nicklas 18   You should have received a copy of the GNU General Public License
5548 24 Jan 11 nicklas 19   along with BASE. If not, see <http://www.gnu.org/licenses/>.
5548 24 Jan 11 nicklas 20   ------------------------------------------------------------------
5548 24 Jan 11 nicklas 21
5548 24 Jan 11 nicklas 22   @author Nicklas
5548 24 Jan 11 nicklas 23 --%>
5548 24 Jan 11 nicklas 24 <%@ page pageEncoding="UTF-8" session="false"
5548 24 Jan 11 nicklas 25   import="net.sf.basedb.core.BioPlate"
5548 24 Jan 11 nicklas 26   import="net.sf.basedb.core.BioPlateEvent"
5548 24 Jan 11 nicklas 27   import="net.sf.basedb.core.BioPlateEventType"
5548 24 Jan 11 nicklas 28   import="net.sf.basedb.core.BioPlateType"
5548 24 Jan 11 nicklas 29   import="net.sf.basedb.core.PlateGeometry"
5548 24 Jan 11 nicklas 30   import="net.sf.basedb.core.MeasuredBioMaterial"
5548 24 Jan 11 nicklas 31   import="net.sf.basedb.core.Hardware"
5548 24 Jan 11 nicklas 32   import="net.sf.basedb.core.Protocol"
5548 24 Jan 11 nicklas 33   import="net.sf.basedb.core.DbControl"
5548 24 Jan 11 nicklas 34   import="net.sf.basedb.core.Item"
5548 24 Jan 11 nicklas 35   import="net.sf.basedb.core.ItemContext"
5548 24 Jan 11 nicklas 36   import="net.sf.basedb.core.ItemQuery"
5548 24 Jan 11 nicklas 37   import="net.sf.basedb.core.SessionControl"
5548 24 Jan 11 nicklas 38   import="net.sf.basedb.core.SystemItems"
5548 24 Jan 11 nicklas 39   import="net.sf.basedb.core.query.Restrictions"
5548 24 Jan 11 nicklas 40   import="net.sf.basedb.core.query.Hql"
5548 24 Jan 11 nicklas 41   import="net.sf.basedb.util.Values"
5548 24 Jan 11 nicklas 42   import="net.sf.basedb.util.formatter.Formatter"
5548 24 Jan 11 nicklas 43   import="net.sf.basedb.clients.web.formatter.FormatterFactory"
5548 24 Jan 11 nicklas 44   import="net.sf.basedb.clients.web.formatter.FormatterSettings"
5548 24 Jan 11 nicklas 45   import="net.sf.basedb.clients.web.Base"
5548 24 Jan 11 nicklas 46   import="net.sf.basedb.clients.web.util.HTML"
5548 24 Jan 11 nicklas 47   import="java.util.List"
5548 24 Jan 11 nicklas 48   import="java.util.Date"
5548 24 Jan 11 nicklas 49   import="java.util.Collections"
5548 24 Jan 11 nicklas 50 %>
5548 24 Jan 11 nicklas 51 <%@ taglib prefix="base" uri="/WEB-INF/base.tld" %>
5548 24 Jan 11 nicklas 52 <%@ taglib prefix="tbl" uri="/WEB-INF/table.tld" %>
5548 24 Jan 11 nicklas 53 <%
5548 24 Jan 11 nicklas 54 final SessionControl sc = Base.getExistingSessionControl(pageContext, true);
5548 24 Jan 11 nicklas 55 final String ID = sc.getId();
5548 24 Jan 11 nicklas 56 final float scale = Base.getScale(sc);
5548 24 Jan 11 nicklas 57 final int sourcePlateId = Values.getInt(request.getParameter("sourceplate_id"));
5548 24 Jan 11 nicklas 58 final int numChildPlates = Values.getInt(request.getParameter("number_of_plates"), 1);
5548 24 Jan 11 nicklas 59 final int childPlateTypeId = Values.getInt(request.getParameter("bioplatetype_id"));
5548 24 Jan 11 nicklas 60 final int childPlateGeometryId = Values.getInt(request.getParameter("plategeometry_id"));
5548 24 Jan 11 nicklas 61 final String childPlateNamePrefix = Values.getString(request.getParameter("plate_name_prefix"), "New plate.");
5548 24 Jan 11 nicklas 62
5548 24 Jan 11 nicklas 63 final ItemContext cc = sc.getCurrentContext(Item.BIOPLATEEVENT, BioPlateEventType.CREATE_BIOMATERIAL);
7954 12 May 21 nicklas 64 final DbControl dc = sc.newDbControl(":Create child plate wizard step 2");
5548 24 Jan 11 nicklas 65 try
5548 24 Jan 11 nicklas 66 {
5559 31 Jan 11 nicklas 67   final BioPlate sourcePlate = BioPlate.getById(dc, sourcePlateId);
5561 02 Feb 11 nicklas 68   final Item childBioMaterialType = Item.valueOf(request.getParameter("child_biomaterial_type"));
5642 26 May 11 nicklas 69   final boolean isBioAssayEvent = childBioMaterialType == Item.PHYSICALBIOASSAY;
5561 02 Feb 11 nicklas 70
5642 26 May 11 nicklas 71   final PlateGeometry geometry = isBioAssayEvent ? null : PlateGeometry.getById(dc, childPlateGeometryId);
5642 26 May 11 nicklas 72   final int size = Values.getInt(request.getParameter("size"));
5559 31 Jan 11 nicklas 73   final BioPlateType sourceType = sourcePlate.getBioPlateType();
5559 31 Jan 11 nicklas 74   final Item sourceBioMaterialType = sourceType.getBioMaterialType();
5548 24 Jan 11 nicklas 75   
5548 24 Jan 11 nicklas 76   final Formatter<Date> dateFormatter = FormatterFactory.getDateFormatter(sc);
5548 24 Jan 11 nicklas 77   final String dateFormat = FormatterSettings.getDateFormat(sc);
5548 24 Jan 11 nicklas 78   final String jsDateFormat = HTML.javaScriptEncode(dateFormat);
5548 24 Jan 11 nicklas 79   final String htmlDateFormat = HTML.encodeTags(dateFormat);
5548 24 Jan 11 nicklas 80   final boolean showSourceCoordinates = Values.getBoolean(sc.getUserClientSetting("create-child-plate.show-source-coordinates"), true);
5548 24 Jan 11 nicklas 81   %>
6397 24 Jan 14 nicklas 82   <base:page type="popup" title="Create child bioplate - step 2/2" id="step-2">
6397 24 Jan 14 nicklas 83   <base:head scripts="plate.js,js-draw.js,~create_child_bioplate.js" styles="plate.css,toolbar.css" />
6397 24 Jan 14 nicklas 84   <base:body>
5928 17 Jan 12 nicklas 85     <div id="canvas" style="position: absolute; z-index: 99;"></div>
5928 17 Jan 12 nicklas 86     
5928 17 Jan 12 nicklas 87     <h1>Create child bioplate - step 2/2 <base:help helpid="bioplateevent.create-child-2" /></h1>
5928 17 Jan 12 nicklas 88     <form name="main" action="index.jsp" method="post">
5928 17 Jan 12 nicklas 89     <input type="hidden" name="ID" value="<%=ID%>">
5928 17 Jan 12 nicklas 90     <input type="hidden" name="cmd" value="CreateChildPlate">
5928 17 Jan 12 nicklas 91     <input type="hidden" name="sourceplate_id" value="<%=sourcePlateId%>">
6397 24 Jan 14 nicklas 92     <input type="hidden" name="source_biomaterial_type" value="<%=sourceBioMaterialType.name()%>">
5928 17 Jan 12 nicklas 93     <!-- event properties -->
5928 17 Jan 12 nicklas 94     <input type="hidden" name="event_name" value="<%=HTML.encodeTags(request.getParameter("event_name"))%>">
5928 17 Jan 12 nicklas 95     <input type="hidden" name="event_description" value="<%=HTML.encodeTags(request.getParameter("event_description"))%>">
5928 17 Jan 12 nicklas 96     <input type="hidden" name="event_date" value="<%=HTML.encodeTags(request.getParameter("event_date"))%>">
5928 17 Jan 12 nicklas 97     <input type="hidden" name="protocol_id" value="<%=Values.getInt(request.getParameter("protocol_id"))%>">
6997 03 Nov 15 nicklas 98     <input type="hidden" name="kit_id" value="<%=Values.getInt(request.getParameter("kit_id"))%>">
5928 17 Jan 12 nicklas 99     <input type="hidden" name="hardware_id" value="<%=Values.getInt(request.getParameter("hardware_id"))%>">
5928 17 Jan 12 nicklas 100     <!-- child plate properties -->
5928 17 Jan 12 nicklas 101     <input type="hidden" name="number_of_plates" value="<%=numChildPlates%>">
5928 17 Jan 12 nicklas 102     <input type="hidden" name="size" value="<%=size%>">
6397 24 Jan 14 nicklas 103     <input type="hidden" name="rows" value="<%=geometry == null ? 1 : geometry.getRows()%>">
6397 24 Jan 14 nicklas 104     <input type="hidden" name="columns" value="<%=geometry == null ? size : geometry.getColumns()%>">
6397 24 Jan 14 nicklas 105     <input type="hidden" name="childplate_prefix" value="<%=HTML.encodeTags(childPlateNamePrefix)%>">
5928 17 Jan 12 nicklas 106     <input type="hidden" name="plategeometry_id" value="<%=childPlateGeometryId%>">
5928 17 Jan 12 nicklas 107     <input type="hidden" name="bioplatetype_id" value="<%=childPlateTypeId%>">
5928 17 Jan 12 nicklas 108     <input type="hidden" name="freezer_id" value="<%=Values.getInt(request.getParameter("freezer_id"))%>">
5928 17 Jan 12 nicklas 109     <input type="hidden" name="plate_description" value="<%=HTML.encodeTags(request.getParameter("plate_description"))%>">
5928 17 Jan 12 nicklas 110     <!-- child biomaterial properties -->
5928 17 Jan 12 nicklas 111     <input type="hidden" name="child_biomaterial_type" value="<%=childBioMaterialType.name()%>"> 
5928 17 Jan 12 nicklas 112     <input type="hidden" name="subtype_id" value="<%=request.getParameter(childBioMaterialType.name() + "_subtype_id")%>">
5928 17 Jan 12 nicklas 113     <input type="hidden" name="original_quantity" value="<%=HTML.encodeTags(request.getParameter("original_quantity"))%>">
5928 17 Jan 12 nicklas 114     <input type="hidden" name="used_quantity" value="<%=HTML.encodeTags(request.getParameter("used_quantity"))%>">
5928 17 Jan 12 nicklas 115     <input type="hidden" name="child_description" value="<%=HTML.encodeTags(request.getParameter("child_description"))%>">
5928 17 Jan 12 nicklas 116     <input type="hidden" name="tag_id" value="<%=HTML.encodeTags(request.getParameter("tag_id"))%>">
5928 17 Jan 12 nicklas 117     
5928 17 Jan 12 nicklas 118     <div class="content">
6611 20 Nov 14 nicklas 119       <div class="absolutefull bg-filled-50" style="height: 1.8em;">
6611 20 Nov 14 nicklas 120         <tbl:toolbar id="toolbar.mappings" subclass="bottomborder" style="height: 100%;">
6397 24 Jan 14 nicklas 121           <tbl:button 
6397 24 Jan 14 nicklas 122             id="btnClearMapping"
6397 24 Jan 14 nicklas 123             title="Clear" 
5928 17 Jan 12 nicklas 124             image="cancel.png" 
5928 17 Jan 12 nicklas 125             tooltip="Clear all mapped wells"
5928 17 Jan 12 nicklas 126           />
6397 24 Jan 14 nicklas 127           <tbl:button 
6397 24 Jan 14 nicklas 128             id="btnPlaceByRow"
6397 24 Jan 14 nicklas 129             title="Place by row" 
5928 17 Jan 12 nicklas 130             image="place_by_row.png" 
5928 17 Jan 12 nicklas 131             tooltip="Place remaining items; start with rows"
5928 17 Jan 12 nicklas 132           />
6397 24 Jan 14 nicklas 133           <tbl:button 
6397 24 Jan 14 nicklas 134             id="btnPlaceByColumn"
6397 24 Jan 14 nicklas 135             title="Place by column" 
5928 17 Jan 12 nicklas 136             image="place_by_column.png" 
5928 17 Jan 12 nicklas 137             tooltip="Place remaining items; start with columns"
5928 17 Jan 12 nicklas 138           />
6397 24 Jan 14 nicklas 139           <tbl:button 
6397 24 Jan 14 nicklas 140             id="btnSelectPlateMapping"
6397 24 Jan 14 nicklas 141             title="Predefined mapping&hellip;" 
5928 17 Jan 12 nicklas 142             image="star.png" 
5928 17 Jan 12 nicklas 143             tooltip="Select a predefined plate mapping"
5928 17 Jan 12 nicklas 144           />
5928 17 Jan 12 nicklas 145         </tbl:toolbar>
5928 17 Jan 12 nicklas 146       </div>
5548 24 Jan 11 nicklas 147   
6611 20 Nov 14 nicklas 148       <div class="absolutefull bottomborder" style="top: 1.8em;">
5548 24 Jan 11 nicklas 149   
5928 17 Jan 12 nicklas 150         <div class="absolutefull" style="width: 50%;">
6611 20 Nov 14 nicklas 151           <div class="absolutefull bg-filled-100" style="height: 2em;">
5928 17 Jan 12 nicklas 152             <div class="padded">
5548 24 Jan 11 nicklas 153             <b>Source plate:</b> <span id="plate.src.name"></span>
5928 17 Jan 12 nicklas 154             </div>
5548 24 Jan 11 nicklas 155           </div>
5928 17 Jan 12 nicklas 156           
6611 20 Nov 14 nicklas 157           <div class="absolutefull topborder rightborder" style="top: 2em; bottom: 10em;">
6611 20 Nov 14 nicklas 158             <table style="margin: auto;"><tr><td>
5975 20 Feb 12 nicklas 159               <div id="plate.src" style="margin-top: 1em;"></div>
5928 17 Jan 12 nicklas 160             </td></tr></table>
5928 17 Jan 12 nicklas 161           </div>
6611 20 Nov 14 nicklas 162           
6611 20 Nov 14 nicklas 163           <div class="absolutefull rightborder" style="top: auto; height: 10em;" >
6611 20 Nov 14 nicklas 164           <table class="fullform input100 smaller topborder" id="childplate.info" style="display: none;">
5928 17 Jan 12 nicklas 165             <tbody class="sectionheader">
5928 17 Jan 12 nicklas 166               <tr>
5928 17 Jan 12 nicklas 167                 <th colspan="2"><%=isBioAssayEvent ? "Physical bioassay" : "Child plate"%></th>
5928 17 Jan 12 nicklas 168               </tr>
5928 17 Jan 12 nicklas 169             </tbody>
5928 17 Jan 12 nicklas 170             <tbody>
5928 17 Jan 12 nicklas 171               <tr>
5928 17 Jan 12 nicklas 172                 <th>Name</th>
6217 14 Dec 12 nicklas 173                 <td><input class="text required" type="text" name="plate_name" value="" 
5928 17 Jan 12 nicklas 174                   maxlength="<%=BioPlate.MAX_NAME_LENGTH%>"></td>
5928 17 Jan 12 nicklas 175               </tr>
5928 17 Jan 12 nicklas 176               <%
5928 17 Jan 12 nicklas 177               if (!isBioAssayEvent)
5928 17 Jan 12 nicklas 178               {
5928 17 Jan 12 nicklas 179                 %>
5928 17 Jan 12 nicklas 180                 <tr>
6145 21 Sep 12 nicklas 181                   <th>Barcode</th>
6217 14 Dec 12 nicklas 182                   <td><input class="text" type="text" name="plate_barcode" value="" 
5928 17 Jan 12 nicklas 183                     maxlength="<%=BioPlate.MAX_BARCODE_LENGTH%>"></td>
5928 17 Jan 12 nicklas 184                 </tr>
5928 17 Jan 12 nicklas 185                 <%
5928 17 Jan 12 nicklas 186               }
5928 17 Jan 12 nicklas 187               %>
5928 17 Jan 12 nicklas 188             </tbody>
5928 17 Jan 12 nicklas 189             <tr class="dynamic">
5928 17 Jan 12 nicklas 190               <th></th>
5928 17 Jan 12 nicklas 191               <td></td>
5928 17 Jan 12 nicklas 192             </tr>
5559 31 Jan 11 nicklas 193           </table>
6611 20 Nov 14 nicklas 194           </div>
5928 17 Jan 12 nicklas 195         </div>
6611 20 Nov 14 nicklas 196   
6611 20 Nov 14 nicklas 197         <div class="absolutefull" style="left: auto; width: 50%;">
6611 20 Nov 14 nicklas 198           <div class="absolutefull bg-filled-100" style="height: 2em;">
6611 20 Nov 14 nicklas 199             <div class="padded">
6611 20 Nov 14 nicklas 200               <b><%=isBioAssayEvent ? 
6611 20 Nov 14 nicklas 201                 "Physical bioassay(s)" : "Destination plate(s):"%></b> 
6611 20 Nov 14 nicklas 202                 <span id="plate.dest.info"><i>not created</i></span>
6611 20 Nov 14 nicklas 203             </div>
6611 20 Nov 14 nicklas 204           </div>
6611 20 Nov 14 nicklas 205             
6611 20 Nov 14 nicklas 206           <div class="absolutefull topborder" style="top: 2em;">
6611 20 Nov 14 nicklas 207             <table style="margin: auto;"><tr><td>
6611 20 Nov 14 nicklas 208               <div id="plate.dest" style="margin-top: 1em;"></div>
6611 20 Nov 14 nicklas 209               <div id="plate.dest.options" style="display: none;">
6611 20 Nov 14 nicklas 210                 <input type="checkbox" name="showSourceCoordinates" id="showSourceCoordinates"
6611 20 Nov 14 nicklas 211                   <%=showSourceCoordinates ? "checked" : ""%> value="1"><label for="showSourceCoordinates">Show source coordinates</label>
6611 20 Nov 14 nicklas 212               </div>
6611 20 Nov 14 nicklas 213             </td></tr></table>
6611 20 Nov 14 nicklas 214           </div>
6611 20 Nov 14 nicklas 215           
6611 20 Nov 14 nicklas 216
6611 20 Nov 14 nicklas 217           <div class="absolutefull" style="top: auto; height: 10em;">
6611 20 Nov 14 nicklas 218           <table class="fullform input100 smaller topborder" id="childbiomaterial.info" style="display: none;">
5928 17 Jan 12 nicklas 219             <tbody class="sectionheader">
5928 17 Jan 12 nicklas 220               <tr>
5928 17 Jan 12 nicklas 221                 <th colspan="2">Child biomaterial</th>
5928 17 Jan 12 nicklas 222               </tr>
5928 17 Jan 12 nicklas 223             </tbody>
5928 17 Jan 12 nicklas 224             <tbody>
5928 17 Jan 12 nicklas 225               <tr>
5928 17 Jan 12 nicklas 226                 <th>Name</th>
6217 14 Dec 12 nicklas 227                 <td><input class="text required" type="text" name="biomaterial_name" value="" 
5928 17 Jan 12 nicklas 228                   maxlength="<%=MeasuredBioMaterial.MAX_NAME_LENGTH%>"></td>
5928 17 Jan 12 nicklas 229               </tr>
5928 17 Jan 12 nicklas 230             </tbody>
5928 17 Jan 12 nicklas 231             <tr class="dynamic">
5928 17 Jan 12 nicklas 232               <th></th>
5928 17 Jan 12 nicklas 233               <td></td>
5928 17 Jan 12 nicklas 234             </tr>
5928 17 Jan 12 nicklas 235           </table>
6611 20 Nov 14 nicklas 236           </div>
5928 17 Jan 12 nicklas 237         </div>
5928 17 Jan 12 nicklas 238       </div>
5549 26 Jan 11 nicklas 239
5549 26 Jan 11 nicklas 240     </div>
5548 24 Jan 11 nicklas 241     </form>
5548 24 Jan 11 nicklas 242
5928 17 Jan 12 nicklas 243     <base:buttongroup subclass="dialogbuttons">
6397 24 Jan 14 nicklas 244       <base:button id="btnSave" title="Save" />
6397 24 Jan 14 nicklas 245       <base:button id="close" title="Cancel" />
5928 17 Jan 12 nicklas 246     </base:buttongroup>
5548 24 Jan 11 nicklas 247     
5548 24 Jan 11 nicklas 248   </base:body>
5548 24 Jan 11 nicklas 249   </base:page>
5548 24 Jan 11 nicklas 250   <%
5548 24 Jan 11 nicklas 251 }
5548 24 Jan 11 nicklas 252 finally
5548 24 Jan 11 nicklas 253 {
5548 24 Jan 11 nicklas 254   if (dc != null) dc.close();
5548 24 Jan 11 nicklas 255 }
5548 24 Jan 11 nicklas 256 %>