source: trunk/www/views/rawbioassays/edit_rawbioassay.jsp @ 5712

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

References #1597: Subtypes of items

Fixes a NPE when there is no active project.

  • Property svn:eol-style set to native
  • Property svn:keywords set to Date Id
File size: 27.5 KB
Line 
1<%-- $Id: edit_rawbioassay.jsp 5712 2011-09-01 06:49:31Z nicklas $
2  ------------------------------------------------------------------
3  Copyright (C) 2005 Nicklas Nordborg
4  Copyright (C) 2006 Jari Häkkinen, Nicklas Nordborg, Martin Svensson
5  Copyright (C) 2007 Nicklas Nordborg
6
7  This file is part of BASE - BioArray Software Environment.
8  Available at http://base.thep.lu.se/
9
10  BASE is free software; you can redistribute it and/or
11  modify it under the terms of the GNU General Public License
12  as published by the Free Software Foundation; either version 3
13  of the License, or (at your option) any later version.
14
15  BASE is distributed in the hope that it will be useful,
16  but WITHOUT ANY WARRANTY; without even the implied warranty of
17  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
18  GNU General Public License for more details.
19
20  You should have received a copy of the GNU General Public License
21  along with BASE. If not, see <http://www.gnu.org/licenses/>.
22  ------------------------------------------------------------------
23
24
25  @author Nicklas
26  @version 2.0
27--%>
28<%@ page pageEncoding="UTF-8" session="false"
29  import="net.sf.basedb.core.SessionControl"
30  import="net.sf.basedb.core.DbControl"
31  import="net.sf.basedb.core.Item"
32  import="net.sf.basedb.core.ItemContext"
33  import="net.sf.basedb.core.SystemItems"
34  import="net.sf.basedb.core.Permission"
35  import="net.sf.basedb.core.RawBioAssay"
36  import="net.sf.basedb.core.Platform"
37  import="net.sf.basedb.core.PlatformVariant"
38  import="net.sf.basedb.core.Protocol"
39  import="net.sf.basedb.core.Project"
40  import="net.sf.basedb.core.Software"
41  import="net.sf.basedb.core.ArrayDesign"
42  import="net.sf.basedb.core.Extract"
43  import="net.sf.basedb.core.DerivedBioAssay"
44  import="net.sf.basedb.core.ItemSubtype"
45  import="net.sf.basedb.core.File"
46  import="net.sf.basedb.core.RawDataType"
47  import="net.sf.basedb.core.RawDataTypes"
48  import="net.sf.basedb.core.ItemQuery"
49  import="net.sf.basedb.core.ItemResultList"
50  import="net.sf.basedb.core.PermissionDeniedException"
51  import="net.sf.basedb.core.BaseException"
52  import="net.sf.basedb.core.query.Orders"
53  import="net.sf.basedb.core.query.Hql"
54  import="net.sf.basedb.clients.web.Base"
55  import="net.sf.basedb.clients.web.util.HTML"
56  import="net.sf.basedb.util.Values"
57  import="net.sf.basedb.core.Include"
58  import="net.sf.basedb.core.plugin.GuiContext"
59  import="net.sf.basedb.clients.web.extensions.ExtensionsControl"
60  import="net.sf.basedb.clients.web.extensions.JspContext"
61  import="net.sf.basedb.clients.web.extensions.edit.EditUtil"
62  import="net.sf.basedb.util.extensions.ExtensionsInvoker"
63  import="java.util.List"
64  import="java.util.Set"
65  import="java.util.HashSet"
66%>
67<%@ taglib prefix="base" uri="/WEB-INF/base.tld" %>
68<%@ taglib prefix="t" uri="/WEB-INF/tab.tld" %>
69<%
70final Item itemType = Item.RAWBIOASSAY;
71final SessionControl sc = Base.getExistingSessionControl(pageContext, true);
72final ItemContext cc = Base.getAndSetCurrentContext(sc, itemType, null, null);
73final String tabId = Values.getString(request.getParameter("tab"), null);
74final int itemId = cc.getId();
75final String ID = sc.getId();
76final float scale = Base.getScale(sc);
77final DbControl dc = sc.newDbControl();
78try
79{
80  String title = null;
81  RawBioAssay rawBioAssay = null;
82  String name = null;
83  boolean hasDbSpots = false;
84
85  boolean deniedPlatform = false;
86  Platform currentPlatform = null;
87  List<Platform> defaultPlatforms = null;
88  PlatformVariant currentVariant = null;
89  List<PlatformVariant> defaultVariants = null;
90 
91  boolean readCurrentBioAssay = true;
92  DerivedBioAssay currentBioAssay = null;
93  boolean readCurrentExtract = true;
94  Extract currentExtract = null;
95  boolean readCurrentProtocol = true;
96  Protocol currentProtocol = null;
97  List<Protocol> defaultProtocols = null;
98  boolean readCurrentSoftware = true;
99  Software currentSoftware = null;
100  List<Software> defaultSoftware = null;
101  boolean readCurrentArrayDesign = true;
102  ArrayDesign currentArrayDesign = null;
103  List<ArrayDesign> defaultArrayDesigns = null;
104  RawDataType currentRawDataType = null;
105  RawDataType defaultRawDataType = null;
106
107  // Load recently used items
108  List<Protocol> recentProtocols = (List<Protocol>)cc.getRecent(dc, Item.PROTOCOL);
109  List<Software> recentSoftware = (List<Software>)cc.getRecent(dc, Item.SOFTWARE);
110  List<ArrayDesign> recentArrayDesigns = (List<ArrayDesign>)cc.getRecent(dc, Item.ARRAYDESIGN);
111  List<File> recentFiles = (List<File>)cc.getRecent(dc, Item.FILE);
112  List<DerivedBioAssay> recentBioAssays = (List<DerivedBioAssay>)cc.getRecent(dc, Item.DERIVEDBIOASSAY);
113  List<Extract> recentExtracts = (List<Extract>)cc.getRecent(dc, Item.EXTRACT);
114 
115  int activeProjectId = sc.getActiveProjectId();
116  if (activeProjectId > 0)
117  {
118    Project activeProject = Project.getById(dc, activeProjectId);
119    try
120    {
121      defaultProtocols = (List<Protocol>)activeProject.findDefaultItems(dc, 
122          ItemSubtype.getById(dc, SystemItems.getId(Protocol.FEATURE_EXTRACTION)), false);
123    }
124    catch (PermissionDeniedException pdex)
125    {}
126    try
127    {
128      defaultSoftware = (List<Software>)activeProject.findDefaultItems(dc, 
129          ItemSubtype.getById(dc, SystemItems.getId(Software.FEATURE_EXTRACTION)), false);
130    }
131    catch (PermissionDeniedException pdex)
132    {}
133    try
134    {
135      defaultArrayDesigns = (List<ArrayDesign>)activeProject.findDefaultItems(dc, Item.ARRAYDESIGN, true);
136    }
137    catch (PermissionDeniedException pdex)
138    {}
139    try
140    {
141      defaultPlatforms = (List<Platform>)activeProject.findDefaultItems(dc, Item.PLATFORM, true);
142    }
143    catch (PermissionDeniedException pdex)
144    {}
145    try
146    {
147      defaultVariants = (List<PlatformVariant>)activeProject.findDefaultItems(dc, Item.PLATFORMVARIANT, true);
148    }
149    catch (PermissionDeniedException pdex)
150    {}
151    defaultRawDataType = activeProject.getDefaultRawDataType();
152  }
153  if (itemId == 0)
154  {
155    title = "Create raw bioassay";
156    cc.removeObject("item");
157   
158    int currentPlatformId = Values.getInt(cc.getPropertyValue("platform"), 0);
159    if (currentPlatformId == 0)
160    {
161      currentPlatformId = Values.getInt(cc.getRecent(Item.PLATFORM.name(), 0), 0);
162    }
163    int currentVariantId = Values.getInt(cc.getRecent(Item.PLATFORMVARIANT.name(), 0), 0);
164   
165    try
166    {
167      if (currentVariantId != 0) currentVariant = PlatformVariant.getById(dc, currentVariantId);
168      if (currentPlatformId != 0) currentPlatform = Platform.getById(dc, currentPlatformId);
169    }
170    catch (Throwable t)
171    {}
172    if (currentPlatform == null && defaultPlatforms != null && defaultPlatforms.size() > 0) 
173    {
174      currentPlatform = defaultPlatforms.get(0);
175    }
176    if (currentVariant == null && defaultVariants != null && defaultVariants.size() > 0)
177    {
178      currentVariant = defaultVariants.get(0);
179    }
180   
181    currentRawDataType = RawDataTypes.getRawDataType(cc.getPropertyValue("rawDataType"));
182    if (currentRawDataType == null)
183    {
184      currentRawDataType = RawDataTypes.getRawDataType(cc.getRecent("RawDataType", 0));
185    }
186    if (currentRawDataType == null) currentRawDataType = defaultRawDataType;
187
188   
189    int bioAssayId = Values.getInt(request.getParameter("bioassay_id"));
190    if (bioAssayId != 0)
191    {
192      currentBioAssay = DerivedBioAssay.getById(dc, bioAssayId);
193    }
194    else if (cc.getPropertyFilter("derivedBioAssay.name") != null)
195    {
196      currentBioAssay = Base.getFirstMatching(dc, DerivedBioAssay.getQuery(), "name", cc.getPropertyFilter("derivedBioAssay.name"));
197    }
198
199    if (currentBioAssay != null)
200    {
201      name = currentBioAssay.getName() + ".r" + (currentBioAssay.countRawBioAssays() + 1);
202    }
203    else
204    {
205      name = Values.getString(cc.getPropertyValue("name"), "New raw bioassay");
206    }
207
208    if (cc.getPropertyFilter("protocol.name") != null)
209    {
210      currentProtocol = Base.getFirstMatching(dc, Protocol.getQuery(), "name", cc.getPropertyFilter("protocol.name"));
211    }
212   
213    if (cc.getPropertyFilter("software.name") != null)
214    {
215      currentSoftware = Base.getFirstMatching(dc, Software.getQuery(), "name", cc.getPropertyFilter("software.name"));
216    }
217
218    if (currentBioAssay != null)
219    {
220      try
221      {
222        currentArrayDesign = currentBioAssay.getArrayDesign();
223      }
224      catch (PermissionDeniedException ex)
225      {}
226      try
227      {
228        currentExtract = currentBioAssay.getExtract();
229      }
230      catch (PermissionDeniedException ex)
231      {}
232    }
233    if (currentArrayDesign == null && cc.getPropertyFilter("arrayDesign.name") != null)
234    {
235      currentArrayDesign = Base.getFirstMatching(dc, ArrayDesign.getQuery(), "name", cc.getPropertyFilter("arrayDesign.name"));
236    }
237  }
238  else
239  {
240    rawBioAssay = RawBioAssay.getById(dc, itemId);
241    rawBioAssay.checkPermission(Permission.WRITE);
242    hasDbSpots = rawBioAssay.getNumDbSpots() > 0;
243    cc.setObject("item", rawBioAssay);
244    name = rawBioAssay.getName();
245    try
246    {
247      currentRawDataType = rawBioAssay.getRawDataType();
248    }
249    catch (Throwable t)
250    {}
251    title = "Edit raw bioassay -- " + HTML.encodeTags(rawBioAssay.getName());
252   
253    try
254    {
255      currentPlatform = rawBioAssay.getPlatform();
256      currentVariant = rawBioAssay.getVariant();
257    }
258    catch (PermissionDeniedException ex)
259    {
260      deniedPlatform = true;
261    }
262   
263    try
264    {
265      currentBioAssay = rawBioAssay.getParentBioAssay();
266    }
267    catch (PermissionDeniedException ex)
268    {
269      readCurrentBioAssay = false;
270    }
271    try
272    {
273      currentExtract = rawBioAssay.getParentExtract();
274    }
275    catch (PermissionDeniedException ex)
276    {
277      readCurrentExtract = false;
278    }
279    try
280    {
281      currentProtocol = rawBioAssay.getProtocol();
282    }
283    catch (PermissionDeniedException ex)
284    {
285      readCurrentProtocol = false;
286    }
287    try
288    {
289      currentSoftware = rawBioAssay.getSoftware();
290    }
291    catch (PermissionDeniedException ex)
292    {
293      readCurrentSoftware = false;
294    }
295    try
296    {
297      currentArrayDesign = rawBioAssay.getArrayDesign();
298    }
299    catch (PermissionDeniedException ex)
300    {
301      readCurrentArrayDesign = false;
302    }
303  }
304 
305  ItemQuery<Platform> platformQuery = Platform.getQuery();
306  platformQuery.include(Include.REMOVED, Include.NOT_REMOVED);
307  platformQuery.order(Orders.asc(Hql.property("name")));
308  platformQuery.setCacheResult(true);
309  ItemResultList<Platform> platforms = platformQuery.list(dc);
310
311  ItemQuery<PlatformVariant> variantQuery = PlatformVariant.getQuery();
312  variantQuery.include(Include.REMOVED, Include.NOT_REMOVED);
313  variantQuery.order(Orders.asc(Hql.property("name")));
314  variantQuery.setCacheResult(true);
315  ItemResultList<PlatformVariant> variants = variantQuery.list(dc);
316 
317  final String clazz = "class=\"text\"";
318  final String requiredClazz = "class=\"text required\"";
319  JspContext jspContext = ExtensionsControl.createContext(dc, pageContext, GuiContext.item(itemType), rawBioAssay);
320  ExtensionsInvoker invoker = EditUtil.useEditExtensions(jspContext);
321  %>
322  <base:page type="popup" title="<%=title%>">
323  <base:head scripts="tabcontrol.js,annotations.js,platforms.js,ajax.js,json2.js" styles="tabcontrol.css">
324    <ext:scripts context="<%=jspContext%>" />
325    <ext:stylesheets context="<%=jspContext%>" />
326    <script language="JavaScript">
327    // Validate the "RawBioAssay" tab
328    function validateRawBioAssay()
329    {
330      var frm = document.forms['rawbioassay'];
331      if (Main.trimString(frm.name.value) == '')
332      {
333        alert("You must enter a name");
334        frm.name.focus();
335        return false;
336      }
337      return true;
338    }
339
340    // Submit the form
341    function saveSettings()
342    {
343      var frm = document.forms['rawbioassay'];
344      if (TabControl.validateActiveTab('settings'))
345      {
346        if (annotationsLoaded)
347        {
348          Annotations.addModifiedAnnotationsToForm(frames.annotations, frm);
349        }
350        if (inheritedAnnotationsLoaded)
351        {
352          Annotations.addInheritedAnnotationsToForm(frames.inheritedAnnotations, frm);
353        }
354        if (dataFilesLoaded)
355        {
356          Platforms.addDataFilesToForm(frames.datafiles, frm);
357        }
358        frm.submit();
359      }
360    }
361   
362    var annotationsLoaded = false;
363    var inheritedAnnotationsLoaded = false;
364    var parentsChanged = false;
365    var protocolChanged = false;
366    var dataFilesLoaded = false;
367    var platformChanged = false;
368    function switchTab(tabControlId, tabId)
369    {
370      var frm = document.forms['rawbioassay'];
371      if (TabControl.setActiveTab(tabControlId, tabId))
372      {
373        if (tabId == 'annotations' && (protocolChanged || !annotationsLoaded))
374        {
375          Annotations.loadAnnotateFrame(frames.annotations, '<%=ID%>', '<%=itemType.name()%>', <%=rawBioAssay == null ? 0 : rawBioAssay.getId()%>, getProtocolId());
376          annotationsLoaded = true;
377          protocolChanged = false;
378        }
379        else if (tabId == 'inheritedAnnotations' && 
380          (parentsChanged || !inheritedAnnotationsLoaded))
381        {
382          Annotations.loadInheritFrame(frames.inheritedAnnotations, '<%=ID%>', '<%=itemType.name()%>', <%=itemId%>, getParents());
383          inheritedAnnotationsLoaded = true;
384          parentsChanged = false;
385        }
386        else if (tabId == 'datafiles' && (platformChanged || !dataFilesLoaded))
387        {
388          var platform = Platforms.getSelectedPlatform(frm.platform);
389          var variant = Platforms.getSelectedVariant(frm.platform);
390          Platforms.loadDataFilesFrame(frames.datafiles, '<%=ID%>', '<%=itemType.name()%>', <%=rawBioAssay == null ? 0 : rawBioAssay.getId()%>, platform == null ? 0 : platform.id, variant == null ? 0 : variant.id);
391          dataFilesLoaded = true;
392          platformChanged = false;
393        }
394      }
395    }
396
397    function platformOnChange()
398    {
399      var frm = document.forms['rawbioassay'];
400      platformChanged = true;
401      var platform = Platforms.getSelectedPlatform(frm.platform);
402      var variant = Platforms.getSelectedVariant(frm.platform);
403      var fileOnly = (variant != null && variant.fileOnly) ||
404        (variant == null && platform.fileOnly);
405      var rawDataType = variant == null ? platform.rawDataType : variant.rawDataType;
406      if (frm.rawdatatype[frm.rawdatatype.length - 1].value == '')
407      {
408        frm.rawdatatype[frm.rawdatatype.length - 1] = null;
409      }
410      if (fileOnly)
411      {
412        frm.rawdatatype.disabled = true;
413        Main.removeClass(frm.rawdatatype, 'required');
414        frm.rawdatatype[frm.rawdatatype.length] = new Option('- file only -', '');
415        frm.rawdatatype.selectedIndex = frm.rawdatatype.length - 1;
416      }
417      else if (rawDataType)
418      {
419        frm.rawdatatype.disabled = true;
420        Main.removeClass(frm.rawdatatype, 'required');
421        Forms.selectListOption(frm.rawdatatype, rawDataType);
422      }
423      else
424      {
425        frm.rawdatatype.disabled = <%=hasDbSpots ? "true" : "false"%>;
426        Main.addClass(frm.rawdatatype, 'required');
427      }
428    }
429
430    function getProtocolId()
431    {
432      var frm = document.forms['rawbioassay'];
433      var protocolId = 0;
434      if (frm.protocol_id.length > 0 && !frm.protocol_id.disabled)
435      {
436        protocolId = Math.abs(parseInt(frm.protocol_id[frm.protocol_id.selectedIndex].value));       
437      }
438      return protocolId;
439    }
440
441    function getParents()
442    {
443      var frm = document.forms['rawbioassay'];
444      var parents = new Array();
445
446      var bioAssayId = Math.abs(parseInt(frm.bioassay_id[frm.bioassay_id.selectedIndex].value));
447      if (bioAssayId > 0) parents[parents.length] = 'DERIVEDBIOASSAY:'+bioAssayId;
448      var extractId = Math.abs(parseInt(frm.bioassay_id[frm.extract_id.selectedIndex].value));
449      if (extractId > 0) parents[parents.length] = 'EXTRACT:'+extractId;
450      if (frm.arraydesign_id)
451      {
452        var arrayDesignId = Math.abs(parseInt(frm.arraydesign_id[frm.arraydesign_id.selectedIndex].value));
453        if (arrayDesignId > 0) parents[parents.length] = 'ARRAYDESIGN:'+arrayDesignId;
454      }
455      return parents;
456    }
457
458    function selectProtocolOnClick()
459    {
460      var frm = document.forms['rawbioassay'];
461      var url = '../../admin/protocols/index.jsp?ID=<%=ID%>&cmd=UpdateContext&mode=selectone&callback=setProtocolCallback';
462      if (frm.protocol_id.length > 1)
463      {
464        var id = Math.abs(parseInt(frm.protocol_id[1].value));
465        url += '&item_id='+id;
466      }
467      url += '&resetTemporary=1&tmpfilter:INT:itemSubtype=<%=SystemItems.getId(Protocol.FEATURE_EXTRACTION)%>';
468      Main.openPopup(url, 'SelectProtocol', 1000, 700);
469    }
470    function setProtocolCallback(id, name)
471    {
472      var frm = document.forms['rawbioassay'];
473      var list = frm.protocol_id;
474      if (list.length < 2 || list[1].value == '0') // >
475      {
476        Forms.addListOption(list, 1, new Option());
477      }
478      list[1].value = id;
479      list[1].text = name;
480      list.selectedIndex = 1;
481      protocolChanged = true;
482    }
483    function protocolOnChange()
484    {
485      protocolChanged = true;
486    }
487   
488    function bioAssayOnChange()
489    {
490      var frm = document.forms['rawbioassay'];
491      var selectedIndex = frm.bioassay_id.selectedIndex
492      var bioAssayId = frm.bioassay_id[selectedIndex].value;
493      if (bioAssayId > 0) updateArrayDesign(bioAssayId);
494      parentsChanged = true;
495    }
496    function selectBioAssayOnClick()
497    {
498      var frm = document.forms['rawbioassay'];
499      var url = '../derivedbioassays/index.jsp?ID=<%=ID%>&cmd=UpdateContext&mode=selectone&callback=setBioAssayCallback';
500      if (frm.bioassay_id.length > 1)
501      {
502        var id = Math.abs(parseInt(frm.bioassay_id[1].value));
503        url += '&item_id='+id;
504      }
505      Main.openPopup(url, 'SelectDerivedBioAssay', 1000, 700);
506    }
507    function setBioAssayCallback(id, name)
508    {
509      var frm = document.forms['rawbioassay'];
510      var list = frm.bioassay_id;
511      if (list.length < 2 || list[1].value == '0') // >
512      {
513        Forms.addListOption(list, 1, new Option());
514      }
515      list[1].value = id;
516      list[1].text = name;
517      list.selectedIndex = 1;
518      updateArrayDesign(id)
519      parentsChanged = true;
520    }
521
522   
523    function selectSoftwareOnClick()
524    {
525      var frm = document.forms['rawbioassay'];
526      var url = '../../admin/software/index.jsp?ID=<%=ID%>&cmd=UpdateContext&mode=selectone&callback=setSoftwareCallback';
527      if (frm.software_id.length > 1)
528      {
529        var id = Math.abs(parseInt(frm.software_id[1].value));       
530        url += '&item_id='+id;
531      }
532      url += '&resetTemporary=1&tmpfilter:INT:itemSubtype=<%=SystemItems.getId(Software.FEATURE_EXTRACTION)%>';
533      Main.openPopup(url, 'SelectSoftware', 1000, 700);
534    }
535    function setSoftwareCallback(id, name)
536    {
537      var frm = document.forms['rawbioassay'];
538      var list = frm.software_id;
539      if (list.length < 2 || list[1].value == '0') // >
540      {
541        Forms.addListOption(list, 1, new Option());
542      }
543      list[1].value = id;
544      list[1].text = name;
545      list.selectedIndex = 1;
546    }
547   
548    function arrayDesignOnChange()
549    {
550      parentsChanged = true;
551      <%
552      if (rawBioAssay != null && rawBioAssay.getNumDbSpots() > 0)
553      {
554        %>
555        var frm = document.forms['rawbioassay'];
556        var selectedId = frm.arraydesign_id[frm.arraydesign_id.selectedIndex].value;
557        var showFiMethod = (selectedId > 0 && selectedId != <%=currentArrayDesign == null ? 0 : currentArrayDesign.getId()%>);
558        if (showFiMethod)
559        {
560          Main.show('fiMethod');
561        }
562        else
563        {
564          Main.hide('fiMethod');
565        }
566        <%
567      }
568      %>
569    }
570    function selectArrayDesignOnClick()
571    {
572      var frm = document.forms['rawbioassay'];
573      var url = '../../lims/arraydesigns/index.jsp?ID=<%=ID%>&cmd=UpdateContext&mode=selectone&callback=setArrayDesignCallback';
574      if (frm.arraydesign_id.length > 1)
575      {
576        var id = Math.abs(parseInt(frm.arraydesign_id[1].value));       
577        url += '&item_id='+id;
578      }
579      var platform = Platforms.getSelectedPlatform(frm.platform);
580      url += '&resetTemporary=1&tmpfilter:INT:platform='+platform.id;
581      Main.openPopup(url, 'SelectArrayDesign', 1000, 700);
582    }
583    function setArrayDesignCallback(id, name)
584    {
585      var frm = document.forms['rawbioassay'];
586      var list = frm.arraydesign_id;
587      if (list.length < 2 || list[1].value == '0') // >
588      {
589        Forms.addListOption(list, 1, new Option());
590      }
591      list[1].value = id;
592      list[1].text = name;
593      list.selectedIndex = 1;
594      parentsChanged = true;
595      arrayDesignOnChange();
596    }
597   
598    function updateArrayDesign(bioAssayId)
599    {
600      var request = Ajax.getXmlHttpRequest();
601      if (request != null)
602      {
603        var url = '../derivedbioassays/ajax.jsp?ID=<%=ID%>&cmd=GetArrayDesign&item_id=' + bioAssayId;
604        request.open("GET", url, true);
605        Ajax.setReadyStateHandler(request, updateArrayDesignCallback);
606        request.send(null);
607      }
608      return request != null;
609    }
610    function updateArrayDesignCallback(request)
611    {
612      var frm = document.forms['rawbioassay'];
613      var response = Ajax.parseJsonResponse(request.responseText);
614      if (response.status != 'ok')
615      {
616        alert(response.message);
617        return false;
618      }
619     
620      if (response.id)
621      {
622        var designList = frm.arraydesign_id;
623        if (designList.length < 2 || designList[1].value == '0') // >
624        {
625          Forms.addListOption(designList, 1, new Option());
626        }
627        designList[1].value = response.id;
628        designList[1].text = response.name;
629        designList.selectedIndex = 1;
630      }
631    }
632
633    function init()
634    {
635      <%
636      if (rawBioAssay == null)
637      {
638        %>
639        var frm = document.forms['rawbioassay'];
640        frm.name.focus();
641        frm.name.select();
642        <%
643      }
644      %>
645      initPlatforms(<%=currentPlatform == null ? 0 : currentPlatform.getId()%>, <%=currentVariant == null ? 0 : currentVariant.getId()%>);
646      platformOnChange();
647    }
648   
649    function initPlatforms(platformId, variantId)
650    {
651      <%
652      for (Platform p : platforms)
653      {
654        if (!p.isRemoved() || p.equals(currentPlatform))
655        {
656          RawDataType rdt = p.isFileOnly() ? null : p.getRawDataType();
657          %>
658          var p<%=p.getId()%> = new Platform(<%=p.getId()%>, '<%=HTML.javaScriptEncode(p.getExternalId())%>', '<%=HTML.javaScriptEncode(p.getName())%>', <%=p.isFileOnly()%>, '<%=rdt == null ? "" : rdt.getId()%>');
659          <%
660        }
661      }
662      for (PlatformVariant v : variants)
663      {
664        Platform p = v.getPlatform();
665        if ((!v.isRemoved() || v.equals(currentVariant)) && (!p.isRemoved() || p.equals(currentPlatform)))
666        {
667          RawDataType rdt = v.isFileOnly() ? null : v.getRawDataType();
668          %>
669          var v<%=v.getId()%> = new Variant(p<%=p.getId()%>, <%=v.getId()%>, '<%=HTML.javaScriptEncode(v.getExternalId())%>', '<%=HTML.javaScriptEncode(v.getName())%>', <%=v.isFileOnly()%>, '<%=rdt == null ? "" : rdt.getId()%>');
670          <%
671        }
672      }
673      %>
674      var frm = document.forms['rawbioassay'];
675      Platforms.populateList(frm.platform, platformId, variantId);
676    }
677    </script>
678  </base:head>
679  <base:body onload="init()">
680    <p>
681    <form action="index.jsp?ID=<%=ID%>" method="post" name="rawbioassay" onsubmit="return false;">
682    <input type="hidden" name="cmd" value="UpdateItem">
683
684    <h3 class="docked"><%=title%> <base:help tabcontrol="settings" /></h3>
685    <t:tabcontrol id="settings" contentstyle="<%="height: "+(int)(scale*370)+"px;"%>" 
686      position="bottom" active="<%=tabId%>" remember="<%=tabId == null && rawBioAssay != null%>" switch="switchTab"
687      extensions="<%=invoker%>">
688    <t:tab id="info" title="Raw bioassay" validate="validateRawBioAssay()" helpid="rawbioassay.edit">
689      <table class="form" cellspacing=0>
690      <tr>
691        <td class="prompt">Name</td>
692        <td><input <%=requiredClazz%> type="text" name="name" 
693          value="<%=HTML.encodeTags(name)%>" 
694          size="40" maxlength="<%=RawBioAssay.MAX_NAME_LENGTH%>"></td>
695      </tr>
696      <tr>
697        <td class="prompt">Platform</td>
698        <td>
699          <select name="platform" onchange="platformOnChange()" class="required"
700            <%=deniedPlatform || hasDbSpots ? "disabled" : "" %>>
701          <%
702          if (deniedPlatform)
703          {
704            %>
705            <option value="-1">- denied -
706            <%
707          }
708          %>
709          </select>
710        </td>
711      </tr>
712      <tr>
713        <td class="prompt">Raw data type</td>
714        <td>
715          <select name="rawdatatype" class="required"
716            <%=hasDbSpots ? "disabled" : "" %>>
717          <%
718          for (RawDataType rdt : RawDataTypes.getSortedRawDataTypes(new RawDataTypes.NameComparator()))
719          {
720            if (rdt.isStoredInDb())
721            {
722              String selected = rdt.equals(currentRawDataType) ? "selected" : "";
723              %>
724              <option value="<%=rdt.getId()%>" <%=selected%>><%=HTML.encodeTags(rdt.getName())%>
725              <%
726            }
727          }
728          %>
729          </select>
730        </td>
731      </tr>
732      <tr>
733        <td class="prompt">Parent bioassay</td>
734        <td>
735          <base:select 
736            id="bioassay_id"
737            clazz="selectionlist"
738            required="false"
739            current="<%=currentBioAssay%>"
740            denied="<%=!readCurrentBioAssay%>"
741            recent="<%=recentBioAssays%>"
742            newitem="<%=rawBioAssay == null%>"
743            onselect="selectBioAssayOnClick()"
744            onchange="bioAssayOnChange()"
745          />
746        </td>
747      </tr>
748      <tr>
749        <td class="prompt">Parent extract</td>
750        <td>
751          <base:select 
752            id="extract_id"
753            clazz="selectionlist"
754            required="false"
755            current="<%=currentExtract%>"
756            denied="<%=!readCurrentExtract%>"
757            recent="<%=recentExtracts%>"
758            newitem="<%=rawBioAssay == null%>"
759            onselect="selectExtractOnClick()"
760            onchange="extractOnChange()"
761          />
762        </td>
763      </tr>
764      <tr>
765        <td class="prompt">Array design</td>
766        <td>
767          <base:select 
768            id="arraydesign_id"
769            clazz="selectionlist"
770            required="false"
771            current="<%=currentArrayDesign%>"
772            denied="<%=!readCurrentArrayDesign%>"
773            recent="<%=recentArrayDesigns%>"
774            defaultitems="<%=defaultArrayDesigns%>"
775            newitem="<%=rawBioAssay == null%>"
776            onselect="selectArrayDesignOnClick()"
777            onchange="arrayDesignOnChange()"
778          />
779        </td>
780      </tr>
781      <tr id="fiMethod" style="display: none;">
782        <td></td>
783        <td>
784        <select name="fiMethod">
785        <option value="">-auto- (array design decides)
786        <option value="COORDINATES">Coordinates
787        <option value="POSITION">Position
788        <option value="FEATURE_ID">Feature ID (*)
789        </select>
790        <br>
791        Select a method for feature identification. <br>
792        (*) The Feature ID method only works if the raw data is currently
793        connected to an array design which has Feature ID values.
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="<%=rawBioAssay == null%>"
808            onselect="selectProtocolOnClick()"
809            onchange="protocolOnChange()"
810          />
811        </td>
812      </tr>
813      <tr>
814        <td class="prompt">Software</td>
815        <td>
816          <base:select 
817            id="software_id"
818            clazz="selectionlist"
819            required="false"
820            current="<%=currentSoftware%>"
821            denied="<%=!readCurrentSoftware%>"
822            recent="<%=recentSoftware%>"
823            defaultitems="<%=defaultSoftware%>"
824            newitem="<%=rawBioAssay == null%>"
825            onselect="selectSoftwareOnClick()"
826          />
827        </td>
828      </tr>
829      <tr valign=top>
830        <td class="prompt">Description</td>
831        <td nowrap>
832          <textarea <%=clazz%> rows="4" cols="40" name="description" wrap="virtual"
833            ><%=HTML.encodeTags(rawBioAssay == null ? cc.getPropertyValue("description") : rawBioAssay.getDescription())%></textarea>
834          <a href="javascript:Main.zoom('Description', 'rawbioassay', 'description')"
835            title="Edit in larger window"><base:icon image="zoom.gif" /></a>
836        </td>
837      </tr>
838      </table>
839      <div align=right>&nbsp;<i><base:icon image="required.gif" /> = required information</i></div>
840    </t:tab>
841   
842    <t:tab id="datafiles" title="Data files" helpid="datafiles.edit">
843      <iframe name="datafiles" id="idDatafiles" src="../../common/datafiles/wait.jsp" 
844        width="100%"  height="<%=(int)(scale*370)%>" frameborder=0 vspace=0 hspace=0
845        marginwidth=0 marginheight=0 scrolling="auto" style="overflow: visible"></iframe>
846    </t:tab>
847
848    <t:tab id="annotations" title="Annotations &amp; parameters" 
849      helpid="annotations.edit" tooltip="Enter values for annotations and protocol parameters">
850      <iframe name="annotations" id="idAnnotations" src="../../common/annotations/wait.jsp" 
851        width="100%"  height="<%=(int)(scale*370)%>" frameborder=0 vspace=0 hspace=0
852        marginwidth=0 marginheight=0 scrolling="auto" style="overflow: visible"></iframe>
853    </t:tab>
854   
855    <t:tab id="inheritedAnnotations" title="Inherited annotations" helpid="annotations.edit.inherited">
856      <iframe name="inheritedAnnotations" id="idInheritedAnnotations" src="../../common/annotations/wait.jsp" 
857        width="100%"  height="<%=(int)(scale*370)%>" frameborder=0 vspace=0 hspace=0
858        marginwidth=0 marginheight=0 scrolling="auto" style="overflow: visible"></iframe>
859    </t:tab>
860    </t:tabcontrol>
861
862    <table align="center">
863    <tr>
864      <td width="50%"><base:button onclick="saveSettings()" title="Save" /></td>
865      <td width="50%"><base:button onclick="window.close()" title="Cancel" /></td>
866    </tr>
867    </table>
868    </form>
869  </base:body>
870  </base:page>
871  <%
872}
873finally
874{
875  if (dc != null) dc.close();
876}
877%>
Note: See TracBrowser for help on using the repository browser.