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

Last change on this file since 5908 was 5908, checked in by Nicklas Nordborg, 10 years ago

References #1655: GUI improvements

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