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

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

References #1730: Move in-page onEvent attributes to external *.js files

Got rid of 'clazz' and 'requiredClazz' string constatns used in several JSP scripts. Better to specify class="" directly on each element since there are cases were we want to add more variants.

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