www/views/physicalbioassays/edit_bioassay.jsp

Code
Comments
Other
Rev Date Author Line
1406 06 Oct 05 gregory 1 <%-- $Id$
1406 06 Oct 05 gregory 2   ------------------------------------------------------------------
3675 16 Aug 07 jari 3   Copyright (C) 2005 Nicklas Nordborg, Gregory Vincic
4889 06 Apr 09 nicklas 4   Copyright (C) 2006 Johan Enell, Jari Häkkinen, Nicklas Nordborg, Martin Svensson
1406 06 Oct 05 gregory 5
2304 22 May 06 jari 6   This file is part of BASE - BioArray Software Environment.
2304 22 May 06 jari 7   Available at http://base.thep.lu.se/
1406 06 Oct 05 gregory 8
1406 06 Oct 05 gregory 9   BASE is free software; you can redistribute it and/or
1406 06 Oct 05 gregory 10   modify it under the terms of the GNU General Public License
4476 05 Sep 08 jari 11   as published by the Free Software Foundation; either version 3
1406 06 Oct 05 gregory 12   of the License, or (at your option) any later version.
1406 06 Oct 05 gregory 13
1406 06 Oct 05 gregory 14   BASE is distributed in the hope that it will be useful,
1406 06 Oct 05 gregory 15   but WITHOUT ANY WARRANTY; without even the implied warranty of
1406 06 Oct 05 gregory 16   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
1406 06 Oct 05 gregory 17   GNU General Public License for more details.
1406 06 Oct 05 gregory 18
1406 06 Oct 05 gregory 19   You should have received a copy of the GNU General Public License
4511 11 Sep 08 jari 20   along with BASE. If not, see <http://www.gnu.org/licenses/>.
1406 06 Oct 05 gregory 21   ------------------------------------------------------------------
1406 06 Oct 05 gregory 22
1806 23 Jan 06 nicklas 23   @author Nicklas
1406 06 Oct 05 gregory 24   @version 2.0
1406 06 Oct 05 gregory 25 --%>
5426 24 Sep 10 nicklas 26 <%@ page pageEncoding="UTF-8" session="false"
1806 23 Jan 06 nicklas 27   import="net.sf.basedb.core.SessionControl"
1806 23 Jan 06 nicklas 28   import="net.sf.basedb.core.DbControl"
1806 23 Jan 06 nicklas 29   import="net.sf.basedb.core.Item"
1806 23 Jan 06 nicklas 30   import="net.sf.basedb.core.ItemContext"
1806 23 Jan 06 nicklas 31   import="net.sf.basedb.core.SystemItems"
1806 23 Jan 06 nicklas 32   import="net.sf.basedb.core.Permission"
1806 23 Jan 06 nicklas 33   import="net.sf.basedb.core.Include"
2484 03 Aug 06 martin 34   import="net.sf.basedb.core.Hardware"
5642 26 May 11 nicklas 35   import="net.sf.basedb.core.PhysicalBioAssay"
1406 06 Oct 05 gregory 36   import="net.sf.basedb.core.BioMaterialEvent"
5662 20 Jun 11 nicklas 37   import="net.sf.basedb.core.BioMaterialEventSource"
5649 30 May 11 nicklas 38   import="net.sf.basedb.core.ItemSubtype"
1806 23 Jan 06 nicklas 39   import="net.sf.basedb.core.ArraySlide"
6994 03 Nov 15 nicklas 40   import="net.sf.basedb.core.Kit"
1406 06 Oct 05 gregory 41   import="net.sf.basedb.core.Protocol"
2949 24 Nov 06 martin 42   import="net.sf.basedb.core.Project"
5641 25 May 11 nicklas 43   import="net.sf.basedb.core.Extract"
1806 23 Jan 06 nicklas 44   import="net.sf.basedb.core.ItemQuery"
1806 23 Jan 06 nicklas 45   import="net.sf.basedb.core.ItemResultList"
1806 23 Jan 06 nicklas 46   import="net.sf.basedb.core.PermissionDeniedException"
1413 07 Oct 05 gregory 47   import="net.sf.basedb.core.BaseException"
4147 18 Feb 08 nicklas 48   import="net.sf.basedb.core.Type"
4147 18 Feb 08 nicklas 49   import="net.sf.basedb.core.query.Restrictions"
4147 18 Feb 08 nicklas 50   import="net.sf.basedb.core.query.Expressions"
1806 23 Jan 06 nicklas 51   import="net.sf.basedb.core.query.Orders"
1806 23 Jan 06 nicklas 52   import="net.sf.basedb.core.query.Hql"
1413 07 Oct 05 gregory 53   import="net.sf.basedb.clients.web.Base"
1413 07 Oct 05 gregory 54   import="net.sf.basedb.clients.web.util.HTML"
2753 20 Oct 06 nicklas 55   import="net.sf.basedb.util.Values"
5687 09 Aug 11 nicklas 56   import="net.sf.basedb.util.ListUtil"
2942 22 Nov 06 nicklas 57   import="net.sf.basedb.util.formatter.Formatter"
2942 22 Nov 06 nicklas 58   import="net.sf.basedb.clients.web.formatter.FormatterFactory"
2942 22 Nov 06 nicklas 59   import="net.sf.basedb.clients.web.formatter.FormatterSettings"
5501 18 Nov 10 nicklas 60   import="net.sf.basedb.core.plugin.GuiContext"
5501 18 Nov 10 nicklas 61   import="net.sf.basedb.clients.web.extensions.ExtensionsControl"
5501 18 Nov 10 nicklas 62   import="net.sf.basedb.clients.web.extensions.JspContext"
5501 18 Nov 10 nicklas 63   import="net.sf.basedb.clients.web.extensions.edit.EditUtil"
7604 25 Feb 19 nicklas 64   import="net.sf.basedb.clients.web.extensions.tabcontrol.TabAction"
5501 18 Nov 10 nicklas 65   import="net.sf.basedb.util.extensions.ExtensionsInvoker"
6314 02 Sep 13 nicklas 66   import="net.sf.basedb.util.json.JsonUtil"
6314 02 Sep 13 nicklas 67   import="net.sf.basedb.util.json.NameableConverter"
6314 02 Sep 13 nicklas 68   import="org.json.simple.JSONObject"
1806 23 Jan 06 nicklas 69   import="java.util.List"
1806 23 Jan 06 nicklas 70   import="java.util.Set"
1806 23 Jan 06 nicklas 71   import="java.util.HashSet"
1806 23 Jan 06 nicklas 72   import="java.util.Date"
5687 09 Aug 11 nicklas 73   import="java.util.Collections"
1406 06 Oct 05 gregory 74 %>
1406 06 Oct 05 gregory 75 <%@ taglib prefix="base" uri="/WEB-INF/base.tld" %>
1406 06 Oct 05 gregory 76 <%@ taglib prefix="t" uri="/WEB-INF/tab.tld" %>
6143 20 Sep 12 nicklas 77 <%@ taglib prefix="ext" uri="/WEB-INF/extensions.tld" %>
1406 06 Oct 05 gregory 78 <%
5642 26 May 11 nicklas 79 final Item itemType = Item.PHYSICALBIOASSAY;
1806 23 Jan 06 nicklas 80 final SessionControl sc = Base.getExistingSessionControl(pageContext, true);
1806 23 Jan 06 nicklas 81 final ItemContext cc = Base.getAndSetCurrentContext(sc, itemType, null, null);
1806 23 Jan 06 nicklas 82 final int itemId = cc.getId();
1806 23 Jan 06 nicklas 83 final String ID = sc.getId();
1806 23 Jan 06 nicklas 84 final float scale = Base.getScale(sc);
7954 12 May 21 nicklas 85 final DbControl dc = sc.newDbControl(":Edit "+itemType);
1806 23 Jan 06 nicklas 86 try
1806 23 Jan 06 nicklas 87 {
1806 23 Jan 06 nicklas 88   String title = null;
2465 05 Jul 06 martin 89   String name = null;
5642 26 May 11 nicklas 90   PhysicalBioAssay pba = null;
1806 23 Jan 06 nicklas 91   BioMaterialEvent creationEvent = null;
2942 22 Nov 06 nicklas 92   Date eventDate = null;
5687 09 Aug 11 nicklas 93   List<Extract> parentExtracts = null;
1413 07 Oct 05 gregory 94   
5649 30 May 11 nicklas 95   boolean readCurrentSubtype = true;
5687 09 Aug 11 nicklas 96   ItemSubtype currentSubtype = null;
1806 23 Jan 06 nicklas 97   boolean readCurrentArraySlide = true;
1806 23 Jan 06 nicklas 98   ArraySlide currentArraySlide = null;
1806 23 Jan 06 nicklas 99   
1806 23 Jan 06 nicklas 100   boolean readCurrentProtocol = true;
1806 23 Jan 06 nicklas 101   Protocol currentProtocol = null;
2484 03 Aug 06 martin 102   
5642 26 May 11 nicklas 103   boolean readCurrentHardware = true;
5642 26 May 11 nicklas 104   Hardware currentHardware = null;
6994 03 Nov 15 nicklas 105   
6994 03 Nov 15 nicklas 106   boolean readCurrentKit = true;
6994 03 Nov 15 nicklas 107   Kit currentKit = null;
1406 06 Oct 05 gregory 108
1806 23 Jan 06 nicklas 109   if (itemId == 0)
1806 23 Jan 06 nicklas 110   {
5642 26 May 11 nicklas 111     title = "Create physical bioassay";
1806 23 Jan 06 nicklas 112     cc.removeObject("item");
1806 23 Jan 06 nicklas 113     if (cc.getPropertyFilter("creationEvent.protocol.name") != null)
1406 06 Oct 05 gregory 114     {
1806 23 Jan 06 nicklas 115       currentProtocol = Base.getFirstMatching(dc, Protocol.getQuery(), "name", cc.getPropertyFilter("creationEvent.protocol.name"));
1406 06 Oct 05 gregory 116     }
2484 03 Aug 06 martin 117     if (cc.getPropertyFilter("creationEvent.hardware.name") != null)
2484 03 Aug 06 martin 118     {
5642 26 May 11 nicklas 119       currentHardware = Base.getFirstMatching(dc, Hardware.getQuery(), "name", cc.getPropertyFilter("creationEvent.hardware.name"));
2484 03 Aug 06 martin 120     }
6994 03 Nov 15 nicklas 121     if (cc.getPropertyFilter("creationEvent.kit.name") != null)
6994 03 Nov 15 nicklas 122     {
6994 03 Nov 15 nicklas 123       currentKit = Base.getFirstMatching(dc, Kit.getQuery(), "name", cc.getPropertyFilter("creationEvent.kit.name"));
6994 03 Nov 15 nicklas 124     }
1806 23 Jan 06 nicklas 125     if (cc.getPropertyFilter("arraySlide.name") != null)
1806 23 Jan 06 nicklas 126     {
1806 23 Jan 06 nicklas 127       currentArraySlide = Base.getFirstMatching(dc, ArraySlide.getQuery(), "name", cc.getPropertyFilter("arraySlide.name"));
1806 23 Jan 06 nicklas 128     }
5657 16 Jun 11 nicklas 129     name = Values.getString(cc.getPropertyValue("name"), "New physical bioassay");
7605 26 Feb 19 nicklas 130     eventDate = cc.getPropertyObject("creationEvent.eventDate");
4133 08 Feb 08 nicklas 131     
5687 09 Aug 11 nicklas 132     int currentSubtypeId = Values.getInt(request.getParameter("subtype_id"));
5687 09 Aug 11 nicklas 133     List<ItemSubtype> relatedToParent = Collections.emptyList();
5687 09 Aug 11 nicklas 134     ItemQuery<Extract> extractsQuery = null;
4133 08 Feb 08 nicklas 135     if (Values.getBoolean(request.getParameter("useParents")))
4133 08 Feb 08 nicklas 136     {
5641 25 May 11 nicklas 137       ItemContext lc = sc.getCurrentContext(Item.EXTRACT);
4147 18 Feb 08 nicklas 138       if (lc.getSelected().size() > 0)
4147 18 Feb 08 nicklas 139       {
5642 26 May 11 nicklas 140         extractsQuery = Extract.getQuery();
5642 26 May 11 nicklas 141         extractsQuery.include(Include.ALL);
5642 26 May 11 nicklas 142         extractsQuery.order(Orders.asc(Hql.property("name")));
5642 26 May 11 nicklas 143         extractsQuery.restrict(Restrictions.in(Hql.property("id"), 
4147 18 Feb 08 nicklas 144           Expressions.parameter("selected", lc.getSelected(), Type.INT)));
4147 18 Feb 08 nicklas 145       }
4133 08 Feb 08 nicklas 146     }
5641 25 May 11 nicklas 147     else if (request.getParameter("extract_id") != null)
4232 17 Apr 08 nicklas 148     {
5641 25 May 11 nicklas 149       int leId = Values.getInt(request.getParameter("extract_id"));
5642 26 May 11 nicklas 150       extractsQuery = Extract.getQuery();
5642 26 May 11 nicklas 151       extractsQuery.include(Include.ALL);
5642 26 May 11 nicklas 152       extractsQuery.restrict(Restrictions.eq(Hql.property("id"), 
4232 17 Apr 08 nicklas 153         Expressions.integer(leId)));
4232 17 Apr 08 nicklas 154     }
5687 09 Aug 11 nicklas 155     
5687 09 Aug 11 nicklas 156     if (extractsQuery != null)
5687 09 Aug 11 nicklas 157     {
5687 09 Aug 11 nicklas 158       parentExtracts = extractsQuery.list(dc);
5687 09 Aug 11 nicklas 159       if (currentSubtypeId == 0 && parentExtracts.size() > 0)
5687 09 Aug 11 nicklas 160       {
5687 09 Aug 11 nicklas 161         relatedToParent = ItemSubtype.getParentSubtypes(dc, parentExtracts.get(0), Item.PHYSICALBIOASSAY);
5687 09 Aug 11 nicklas 162       }
5687 09 Aug 11 nicklas 163     }
5687 09 Aug 11 nicklas 164     
5687 09 Aug 11 nicklas 165     if (currentSubtypeId == 0) 
5687 09 Aug 11 nicklas 166     {
5687 09 Aug 11 nicklas 167       if (relatedToParent.size() > 0)
5687 09 Aug 11 nicklas 168       {
5687 09 Aug 11 nicklas 169         // Find most recently used related subtype
7605 26 Feb 19 nicklas 170         List<ItemSubtype> recentSubtypes = cc.getRecent(dc, Item.ITEMSUBTYPE);
5687 09 Aug 11 nicklas 171         currentSubtype = ListUtil.findFirstCommon(recentSubtypes, relatedToParent, relatedToParent.get(0));
5687 09 Aug 11 nicklas 172       }
5687 09 Aug 11 nicklas 173       else
5687 09 Aug 11 nicklas 174       {
5687 09 Aug 11 nicklas 175         int recentSubtypeId = Values.getInt(cc.getRecent(Item.ITEMSUBTYPE.name(), 0));
5687 09 Aug 11 nicklas 176         currentSubtypeId = Values.getInt(cc.getPropertyValue("itemSubtype"), recentSubtypeId);
5687 09 Aug 11 nicklas 177         if (currentSubtypeId > 0) currentSubtype = ItemSubtype.getById(dc, currentSubtypeId);
5687 09 Aug 11 nicklas 178       }
5687 09 Aug 11 nicklas 179     }
1406 06 Oct 05 gregory 180   }
1806 23 Jan 06 nicklas 181   else
1406 06 Oct 05 gregory 182   {
5642 26 May 11 nicklas 183     pba = PhysicalBioAssay.getById(dc, itemId);
5649 30 May 11 nicklas 184     pba.checkPermission(Permission.WRITE);
5642 26 May 11 nicklas 185     creationEvent = pba.getCreationEvent();
2942 22 Nov 06 nicklas 186     eventDate = creationEvent.getEventDate();
5642 26 May 11 nicklas 187     cc.setObject("item", pba);
5642 26 May 11 nicklas 188     title = "Edit physical bioassay -- " + HTML.encodeTags(pba.getName());
5642 26 May 11 nicklas 189     name = pba.getName();
5649 30 May 11 nicklas 190     
1806 23 Jan 06 nicklas 191     try
1806 23 Jan 06 nicklas 192     {
5687 09 Aug 11 nicklas 193       currentSubtype = pba.getItemSubtype();
5649 30 May 11 nicklas 194     }
5649 30 May 11 nicklas 195     catch (PermissionDeniedException ex)
5649 30 May 11 nicklas 196     {
5649 30 May 11 nicklas 197       readCurrentSubtype = false;
5649 30 May 11 nicklas 198     }
5649 30 May 11 nicklas 199
5649 30 May 11 nicklas 200     try
5649 30 May 11 nicklas 201     {
5642 26 May 11 nicklas 202       currentArraySlide = pba.getArraySlide();
1806 23 Jan 06 nicklas 203     }
1806 23 Jan 06 nicklas 204     catch (PermissionDeniedException ex)
1806 23 Jan 06 nicklas 205     {
1806 23 Jan 06 nicklas 206       readCurrentArraySlide = false;
1806 23 Jan 06 nicklas 207     }
1806 23 Jan 06 nicklas 208     try
1806 23 Jan 06 nicklas 209     {
1806 23 Jan 06 nicklas 210       currentProtocol = creationEvent.getProtocol();
1806 23 Jan 06 nicklas 211     }
1806 23 Jan 06 nicklas 212     catch (PermissionDeniedException ex)
1806 23 Jan 06 nicklas 213     {
1806 23 Jan 06 nicklas 214       readCurrentProtocol = false;
1806 23 Jan 06 nicklas 215     }
2484 03 Aug 06 martin 216     try
2484 03 Aug 06 martin 217     {
5642 26 May 11 nicklas 218       currentHardware = creationEvent.getHardware();
2484 03 Aug 06 martin 219     }
2484 03 Aug 06 martin 220     catch (PermissionDeniedException ex)
2484 03 Aug 06 martin 221     {
5642 26 May 11 nicklas 222       readCurrentHardware = false;
2484 03 Aug 06 martin 223     }
6994 03 Nov 15 nicklas 224     try
6994 03 Nov 15 nicklas 225     {
6994 03 Nov 15 nicklas 226       currentKit = creationEvent.getKit();
6994 03 Nov 15 nicklas 227     }
6994 03 Nov 15 nicklas 228     catch (PermissionDeniedException ex)
6994 03 Nov 15 nicklas 229     {
6994 03 Nov 15 nicklas 230       readCurrentKit = false;
6994 03 Nov 15 nicklas 231     }
1806 23 Jan 06 nicklas 232     
5642 26 May 11 nicklas 233     // Query to retrieve source extracts
7605 26 Feb 19 nicklas 234     ItemQuery<Extract> extractsQuery = creationEvent.getSources();
5642 26 May 11 nicklas 235     extractsQuery.include(Include.ALL);
6372 06 Dec 13 nicklas 236     extractsQuery.order(Orders.asc(Hql.property("srcevt", "position")));
5642 26 May 11 nicklas 237     extractsQuery.order(Orders.asc(Hql.property("name")));
5687 09 Aug 11 nicklas 238     parentExtracts = extractsQuery.list(dc);
1806 23 Jan 06 nicklas 239     
1406 06 Oct 05 gregory 240   }
5687 09 Aug 11 nicklas 241   
5687 09 Aug 11 nicklas 242   // Default items 
5687 09 Aug 11 nicklas 243   int activeProjectId = sc.getActiveProjectId();
5687 09 Aug 11 nicklas 244   List<Protocol> defaultProtocols = null;
5687 09 Aug 11 nicklas 245   List<Hardware> defaultHardware = null;
5687 09 Aug 11 nicklas 246   if (activeProjectId > 0)
5687 09 Aug 11 nicklas 247   {
5687 09 Aug 11 nicklas 248     Project activeProject = Project.getById(dc, activeProjectId);
7605 26 Feb 19 nicklas 249     defaultProtocols = activeProject.findDefaultItemsOfRelatedSubtype(dc, currentSubtype, Item.PROTOCOL);
7605 26 Feb 19 nicklas 250     defaultHardware = activeProject.findDefaultItemsOfRelatedSubtype(dc, currentSubtype, Item.HARDWARE);
5687 09 Aug 11 nicklas 251   }
5687 09 Aug 11 nicklas 252   
5687 09 Aug 11 nicklas 253   // Load recently used items
7605 26 Feb 19 nicklas 254   List<Protocol> recentProtocols = cc.getRecent(dc, Item.PROTOCOL, currentSubtype);
7605 26 Feb 19 nicklas 255   List<Hardware> recentHardware = cc.getRecent(dc, Item.HARDWARE, currentSubtype);
7605 26 Feb 19 nicklas 256   List<Kit> recentKits = cc.getRecent(dc, Item.KIT, currentSubtype);
5687 09 Aug 11 nicklas 257   
5649 30 May 11 nicklas 258   // Query to retrieve item types
5649 30 May 11 nicklas 259   final ItemQuery<ItemSubtype> subtypesQuery = Base.getSubtypesQuery(itemType);
5649 30 May 11 nicklas 260   subtypesQuery.include(Include.ALL);
2590 24 Aug 06 nicklas 261
6314 02 Sep 13 nicklas 262   JSONObject jsonExtracts = new JSONObject();
6314 02 Sep 13 nicklas 263   jsonExtracts.put("itemType", "EXTRACT");
6314 02 Sep 13 nicklas 264   if (parentExtracts != null)
6314 02 Sep 13 nicklas 265   {
6314 02 Sep 13 nicklas 266     final BioMaterialEvent event = creationEvent;
6314 02 Sep 13 nicklas 267     jsonExtracts.put("items", JsonUtil.toArray(parentExtracts, new NameableConverter<Extract>()
6314 02 Sep 13 nicklas 268     {
6314 02 Sep 13 nicklas 269       protected void setMore(JSONObject json, Extract e)
6314 02 Sep 13 nicklas 270       {
6314 02 Sep 13 nicklas 271         String value = ":1";
6314 02 Sep 13 nicklas 272         String usedQuantity = null;
6314 02 Sep 13 nicklas 273         if (event != null)
6314 02 Sep 13 nicklas 274         {
6314 02 Sep 13 nicklas 275           BioMaterialEventSource evtSrc = event.getEventSource(e);
6314 02 Sep 13 nicklas 276           Float used = evtSrc.getUsedQuantity();
6314 02 Sep 13 nicklas 277           usedQuantity = Values.formatNumber(used, -1);
6314 02 Sep 13 nicklas 278           int position = evtSrc.getPosition();
6314 02 Sep 13 nicklas 279           value = usedQuantity+":"+position;
6314 02 Sep 13 nicklas 280         }
6314 02 Sep 13 nicklas 281         json.put("name", e.getName() + (usedQuantity == null ? " [-]" : " [" +  usedQuantity + " µg]"));
6314 02 Sep 13 nicklas 282         json.put("value", value);
6314 02 Sep 13 nicklas 283       }
6314 02 Sep 13 nicklas 284     }));
6314 02 Sep 13 nicklas 285   }
6314 02 Sep 13 nicklas 286
2942 22 Nov 06 nicklas 287   Formatter<Date> dateFormatter = FormatterFactory.getDateFormatter(sc);
2942 22 Nov 06 nicklas 288   String dateFormat = FormatterSettings.getDateFormat(sc);
2942 22 Nov 06 nicklas 289   String jsDateFormat = HTML.javaScriptEncode(dateFormat);
2942 22 Nov 06 nicklas 290   String htmlDateFormat = HTML.encodeTags(dateFormat);
5642 26 May 11 nicklas 291   JspContext jspContext = ExtensionsControl.createContext(dc, pageContext, GuiContext.item(itemType), pba);
7604 25 Feb 19 nicklas 292   ExtensionsInvoker<TabAction> invoker = EditUtil.useEditExtensions(jspContext);
1806 23 Jan 06 nicklas 293   %>
6314 02 Sep 13 nicklas 294   <base:page type="popup" title="<%=title%>" id="edit-page">
6314 02 Sep 13 nicklas 295   <base:head scripts="tabcontrol-2.js,linkitems-2.js,subtypes.js,~bioassays.js" styles="tabcontrol.css">
5501 18 Nov 10 nicklas 296     <ext:scripts context="<%=jspContext%>" />
5501 18 Nov 10 nicklas 297     <ext:stylesheets context="<%=jspContext%>" />
1406 06 Oct 05 gregory 298   </base:head>
6314 02 Sep 13 nicklas 299   <base:body>
5915 16 Dec 11 nicklas 300     <h1><%=title%> <base:help tabcontrol="settings" /></h1>
5915 16 Dec 11 nicklas 301
6162 10 Oct 12 nicklas 302     <form action="index.jsp?ID=<%=ID%>" method="post" name="bioassay">
1806 23 Jan 06 nicklas 303     <input type="hidden" name="cmd" value="UpdateItem">
1806 23 Jan 06 nicklas 304
5915 16 Dec 11 nicklas 305     <t:tabcontrol id="settings"
5915 16 Dec 11 nicklas 306       subclass="content dialogtabcontrol"
6254 22 Mar 13 nicklas 307       position="bottom"  remember="<%=pba != null%>" 
5501 18 Nov 10 nicklas 308       extensions="<%=invoker%>">
6314 02 Sep 13 nicklas 309     <t:tab id="info" title="Physical bioassay" helpid="physicalbioassay.edit">
5915 16 Dec 11 nicklas 310       <table class="fullform input100">
1406 06 Oct 05 gregory 311       <tr>
5915 16 Dec 11 nicklas 312         <th>Name</th>
6314 02 Sep 13 nicklas 313         <td><input class="text required auto-init" data-auto-init="<%=pba == null ? "focus-select" : "focus" %>"
6314 02 Sep 13 nicklas 314           type="text" name="name" 
2465 05 Jul 06 martin 315           value="<%=name%>" 
5915 16 Dec 11 nicklas 316           maxlength="<%=PhysicalBioAssay.MAX_NAME_LENGTH%>"></td>
5915 16 Dec 11 nicklas 317         <td></td>
1406 06 Oct 05 gregory 318       </tr>
5915 16 Dec 11 nicklas 319       <tr>
5915 16 Dec 11 nicklas 320         <th>Type</th>
5915 16 Dec 11 nicklas 321         <td>
6297 14 Jun 13 nicklas 322           <select name="subtype_id" id="subtype_id"
6314 02 Sep 13 nicklas 323             <%=!readCurrentSubtype ? "disabled readonly class=\"disabled selectionlist\"" : "class=\"selectionlist\""%>>
5649 30 May 11 nicklas 324           <%
5649 30 May 11 nicklas 325           if (!readCurrentSubtype)
5649 30 May 11 nicklas 326           {
5649 30 May 11 nicklas 327             %>
5649 30 May 11 nicklas 328             <option value="-1">- denied -
5649 30 May 11 nicklas 329             <%
5649 30 May 11 nicklas 330           }
5649 30 May 11 nicklas 331           else
5649 30 May 11 nicklas 332           {
5687 09 Aug 11 nicklas 333             int currentSubtypeId = currentSubtype == null ? 0 : currentSubtype.getId();
5649 30 May 11 nicklas 334             %>
5649 30 May 11 nicklas 335             <option value="0">-none-
5649 30 May 11 nicklas 336             <%
5649 30 May 11 nicklas 337             for (ItemSubtype subtype : subtypesQuery.list(dc))
5649 30 May 11 nicklas 338             {
5649 30 May 11 nicklas 339               int id = subtype.getId();
5649 30 May 11 nicklas 340               if (id != currentSubtypeId && subtype.isRemoved()) continue;
5649 30 May 11 nicklas 341               %>
5649 30 May 11 nicklas 342               <option value="<%=id == currentSubtypeId && pba != null ? -id : id%>" 
5649 30 May 11 nicklas 343                 <%=id == currentSubtypeId ? "selected" : ""%>
5649 30 May 11 nicklas 344                 title="<%=HTML.encodeTags(subtype.getDescription()) %>"
5649 30 May 11 nicklas 345                 ><%=HTML.encodeTags(subtype.getName())%>
5649 30 May 11 nicklas 346               <%
5649 30 May 11 nicklas 347             }
5649 30 May 11 nicklas 348           }
5649 30 May 11 nicklas 349           %>
5649 30 May 11 nicklas 350           </select>
5649 30 May 11 nicklas 351         </td>
5915 16 Dec 11 nicklas 352         <td></td>
5649 30 May 11 nicklas 353       </tr>
1406 06 Oct 05 gregory 354       <tr>
5915 16 Dec 11 nicklas 355         <th>Size</th>
6314 02 Sep 13 nicklas 356         <td><input class="text required" type="text" name="size" id="size" style="width: 15em;"
5642 26 May 11 nicklas 357           value="<%=pba == null ? Values.getString(cc.getPropertyValue("size"), "1") : pba.getSize()%>" 
6314 02 Sep 13 nicklas 358           maxlength="10"></td>
5915 16 Dec 11 nicklas 359         <td></td>
4131 08 Feb 08 nicklas 360       </tr>
4131 08 Feb 08 nicklas 361       <tr>
5915 16 Dec 11 nicklas 362         <th>Created</th>
1406 06 Oct 05 gregory 363         <td>
5915 16 Dec 11 nicklas 364           <table>
1406 06 Oct 05 gregory 365           <tr>
1406 06 Oct 05 gregory 366           <td>
6217 14 Dec 12 nicklas 367             <input class="text" type="text" name="event_date" id="event_date" style="width: 15em;"
4232 17 Apr 08 nicklas 368               value="<%=HTML.encodeTags(dateFormatter.format(eventDate))%>" 
5915 16 Dec 11 nicklas 369               maxlength="20" title="Enter date in format: <%=htmlDateFormat%>">
1406 06 Oct 05 gregory 370           </td>
1406 06 Oct 05 gregory 371           <td>
6216 14 Dec 12 nicklas 372             <base:calendar textarea="event_date" title="Created" />
1406 06 Oct 05 gregory 373           </td>
1406 06 Oct 05 gregory 374           </tr>
1406 06 Oct 05 gregory 375           </table>
1406 06 Oct 05 gregory 376         </td>
5915 16 Dec 11 nicklas 377         <td></td>
1406 06 Oct 05 gregory 378       </tr>
1406 06 Oct 05 gregory 379       <tr>
5915 16 Dec 11 nicklas 380         <th>Registered</th>
2942 22 Nov 06 nicklas 381         <td><%=dateFormatter.format(creationEvent == null ? new Date() : creationEvent.getEntryDate())%></td>
5915 16 Dec 11 nicklas 382         <td></td>
1406 06 Oct 05 gregory 383       </tr>
1806 23 Jan 06 nicklas 384       <tr>
5915 16 Dec 11 nicklas 385         <th>Protocol</th>
1806 23 Jan 06 nicklas 386         <td>
2597 25 Aug 06 nicklas 387           <base:select 
2597 25 Aug 06 nicklas 388             id="protocol_id"
2597 25 Aug 06 nicklas 389             clazz="selectionlist"
2597 25 Aug 06 nicklas 390             required="false"
2597 25 Aug 06 nicklas 391             current="<%=currentProtocol%>"
2597 25 Aug 06 nicklas 392             denied="<%=!readCurrentProtocol%>"
2597 25 Aug 06 nicklas 393             recent="<%=recentProtocols%>"
5687 09 Aug 11 nicklas 394             defaultitems="<%=defaultProtocols%>"
5642 26 May 11 nicklas 395             newitem="<%=pba == null%>"
2597 25 Aug 06 nicklas 396           />
1806 23 Jan 06 nicklas 397         </td>
5915 16 Dec 11 nicklas 398         <td></td>
1806 23 Jan 06 nicklas 399       </tr>
1806 23 Jan 06 nicklas 400       <tr>
5915 16 Dec 11 nicklas 401         <th>Hardware</th>
2484 03 Aug 06 martin 402         <td>
2597 25 Aug 06 nicklas 403           <base:select 
2597 25 Aug 06 nicklas 404             id="hardware_id"
2597 25 Aug 06 nicklas 405             clazz="selectionlist"
2597 25 Aug 06 nicklas 406             required="false"
5642 26 May 11 nicklas 407             current="<%=currentHardware%>"
5642 26 May 11 nicklas 408             denied="<%=!readCurrentHardware%>"
5642 26 May 11 nicklas 409             recent="<%=recentHardware%>"
5687 09 Aug 11 nicklas 410             defaultitems="<%=defaultHardware%>"
5642 26 May 11 nicklas 411             newitem="<%=pba == null%>"
2597 25 Aug 06 nicklas 412           />
2484 03 Aug 06 martin 413         </td>
5915 16 Dec 11 nicklas 414         <td></td>
2484 03 Aug 06 martin 415       </tr>
2484 03 Aug 06 martin 416       <tr>
6994 03 Nov 15 nicklas 417         <th>Kit</th>
6994 03 Nov 15 nicklas 418         <td>
6994 03 Nov 15 nicklas 419           <base:select 
6994 03 Nov 15 nicklas 420             id="kit_id"
6994 03 Nov 15 nicklas 421             clazz="selectionlist"
6994 03 Nov 15 nicklas 422             required="false"
6994 03 Nov 15 nicklas 423             current="<%=currentKit%>"
6994 03 Nov 15 nicklas 424             denied="<%=!readCurrentKit%>"
6994 03 Nov 15 nicklas 425             recent="<%=recentKits%>"
6994 03 Nov 15 nicklas 426             newitem="<%=pba == null%>"
6994 03 Nov 15 nicklas 427           />
6994 03 Nov 15 nicklas 428         </td>
6994 03 Nov 15 nicklas 429         <td></td>
6994 03 Nov 15 nicklas 430       </tr>
6994 03 Nov 15 nicklas 431       <tr>
5915 16 Dec 11 nicklas 432         <th>Array slide</th>
1806 23 Jan 06 nicklas 433         <td>
2597 25 Aug 06 nicklas 434           <base:select 
2597 25 Aug 06 nicklas 435             id="arrayslide_id"
2597 25 Aug 06 nicklas 436             clazz="selectionlist"
2597 25 Aug 06 nicklas 437             required="false"
2597 25 Aug 06 nicklas 438             current="<%=currentArraySlide%>"
2597 25 Aug 06 nicklas 439             denied="<%=!readCurrentArraySlide%>"
5642 26 May 11 nicklas 440             newitem="<%=pba == null%>"
2597 25 Aug 06 nicklas 441           />
1806 23 Jan 06 nicklas 442         </td>
5915 16 Dec 11 nicklas 443         <td></td>
1806 23 Jan 06 nicklas 444       </tr>
5915 16 Dec 11 nicklas 445       <tr class="dynamic">
5915 16 Dec 11 nicklas 446         <th>Description</th>
5915 16 Dec 11 nicklas 447         <td>
6217 14 Dec 12 nicklas 448           <textarea class="text" rows="6" name="description" id="description"
5642 26 May 11 nicklas 449             ><%=HTML.encodeTags(pba == null ? cc.getPropertyValue("description") : pba.getDescription())%></textarea>
1406 06 Oct 05 gregory 450         </td>
5915 16 Dec 11 nicklas 451         <td style="width: 20px;">
6215 13 Dec 12 nicklas 452           <base:zoom textarea="description" title="Description" />
5915 16 Dec 11 nicklas 453         </td>
1406 06 Oct 05 gregory 454       </tr>
1406 06 Oct 05 gregory 455       </table>
1406 06 Oct 05 gregory 456     </t:tab>
1406 06 Oct 05 gregory 457     
5642 26 May 11 nicklas 458     <t:tab id="extracts" title="Extracts" helpid="physicalbioassay.extracts">
5915 16 Dec 11 nicklas 459       <table class="fullform input100">
5915 16 Dec 11 nicklas 460       <tr class="big">
5915 16 Dec 11 nicklas 461         <th>Extracts</th>
1806 23 Jan 06 nicklas 462         <td>
5915 16 Dec 11 nicklas 463           <div class="selectionlist">
5915 16 Dec 11 nicklas 464           <table>
5915 16 Dec 11 nicklas 465           <tr>
1806 23 Jan 06 nicklas 466           <td>
6314 02 Sep 13 nicklas 467             <select name="extracts" id="extracts" 
6314 02 Sep 13 nicklas 468               class="auto-init"
6314 02 Sep 13 nicklas 469               data-auto-init="link-container"
6314 02 Sep 13 nicklas 470               data-initial-items="[<%=HTML.encodeTags(jsonExtracts.toJSONString()) %>]"
6314 02 Sep 13 nicklas 471               data-initial-action="<%=pba == null ? 1 : 0 %>"
6314 02 Sep 13 nicklas 472               size="15" multiple>
5915 16 Dec 11 nicklas 473             </select>
1806 23 Jan 06 nicklas 474           </td>
5915 16 Dec 11 nicklas 475           <td style="vertical-align: top;">
5915 16 Dec 11 nicklas 476             <base:buttongroup vertical="true">
5915 16 Dec 11 nicklas 477               <base:button 
6314 02 Sep 13 nicklas 478                 id="btnAddExtracts"
5915 16 Dec 11 nicklas 479                 subclass="leftaligned"
5915 16 Dec 11 nicklas 480                 style="width: 12em;"
5915 16 Dec 11 nicklas 481                 title="Add&nbsp;extracts&hellip;" 
5915 16 Dec 11 nicklas 482                 tooltip="Add extracts"
5915 16 Dec 11 nicklas 483               />
5915 16 Dec 11 nicklas 484               <base:button 
6314 02 Sep 13 nicklas 485                 subclass="leftaligned auto-init"
6314 02 Sep 13 nicklas 486                 data-auto-init="remove-link"
6314 02 Sep 13 nicklas 487                 data-list-id="extracts"
5915 16 Dec 11 nicklas 488                 style="width: 12em;"
5915 16 Dec 11 nicklas 489                 title="Remove" 
5915 16 Dec 11 nicklas 490                 tooltip="Remove the selected extracts"
5915 16 Dec 11 nicklas 491               />
5915 16 Dec 11 nicklas 492             </base:buttongroup>
1806 23 Jan 06 nicklas 493           </td>
1806 23 Jan 06 nicklas 494           </tr>
1806 23 Jan 06 nicklas 495           </table>
5915 16 Dec 11 nicklas 496           </div>
1806 23 Jan 06 nicklas 497         </td>
1806 23 Jan 06 nicklas 498       </tr>
4131 08 Feb 08 nicklas 499       
4131 08 Feb 08 nicklas 500       <tr>
5915 16 Dec 11 nicklas 501         <th class="subprompt">used quantity</th>
4131 08 Feb 08 nicklas 502         <td>
6314 02 Sep 13 nicklas 503             <input class="text" type="text" name="used_quantity" id="used_quantity"
6314 02 Sep 13 nicklas 504               style="width: 15em;" value="" maxlength="10"> (µg)
4131 08 Feb 08 nicklas 505         </td>
4131 08 Feb 08 nicklas 506       </tr>
4131 08 Feb 08 nicklas 507
4131 08 Feb 08 nicklas 508       <tr>
5915 16 Dec 11 nicklas 509         <th class="subprompt">position</th>
4131 08 Feb 08 nicklas 510         <td>
6314 02 Sep 13 nicklas 511             <input class="text" type="text" name="position" id="position"
6314 02 Sep 13 nicklas 512               style="width: 15em;" maxlength="10"> (1 -- size of bioassay)
4131 08 Feb 08 nicklas 513         </td>
4131 08 Feb 08 nicklas 514       </tr>
5915 16 Dec 11 nicklas 515       <tr class="dynamic">
5915 16 Dec 11 nicklas 516         <th></th>
5915 16 Dec 11 nicklas 517         <td></td>
5915 16 Dec 11 nicklas 518       </tr>
1806 23 Jan 06 nicklas 519       </table>
1806 23 Jan 06 nicklas 520     </t:tab>
1406 06 Oct 05 gregory 521
6314 02 Sep 13 nicklas 522     <t:tab id="annotations" title="Annotations &amp; parameters" helpid="annotations.edit">
6254 22 Mar 13 nicklas 523       <jsp:include page="../../common/annotations/annotate_frameset.jsp">
6254 22 Mar 13 nicklas 524         <jsp:param name="item_type" value="<%=itemType.name()%>" />
6254 22 Mar 13 nicklas 525         <jsp:param name="item_id" value="<%=itemId%>" />
6254 22 Mar 13 nicklas 526         <jsp:param name="ID" value="<%=ID%>" />
6254 22 Mar 13 nicklas 527       </jsp:include>
6254 22 Mar 13 nicklas 528     </t:tab>
5915 16 Dec 11 nicklas 529     </t:tabcontrol>
5915 16 Dec 11 nicklas 530     </form>
1406 06 Oct 05 gregory 531     
5915 16 Dec 11 nicklas 532     <div class="legend">
5946 03 Feb 12 nicklas 533       <base:icon image="required.png" />= required information
5915 16 Dec 11 nicklas 534     </div>
1406 06 Oct 05 gregory 535
5915 16 Dec 11 nicklas 536     <base:buttongroup subclass="dialogbuttons">
6314 02 Sep 13 nicklas 537       <base:button id="btnSave" title="Save" />
6314 02 Sep 13 nicklas 538       <base:button id="close" title="Cancel" />
5915 16 Dec 11 nicklas 539     </base:buttongroup>
1406 06 Oct 05 gregory 540   </base:body>
1406 06 Oct 05 gregory 541   </base:page>
1806 23 Jan 06 nicklas 542   <%
1806 23 Jan 06 nicklas 543 }
1806 23 Jan 06 nicklas 544 finally
1806 23 Jan 06 nicklas 545 {
1806 23 Jan 06 nicklas 546   if (dc != null) dc.close();
1806 23 Jan 06 nicklas 547 }
1806 23 Jan 06 nicklas 548 %>