source: trunk/www/views/derivedbioassaysets/edit_bioassayset.jsp @ 5657

Last change on this file since 5657 was 5657, checked in by Nicklas Nordborg, 11 years ago

References #1153: Handling short read transcript sequence data

Added web pages for editing and viewing derived bioassay sets. They'll probably need to be polished up a bit.

The final link to raw bioassay is still not possible. I think we have to re-design the link somewhat. In BASE 2 we used the array index to link back to the correct (labeled) extracts. We can't use that in BASE 3 since for sequencing experiments there doesn't have to be any relation between extracts in the same lane of the flow cell. The idea was to provide a direct link to the extract, but then we loose one of the parents in 2-channel microarray experiments...

  • Property svn:eol-style set to native
  • Property svn:keywords set to Date Id
File size: 21.1 KB
Line 
1<%-- $Id $
2  ------------------------------------------------------------------
3  Copyright (C) 2011 Nicklas Nordborg
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 3
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 BASE. If not, see <http://www.gnu.org/licenses/>.
20  ------------------------------------------------------------------
21--%>
22<%@page import="net.sf.basedb.core.PhysicalBioAssay"%>
23<%@ page pageEncoding="UTF-8" session="false"
24  import="net.sf.basedb.core.SessionControl"
25  import="net.sf.basedb.core.DbControl"
26  import="net.sf.basedb.core.DerivedBioAssaySet"
27  import="net.sf.basedb.core.ItemSubtype"
28  import="net.sf.basedb.core.Protocol"
29  import="net.sf.basedb.core.Hardware"
30  import="net.sf.basedb.core.Software"
31  import="net.sf.basedb.core.Item"
32  import="net.sf.basedb.core.ItemContext"
33  import="net.sf.basedb.core.Permission"
34  import="net.sf.basedb.core.ItemQuery"
35  import="net.sf.basedb.core.ItemResultList"
36  import="net.sf.basedb.core.Include"
37  import="net.sf.basedb.core.query.Orders"
38  import="net.sf.basedb.core.query.Hql"
39  import="net.sf.basedb.core.PermissionDeniedException"
40  import="net.sf.basedb.core.BaseException"
41  import="net.sf.basedb.clients.web.Base"
42  import="net.sf.basedb.clients.web.util.HTML"
43  import="net.sf.basedb.util.Values"
44  import="net.sf.basedb.core.plugin.GuiContext"
45  import="net.sf.basedb.clients.web.extensions.ExtensionsControl"
46  import="net.sf.basedb.clients.web.extensions.JspContext"
47  import="net.sf.basedb.clients.web.extensions.edit.EditUtil"
48  import="net.sf.basedb.util.extensions.ExtensionsInvoker"
49  import="java.util.Date"
50  import="java.util.List"
51%>
52<%@ taglib prefix="base" uri="/WEB-INF/base.tld" %>
53<%@ taglib prefix="t" uri="/WEB-INF/tab.tld" %>
54<%
55final Item itemType = Item.DERIVEDBIOASSAYSET;
56final SessionControl sc = Base.getExistingSessionControl(pageContext, true);
57final ItemContext cc = Base.getAndSetCurrentContext(sc, itemType, null, null);
58final int itemId = cc.getId();
59final String ID = sc.getId();
60final float scale = Base.getScale(sc);
61final DbControl dc = sc.newDbControl();
62try
63{
64  DerivedBioAssaySet bioAssaySet = null;
65  String title = null;
66 
67  boolean readCurrentSubtype = true;
68  int currentSubtypeId = 0;
69
70  boolean readCurrentPhysicalBioAssay = true;
71  PhysicalBioAssay currentPhysicalBioAssay = null;
72  DerivedBioAssaySet currentParentBioAssaySet = null;
73 
74  boolean readCurrentProtocol = true;
75  Protocol currentProtocol = null;
76  Protocol defaultProtocol = null;
77 
78  boolean readCurrentHardware = true;
79  Hardware currentHardware = null;
80  Hardware defaultHardware = null;
81 
82  boolean readCurrentSoftware = true;
83  Software currentSoftware = null;
84  Software defaultSoftware = null;
85
86  // Load recently used items
87  List<PhysicalBioAssay> recentPhysicalBioAssays = (List<PhysicalBioAssay>)cc.getRecent(dc, Item.PHYSICALBIOASSAY);
88  List<DerivedBioAssaySet> recentParentBioAssaySets = (List<DerivedBioAssaySet>)cc.getRecent(dc, Item.DERIVEDBIOASSAYSET);
89  List<Protocol> recentProtocols = (List<Protocol>)cc.getRecent(dc, Item.PROTOCOL);
90  List<Hardware> recentHardware = (List<Hardware>)cc.getRecent(dc, Item.HARDWARE);
91  List<Software> recentSoftware = (List<Software>)cc.getRecent(dc, Item.SOFTWARE);
92
93  if (itemId == 0)
94  {
95    title = "New bioassay set";
96    cc.removeObject("item");
97    currentSubtypeId = Values.getInt(request.getParameter("subtype_id"));
98    if (currentSubtypeId == 0) 
99    {
100      int recentSubtypeId = Values.getInt(cc.getRecent(Item.ITEMSUBTYPE.name(), 0));
101      currentSubtypeId = Values.getInt(cc.getPropertyValue("itemSubtype"), recentSubtypeId);
102    }
103
104    int parentId = Values.getInt(request.getParameter("parent_id"));
105    if (parentId != 0)
106    {
107      currentParentBioAssaySet = DerivedBioAssaySet.getById(dc, parentId);
108      try
109      {
110        currentPhysicalBioAssay = currentParentBioAssaySet.getPhysicalBioAssay();
111      }
112      catch (PermissionDeniedException ex)
113      {
114        readCurrentPhysicalBioAssay = false;
115      }
116    }
117    else
118    {
119      int physicalBioAssayId = Values.getInt(request.getParameter("physicalbioassay_id"));
120      if (physicalBioAssayId != 0)
121      {
122        currentPhysicalBioAssay = PhysicalBioAssay.getById(dc, physicalBioAssayId);
123      }
124    }
125   
126  }
127  else
128  {
129    bioAssaySet = DerivedBioAssaySet.getById(dc, itemId);
130    bioAssaySet.checkPermission(Permission.WRITE);
131    cc.setObject("item", bioAssaySet);
132    title = "Edit bioassay set -- " + HTML.encodeTags(bioAssaySet.getName());
133   
134    try
135    {
136      ItemSubtype subtype = bioAssaySet.getItemSubtype();
137      if (subtype != null) currentSubtypeId = subtype.getId();
138    }
139    catch (PermissionDeniedException ex)
140    {
141      readCurrentSubtype = false;
142    }
143    try
144    {
145      currentPhysicalBioAssay = bioAssaySet.getPhysicalBioAssay();
146    }
147    catch (PermissionDeniedException ex)
148    {
149      readCurrentPhysicalBioAssay = false;
150    }
151    try
152    {
153      currentProtocol = bioAssaySet.getProtocol();
154    }
155    catch (PermissionDeniedException ex)
156    {
157      readCurrentProtocol = false;
158    }
159    try
160    {
161      currentHardware = bioAssaySet.getHardware();
162    }
163    catch (PermissionDeniedException ex)
164    {
165      readCurrentHardware = false;
166    }
167    try
168    {
169      currentSoftware = bioAssaySet.getSoftware();
170    }
171    catch (PermissionDeniedException ex)
172    {
173      readCurrentSoftware = false;
174    }
175  }
176  // Query to retrieve item types
177  final ItemQuery<ItemSubtype> subtypesQuery = Base.getSubtypesQuery(itemType);
178  subtypesQuery.include(Include.ALL);
179
180  final String clazz = "class=\"text\"";
181  final String requiredClazz = "class=\"text required\"";
182  JspContext jspContext = ExtensionsControl.createContext(dc, pageContext, GuiContext.item(itemType), bioAssaySet);
183  ExtensionsInvoker invoker = EditUtil.useEditExtensions(jspContext);
184  %>
185  <base:page type="popup" title="<%=title%>">
186  <base:head scripts="tabcontrol.js,annotations.js,platforms.js,subtypes.js,ajax.js,json2.js" styles="tabcontrol.css">
187    <ext:scripts context="<%=jspContext%>" />
188    <ext:stylesheets context="<%=jspContext%>" />
189    <script language="JavaScript">
190    // Validate the "BioAssaySet" tab
191    function validateBioAssaySet()
192    {
193      var frm = document.forms['bioAssaySet'];
194      if (Main.trimString(frm.name.value) == '')
195      {
196        alert("You must enter a name");
197        frm.name.focus();
198        return false;
199      }
200      if (frm.isRoot)
201      {
202        if (frm.isRoot[0].checked)
203        {
204          if (frm.physicalbioassay_id.selectedIndex < 0)
205          {
206            alert("You must select a parent bioassay");
207            frm.physicalbioassay_id.focus();
208            return false;
209          }
210        }
211        else
212        {
213          if (frm.parent_id.selectedIndex < 0)
214          {
215            alert("You must select a parent bioassay set");
216            frm.parent_id.focus();
217            return false;
218          }
219        }
220       
221      }
222      return true;
223    }
224
225    // Submit the form
226    function saveSettings()
227    {
228      var frm = document.forms['bioAssaySet'];
229      if (TabControl.validateActiveTab('settings'))
230      {
231        if (annotationsLoaded) 
232        {
233          Annotations.addModifiedAnnotationsToForm(frames.annotations, frm);
234        }
235        if (inheritedAnnotationsLoaded)
236        {
237          Annotations.addInheritedAnnotationsToForm(frames.inheritedAnnotations, frm);
238        }
239        if (dataFilesLoaded)
240        {
241          Platforms.addDataFilesToForm(frames.datafiles, frm);
242        }
243        if (frm.isRoot)
244        {
245          if (frm.isRoot[0].checked)
246          {
247            frm.parent_id.selectedIndex = -1; 
248          }
249          else
250          {
251            frm.physicalbioassay_id.selectedIndex = -1;
252          }
253        }
254        frm.submit();
255      }
256    }
257   
258    var annotationsLoaded = false;
259    var inheritedAnnotationsLoaded = false;
260    var parentsChanged = false;
261    var protocolChanged = false;
262    var dataFilesLoaded = false;
263    function switchTab(tabControlId, tabId)
264    {
265      if (TabControl.setActiveTab(tabControlId, tabId))
266      {
267        if (tabId == 'annotations' && (protocolChanged || !annotationsLoaded))
268        {
269          Annotations.loadAnnotateFrame(frames.annotations, '<%=ID%>', '<%=itemType.name()%>', <%=itemId%>, getProtocolId());
270          annotationsLoaded = true;
271          protocolChanged = false;
272        }
273        else if (tabId == 'inheritedAnnotations' && 
274          (parentsChanged || !inheritedAnnotationsLoaded))
275        {
276          Annotations.loadInheritFrame(frames.inheritedAnnotations, '<%=ID%>', '<%=itemType.name()%>', <%=itemId%>, getParents());
277          inheritedAnnotationsLoaded = true;
278          parentsChanged = false;
279        }
280        else if (tabId == 'datafiles' && (!dataFilesLoaded))
281        {
282          //var platform = Platforms.getSelectedPlatform(frm.platform);
283          //var variant = Platforms.getSelectedVariant(frm.platform);
284          Platforms.loadDataFilesFrame(frames.datafiles, '<%=ID%>', '<%=itemType.name()%>', <%=itemId%>, 0, 0);
285          dataFilesLoaded = true;
286        }
287      }
288    }
289   
290    function getProtocolId()
291    {
292      var frm = document.forms['bioAssaySet'];
293      var protocolId = 0;
294      if (frm.protocol_id.length > 0 && !frm.protocol_id.disabled)
295      {
296        protocolId = Math.abs(parseInt(frm.protocol_id[frm.protocol_id.selectedIndex].value));       
297      }
298      return protocolId;
299    }
300   
301    function getParents()
302    {
303      var frm = document.forms['bioAssaySet'];
304      if (!frm.physicalbioassay_id) return;
305     
306      var parents = new Array();
307      if (frm.isRoot[0].checked)
308      {
309        var bioAssayId = Math.abs(parseInt(frm.physicalbioassay_id[frm.physicalbioassay_id.selectedIndex].value));
310        if (bioAssayId > 0) parents[parents.length] = 'PHYSICALBIOASSAY:'+bioAssayId;
311      }
312      else
313      {
314        var bioAssaySetId = Math.abs(parseInt(frm.parent_id[frm.parent_id.selectedIndex].value));
315        if (bioAssaySetId > 0) parents[parents.length] = 'DERIVEDBIOASSAYSET:'+bioAssaySetId;
316      }
317      return parents;
318
319    }
320   
321    function selectProtocolOnClick()
322    {
323      var frm = document.forms['bioAssaySet'];
324      var url = '../../../admin/protocols/index.jsp?ID=<%=ID%>&cmd=UpdateContext&mode=selectone';
325      url += '&callback=setProtocolCallback&resetTemporary=1';
326      url += ItemSubtype.createRelatedFilter('bioAssaySet', 'PROTOCOL');
327      if (frm.protocol_id.length > 1)
328      {
329        var id = Math.abs(parseInt(frm.protocol_id[1].value));       
330        url += '&item_id='+id;
331      }
332      Main.openPopup(url, 'SelectProtocol', 1000, 700);
333    }
334    function setProtocolCallback(id, name)
335    {
336      var frm = document.forms['bioAssaySet'];
337      var list = frm.protocol_id;
338      if (list.length < 2 || list[1].value == '0') // >
339      {
340        Forms.addListOption(list, 1, new Option());
341      }
342      list[1].value = id;
343      list[1].text = name;
344      list.selectedIndex = 1;
345      protocolChanged = true;
346    }
347    function protocolOnChange()
348    {
349      protocolChanged = true;
350    }
351   
352    function selectPhysicalBioAssayOnClick()
353    {
354      var frm = document.forms['bioAssaySet'];
355      var url = '../physicalbioassays/index.jsp?ID=<%=ID%>&cmd=UpdateContext&mode=selectone';
356      url += '&callback=setPhysicalBioAssayCallback&resetTemporary=1';
357      url += ItemSubtype.createRelatedFilter('bioAssaySet', 'PHYSICALBIOASSAY');
358      if (frm.physicalbioassay_id.selectedIndex >= 0)
359      {
360        var id = Math.abs(parseInt(frm.physicalbioassay_id[frm.physicalbioassay_id.selectedIndex].value));       
361        url += '&item_id='+id;
362      }
363      Main.openPopup(url, 'SelectPhysicalBioAssay', 1000, 700);
364    }
365    function setPhysicalBioAssayCallback(id, name)
366    {
367      var frm = document.forms['bioAssaySet'];
368      var list = frm.physicalbioassay_id;
369      if (list.length < 1 || list[0].value == '0') // >
370      {
371        Forms.addListOption(list, 0, new Option());
372      }
373      list[0].value = id;
374      list[0].text = name;
375      list.selectedIndex = 0;
376      parentsChanged = true;
377    }
378    function physicalBioAssayOnChange()
379    {
380      parentsChanged = true;
381    }
382   
383    function selectParentBioAssaySetOnClick()
384    {
385      var frm = document.forms['bioAssaySet'];
386      var url = 'index.jsp?ID=<%=ID%>&cmd=UpdateContext&mode=selectone';
387      url += '&callback=setParentBioAssaySetCallback&resetTemporary=1';
388      url += ItemSubtype.createRelatedFilter('bioAssaySet', 'DERIVEDBIOASSAYSET');
389      if (frm.parent_id.selectedIndex >= 0)
390      {
391        var id = Math.abs(parseInt(frm.physicalbioassay_id[frm.parent_id.selectedIndex].value));       
392        url += '&item_id='+id;
393      }
394      Main.openPopup(url, 'SelectParentBioAssaySet', 1000, 700);
395    }
396    function setParentBioAssaySetCallback(id, name)
397    {
398      var frm = document.forms['bioAssaySet'];
399      var list = frm.parent_id;
400      if (list.length < 1 || list[0].value == '0') // >
401      {
402        Forms.addListOption(list, 0, new Option());
403      }
404      list[0].value = id;
405      list[0].text = name;
406      list.selectedIndex = 0;
407      parentsChanged = true;
408    }
409    function parentBioAssaySetOnChange()
410    {
411      parentsChanged = true;
412    }
413   
414    function selectHardwareOnClick()
415    {
416      var frm = document.forms['bioAssaySet'];
417      var url = '../../../admin/hardware/index.jsp?ID=<%=ID%>&cmd=UpdateContext&mode=selectone';
418      url += '&callback=setHardwareCallback&resetTemporary=1';
419      url += ItemSubtype.createRelatedFilter('bioAssaySet', 'HARDWARE');
420      if (frm.hardware_id.length > 1)
421      {
422        var id = Math.abs(parseInt(frm.hardware_id[1].value));       
423        url += '&item_id='+id;
424      }
425      Main.openPopup(url, 'SelectHardware', 1000, 700);
426    }
427    function setHardwareCallback(id, name)
428    {
429      var frm = document.forms['bioAssaySet'];
430      var list = frm.hardware_id;
431      if (list.length < 2 || list[1].value == '0') // >
432      {
433        Forms.addListOption(list, 1, new Option());
434      }
435      list[1].value = id;
436      list[1].text = name;
437      list.selectedIndex = 1;
438    }
439    function selectSoftwareOnClick()
440    {
441      var frm = document.forms['bioAssaySet'];
442      var url = '../../../admin/software/index.jsp?ID=<%=ID%>&cmd=UpdateContext&mode=selectone';
443      url += '&callback=setSoftwareCallback&resetTemporary=1';
444      url += ItemSubtype.createRelatedFilter('bioAssaySet', 'SOFTWARE');
445      if (frm.software_id.length > 1)
446      {
447        var id = Math.abs(parseInt(frm.software_id[1].value));       
448        url += '&item_id='+id;
449      }
450      Main.openPopup(url, 'SelectSoftware', 1000, 700);
451    }
452    function setSoftwareCallback(id, name)
453    {
454      var frm = document.forms['bioAssaySet'];
455      var list = frm.software_id;
456      if (list.length < 2 || list[1].value == '0') // >
457      {
458        Forms.addListOption(list, 1, new Option());
459      }
460      list[1].value = id;
461      list[1].text = name;
462      list.selectedIndex = 1;
463    }
464
465   
466    function init()
467    {
468      var frm = document.forms['bioAssaySet'];
469      <%
470      if (bioAssaySet == null)
471      {
472        %>
473        frm.name.focus();
474        frm.name.select();
475        <%
476      }
477      %>
478      isRootOnChange();
479    }
480   
481    function isRootOnChange()
482    {
483      var frm = document.forms['bioAssaySet'];
484      var isRoot = frm.isRoot[0].checked;
485      Main.showHide('physicalBioAssaySection', isRoot);
486      Main.showHide('parentBioAssaySetSection', !isRoot);
487    }
488   
489    </script>
490  </base:head>
491  <base:body onload="init()">
492    <p>
493    <form action="index.jsp?ID=<%=ID%>" method="post" name="bioAssaySet" onsubmit="return false;">
494    <input type="hidden" name="cmd" value="UpdateItem">
495
496    <h3 class="docked"><%=title%> <base:help tabcontrol="settings" /></h3>
497    <t:tabcontrol id="settings" contentstyle="<%="height: "+(int)(scale*370)+"px;"%>" 
498      position="bottom"  remember="<%=bioAssaySet != null%>" switch="switchTab"
499      extensions="<%=invoker%>">
500    <t:tab id="info" title="Bioassay set" validate="validateBioAssaySet()" helpid="bioassayset.edit">
501      <table class="form" cellspacing=0>
502      <tr>
503        <td class="prompt" width="120px">Name</td>
504        <td><input <%=requiredClazz%> type="text" name="name" 
505          value="<%=HTML.encodeTags(bioAssaySet == null ? Values.getString(cc.getPropertyValue("name"), "New bioassay set") : bioAssaySet.getName())%>" 
506          size="40" maxlength="<%=DerivedBioAssaySet.MAX_NAME_LENGTH%>"></td>
507      </tr>
508
509      <tr valign="top">
510        <td class="prompt">Type</td>
511        <td colspan="2">
512          <select name="subtype_id"
513            <%=!readCurrentSubtype ? "disabled readonly class=\"disabled selectionlist\"" : "class=\"selectionlist\""%>>
514          <%
515          if (!readCurrentSubtype)
516          {
517            %>
518            <option value="-1">- denied -
519            <%
520          }
521          else
522          {
523            %>
524            <option value="0">-none-
525            <%
526            for (ItemSubtype subtype : subtypesQuery.list(dc))
527            {
528              int id = subtype.getId();
529              if (id != currentSubtypeId && subtype.isRemoved()) continue;
530              %>
531              <option value="<%=id == currentSubtypeId && bioAssaySet != null ? -id : id%>" 
532                <%=id == currentSubtypeId ? "selected" : ""%>
533                title="<%=HTML.encodeTags(subtype.getDescription()) %>"
534                ><%=HTML.encodeTags(subtype.getName())%>
535              <%
536            }
537          }
538          %>
539          </select>
540        </td>
541      </tr>
542      <%
543      if (bioAssaySet == null)
544      {
545        %>
546        <tr>
547          <td class="prompt">Parent type</td>
548          <td>
549            <input id="isRoot" type="radio" name="isRoot" value="1" 
550              <%=currentParentBioAssaySet == null ? "checked" : "" %>
551              onchange="isRootOnChange()"><label for="isRoot">Physical bioassay</label>
552            <input id="isChild" type="radio" name="isRoot" value="0"
553              <%=currentParentBioAssaySet == null ? "" : "checked" %>
554              onchange="isRootOnChange()"><label for="isChild">Other bioassay set</label><br>
555          </td>
556        </tr>
557        <tr id="physicalBioAssaySection" style="display: none;">
558          <td class="subprompt">-physical bioassay</td>
559          <td>
560            <base:select 
561              id="physicalbioassay_id"
562              clazz="selectionlist unchangeable"
563              required="true"
564              current="<%=currentPhysicalBioAssay%>"
565              recent="<%=recentPhysicalBioAssays%>"
566              newitem="true"
567              onselect="selectPhysicalBioAssayOnClick()"
568              onchange="physicalBioAssayOnChange()"
569            />
570          </td>
571        </tr>
572        <tr id="parentBioAssaySetSection" style="display: none;">
573          <td class="subprompt">-bioassay set</td>
574          <td>
575            <base:select 
576              id="parent_id"
577              clazz="selectionlist unchangeable"
578              required="true"
579              current="<%=currentParentBioAssaySet%>"
580              recent="<%=recentParentBioAssaySets%>"
581              newitem="true"
582              onselect="selectParentBioAssaySetOnClick()"
583              onchange="parentBioAssaySetOnChange()"
584            />
585          </td>
586        </tr>
587        <%
588      }
589      %>
590      <tr>
591        <td class="prompt">Protocol</td>
592        <td>
593          <base:select 
594            id="protocol_id"
595            clazz="selectionlist"
596            required="false"
597            current="<%=currentProtocol%>"
598            denied="<%=!readCurrentProtocol%>"
599            recent="<%=recentProtocols%>"
600            defaultitem="<%=defaultProtocol%>"
601            newitem="<%=bioAssaySet == null%>"
602            onselect="selectProtocolOnClick()"
603            onchange="protocolOnChange()"
604          />
605        </td>
606      </tr>
607      <tr>
608        <td class="prompt">Hardware</td>
609        <td>
610          <base:select 
611            id="hardware_id"
612            clazz="selectionlist"
613            required="false"
614            current="<%=currentHardware%>"
615            denied="<%=!readCurrentHardware%>"
616            recent="<%=recentHardware%>"
617            defaultitem="<%=defaultHardware%>"
618            newitem="<%=bioAssaySet == null%>"
619            onselect="selectHardwareOnClick()"
620          />
621        </td>
622      </tr>
623      <tr>
624        <td class="prompt">Software</td>
625        <td>
626          <base:select 
627            id="software_id"
628            clazz="selectionlist"
629            required="false"
630            current="<%=currentSoftware%>"
631            denied="<%=!readCurrentSoftware%>"
632            recent="<%=recentSoftware%>"
633            defaultitem="<%=defaultSoftware%>"
634            newitem="<%=bioAssaySet == null%>"
635            onselect="selectSoftwareOnClick()"
636          />
637        </td>
638      </tr>
639
640      <tr valign=top>
641        <td class="prompt">Description</td>
642        <td nowrap>
643          <textarea <%=clazz%> rows="4" cols="40" name="description" wrap="virtual"
644            ><%=HTML.encodeTags(bioAssaySet == null ? cc.getPropertyValue("description") : bioAssaySet.getDescription())%></textarea>
645          <a href="javascript:Main.zoom('Description', 'bioAssaySet', 'description')"
646            title="Edit in larger window"><base:icon image="zoom.gif" /></a>
647        </td>
648      </tr>
649      </table>
650      <div align=right>&nbsp;<i><base:icon image="required.gif" /> = required information</i>
651      <%if (bioAssaySet == null) {%><br>
652        <i><base:icon image="unchangeable.gif" /> = can't be changed later</i>
653      <%}%>
654      </div>
655    </t:tab>
656
657    <t:tab id="datafiles" title="Data files" helpid="datafiles.edit">
658      <iframe name="datafiles" id="idDatafiles" src="../../../common/datafiles/wait.jsp" 
659        width="100%"  height="<%=(int)(scale*370)%>" frameborder=0 vspace=0 hspace=0
660        marginwidth=0 marginheight=0 scrolling="auto" style="overflow: visible"></iframe>
661    </t:tab>
662
663    <t:tab id="annotations" title="Annotations" 
664      helpid="annotations.edit" tooltip="Enter values for annotations">
665      <iframe name="annotations" id="idAnnotations" src="../../../common/annotations/wait.jsp" 
666        width="100%"  height="<%=(int)(scale*370)%>" frameborder=0 vspace=0 hspace=0
667        marginwidth=0 marginheight=0 scrolling="auto" style="overflow: visible"></iframe>
668    </t:tab>
669   
670    <t:tab id="inheritedAnnotations" title="Inherited annotations" helpid="annotations.edit.inherited">
671      <iframe name="inheritedAnnotations" id="idInheritedAnnotations" src="../../../common/annotations/wait.jsp" 
672        width="100%"  height="<%=(int)(scale*370)%>" frameborder=0 vspace=0 hspace=0
673        marginwidth=0 marginheight=0 scrolling="auto" style="overflow: visible"></iframe>
674    </t:tab>
675    </t:tabcontrol>
676
677    <table align="center">
678    <tr>
679      <td width="50%"><base:button onclick="saveSettings()" title="Save" /></td>
680      <td width="50%"><base:button onclick="window.close()" title="Cancel" /></td>
681    </tr>
682    </table>
683    </form>
684  </base:body>
685  </base:page>
686  <%
687}
688finally
689{
690  if (dc != null) dc.close();
691}
692%>
Note: See TracBrowser for help on using the repository browser.