source: trunk/www/views/derivedbioassays/edit_bioassay.jsp @ 5714

Last change on this file since 5714 was 5714, checked in by Nicklas Nordborg, 12 years ago

References #1604: Support for multiple files of the same type in a FileSet?

The GUI can now be used to add multiple files of types that has enabled this.

  • Property svn:eol-style set to native
  • Property svn:keywords set to Date Id
File size: 26.4 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 pageEncoding="UTF-8" session="false"
23  import="net.sf.basedb.core.SessionControl"
24  import="net.sf.basedb.core.DbControl"
25  import="net.sf.basedb.core.DerivedBioAssay"
26  import="net.sf.basedb.core.PhysicalBioAssay"
27  import="net.sf.basedb.core.Extract"
28  import="net.sf.basedb.core.ItemSubtype"
29  import="net.sf.basedb.core.Protocol"
30  import="net.sf.basedb.core.Hardware"
31  import="net.sf.basedb.core.Software"
32  import="net.sf.basedb.core.Project"
33  import="net.sf.basedb.core.Item"
34  import="net.sf.basedb.core.ItemContext"
35  import="net.sf.basedb.core.Permission"
36  import="net.sf.basedb.core.ItemQuery"
37  import="net.sf.basedb.core.ItemResultList"
38  import="net.sf.basedb.core.Include"
39  import="net.sf.basedb.core.query.Orders"
40  import="net.sf.basedb.core.query.Hql"
41  import="net.sf.basedb.core.PermissionDeniedException"
42  import="net.sf.basedb.core.BaseException"
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="net.sf.basedb.util.ListUtil"
47  import="net.sf.basedb.core.plugin.GuiContext"
48  import="net.sf.basedb.clients.web.extensions.ExtensionsControl"
49  import="net.sf.basedb.clients.web.extensions.JspContext"
50  import="net.sf.basedb.clients.web.extensions.edit.EditUtil"
51  import="net.sf.basedb.util.extensions.ExtensionsInvoker"
52  import="java.util.Date"
53  import="java.util.List"
54  import="java.util.Collections"
55%>
56<%@ taglib prefix="base" uri="/WEB-INF/base.tld" %>
57<%@ taglib prefix="t" uri="/WEB-INF/tab.tld" %>
58<%
59final Item itemType = Item.DERIVEDBIOASSAY;
60final SessionControl sc = Base.getExistingSessionControl(pageContext, true);
61final ItemContext cc = Base.getAndSetCurrentContext(sc, itemType, null, null);
62final int itemId = cc.getId();
63final String ID = sc.getId();
64final float scale = Base.getScale(sc);
65final DbControl dc = sc.newDbControl();
66try
67{
68  DerivedBioAssay bioAssay = null;
69  String title = null;
70 
71  boolean readCurrentSubtype = true;
72  ItemSubtype currentSubtype = null;
73
74  boolean readCurrentPhysicalBioAssay = true;
75  PhysicalBioAssay currentPhysicalBioAssay = null;
76 
77  boolean readCurrentParentBioAssay = true;
78  DerivedBioAssay currentParentBioAssay = null;
79 
80  boolean readCurrentExtract = true;
81  Extract currentExtract = null;
82
83  boolean readCurrentProtocol = true;
84  Protocol currentProtocol = null;
85 
86  boolean readCurrentHardware = true;
87  Hardware currentHardware = null;
88 
89  boolean readCurrentSoftware = true;
90  Software currentSoftware = null;
91
92  if (itemId == 0)
93  {
94    title = "New derived bioassay";
95    cc.removeObject("item");
96    int currentSubtypeId = Values.getInt(request.getParameter("subtype_id"));
97    List<ItemSubtype> relatedToParent = Collections.emptyList();
98    int parentId = Values.getInt(request.getParameter("parent_id"));
99    if (parentId != 0)
100    {
101      currentParentBioAssay = DerivedBioAssay.getById(dc, parentId);
102      if (currentSubtypeId == 0)
103      {
104        relatedToParent = ItemSubtype.getParentSubtypes(dc, currentParentBioAssay, Item.DERIVEDBIOASSAY);
105      }
106      try
107      {
108        currentPhysicalBioAssay = currentParentBioAssay.getPhysicalBioAssay();
109      }
110      catch (PermissionDeniedException ex)
111      {
112        readCurrentPhysicalBioAssay = false;
113      }
114      try
115      {
116        currentExtract = currentParentBioAssay.getExtract();
117      }
118      catch (PermissionDeniedException ex)
119      {}
120    }
121    else
122    {
123      int physicalBioAssayId = Values.getInt(request.getParameter("physicalbioassay_id"));
124      if (physicalBioAssayId != 0)
125      {
126        currentPhysicalBioAssay = PhysicalBioAssay.getById(dc, physicalBioAssayId);
127        if (currentSubtypeId == 0)
128        {
129          relatedToParent = ItemSubtype.getParentSubtypes(dc, currentPhysicalBioAssay, Item.DERIVEDBIOASSAY);
130        }
131      }
132    }
133    if (currentSubtypeId == 0) 
134    {
135      if (relatedToParent.size() > 0)
136      {
137        // Find most recently used related subtype
138        List<ItemSubtype> recentSubtypes = (List<ItemSubtype>)cc.getRecent(dc, Item.ITEMSUBTYPE);
139        currentSubtype = ListUtil.findFirstCommon(recentSubtypes, relatedToParent, relatedToParent.get(0));
140      }
141      else
142      {
143        int recentSubtypeId = Values.getInt(cc.getRecent(Item.ITEMSUBTYPE.name(), 0));
144        currentSubtypeId = Values.getInt(cc.getPropertyValue("itemSubtype"), recentSubtypeId);
145        if (currentSubtypeId > 0) currentSubtype = ItemSubtype.getById(dc, currentSubtypeId);
146      }
147    }
148  }
149  else
150  {
151    bioAssay = DerivedBioAssay.getById(dc, itemId);
152    bioAssay.checkPermission(Permission.WRITE);
153    cc.setObject("item", bioAssay);
154    title = "Edit bioassay -- " + HTML.encodeTags(bioAssay.getName());
155   
156    try
157    {
158      currentSubtype = bioAssay.getItemSubtype();
159    }
160    catch (PermissionDeniedException ex)
161    {
162      readCurrentSubtype = false;
163    }
164    try
165    {
166      currentParentBioAssay = bioAssay.getParent();
167    }
168    catch (PermissionDeniedException ex)
169    {
170      readCurrentParentBioAssay = false;
171    }
172    try
173    {
174      currentPhysicalBioAssay = bioAssay.getPhysicalBioAssay();
175    }
176    catch (PermissionDeniedException ex)
177    {
178      readCurrentPhysicalBioAssay = false;
179    }
180    try
181    {
182      currentExtract = bioAssay.getExtract();
183    }
184    catch (PermissionDeniedException ex)
185    {
186      readCurrentExtract = false;
187    }
188    try
189    {
190      currentProtocol = bioAssay.getProtocol();
191    }
192    catch (PermissionDeniedException ex)
193    {
194      readCurrentProtocol = false;
195    }
196    try
197    {
198      currentHardware = bioAssay.getHardware();
199    }
200    catch (PermissionDeniedException ex)
201    {
202      readCurrentHardware = false;
203    }
204    try
205    {
206      currentSoftware = bioAssay.getSoftware();
207    }
208    catch (PermissionDeniedException ex)
209    {
210      readCurrentSoftware = false;
211    }
212  }
213
214  // Default items
215  int activeProjectId = sc.getActiveProjectId();
216  List<Protocol> defaultProtocols = null;
217  List<Hardware> defaultHardware = null;
218  List<Software> defaultSoftware = null;
219  if (activeProjectId > 0)
220  {
221    Project activeProject = Project.getById(dc, activeProjectId);
222    defaultProtocols = (List<Protocol>)activeProject.findDefaultItemsOfRelatedSubtype(dc, currentSubtype, Item.PROTOCOL);
223    defaultHardware = (List<Hardware>)activeProject.findDefaultItemsOfRelatedSubtype(dc, currentSubtype, Item.HARDWARE);
224    defaultSoftware = (List<Software>)activeProject.findDefaultItemsOfRelatedSubtype(dc, currentSubtype, Item.SOFTWARE);
225  }
226
227  // Load recently used items
228  List<PhysicalBioAssay> recentPhysicalBioAssays = (List<PhysicalBioAssay>)cc.getRecent(dc, Item.PHYSICALBIOASSAY);
229  List<DerivedBioAssay> recentParentBioAssays = (List<DerivedBioAssay>)cc.getRecent(dc, Item.DERIVEDBIOASSAY);
230  List<Protocol> recentProtocols = (List<Protocol>)cc.getRecent(dc, Item.PROTOCOL, currentSubtype);
231  List<Hardware> recentHardware = (List<Hardware>)cc.getRecent(dc, Item.HARDWARE, currentSubtype);
232  List<Software> recentSoftware = (List<Software>)cc.getRecent(dc, Item.SOFTWARE, currentSubtype);
233 
234  // Query to retrieve item types
235  final ItemQuery<ItemSubtype> subtypesQuery = Base.getSubtypesQuery(itemType);
236  subtypesQuery.include(Include.ALL);
237
238  final String clazz = "class=\"text\"";
239  final String requiredClazz = "class=\"text required\"";
240  JspContext jspContext = ExtensionsControl.createContext(dc, pageContext, GuiContext.item(itemType), bioAssay);
241  ExtensionsInvoker invoker = EditUtil.useEditExtensions(jspContext);
242  %>
243  <base:page type="popup" title="<%=title%>">
244  <base:head scripts="tabcontrol.js,annotations.js,platforms.js,subtypes.js,ajax.js,json2.js" styles="tabcontrol.css">
245    <ext:scripts context="<%=jspContext%>" />
246    <ext:stylesheets context="<%=jspContext%>" />
247    <script language="JavaScript">
248    // Validate the "BioAssay" tab
249    function validateBioAssay()
250    {
251      var frm = document.forms['bioAssay'];
252      if (Main.trimString(frm.name.value) == '')
253      {
254        alert("You must enter a name");
255        frm.name.focus();
256        return false;
257      }
258      if (frm.isRoot)
259      {
260        if (frm.isRoot[0].checked)
261        {
262          if (frm.physicalbioassay_id.selectedIndex < 0)
263          {
264            alert("You must select a parent bioassay");
265            frm.physicalbioassay_id.focus();
266            return false;
267          }
268        }
269        else
270        {
271          if (frm.parent_id.selectedIndex < 0)
272          {
273            alert("You must select a parent bioassay");
274            frm.parent_id.focus();
275            return false;
276          }
277        }
278       
279      }
280      return true;
281    }
282
283    // Submit the form
284    function saveSettings()
285    {
286      var frm = document.forms['bioAssay'];
287      if (TabControl.validateActiveTab('settings'))
288      {
289        if (annotationsLoaded) 
290        {
291          Annotations.addModifiedAnnotationsToForm(frames.annotations, frm);
292        }
293        if (inheritedAnnotationsLoaded)
294        {
295          Annotations.addInheritedAnnotationsToForm(frames.inheritedAnnotations, frm);
296        }
297        if (dataFilesLoaded)
298        {
299          frames.datafiles.writeFileActionsToForm(frm);
300        }
301        if (frm.isRoot)
302        {
303          if (frm.isRoot[0].checked)
304          {
305            frm.parent_id.selectedIndex = -1; 
306          }
307          else
308          {
309            frm.physicalbioassay_id.selectedIndex = -1;
310          }
311        }
312        frm.submit();
313      }
314    }
315   
316    var annotationsLoaded = false;
317    var inheritedAnnotationsLoaded = false;
318    var parentsChanged = false;
319    var protocolChanged = false;
320    var subtypeChanged = false;
321    var dataFilesLoaded = false;
322    function switchTab(tabControlId, tabId)
323    {
324      if (TabControl.setActiveTab(tabControlId, tabId))
325      {
326        if (tabId == 'annotations' && (protocolChanged || !annotationsLoaded))
327        {
328          Annotations.loadAnnotateFrame(frames.annotations, '<%=ID%>', '<%=itemType.name()%>', <%=itemId%>, getProtocolId());
329          annotationsLoaded = true;
330          protocolChanged = false;
331        }
332        else if (tabId == 'inheritedAnnotations' && 
333          (parentsChanged || !inheritedAnnotationsLoaded))
334        {
335          Annotations.loadInheritFrame(frames.inheritedAnnotations, '<%=ID%>', '<%=itemType.name()%>', <%=itemId%>, getParents());
336          inheritedAnnotationsLoaded = true;
337          parentsChanged = false;
338        }
339        else if (tabId == 'datafiles' && (subtypeChanged || !dataFilesLoaded))
340        {
341          var subtypeId = ItemSubtype.getSubtypeId('bioAssay');
342          Platforms.loadDataFilesFrame(frames.datafiles, '<%=ID%>', '<%=itemType.name()%>', <%=itemId%>, 0, 0, subtypeId);
343          dataFilesLoaded = true;
344          subtypeChanged = false;
345        }
346      }
347    }
348   
349    function getProtocolId()
350    {
351      var frm = document.forms['bioAssay'];
352      var protocolId = 0;
353      if (frm.protocol_id.length > 0 && !frm.protocol_id.disabled)
354      {
355        protocolId = Math.abs(parseInt(frm.protocol_id[frm.protocol_id.selectedIndex].value));       
356      }
357      return protocolId;
358    }
359   
360    function getParents()
361    {
362      var frm = document.forms['bioAssay'];
363      if (!frm.physicalbioassay_id) return;
364     
365      var parents = new Array();
366      if (frm.isRoot[0].checked)
367      {
368        var bioAssayId = Math.abs(parseInt(frm.physicalbioassay_id[frm.physicalbioassay_id.selectedIndex].value));
369        if (bioAssayId > 0) parents[parents.length] = 'PHYSICALBIOASSAY:'+bioAssayId;
370      }
371      else
372      {
373        var bioAssayId = Math.abs(parseInt(frm.parent_id[frm.parent_id.selectedIndex].value));
374        if (bioAssayId > 0) parents[parents.length] = 'DERIVEDBIOASSAY:'+bioAssayId;
375      }
376      return parents;
377    }
378   
379    function subtypeOnChange()
380    {
381      var frm = document.forms['bioAssay'];
382      var subtypeId = ItemSubtype.getSubtypeId('bioAssay');
383      subtypeChanged = true;
384      var recentInfo = ItemSubtype.getRecentAndRelatedInfo(subtypeId, 'BIOASSAY', ['PROTOCOL', 'HARDWARE', 'SOFTWARE']);
385      protocolChanged = ItemSubtype.updateSelectionList(frm.protocol_id, recentInfo.PROTOCOL['recent'], recentInfo.PROTOCOL['default']);
386      ItemSubtype.updateSelectionList(frm.hardware_id, recentInfo.HARDWARE['recent'], recentInfo.HARDWARE['default']);
387      ItemSubtype.updateSelectionList(frm.software_id, recentInfo.SOFTWARE['recent'], recentInfo.SOFTWARE['default']);
388    }
389
390   
391    function selectProtocolOnClick()
392    {
393      var frm = document.forms['bioAssay'];
394      var url = '../../admin/protocols/index.jsp?ID=<%=ID%>&cmd=UpdateContext&mode=selectone';
395      url += '&callback=setProtocolCallback&resetTemporary=1';
396      url += ItemSubtype.createRelatedFilter('bioAssay', 'PROTOCOL');
397      if (frm.protocol_id.length > 1)
398      {
399        var id = Math.abs(parseInt(frm.protocol_id[1].value));       
400        url += '&item_id='+id;
401      }
402      Main.openPopup(url, 'SelectProtocol', 1000, 700);
403    }
404    function setProtocolCallback(id, name)
405    {
406      var frm = document.forms['bioAssay'];
407      var list = frm.protocol_id;
408      if (list.length < 2 || list[1].value == '0') // >
409      {
410        Forms.addListOption(list, 1, new Option());
411      }
412      list[1].value = id;
413      list[1].text = name;
414      list.selectedIndex = 1;
415      protocolChanged = true;
416    }
417    function protocolOnChange()
418    {
419      protocolChanged = true;
420    }
421   
422    function selectPhysicalBioAssayOnClick()
423    {
424      var frm = document.forms['bioAssay'];
425      var url = '../physicalbioassays/index.jsp?ID=<%=ID%>&cmd=UpdateContext&mode=selectone';
426      url += '&callback=setPhysicalBioAssayCallback&resetTemporary=1';
427      url += ItemSubtype.createRelatedFilter('bioAssay', 'PHYSICALBIOASSAY');
428      if (frm.physicalbioassay_id.selectedIndex >= 0)
429      {
430        var id = Math.abs(parseInt(frm.physicalbioassay_id[frm.physicalbioassay_id.selectedIndex].value));       
431        url += '&item_id='+id;
432      }
433      Main.openPopup(url, 'SelectPhysicalBioAssay', 1000, 700);
434    }
435    function setPhysicalBioAssayCallback(id, name)
436    {
437      var frm = document.forms['bioAssay'];
438      var list = frm.physicalbioassay_id;
439      if (list.length < 1 || list[0].value == '0') // >
440      {
441        Forms.addListOption(list, 0, new Option());
442      }
443      list[0].value = id;
444      list[0].text = name;
445      list.selectedIndex = 0;
446      physicalBioAssayOnChange();
447    }
448    function physicalBioAssayOnChange()
449    {
450      parentsChanged = true;
451      var frm = document.forms['bioAssay'];
452      initExtracts();
453    }
454   
455    function selectParentBioAssayOnClick()
456    {
457      var frm = document.forms['bioAssay'];
458      var url = 'index.jsp?ID=<%=ID%>&cmd=UpdateContext&mode=selectone';
459      url += '&callback=setParentBioAssayCallback&resetTemporary=1';
460      url += ItemSubtype.createRelatedFilter('bioAssay', 'DERIVEDBIOASSAY');
461      if (frm.parent_id.selectedIndex >= 0)
462      {
463        var id = Math.abs(parseInt(frm.physicalbioassay_id[frm.parent_id.selectedIndex].value));       
464        url += '&item_id='+id;
465      }
466      Main.openPopup(url, 'SelectParentBioAssay', 1000, 700);
467    }
468    function setParentBioAssayCallback(id, name)
469    {
470      var frm = document.forms['bioAssay'];
471      var list = frm.parent_id;
472      if (list.length < 1 || list[0].value == '0') // >
473      {
474        Forms.addListOption(list, 0, new Option());
475      }
476      list[0].value = id;
477      list[0].text = name;
478      list.selectedIndex = 0;
479      parentsChanged = true;
480    }
481    function parentBioAssayOnChange()
482    {
483      parentsChanged = true;
484    }
485   
486    function selectHardwareOnClick()
487    {
488      var frm = document.forms['bioAssay'];
489      var url = '../../admin/hardware/index.jsp?ID=<%=ID%>&cmd=UpdateContext&mode=selectone';
490      url += '&callback=setHardwareCallback&resetTemporary=1';
491      url += ItemSubtype.createRelatedFilter('bioAssay', 'HARDWARE');
492      if (frm.hardware_id.length > 1)
493      {
494        var id = Math.abs(parseInt(frm.hardware_id[1].value));       
495        url += '&item_id='+id;
496      }
497      Main.openPopup(url, 'SelectHardware', 1000, 700);
498    }
499    function setHardwareCallback(id, name)
500    {
501      var frm = document.forms['bioAssay'];
502      var list = frm.hardware_id;
503      if (list.length < 2 || list[1].value == '0') // >
504      {
505        Forms.addListOption(list, 1, new Option());
506      }
507      list[1].value = id;
508      list[1].text = name;
509      list.selectedIndex = 1;
510    }
511    function selectSoftwareOnClick()
512    {
513      var frm = document.forms['bioAssay'];
514      var url = '../../admin/software/index.jsp?ID=<%=ID%>&cmd=UpdateContext&mode=selectone';
515      url += '&callback=setSoftwareCallback&resetTemporary=1';
516      url += ItemSubtype.createRelatedFilter('bioAssay', 'SOFTWARE');
517      if (frm.software_id.length > 1)
518      {
519        var id = Math.abs(parseInt(frm.software_id[1].value));       
520        url += '&item_id='+id;
521      }
522      Main.openPopup(url, 'SelectSoftware', 1000, 700);
523    }
524    function setSoftwareCallback(id, name)
525    {
526      var frm = document.forms['bioAssay'];
527      var list = frm.software_id;
528      if (list.length < 2 || list[1].value == '0') // >
529      {
530        Forms.addListOption(list, 1, new Option());
531      }
532      list[1].value = id;
533      list[1].text = name;
534      list.selectedIndex = 1;
535    }
536
537    function init()
538    {
539      var frm = document.forms['bioAssay'];
540      <%
541      if (bioAssay == null)
542      {
543        %>
544        frm.name.focus();
545        frm.name.select();
546        <%
547      }
548      %>
549      if (frm.isRoot)
550      {
551        isRootOnChange();
552      }
553      else
554      {
555        initExtracts();
556      }
557    }
558   
559    function isRootOnChange()
560    {
561      var frm = document.forms['bioAssay'];
562      var isRoot = frm.isRoot[0].checked;
563      Main.showHide('physicalBioAssaySection', isRoot);
564      Main.showHide('parentBioAssaySection', !isRoot);
565      initExtracts();
566    }
567   
568    function initExtracts()
569    {
570      var frm = document.forms['bioAssay'];
571      frm.extract_id.length = 0;
572      var extracts;
573      <%
574      if (bioAssay == null)
575      {
576        %>
577        if (frm.isRoot[0].checked)
578        {
579          extracts = getExtractsFromPhysicalBioAssay(frm.physicalbioassay_id[frm.physicalbioassay_id.selectedIndex].value);
580        }
581        else
582        {
583          extracts = getExtractsFromParentBioassay(frm.parent_id[frm.parent_id.selectedIndex].value);
584        }
585        <%
586      }
587      else
588      {
589        if (currentParentBioAssay != null)
590        {
591          %>
592          extracts = getExtractsFromParentBioassay(<%=currentParentBioAssay.getId()%>);
593          <%
594        }
595        else if (currentPhysicalBioAssay != null)
596        {
597          %>
598          extracts = getExtractsFromPhysicalBioAssay(<%=currentPhysicalBioAssay.getId()%>);
599          <%
600        }
601      }
602      %>
603
604      var frm = document.forms['bioAssay'];
605      frm.extract_id.length = 0;
606      frm.extract_id[frm.extract_id.length] = new Option('- none -', 0);
607      var currentExtractId = <%=currentExtract == null ? 0 : currentExtract.getId()%>;
608      var currentWasFound = 0;
609      for (var i = 0; i < extracts.length; i++)
610      {
611        var position = extracts[i].position;
612        var prefix = position ? position + ': ' : '';
613        frm.extract_id[frm.extract_id.length] = new Option(prefix + extracts[i].name, extracts[i].id);
614        if (currentExtractId == extracts[i].id) 
615        {
616          frm.extract_id.selectedIndex = frm.extract_id.length - 1;
617          currentWasFound = 1;
618        }
619      }
620      <%
621      if (currentExtract != null)
622      {
623        %>
624        if (currentExtractId && !currentWasFound)
625        {
626          frm.extract_id[frm.extract_id.length] = new Option('<%=HTML.javaScriptEncode(currentExtract.getName())%>', currentExtractId);
627          frm.extract_id.selectedIndex = frm.extract_id.length - 1;
628        }
629        <%
630      }
631      %>
632    }
633   
634    function getExtractsFromPhysicalBioAssay(physicalBioAssayId)
635    {
636      var request = Ajax.getXmlHttpRequest();
637      var url = '../physicalbioassays/ajax.jsp?ID=<%=ID%>&cmd=GetSources';
638      url += '&item_id=' + physicalBioAssayId;
639      request.open("GET", url, false);
640      request.send(null);
641     
642      var response = JSON.parse(request.responseText);
643      if (response.status != 'ok')
644      {
645        alert(response.message);
646        return;
647      }
648      return response.sources;
649    }
650 
651    function getExtractsFromParentBioassay(bioAssayId)
652    {
653      var request = Ajax.getXmlHttpRequest();
654      var url = 'ajax.jsp?ID=<%=ID%>&cmd=GetExtracts';
655      url += '&item_id=' + bioAssayId;
656      request.open("GET", url, false);
657      request.send(null);
658
659      var response = JSON.parse(request.responseText);
660      if (response.status != 'ok')
661      {
662        alert(response.message);
663        return;
664      }
665     
666      return response.sources;
667    }
668    </script>
669  </base:head>
670  <base:body onload="init()">
671    <p>
672    <form action="index.jsp?ID=<%=ID%>" method="post" name="bioAssay" onsubmit="return false;">
673    <input type="hidden" name="cmd" value="UpdateItem">
674
675    <h3 class="docked"><%=title%> <base:help tabcontrol="settings" /></h3>
676    <t:tabcontrol id="settings" contentstyle="<%="height: "+(int)(scale*370)+"px;"%>" 
677      position="bottom"  remember="<%=bioAssay != null%>" switch="switchTab"
678      extensions="<%=invoker%>">
679    <t:tab id="info" title="Bioassay" validate="validateBioAssay()" helpid="derivedbioassay.edit">
680      <table class="form" cellspacing=0>
681      <tr>
682        <td class="prompt" width="120px">Name</td>
683        <td><input <%=requiredClazz%> type="text" name="name" 
684          value="<%=HTML.encodeTags(bioAssay == null ? Values.getString(cc.getPropertyValue("name"), "New derived bioassay") : bioAssay.getName())%>" 
685          size="40" maxlength="<%=DerivedBioAssay.MAX_NAME_LENGTH%>"></td>
686      </tr>
687
688      <tr valign="top">
689        <td class="prompt">Type</td>
690        <td colspan="2">
691          <select name="subtype_id"
692            <%=!readCurrentSubtype ? "disabled readonly class=\"disabled selectionlist\"" : "class=\"selectionlist\""%>
693            onchange="subtypeOnChange()"
694            >
695          <%
696          if (!readCurrentSubtype)
697          {
698            %>
699            <option value="-1">- denied -
700            <%
701          }
702          else
703          {
704            %>
705            <option value="0">-none-
706            <%
707            int currentSubtypeId = currentSubtype == null ? 0 : currentSubtype.getId();
708            for (ItemSubtype subtype : subtypesQuery.list(dc))
709            {
710              int id = subtype.getId();
711              if (id != currentSubtypeId && subtype.isRemoved()) continue;
712              %>
713              <option value="<%=id == currentSubtypeId && bioAssay != null ? -id : id%>" 
714                <%=id == currentSubtypeId ? "selected" : ""%>
715                title="<%=HTML.encodeTags(subtype.getDescription()) %>"
716                ><%=HTML.encodeTags(subtype.getName())%>
717              <%
718            }
719          }
720          %>
721          </select>
722        </td>
723      </tr>
724      <%
725      if (bioAssay == null)
726      {
727        %>
728        <tr>
729          <td class="prompt">Parent type</td>
730          <td>
731            <input id="isRoot" type="radio" name="isRoot" value="1" 
732              <%=currentParentBioAssay == null ? "checked" : "" %>
733              onchange="isRootOnChange()"><label for="isRoot">Physical bioassay</label>
734            <input id="isChild" type="radio" name="isRoot" value="0"
735              <%=currentParentBioAssay == null ? "" : "checked" %>
736              onchange="isRootOnChange()"><label for="isChild">Derived bioassay</label><br>
737          </td>
738        </tr>
739        <tr id="physicalBioAssaySection" style="display: none;">
740          <td class="subprompt">-physical bioassay</td>
741          <td>
742            <base:select 
743              id="physicalbioassay_id"
744              clazz="selectionlist unchangeable"
745              required="true"
746              current="<%=currentPhysicalBioAssay%>"
747              recent="<%=recentPhysicalBioAssays%>"
748              newitem="true"
749              onselect="selectPhysicalBioAssayOnClick()"
750              onchange="physicalBioAssayOnChange()"
751            />
752          </td>
753        </tr>
754        <tr id="parentBioAssaySection" style="display: none;">
755          <td class="subprompt">-bioassay</td>
756          <td>
757            <base:select 
758              id="parent_id"
759              clazz="selectionlist unchangeable"
760              required="true"
761              current="<%=currentParentBioAssay%>"
762              recent="<%=recentParentBioAssays%>"
763              newitem="true"
764              onselect="selectParentBioAssayOnClick()"
765              onchange="parentBioAssayOnChange()"
766            />
767          </td>
768        </tr>
769        <%
770      }
771      %>
772      <tr>
773        <td class="prompt">Extract</td>
774        <td>
775          <select name="extract_id" class="selectionlist"></select>
776        </td>
777      </tr>
778      <tr>
779        <td class="prompt">Protocol</td>
780        <td>
781          <base:select 
782            id="protocol_id"
783            clazz="selectionlist"
784            required="false"
785            current="<%=currentProtocol%>"
786            denied="<%=!readCurrentProtocol%>"
787            recent="<%=recentProtocols%>"
788            defaultitems="<%=defaultProtocols%>"
789            newitem="<%=bioAssay == null%>"
790            onselect="selectProtocolOnClick()"
791            onchange="protocolOnChange()"
792          />
793        </td>
794      </tr>
795      <tr>
796        <td class="prompt">Hardware</td>
797        <td>
798          <base:select 
799            id="hardware_id"
800            clazz="selectionlist"
801            required="false"
802            current="<%=currentHardware%>"
803            denied="<%=!readCurrentHardware%>"
804            recent="<%=recentHardware%>"
805            defaultitems="<%=defaultHardware%>"
806            newitem="<%=bioAssay == null%>"
807            onselect="selectHardwareOnClick()"
808          />
809        </td>
810      </tr>
811      <tr>
812        <td class="prompt">Software</td>
813        <td>
814          <base:select 
815            id="software_id"
816            clazz="selectionlist"
817            required="false"
818            current="<%=currentSoftware%>"
819            denied="<%=!readCurrentSoftware%>"
820            recent="<%=recentSoftware%>"
821            defaultitems="<%=defaultSoftware%>"
822            newitem="<%=bioAssay == null%>"
823            onselect="selectSoftwareOnClick()"
824          />
825        </td>
826      </tr>
827
828      <tr valign=top>
829        <td class="prompt">Description</td>
830        <td nowrap>
831          <textarea <%=clazz%> rows="4" cols="40" name="description" wrap="virtual"
832            ><%=HTML.encodeTags(bioAssay == null ? cc.getPropertyValue("description") : bioAssay.getDescription())%></textarea>
833          <a href="javascript:Main.zoom('Description', 'bioAssay', 'description')"
834            title="Edit in larger window"><base:icon image="zoom.gif" /></a>
835        </td>
836      </tr>
837      </table>
838      <div align=right>&nbsp;<i><base:icon image="required.gif" /> = required information</i>
839      <%if (bioAssay == null) {%><br>
840        <i><base:icon image="unchangeable.gif" /> = can't be changed later</i>
841      <%}%>
842      </div>
843    </t:tab>
844
845    <t:tab id="datafiles" title="Data files" helpid="datafiles.edit">
846      <iframe name="datafiles" id="idDatafiles" src="../../common/datafiles/wait.jsp" 
847        width="100%"  height="<%=(int)(scale*370)%>" frameborder=0 vspace=0 hspace=0
848        marginwidth=0 marginheight=0 scrolling="auto" style="overflow: visible"></iframe>
849    </t:tab>
850
851    <t:tab id="annotations" title="Annotations" 
852      helpid="annotations.edit" tooltip="Enter values for annotations">
853      <iframe name="annotations" id="idAnnotations" src="../../common/annotations/wait.jsp" 
854        width="100%"  height="<%=(int)(scale*370)%>" frameborder=0 vspace=0 hspace=0
855        marginwidth=0 marginheight=0 scrolling="auto" style="overflow: visible"></iframe>
856    </t:tab>
857   
858    <t:tab id="inheritedAnnotations" title="Inherited annotations" helpid="annotations.edit.inherited">
859      <iframe name="inheritedAnnotations" id="idInheritedAnnotations" src="../../common/annotations/wait.jsp" 
860        width="100%"  height="<%=(int)(scale*370)%>" frameborder=0 vspace=0 hspace=0
861        marginwidth=0 marginheight=0 scrolling="auto" style="overflow: visible"></iframe>
862    </t:tab>
863    </t:tabcontrol>
864
865    <table align="center">
866    <tr>
867      <td width="50%"><base:button onclick="saveSettings()" title="Save" /></td>
868      <td width="50%"><base:button onclick="window.close()" title="Cancel" /></td>
869    </tr>
870    </table>
871    </form>
872  </base:body>
873  </base:page>
874  <%
875}
876finally
877{
878  if (dc != null) dc.close();
879}
880%>
Note: See TracBrowser for help on using the repository browser.