www/views/experiments/edit_experiment.jsp

Code
Comments
Other
Rev Date Author Line
1675 01 Dec 05 nicklas 1 <%-- $Id$
1675 01 Dec 05 nicklas 2   ------------------------------------------------------------------
3675 16 Aug 07 jari 3   Copyright (C) 2005 Nicklas Nordborg
5425 23 Sep 10 nicklas 4   Copyright (C) 2006 Jari Häkkinen, Nicklas Nordborg, Martin Svensson
1675 01 Dec 05 nicklas 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/
1675 01 Dec 05 nicklas 8
1675 01 Dec 05 nicklas 9   BASE is free software; you can redistribute it and/or
1675 01 Dec 05 nicklas 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
1675 01 Dec 05 nicklas 12   of the License, or (at your option) any later version.
1675 01 Dec 05 nicklas 13
1675 01 Dec 05 nicklas 14   BASE is distributed in the hope that it will be useful,
1675 01 Dec 05 nicklas 15   but WITHOUT ANY WARRANTY; without even the implied warranty of
1675 01 Dec 05 nicklas 16   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
1675 01 Dec 05 nicklas 17   GNU General Public License for more details.
1675 01 Dec 05 nicklas 18
1675 01 Dec 05 nicklas 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/>.
1675 01 Dec 05 nicklas 21   ------------------------------------------------------------------
1675 01 Dec 05 nicklas 22
1675 01 Dec 05 nicklas 23
1675 01 Dec 05 nicklas 24   @author Nicklas
1675 01 Dec 05 nicklas 25   @version 2.0
1675 01 Dec 05 nicklas 26 --%>
5426 24 Sep 10 nicklas 27 <%@ page pageEncoding="UTF-8" session="false"
1675 01 Dec 05 nicklas 28   import="net.sf.basedb.core.SessionControl"
1675 01 Dec 05 nicklas 29   import="net.sf.basedb.core.DbControl"
1675 01 Dec 05 nicklas 30   import="net.sf.basedb.core.Item"
1777 17 Jan 06 nicklas 31   import="net.sf.basedb.core.ItemContext"
1675 01 Dec 05 nicklas 32   import="net.sf.basedb.core.Permission"
1675 01 Dec 05 nicklas 33   import="net.sf.basedb.core.Experiment"
1675 01 Dec 05 nicklas 34   import="net.sf.basedb.core.RawBioAssay"
2164 18 Apr 06 nicklas 35   import="net.sf.basedb.core.AnnotationType"
1675 01 Dec 05 nicklas 36   import="net.sf.basedb.core.RawDataType"
1675 01 Dec 05 nicklas 37   import="net.sf.basedb.core.RawDataTypes"
2694 03 Oct 06 nicklas 38   import="net.sf.basedb.core.Directory"
1675 01 Dec 05 nicklas 39   import="net.sf.basedb.core.ItemQuery"
1777 17 Jan 06 nicklas 40   import="net.sf.basedb.core.ItemResultList"
1777 17 Jan 06 nicklas 41   import="net.sf.basedb.core.Include"
2420 22 Jun 06 nicklas 42   import="net.sf.basedb.core.Type"
2420 22 Jun 06 nicklas 43   import="net.sf.basedb.core.query.Restrictions"
2420 22 Jun 06 nicklas 44   import="net.sf.basedb.core.query.Expressions"
1777 17 Jan 06 nicklas 45   import="net.sf.basedb.core.query.Orders"
1777 17 Jan 06 nicklas 46   import="net.sf.basedb.core.query.Hql"
1675 01 Dec 05 nicklas 47   import="net.sf.basedb.core.PermissionDeniedException"
1675 01 Dec 05 nicklas 48   import="net.sf.basedb.core.BaseException"
2949 24 Nov 06 martin 49   import="net.sf.basedb.core.Project"
1675 01 Dec 05 nicklas 50   import="net.sf.basedb.clients.web.Base"
2420 22 Jun 06 nicklas 51   import="net.sf.basedb.clients.web.WebException"
1675 01 Dec 05 nicklas 52   import="net.sf.basedb.clients.web.util.HTML"
2753 20 Oct 06 nicklas 53   import="net.sf.basedb.util.Values"
3820 12 Oct 07 nicklas 54   import="net.sf.basedb.util.Enumeration"
2942 22 Nov 06 nicklas 55   import="net.sf.basedb.util.formatter.Formatter"
2942 22 Nov 06 nicklas 56   import="net.sf.basedb.clients.web.formatter.FormatterFactory"
2942 22 Nov 06 nicklas 57   import="net.sf.basedb.clients.web.formatter.FormatterSettings"
5503 18 Nov 10 nicklas 58   import="net.sf.basedb.core.plugin.GuiContext"
5503 18 Nov 10 nicklas 59   import="net.sf.basedb.clients.web.extensions.ExtensionsControl"
5503 18 Nov 10 nicklas 60   import="net.sf.basedb.clients.web.extensions.JspContext"
5503 18 Nov 10 nicklas 61   import="net.sf.basedb.clients.web.extensions.edit.EditUtil"
7604 25 Feb 19 nicklas 62   import="net.sf.basedb.clients.web.extensions.tabcontrol.TabAction"
5503 18 Nov 10 nicklas 63   import="net.sf.basedb.util.extensions.ExtensionsInvoker"
6315 06 Sep 13 nicklas 64   import="net.sf.basedb.util.json.JsonUtil"
6315 06 Sep 13 nicklas 65   import="net.sf.basedb.util.json.JsonConverter"
6315 06 Sep 13 nicklas 66   import="net.sf.basedb.util.json.NameableConverter"
2420 22 Jun 06 nicklas 67   import="java.util.Arrays"
1675 01 Dec 05 nicklas 68   import="java.util.Date"
2597 25 Aug 06 nicklas 69   import="java.util.List"
6315 06 Sep 13 nicklas 70   import="org.json.simple.JSONArray"
6315 06 Sep 13 nicklas 71   import="org.json.simple.JSONObject"
1675 01 Dec 05 nicklas 72 %>
1675 01 Dec 05 nicklas 73 <%@ taglib prefix="base" uri="/WEB-INF/base.tld" %>
1675 01 Dec 05 nicklas 74 <%@ taglib prefix="t" uri="/WEB-INF/tab.tld" %>
6143 20 Sep 12 nicklas 75 <%@ taglib prefix="ext" uri="/WEB-INF/extensions.tld" %>
1675 01 Dec 05 nicklas 76 <%
1675 01 Dec 05 nicklas 77 final Item itemType = Item.EXPERIMENT;
1777 17 Jan 06 nicklas 78 final SessionControl sc = Base.getExistingSessionControl(pageContext, true);
1777 17 Jan 06 nicklas 79 final ItemContext cc = Base.getAndSetCurrentContext(sc, itemType, null, null);
5966 16 Feb 12 nicklas 80 final String tabId = Values.getString(request.getParameter("tab"), null);
1777 17 Jan 06 nicklas 81 final int itemId = cc.getId();
1675 01 Dec 05 nicklas 82 final String ID = sc.getId();
1675 01 Dec 05 nicklas 83 final float scale = Base.getScale(sc);
7954 12 May 21 nicklas 84 final DbControl dc = sc.newDbControl(":Edit "+itemType);
1675 01 Dec 05 nicklas 85 try
1675 01 Dec 05 nicklas 86 {
1675 01 Dec 05 nicklas 87   String title = null;
1675 01 Dec 05 nicklas 88   Experiment experiment = null;
1777 17 Jan 06 nicklas 89   RawDataType currentRawDataType = null;
2949 24 Nov 06 martin 90   RawDataType defaultRawDataType = null;
2420 22 Jun 06 nicklas 91   ItemQuery<RawBioAssay> rbaQuery = null;
2420 22 Jun 06 nicklas 92   ItemQuery<AnnotationType> efQuery = null;
2694 03 Oct 06 nicklas 93   
2694 03 Oct 06 nicklas 94   boolean readCurrentDirectory = true;
2694 03 Oct 06 nicklas 95   Directory currentDirectory = null;
1675 01 Dec 05 nicklas 96
7605 26 Feb 19 nicklas 97   List<Directory> recentDirectories = cc.getRecent(dc, Item.DIRECTORY);
2694 03 Oct 06 nicklas 98
2949 24 Nov 06 martin 99   int activeProjectId = sc.getActiveProjectId();
2949 24 Nov 06 martin 100   if (activeProjectId > 0)
2949 24 Nov 06 martin 101   {
2949 24 Nov 06 martin 102     Project activeProject = Project.getById(dc, activeProjectId);    
2949 24 Nov 06 martin 103     defaultRawDataType = activeProject.getDefaultRawDataType();
2949 24 Nov 06 martin 104   }  
1777 17 Jan 06 nicklas 105   if (itemId == 0)
1675 01 Dec 05 nicklas 106   {
1675 01 Dec 05 nicklas 107     title = "Create experiment";
1777 17 Jan 06 nicklas 108     currentRawDataType = RawDataTypes.getRawDataType(cc.getPropertyValue("rawDataType"));
2597 25 Aug 06 nicklas 109     if (currentRawDataType == null)
2597 25 Aug 06 nicklas 110     {
2597 25 Aug 06 nicklas 111       currentRawDataType = RawDataTypes.getRawDataType(cc.getRecent("RawDataType", 0));
2597 25 Aug 06 nicklas 112     }
6315 06 Sep 13 nicklas 113     if (currentRawDataType == null) 
6315 06 Sep 13 nicklas 114     {
6315 06 Sep 13 nicklas 115       currentRawDataType = defaultRawDataType;
6315 06 Sep 13 nicklas 116     }
6315 06 Sep 13 nicklas 117     
2694 03 Oct 06 nicklas 118     if (cc.getPropertyFilter("directory.name") != null)
2694 03 Oct 06 nicklas 119     {
2694 03 Oct 06 nicklas 120       currentDirectory = Base.getFirstMatching(dc, Directory.getQuery(), "name", cc.getPropertyFilter("directory.name"));
2694 03 Oct 06 nicklas 121     }
1777 17 Jan 06 nicklas 122     cc.removeObject("item");
6311 23 Aug 13 nicklas 123     if (Values.getBoolean(request.getParameter("rawbioassays")))
2420 22 Jun 06 nicklas 124     {
2420 22 Jun 06 nicklas 125       rbaQuery = RawBioAssay.getQuery();
2420 22 Jun 06 nicklas 126       rbaQuery.restrict(Restrictions.in(Hql.property("id"), Expressions.parameter("selected")));
6311 23 Aug 13 nicklas 127       rbaQuery.setParameter("selected", sc.getCurrentContext(Item.RAWBIOASSAY).getSelected(), Type.INT);
6311 23 Aug 13 nicklas 128     }
6311 23 Aug 13 nicklas 129
1675 01 Dec 05 nicklas 130   }
1675 01 Dec 05 nicklas 131   else
1675 01 Dec 05 nicklas 132   {
1777 17 Jan 06 nicklas 133     experiment = Experiment.getById(dc, itemId);
6315 06 Sep 13 nicklas 134     experiment.checkPermission(Permission.WRITE);
2420 22 Jun 06 nicklas 135     rbaQuery = experiment.getRawBioAssays();
2420 22 Jun 06 nicklas 136     efQuery = experiment.getExperimentalFactors();
1777 17 Jan 06 nicklas 137     cc.setObject("item", experiment);
4711 18 Dec 08 nicklas 138     try
4711 18 Dec 08 nicklas 139     {
4711 18 Dec 08 nicklas 140       currentRawDataType = experiment.getRawDataType();
4711 18 Dec 08 nicklas 141     }
4711 18 Dec 08 nicklas 142     catch (Throwable t)
4711 18 Dec 08 nicklas 143     {}
1675 01 Dec 05 nicklas 144     title = "Edit experiment -- " + HTML.encodeTags(experiment.getName());
2694 03 Oct 06 nicklas 145     try
2694 03 Oct 06 nicklas 146     {
2694 03 Oct 06 nicklas 147       currentDirectory = experiment.getDirectory();
2694 03 Oct 06 nicklas 148     }
2694 03 Oct 06 nicklas 149     catch (PermissionDeniedException ex)
2694 03 Oct 06 nicklas 150     {
2694 03 Oct 06 nicklas 151       readCurrentDirectory = false;
2694 03 Oct 06 nicklas 152     }
1675 01 Dec 05 nicklas 153   }
2694 03 Oct 06 nicklas 154   
6315 06 Sep 13 nicklas 155   // Load rawbioassays as JSON objects
6315 06 Sep 13 nicklas 156   JSONObject jsonRawBioAssays = new JSONObject();
6315 06 Sep 13 nicklas 157   jsonRawBioAssays.put("itemType", "RAWBIOASSAY");
6315 06 Sep 13 nicklas 158   if (rbaQuery != null)
6315 06 Sep 13 nicklas 159   {
6315 06 Sep 13 nicklas 160     rbaQuery.include(Include.ALL);
6315 06 Sep 13 nicklas 161     rbaQuery.order(Orders.asc(Hql.property("name")));
6315 06 Sep 13 nicklas 162     List<RawBioAssay> rawBioAssays = rbaQuery.list(dc);
2164 18 Apr 06 nicklas 163     
6315 06 Sep 13 nicklas 164     if (rawBioAssays.size() > 0 && experiment == null) 
2164 18 Apr 06 nicklas 165     {
6315 06 Sep 13 nicklas 166       // Nullify so we can get raw data type from the raw bioassays
6315 06 Sep 13 nicklas 167       currentRawDataType = null;
1675 01 Dec 05 nicklas 168     
6315 06 Sep 13 nicklas 169       for (RawBioAssay rba : rawBioAssays)
2694 03 Oct 06 nicklas 170       {
6315 06 Sep 13 nicklas 171         try
1675 01 Dec 05 nicklas 172         {
6315 06 Sep 13 nicklas 173           RawDataType rbaDataType = rba.getRawDataType();
2420 22 Jun 06 nicklas 174           if (currentRawDataType == null) 
2420 22 Jun 06 nicklas 175           {
2420 22 Jun 06 nicklas 176             currentRawDataType = rbaDataType;
2420 22 Jun 06 nicklas 177           }
6315 06 Sep 13 nicklas 178           else if (rbaDataType != currentRawDataType)
2420 22 Jun 06 nicklas 179           {
6315 06 Sep 13 nicklas 180             throw new WebException("popup", "Raw data types doesn't match",
2420 22 Jun 06 nicklas 181                 "The raw data type of the selected raw bioassays are not the same. " + 
2420 22 Jun 06 nicklas 182                 "It is not possible to mix raw data types in an experiment.");
2420 22 Jun 06 nicklas 183           }
1675 01 Dec 05 nicklas 184         }
6315 06 Sep 13 nicklas 185         catch (RuntimeException t)
6315 06 Sep 13 nicklas 186         {}
2420 22 Jun 06 nicklas 187       }
1675 01 Dec 05 nicklas 188     }
6315 06 Sep 13 nicklas 189     
7604 25 Feb 19 nicklas 190     jsonRawBioAssays.put("items", JsonUtil.toArray(rawBioAssays, new NameableConverter<RawBioAssay>()));
6315 06 Sep 13 nicklas 191   }
6315 06 Sep 13 nicklas 192   
6315 06 Sep 13 nicklas 193   // Load experimental factors as JSON objects
6315 06 Sep 13 nicklas 194   JSONObject jsonAnnotationTypes = new JSONObject();
6315 06 Sep 13 nicklas 195   jsonAnnotationTypes.put("itemType", "ANNOTATIONTYPE");
6315 06 Sep 13 nicklas 196   if (efQuery != null)
6315 06 Sep 13 nicklas 197   {
6315 06 Sep 13 nicklas 198     efQuery.include(Include.ALL);
6315 06 Sep 13 nicklas 199     efQuery.order(Orders.asc(Hql.property("name")));
7604 25 Feb 19 nicklas 200     jsonAnnotationTypes.put("items", JsonUtil.toArray(efQuery.iterate(dc), new NameableConverter<AnnotationType>()));
6315 06 Sep 13 nicklas 201   }
6315 06 Sep 13 nicklas 202   
6315 06 Sep 13 nicklas 203   Formatter<Date> dateFormatter = FormatterFactory.getDateFormatter(sc);
6315 06 Sep 13 nicklas 204   String dateFormat = FormatterSettings.getDateFormat(sc);
6315 06 Sep 13 nicklas 205   String jsDateFormat = HTML.javaScriptEncode(dateFormat);
6315 06 Sep 13 nicklas 206   String htmlDateFormat = HTML.encodeTags(dateFormat);
6315 06 Sep 13 nicklas 207   JspContext jspContext = ExtensionsControl.createContext(dc, pageContext, GuiContext.item(itemType), experiment);
7604 25 Feb 19 nicklas 208   ExtensionsInvoker<TabAction> invoker = EditUtil.useEditExtensions(jspContext);
6315 06 Sep 13 nicklas 209   %>
6315 06 Sep 13 nicklas 210   <base:page type="popup" title="<%=title%>" id="edit-page">
6315 06 Sep 13 nicklas 211   <base:head scripts="tabcontrol-2.js,linkitems-2.js,~experiments.js" styles="tabcontrol.css">
6315 06 Sep 13 nicklas 212     <ext:scripts context="<%=jspContext%>" />
6315 06 Sep 13 nicklas 213     <ext:stylesheets context="<%=jspContext%>" />
1675 01 Dec 05 nicklas 214   </base:head>
6315 06 Sep 13 nicklas 215   <base:body>
5916 19 Dec 11 nicklas 216     <h1><%=title%> <base:help tabcontrol="settings" /></h1>
6315 06 Sep 13 nicklas 217     
6387 18 Dec 13 nicklas 218     <div id="page-data" class="datacontainer"
6315 06 Sep 13 nicklas 219       data-current-raw-data-type="<%=currentRawDataType != null && experiment != null ? currentRawDataType.getId() : "" %>"
6315 06 Sep 13 nicklas 220     ></div>
6315 06 Sep 13 nicklas 221     
6162 10 Oct 12 nicklas 222     <form action="index.jsp?ID=<%=ID%>" method="post" name="experiment">
1777 17 Jan 06 nicklas 223     <input type="hidden" name="cmd" value="UpdateItem">
1675 01 Dec 05 nicklas 224
5916 19 Dec 11 nicklas 225     <t:tabcontrol id="settings" 
5916 19 Dec 11 nicklas 226       subclass="content dialogtabcontrol"
5966 16 Feb 12 nicklas 227       position="bottom" remember="<%=tabId == null && experiment != null%>"
5503 18 Nov 10 nicklas 228       extensions="<%=invoker%>">
6315 06 Sep 13 nicklas 229     <t:tab id="info" title="Experiment" helpid="experiment.edit">
5916 19 Dec 11 nicklas 230       <table class="fullform input100">
1675 01 Dec 05 nicklas 231       <tr>
5916 19 Dec 11 nicklas 232         <th>Name</th>
6315 06 Sep 13 nicklas 233         <td><input class="text required auto-init" data-auto-init="<%=experiment == null ? "focus-select" : "focus" %>" 
6315 06 Sep 13 nicklas 234           type="text" name="name" 
1777 17 Jan 06 nicklas 235           value="<%=HTML.encodeTags(experiment == null ? Values.getString(cc.getPropertyValue("name"), "New experiment") : experiment.getName())%>" 
5916 19 Dec 11 nicklas 236           maxlength="<%=Experiment.MAX_NAME_LENGTH%>"></td>
5916 19 Dec 11 nicklas 237         <td></td>
1675 01 Dec 05 nicklas 238       </tr>
1675 01 Dec 05 nicklas 239       <tr>
5916 19 Dec 11 nicklas 240         <th>Raw data type</th>
1675 01 Dec 05 nicklas 241         <td>
1675 01 Dec 05 nicklas 242           <%
1675 01 Dec 05 nicklas 243           if (experiment == null)
1675 01 Dec 05 nicklas 244           {
3820 12 Oct 07 nicklas 245             currentRawDataType = currentRawDataType != null ? 
3820 12 Oct 07 nicklas 246               currentRawDataType : defaultRawDataType;
3820 12 Oct 07 nicklas 247             Enumeration<RawDataType, String> rawEnumeration = 
3820 12 Oct 07 nicklas 248               new Enumeration<RawDataType, String>();
3820 12 Oct 07 nicklas 249             for (RawDataType rdt : RawDataTypes.getRawDataTypes())
3820 12 Oct 07 nicklas 250             {
3820 12 Oct 07 nicklas 251               rawEnumeration.add(rdt, rdt.getName());
3820 12 Oct 07 nicklas 252             }
3820 12 Oct 07 nicklas 253             rawEnumeration.sortValues();            
1675 01 Dec 05 nicklas 254             %>
3820 12 Oct 07 nicklas 255             <select name="rawdatatype" class="required unchangeable">
1675 01 Dec 05 nicklas 256             <%
3820 12 Oct 07 nicklas 257             for (int i = 0; i < rawEnumeration.size(); ++i)
1675 01 Dec 05 nicklas 258             {
3820 12 Oct 07 nicklas 259               RawDataType rdt = rawEnumeration.getKey(i);
1777 17 Jan 06 nicklas 260               String selected = rdt.equals(currentRawDataType) ? "selected" : "";
1675 01 Dec 05 nicklas 261               %>
1777 17 Jan 06 nicklas 262               <option value="<%=rdt.getId()%>" <%=selected%>><%=HTML.encodeTags(rdt.getName())%>
1675 01 Dec 05 nicklas 263               <%
1675 01 Dec 05 nicklas 264             }
1675 01 Dec 05 nicklas 265             %>
1675 01 Dec 05 nicklas 266             </select>
1675 01 Dec 05 nicklas 267             <%
1675 01 Dec 05 nicklas 268           }
1675 01 Dec 05 nicklas 269           else
1675 01 Dec 05 nicklas 270           {
1675 01 Dec 05 nicklas 271             %>
4711 18 Dec 08 nicklas 272             <base:catch><%=HTML.encodeTags(experiment.getRawDataType().getName())%></base:catch>
1675 01 Dec 05 nicklas 273             <%
1675 01 Dec 05 nicklas 274           }
1675 01 Dec 05 nicklas 275           %>
1675 01 Dec 05 nicklas 276         </td>
5916 19 Dec 11 nicklas 277         <td></td>
1675 01 Dec 05 nicklas 278       </tr>
2694 03 Oct 06 nicklas 279       <tr>
5916 19 Dec 11 nicklas 280         <th>Directory</th>
2694 03 Oct 06 nicklas 281         <td>
2694 03 Oct 06 nicklas 282           <base:select 
2694 03 Oct 06 nicklas 283             id="directory_id"
2694 03 Oct 06 nicklas 284             clazz="selectionlist"
2694 03 Oct 06 nicklas 285             required="false"
2694 03 Oct 06 nicklas 286             current="<%=currentDirectory%>"
2694 03 Oct 06 nicklas 287             denied="<%=!readCurrentDirectory%>"
2694 03 Oct 06 nicklas 288             recent="<%=recentDirectories%>"
2694 03 Oct 06 nicklas 289             newitem="<%=experiment == null%>"
2694 03 Oct 06 nicklas 290           />
1675 01 Dec 05 nicklas 291         </td>
5916 19 Dec 11 nicklas 292         <td></td>
1675 01 Dec 05 nicklas 293       </tr>
5905 12 Dec 11 nicklas 294       <tr >
5916 19 Dec 11 nicklas 295         <th>Raw bioassays</th>
1675 01 Dec 05 nicklas 296         <td>
5916 19 Dec 11 nicklas 297           <div class="selectionlist">
5916 19 Dec 11 nicklas 298           <table>
5916 19 Dec 11 nicklas 299           <tr>
5916 19 Dec 11 nicklas 300             <td>
6315 06 Sep 13 nicklas 301             <select name="rawBioAssays" id="rawBioAssays" 
6315 06 Sep 13 nicklas 302               class="auto-init"
6315 06 Sep 13 nicklas 303               data-auto-init="link-container"
6315 06 Sep 13 nicklas 304               data-initial-items="[<%=HTML.encodeTags(jsonRawBioAssays.toJSONString()) %>]"
6315 06 Sep 13 nicklas 305               data-initial-action="<%=itemId == 0 ? 1 : 0 %>"
6315 06 Sep 13 nicklas 306               size="5" multiple>
1675 01 Dec 05 nicklas 307             </select>
5916 19 Dec 11 nicklas 308             </td>
5916 19 Dec 11 nicklas 309             <td style="vertical-align: top;">
5916 19 Dec 11 nicklas 310               <base:buttongroup vertical="true">
5916 19 Dec 11 nicklas 311                 <base:button 
6315 06 Sep 13 nicklas 312                   id="btnAddRawBioAssays"
5916 19 Dec 11 nicklas 313                   subclass="leftaligned"
5916 19 Dec 11 nicklas 314                   style="width: 14em;"
5916 19 Dec 11 nicklas 315                   title="Add&nbsp;raw bioassays&hellip;" 
5916 19 Dec 11 nicklas 316                   tooltip="Add raw bioassays"
6315 06 Sep 13 nicklas 317                 />
5916 19 Dec 11 nicklas 318                 <base:button 
6315 06 Sep 13 nicklas 319                   id="btnRemoveRawBioAssays"
6315 06 Sep 13 nicklas 320                   subclass="leftaligned auto-init"
6315 06 Sep 13 nicklas 321                   data-auto-init="remove-link"
6315 06 Sep 13 nicklas 322                   data-list-id="rawBioAssays"
5916 19 Dec 11 nicklas 323                   style="width: 14em;"
5916 19 Dec 11 nicklas 324                   title="Remove" 
5916 19 Dec 11 nicklas 325                   tooltip="Remove the selected raw bioassays"
5916 19 Dec 11 nicklas 326                 />
5916 19 Dec 11 nicklas 327               </base:buttongroup>
5916 19 Dec 11 nicklas 328             </td>
1675 01 Dec 05 nicklas 329           </tr>
1675 01 Dec 05 nicklas 330           </table>
5916 19 Dec 11 nicklas 331           </div>
1675 01 Dec 05 nicklas 332         </td>
5916 19 Dec 11 nicklas 333         <td></td>
1675 01 Dec 05 nicklas 334       </tr>
5916 19 Dec 11 nicklas 335       <tr class="dynamic">
5916 19 Dec 11 nicklas 336         <th>Description</th>
5916 19 Dec 11 nicklas 337         <td>
6217 14 Dec 12 nicklas 338           <textarea class="text" rows="4" name="description" id="description"
1777 17 Jan 06 nicklas 339             ><%=HTML.encodeTags(experiment == null ? cc.getPropertyValue("description") : experiment.getDescription())%></textarea>
1675 01 Dec 05 nicklas 340         </td>
5916 19 Dec 11 nicklas 341         <td style="width: 20px;">
6215 13 Dec 12 nicklas 342           <base:zoom textarea="description" title="Description" />
5916 19 Dec 11 nicklas 343         </td>
1675 01 Dec 05 nicklas 344       </tr>
1675 01 Dec 05 nicklas 345       </table>
5916 19 Dec 11 nicklas 346       
1675 01 Dec 05 nicklas 347     </t:tab>
1777 17 Jan 06 nicklas 348     
2424 26 Jun 06 nicklas 349     <t:tab id="publication" title="Publication"  helpid="experiment.edit.publication">
5916 19 Dec 11 nicklas 350       <table class="fullform input100">
1675 01 Dec 05 nicklas 351       <tr>
5916 19 Dec 11 nicklas 352         <th>PubMedId</th>
6217 14 Dec 12 nicklas 353         <td><input class="text" type="text" name="pubMedId" 
1777 17 Jan 06 nicklas 354           value="<%=HTML.encodeTags(experiment == null ? cc.getPropertyValue("pubMedId") : experiment.getPubMedId())%>" 
5916 19 Dec 11 nicklas 355           maxlength="<%=Experiment.MAX_PUBMEDID_LENGTH%>"></td>
5916 19 Dec 11 nicklas 356         <td></td>
1675 01 Dec 05 nicklas 357       </tr>
6143 20 Sep 12 nicklas 358       <tr>
5916 19 Dec 11 nicklas 359         <th>Title</th>
5916 19 Dec 11 nicklas 360         <td>
6217 14 Dec 12 nicklas 361           <textarea class="text" rows="4" name="title" id="title"
2694 03 Oct 06 nicklas 362             ><%=HTML.encodeTags(experiment == null ? cc.getPropertyValue("title") : experiment.getTitle())%></textarea>
2694 03 Oct 06 nicklas 363         </td>
5916 19 Dec 11 nicklas 364         <td style="width: 20px;">
6215 13 Dec 12 nicklas 365           <base:zoom textarea="title" title="Title" />
5916 19 Dec 11 nicklas 366         </td>
2694 03 Oct 06 nicklas 367       </tr>
1675 01 Dec 05 nicklas 368       <tr>
5916 19 Dec 11 nicklas 369         <th>Publication date</th>
1675 01 Dec 05 nicklas 370         <td>
5916 19 Dec 11 nicklas 371           <table>
1675 01 Dec 05 nicklas 372           <tr>
1675 01 Dec 05 nicklas 373           <td>
6217 14 Dec 12 nicklas 374             <input class="text" style="width: 15em;" type="text" name="publicationDate" id="publicationDate"
2942 22 Nov 06 nicklas 375               value="<%=HTML.encodeTags(dateFormatter.format(experiment == null ? 
7605 26 Feb 19 nicklas 376                 cc.getPropertyObject("publicationDate") : experiment.getPublicationDate()))%>" 
5916 19 Dec 11 nicklas 377               maxlength="20" title="Enter date in format: <%=htmlDateFormat%>">
1675 01 Dec 05 nicklas 378           </td>
1675 01 Dec 05 nicklas 379           <td>
6216 14 Dec 12 nicklas 380             <base:calendar textarea="publicationDate" title="Publication date" />
1675 01 Dec 05 nicklas 381           </td>
1675 01 Dec 05 nicklas 382           </tr>
5916 19 Dec 11 nicklas 383           </table>          
1675 01 Dec 05 nicklas 384         </td>
5916 19 Dec 11 nicklas 385         <td></td>
1675 01 Dec 05 nicklas 386       </tr>
5916 19 Dec 11 nicklas 387       <tr>
5916 19 Dec 11 nicklas 388         <th>Abstract</th>
5916 19 Dec 11 nicklas 389         <td>
6217 14 Dec 12 nicklas 390           <textarea class="text" rows="4" name="abstract" id="abstract"
1777 17 Jan 06 nicklas 391             ><%=HTML.encodeTags(experiment == null ? cc.getPropertyValue("abstract") : experiment.getAbstract())%></textarea>
1675 01 Dec 05 nicklas 392         </td>
5916 19 Dec 11 nicklas 393         <td style="width: 20px;">
6215 13 Dec 12 nicklas 394           <base:zoom textarea="abstract" title="Abstract" />
5916 19 Dec 11 nicklas 395         </td>
1675 01 Dec 05 nicklas 396       </tr>
5916 19 Dec 11 nicklas 397       <tr>
5916 19 Dec 11 nicklas 398         <th>Experiment design</th>
5916 19 Dec 11 nicklas 399         <td>
6217 14 Dec 12 nicklas 400           <textarea class="text" rows="4" name="experimentDesign" id="experimentDesign"
2694 03 Oct 06 nicklas 401             ><%=HTML.encodeTags(experiment == null ? cc.getPropertyValue("experimentDesign") : experiment.getExperimentDesign())%></textarea>
2694 03 Oct 06 nicklas 402         </td>
5916 19 Dec 11 nicklas 403         <td style="width: 20px;">
6215 13 Dec 12 nicklas 404           <base:zoom textarea="experimentDesign" title="Experiment design" />
5916 19 Dec 11 nicklas 405         </td>
2694 03 Oct 06 nicklas 406       </tr>
5916 19 Dec 11 nicklas 407       <tr>
5916 19 Dec 11 nicklas 408         <th>Experiment type</th>
5916 19 Dec 11 nicklas 409         <td>
6217 14 Dec 12 nicklas 410           <textarea class="text" rows="4" name="experimentType" id="experimentType"
2694 03 Oct 06 nicklas 411             ><%=HTML.encodeTags(experiment == null ? cc.getPropertyValue("experimentType") : experiment.getExperimentType())%></textarea>
2694 03 Oct 06 nicklas 412         </td>
5916 19 Dec 11 nicklas 413         <td style="width: 20px;">
6215 13 Dec 12 nicklas 414           <base:zoom textarea="experimentType" title="Experiment type" />
5916 19 Dec 11 nicklas 415         </td>
2694 03 Oct 06 nicklas 416       </tr>
5916 19 Dec 11 nicklas 417       <tr>
5916 19 Dec 11 nicklas 418         <th>Affiliations</th>
5916 19 Dec 11 nicklas 419         <td>
6217 14 Dec 12 nicklas 420           <textarea class="text" rows="4" name="affiliations" id="affiliations"
1777 17 Jan 06 nicklas 421             ><%=HTML.encodeTags(experiment == null ? cc.getPropertyValue("affiliations") : experiment.getAffiliations())%></textarea>
1675 01 Dec 05 nicklas 422         </td>
5916 19 Dec 11 nicklas 423         <td style="width: 20px;">
6215 13 Dec 12 nicklas 424           <base:zoom textarea="affiliations" title="Affiliations" />
5916 19 Dec 11 nicklas 425         </td>
1675 01 Dec 05 nicklas 426       </tr>
5916 19 Dec 11 nicklas 427       <tr>
5916 19 Dec 11 nicklas 428         <th>Authors</th>
5916 19 Dec 11 nicklas 429         <td>
6217 14 Dec 12 nicklas 430           <textarea class="text" rows="4" name="authors" id="authors"
1777 17 Jan 06 nicklas 431             ><%=HTML.encodeTags(experiment == null ? cc.getPropertyValue("authors") : experiment.getAuthors())%></textarea>
1675 01 Dec 05 nicklas 432         </td>
5916 19 Dec 11 nicklas 433         <td style="width: 20px;">
6215 13 Dec 12 nicklas 434           <base:zoom textarea="authors" title="Authors" />
5916 19 Dec 11 nicklas 435         </td>
1675 01 Dec 05 nicklas 436       </tr>
5916 19 Dec 11 nicklas 437       <tr>
5916 19 Dec 11 nicklas 438         <th>Publication</th>
5916 19 Dec 11 nicklas 439         <td>
6217 14 Dec 12 nicklas 440           <textarea class="text" rows="4" name="publication" id="publication"
1777 17 Jan 06 nicklas 441             ><%=HTML.encodeTags(experiment == null ? cc.getPropertyValue("publication") : experiment.getPublication())%></textarea>
1675 01 Dec 05 nicklas 442         </td>
5916 19 Dec 11 nicklas 443         <td style="width: 20px;">
6215 13 Dec 12 nicklas 444           <base:zoom textarea="publication" title="Publication" />
5916 19 Dec 11 nicklas 445         </td>
1675 01 Dec 05 nicklas 446       </tr>
1675 01 Dec 05 nicklas 447       </table>
1777 17 Jan 06 nicklas 448       </t:tab>
2164 18 Apr 06 nicklas 449       
6315 06 Sep 13 nicklas 450       <t:tab id="experimentalFactors" title="Experimental factors" helpid="experiment.edit.factors">
5916 19 Dec 11 nicklas 451       <table class="fullform input100">
5916 19 Dec 11 nicklas 452       <tr class="big">
5916 19 Dec 11 nicklas 453         <th>Annotation types</th>
2164 18 Apr 06 nicklas 454         <td>
5916 19 Dec 11 nicklas 455           
5916 19 Dec 11 nicklas 456           <div class="selectionlist">
5916 19 Dec 11 nicklas 457           <table>
5916 19 Dec 11 nicklas 458           <tr>
5916 19 Dec 11 nicklas 459             <td>
6315 06 Sep 13 nicklas 460             <select name="annotationTypes" id="annotationTypes"
6315 06 Sep 13 nicklas 461               class="auto-init"
6315 06 Sep 13 nicklas 462               data-auto-init="link-container"
6315 06 Sep 13 nicklas 463               data-initial-items="[<%=HTML.encodeTags(jsonAnnotationTypes.toJSONString()) %>]"
6315 06 Sep 13 nicklas 464               size="20" multiple>
5916 19 Dec 11 nicklas 465             </select>
5916 19 Dec 11 nicklas 466             </td>
5916 19 Dec 11 nicklas 467             <td style="vertical-align: top;">
5916 19 Dec 11 nicklas 468               <base:buttongroup vertical="true">
5916 19 Dec 11 nicklas 469                 <base:button 
6315 06 Sep 13 nicklas 470                   id="btnAddAnnotationTypes"
6315 06 Sep 13 nicklas 471                   subclass="leftaligned auto-init"
6315 06 Sep 13 nicklas 472                   data-auto-init="add-link"
6315 06 Sep 13 nicklas 473                   data-list-id="annotationTypes"
6315 06 Sep 13 nicklas 474                   data-item-type="ANNOTATIONTYPE" 
5916 19 Dec 11 nicklas 475                   style="width: 14em;"
5916 19 Dec 11 nicklas 476                   title="Add annotation types&hellip;" 
5916 19 Dec 11 nicklas 477                   tooltip="Add annotation types"
5916 19 Dec 11 nicklas 478                   />
5916 19 Dec 11 nicklas 479                 <base:button 
6315 06 Sep 13 nicklas 480                   id="btnRemoveAnnotationTypes"
6315 06 Sep 13 nicklas 481                   subclass="leftaligned auto-init"
6315 06 Sep 13 nicklas 482                   data-auto-init="remove-link"
6315 06 Sep 13 nicklas 483                   data-list-id="annotationTypes"
5916 19 Dec 11 nicklas 484                   style="width: 14em;"
5916 19 Dec 11 nicklas 485                   title="Remove" 
5916 19 Dec 11 nicklas 486                   tooltip="Remove the selected annotation types"
5916 19 Dec 11 nicklas 487                 />
5916 19 Dec 11 nicklas 488               </base:buttongroup>
5916 19 Dec 11 nicklas 489             </td>
5916 19 Dec 11 nicklas 490           </tr>
2164 18 Apr 06 nicklas 491           </table>
5916 19 Dec 11 nicklas 492           </div>
2164 18 Apr 06 nicklas 493         </td>
2164 18 Apr 06 nicklas 494       </tr>
5916 19 Dec 11 nicklas 495       <tr class="dynamic">
5916 19 Dec 11 nicklas 496         <th></th>
5916 19 Dec 11 nicklas 497         <td></td>
5916 19 Dec 11 nicklas 498       </tr>
2164 18 Apr 06 nicklas 499       </table>
2164 18 Apr 06 nicklas 500       </t:tab>
5966 16 Feb 12 nicklas 501       
6315 06 Sep 13 nicklas 502     <t:tab id="annotations" title="Annotations" helpid="annotations.edit">
6254 22 Mar 13 nicklas 503       <jsp:include page="../../common/annotations/annotate_frameset.jsp">
6254 22 Mar 13 nicklas 504         <jsp:param name="item_type" value="<%=itemType.name()%>" />
6254 22 Mar 13 nicklas 505         <jsp:param name="item_id" value="<%=itemId%>" />
6254 22 Mar 13 nicklas 506         <jsp:param name="ID" value="<%=ID%>" />
6254 22 Mar 13 nicklas 507       </jsp:include>
6254 22 Mar 13 nicklas 508     </t:tab>
2164 18 Apr 06 nicklas 509
1675 01 Dec 05 nicklas 510     </t:tabcontrol>
5916 19 Dec 11 nicklas 511     </form>
5916 19 Dec 11 nicklas 512     
5916 19 Dec 11 nicklas 513     <div class="legend">
5946 03 Feb 12 nicklas 514       <base:icon image="required.png" />= required information
5916 19 Dec 11 nicklas 515       <%if (experiment == null) {%><br>
6143 20 Sep 12 nicklas 516         <base:icon image="unchangeable.png" />= can't be changed later
5916 19 Dec 11 nicklas 517       <%}%>
5916 19 Dec 11 nicklas 518     </div>
1675 01 Dec 05 nicklas 519
5916 19 Dec 11 nicklas 520     <base:buttongroup subclass="dialogbuttons">
6315 06 Sep 13 nicklas 521       <base:button id="btnSave" title="Save" />
6315 06 Sep 13 nicklas 522       <base:button id="close" title="Cancel" />
5916 19 Dec 11 nicklas 523     </base:buttongroup>
1675 01 Dec 05 nicklas 524   </base:body>
1675 01 Dec 05 nicklas 525   </base:page>
1675 01 Dec 05 nicklas 526   <%
1675 01 Dec 05 nicklas 527 }
1675 01 Dec 05 nicklas 528 finally
1675 01 Dec 05 nicklas 529 {
1675 01 Dec 05 nicklas 530   if (dc != null) dc.close();
1675 01 Dec 05 nicklas 531 }
1675 01 Dec 05 nicklas 532 %>