source: trunk/www/lims/plates/edit_plate.jsp @ 2978

Last change on this file since 2978 was 2978, checked in by Nicklas Nordborg, 15 years ago

Added session="false" to all jsp pages so we no longer generate unneeded cookies

  • Property svn:eol-style set to native
  • Property svn:keywords set to Date Id
File size: 9.8 KB
Line 
1<%-- $Id: edit_plate.jsp 2978 2006-11-30 07:27:42Z nicklas $
2  ------------------------------------------------------------------
3  Copyright (C) Authors contributing to this file.
4
5  This file is part of BASE - BioArray Software Environment.
6  Available at http://base.thep.lu.se/
7
8  BASE is free software; you can redistribute it and/or
9  modify it under the terms of the GNU General Public License
10  as published by the Free Software Foundation; either version 2
11  of the License, or (at your option) any later version.
12
13  BASE is distributed in the hope that it will be useful,
14  but WITHOUT ANY WARRANTY; without even the implied warranty of
15  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
16  GNU General Public License for more details.
17
18  You should have received a copy of the GNU General Public License
19  along with this program; if not, write to the Free Software
20  Foundation, Inc., 59 Temple Place - Suite 330,
21  Boston, MA  02111-1307, USA.
22  ------------------------------------------------------------------
23
24  @author Nicklas
25  @version 2.0
26--%>
27<%@ page session="false"
28  import="net.sf.basedb.core.SessionControl"
29  import="net.sf.basedb.core.DbControl"
30  import="net.sf.basedb.core.Item"
31  import="net.sf.basedb.core.ItemContext"
32  import="net.sf.basedb.core.SystemItems"
33  import="net.sf.basedb.core.Permission"
34  import="net.sf.basedb.core.Include"
35  import="net.sf.basedb.core.Plate"
36  import="net.sf.basedb.core.PlateType"
37  import="net.sf.basedb.core.ItemQuery"
38  import="net.sf.basedb.core.ItemResultList"
39  import="net.sf.basedb.core.PermissionDeniedException"
40  import="net.sf.basedb.core.BaseException"
41  import="net.sf.basedb.core.query.Orders"
42  import="net.sf.basedb.core.query.Hql"
43  import="net.sf.basedb.clients.web.Base"
44  import="net.sf.basedb.clients.web.util.HTML"
45  import="net.sf.basedb.util.Values"
46  import="java.util.List"
47  import="java.util.Set"
48  import="java.util.HashSet"
49  import="java.util.Date"
50%>
51<%@ taglib prefix="base" uri="/WEB-INF/base.tld" %>
52<%@ taglib prefix="t" uri="/WEB-INF/tab.tld" %>
53<%
54final Item itemType = Item.PLATE;
55final SessionControl sc = Base.getExistingSessionControl(pageContext, true);
56final ItemContext cc = Base.getAndSetCurrentContext(sc, itemType, null, null);
57final int itemId = cc.getId();
58final String ID = sc.getId();
59final float scale = Base.getScale(sc);
60final DbControl dc = sc.newDbControl();
61try
62{
63  String title = null;
64  Plate plate = null;
65 
66  boolean readCurrentPlateType = true;
67  PlateType currentPlateType = null;
68
69  if (itemId == 0)
70  {
71    title = "Create plate";
72    cc.removeObject("item");
73   
74    int plateTypeId = Values.getInt(request.getParameter("platetype_id"));
75    if (plateTypeId != 0)
76    {
77      currentPlateType = PlateType.getById(dc, plateTypeId);
78    }
79    else if (cc.getPropertyFilter("plateType.name") != null)
80    {
81      currentPlateType = Base.getFirstMatching(dc, PlateType.getQuery(), "name", cc.getPropertyFilter("plateType.name"));
82    }
83  }
84  else
85  {
86    plate = Plate.getById(dc, itemId);
87    cc.setObject("item", plate);
88    title = "Edit plate -- " + HTML.encodeTags(plate.getName());
89    try
90    {
91      currentPlateType = plate.getPlateType();
92    }
93    catch (PermissionDeniedException ex)
94    {
95      readCurrentPlateType = false;
96    }
97  }
98  if (plate != null && !plate.hasPermission(Permission.WRITE))
99  {
100    throw new PermissionDeniedException(Permission.WRITE, itemType.toString());
101  }
102  final String clazz = "class=\"text\"";
103  final String requiredClazz = "class=\"text required\"";
104  %>
105
106  <base:page type="popup" title="<%=title%>">
107  <base:head scripts="tabcontrol.js,annotations.js" styles="tabcontrol.css">
108    <script language="JavaScript">
109    // Validate the "Plate" tab
110    function validatePlate()
111    {
112      var frm = document.forms['plate'];
113      if (Main.trimString(frm.name.value) == '')
114      {
115        alert("You must enter a name");
116        frm.name.focus();
117        return false;
118      }
119      if (frm.platetype_id && frm.platetype_id.length == 0)
120      {
121        alert("You must select a plate type");
122        return false;
123      }
124      return true;
125    }
126
127    // Submit the form
128    function saveSettings()
129    {
130      var frm = document.forms['plate'];
131      if (TabControl.validateActiveTab('settings'))
132      {
133        if (annotationsLoaded)
134        {
135          Annotations.addModifiedAnnotationsToForm(frames.annotations, frm);
136        }
137        if (inheritedAnnotationsLoaded)
138        {
139          Annotations.addInheritedAnnotationsToForm(frames.inheritedAnnotations, frm);
140        }
141        frm.submit();
142      }
143    }
144   
145    var annotationsLoaded = false;
146    var inheritedAnnotationsLoaded = false;
147    var parentsChanged = false;
148    function switchTab(tabControlId, tabId)
149    {
150      if (TabControl.setActiveTab(tabControlId, tabId))
151      {
152        if (tabId == 'annotations' && !annotationsLoaded)
153        {
154          Annotations.loadAnnotateFrame(frames.annotations, '<%=ID%>', '<%=itemType.name()%>', <%=plate == null ? 0 : plate.getId()%>);
155          annotationsLoaded = true;
156        }
157        else if (tabId == 'inheritedAnnotations' && 
158          (parentsChanged || !inheritedAnnotationsLoaded))
159        {
160          Annotations.loadInheritFrame(frames.inheritedAnnotations, '<%=ID%>', '<%=itemType.name()%>', <%=itemId%>, getParents());
161          inheritedAnnotationsLoaded = true;
162          parentsChanged = false;
163        }
164      }
165    }
166    function getParents()
167    {
168      return new Array();
169    }
170    function selectPlateTypeOnClick()
171    {
172      var frm = document.forms['plate'];
173      var url = '../platetypes/index.jsp?ID=<%=ID%>&cmd=UpdateContext&mode=selectone&callback=setPlateTypeCallback';
174      if (frm.platetype_id.length > 0) url += '&item_id='+frm.platetype_id[0].value;
175      Main.openPopup(url, 'SelectArrayBatch', 1000, 700);
176    }
177    function setPlateTypeCallback(plateTypeId, name)
178    {
179      var frm = document.forms['plate'];
180      if (frm.platetype_id.length < 1) // >
181      {
182        frm.platetype_id[frm.platetype_id.length] = new Option();
183      }
184      frm.platetype_id[0].value = plateTypeId;
185      frm.platetype_id[0].text = name;
186      frm.platetype_id.selectedIndex = 0;
187    }
188
189    function init()
190    {
191      var frm = document.forms['plate'];
192      <%
193      if (plate == null)
194      {
195        %>
196        frm.name.focus();
197        frm.name.select();
198        <%
199      }
200      %>
201    }
202    </script>
203  </base:head>
204  <base:body onload="init()">
205    <p>
206    <form action="index.jsp?ID=<%=ID%>" method="post" name="plate" onsubmit="return false;">
207    <input type="hidden" name="cmd" value="UpdateItem">
208
209    <h3 class="docked"><%=title%> <base:help tabcontrol="settings" /></h3>
210    <t:tabcontrol id="settings" contentstyle="<%="height: "+(int)(scale*370)+"px;"%>" 
211      position="bottom"  remember="<%=plate != null%>" switch="switchTab">
212    <t:tab id="info" title="Plate" validate="validatePlate()" helpid="plate.edit">
213      <table class="form" cellspacing=0>
214      <tr>
215        <td class="prompt">Name</td>
216        <td><input <%=requiredClazz%> type="text" name="name" 
217          value="<%=HTML.encodeTags(plate == null ? Values.getString(cc.getPropertyValue("name"), "New plate") : plate.getName())%>" 
218          size="40" maxlength="<%=Plate.MAX_NAME_LENGTH%>"></td>
219      </tr>
220      <tr>
221        <td class="prompt">Barcode</td>
222        <td><input <%=clazz%> type="text" name="barcode" 
223          value="<%=HTML.encodeTags(plate == null ? Values.getString(cc.getPropertyValue("barcode"), "") : plate.getBarcode())%>" 
224          size="40" maxlength="<%=Plate.MAX_BARCODE_LENGTH%>"></td>
225      </tr>
226      <tr>
227        <td class="prompt">Destroyed</td>
228        <td><input type="checkbox" name="destroyed" value="1"
229          <%=(plate != null && plate.isDestroyed()) || (plate == null && Values.getBoolean(cc.getPropertyValue("destroyed"))) ? "checked" : ""%>>
230        </td>
231      </tr>
232      <tr>
233        <td class="prompt">Plate type</td>
234        <td>
235          <%
236          if (plate != null)
237          {
238            %>
239            <%=Base.getEncodedName(currentPlateType, !readCurrentPlateType)%>
240            <%
241          }
242          else
243          {
244            %>
245            <table border="0" cellspacing="0" cellpadding="0">
246            <tr>
247            <td>
248              <select name="platetype_id" size="1" 
249                <%=!readCurrentPlateType ? "disabled readonly class=\"disabled\"" : "class=\"required\""%>
250                style="width: 20em;">
251              <%
252              if (!readCurrentPlateType)
253              {
254                %>
255                <option value="-1">- denied -
256                <%
257              }
258              else
259              {
260                if (currentPlateType != null)
261                {
262                  %>
263                  <option value="<%=currentPlateType.getId()%>" selected><%=HTML.encodeTags(currentPlateType.getName())%>
264                  <%
265                }
266              }
267              %>
268              </select>
269              &nbsp;
270            </td>
271            <td><base:button onclick="selectPlateTypeOnClick()" title="Select&hellip;" /></td>
272            </tr>
273            </table>
274            <%
275          }
276          %>
277        </td>
278      </tr>
279      <tr valign=top>
280        <td class="prompt">Description</td>
281        <td nowrap>
282          <textarea <%=clazz%> rows="4" cols="40" name="description" wrap="virtual"
283            ><%=HTML.encodeTags(plate == null ? cc.getPropertyValue("description") : plate.getDescription())%></textarea>
284          <a href="javascript:Main.zoom('Description', 'plate', 'description')"
285            title="Edit in larger window"><base:icon image="zoom.gif" /></a>
286        </td>
287      </tr>
288      </table>
289      <div align=right>&nbsp;<i><base:icon image="required.gif" /> = required information</i></div>
290    </t:tab>
291   
292    <t:tab id="annotations" title="Annotations" helpid="annotations.edit">
293      <iframe name="annotations" id="idAnnotations" src="../../common/annotations/wait.jsp" 
294        width="100%"  height="<%=(int)(scale*370)%>" frameborder=0 vspace=0 hspace=0
295        marginwidth=0 marginheight=0 scrolling="auto" style="overflow: visible"></iframe>
296    </t:tab>
297   
298    <t:tab id="inheritedAnnotations" title="Inherited annotations" helpid="annotations.edit.inerited">
299   
300      <iframe name="inheritedAnnotations" id="idInheritedAnnotations" src="../../common/annotations/wait.jsp" 
301        width="100%"  height="<%=(int)(scale*370)%>" frameborder=0 vspace=0 hspace=0
302        marginwidth=0 marginheight=0 scrolling="auto" style="overflow: visible"></iframe>
303    </t:tab>
304    </t:tabcontrol>
305
306    <table align="center">
307    <tr>
308      <td width="50%"><base:button onclick="saveSettings()" title="Save" /></td>
309      <td width="50%"><base:button onclick="window.close()" title="Cancel" /></td>
310    </tr>
311    </table>
312    </form>
313  </base:body>
314  </base:page>
315  <%
316}
317finally
318{
319  if (dc != null) dc.close();
320}
321%>
Note: See TracBrowser for help on using the repository browser.