source: trunk/www/views/experiments/bioassays/list_bioassays.jsp @ 4974

Last change on this file since 4974 was 4974, checked in by Nicklas Nordborg, 13 years ago

Merged patch release 2.12.1 to the trunk.

  • Property svn:eol-style set to native
  • Property svn:keywords set to Date Id
File size: 20.3 KB
Line 
1<%-- $Id: list_bioassays.jsp 4974 2009-06-15 09:05:06Z nicklas $
2  ------------------------------------------------------------------
3  Copyright (C) 2006 Jari Häkkinen, Nicklas Nordborg, Martin Svensson
4  Copyright (C) 2007 Johan Enell
5
6  This file is part of BASE - BioArray Software Environment.
7  Available at http://base.thep.lu.se/
8
9  BASE is free software; you can redistribute it and/or
10  modify it under the terms of the GNU General Public License
11  as published by the Free Software Foundation; either version 3
12  of the License, or (at your option) any later version.
13
14  BASE is distributed in the hope that it will be useful,
15  but WITHOUT ANY WARRANTY; without even the implied warranty of
16  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
17  GNU General Public License for more details.
18
19  You should have received a copy of the GNU General Public License
20  along with BASE. If not, see <http://www.gnu.org/licenses/>.
21  ------------------------------------------------------------------
22
23  @author Nicklas
24  @version 2.0
25--%>
26<%@ page session="false"
27  import="net.sf.basedb.core.SessionControl"
28  import="net.sf.basedb.core.DbControl"
29  import="net.sf.basedb.core.Item"
30  import="net.sf.basedb.core.ItemContext"
31  import="net.sf.basedb.core.Experiment"
32  import="net.sf.basedb.core.BioAssaySet"
33  import="net.sf.basedb.core.BioAssay"
34  import="net.sf.basedb.core.RawBioAssay"
35  import="net.sf.basedb.core.AnnotationSet"
36  import="net.sf.basedb.core.AnnotationType"
37  import="net.sf.basedb.core.Annotation"
38  import="net.sf.basedb.core.ItemQuery"
39  import="net.sf.basedb.core.ItemResultIterator"
40  import="net.sf.basedb.core.ItemResultList"
41  import="net.sf.basedb.core.Permission"
42  import="net.sf.basedb.core.PluginDefinition"
43  import="net.sf.basedb.core.PermissionDeniedException"
44  import="net.sf.basedb.core.RawDataType"
45  import="net.sf.basedb.core.Type"
46  import="net.sf.basedb.core.Include"
47  import="net.sf.basedb.core.query.Restrictions"
48  import="net.sf.basedb.core.query.Expressions"
49  import="net.sf.basedb.core.query.Orders"
50  import="net.sf.basedb.core.query.Hql"
51  import="net.sf.basedb.core.plugin.GuiContext"
52  import="net.sf.basedb.core.plugin.Plugin"
53  import="net.sf.basedb.util.Tree"
54  import="net.sf.basedb.util.Enumeration"
55  import="net.sf.basedb.util.BioAssaySetUtil"
56  import="net.sf.basedb.clients.web.Base"
57  import="net.sf.basedb.clients.web.ModeInfo"
58  import="net.sf.basedb.clients.web.PermissionUtil"
59  import="net.sf.basedb.clients.web.util.HTML"
60  import="net.sf.basedb.util.Values"
61  import="net.sf.basedb.util.formatter.Formatter"
62  import="net.sf.basedb.clients.web.formatter.FormatterFactory"
63  import="net.sf.basedb.clients.web.extensions.ExtensionsControl"
64  import="net.sf.basedb.clients.web.extensions.JspContext"
65  import="net.sf.basedb.clients.web.extensions.renderer.PrefixSuffixRenderer"
66  import="net.sf.basedb.clients.web.extensions.toolbar.ToolbarUtil"
67  import="net.sf.basedb.util.extensions.ExtensionsInvoker"
68  import="java.util.List"
69  import="java.util.LinkedList"
70  import="java.util.Map"
71  import="java.util.HashMap"
72  import="java.util.Iterator"
73  import="java.util.Collection"
74%>
75<%@ taglib prefix="base" uri="/WEB-INF/base.tld" %>
76<%@ taglib prefix="tbl" uri="/WEB-INF/table.tld" %>
77<%@ taglib prefix="t" uri="/WEB-INF/tab.tld" %>
78<%@ taglib prefix="p" uri="/WEB-INF/path.tld" %>
79<%@ taglib prefix="ext" uri="/WEB-INF/extensions.tld" %>
80<%!
81  private static final Item itemType = Item.BIOASSAY;
82  private static final GuiContext guiContext = new GuiContext(itemType, GuiContext.Type.LIST);
83%>
84<%
85final int bioAssaySetId = Values.getInt(request.getParameter("bioassayset_id"));
86final SessionControl sc = Base.getExistingSessionControl(pageContext, Permission.DENIED, itemType);
87final String ID = sc.getId();
88final ItemContext cc = Base.getAndSetCurrentContext(sc, itemType, null, null);
89
90final ModeInfo mode = ModeInfo.get(request.getParameter("mode"));
91final String callback = request.getParameter("callback");
92final String title = mode.generateTitle("bioassay", "bioassays");
93final DbControl dc = sc.newDbControl();
94ItemResultIterator<BioAssay> bioAssays = null;
95ItemResultList<AnnotationType> annotationTypes = null;
96ItemResultList<AnnotationType> experimentalFactors = null;
97try
98{
99  final ItemQuery<AnnotationType> annotationTypeQuery = Base.getAnnotationTypesQuery(itemType);
100  final BioAssaySet bioAssaySet = BioAssaySet.getById(dc, bioAssaySetId);
101  final Experiment experiment = bioAssaySet.getExperiment();
102  final boolean hasDbSpots = bioAssaySet.getNumSpots() > 0;
103  final ItemQuery<AnnotationType> experimentalFactorQuery = experiment.getExperimentalFactors();
104  experimentalFactorQuery.include(Include.MINE, Include.SHARED, Include.IN_PROJECT, Include.OTHERS);
105  final int experimentId = experiment.getId();
106  final RawDataType rawDataType = experiment.getRawDataType();
107  final boolean createPermission = experiment.hasPermission(Permission.WRITE);
108  final boolean deletePermission = createPermission;
109  final boolean writePermission = createPermission;
110
111  // Query for raw bioassays related to the current bioassay
112  final ItemQuery<RawBioAssay> rawQuery = RawBioAssay.getQuery();
113  rawQuery.include(Include.MINE, Include.SHARED, Include.IN_PROJECT, Include.OTHERS);
114  rawQuery.join(Hql.innerJoin("bioAssays", "bas"));
115  rawQuery.restrict(Restrictions.eq(Hql.alias("bas"), Expressions.parameter("bioAssay"))); 
116  rawQuery.order(Orders.asc(Hql.property("name"))); 
117 
118  Map<Plugin.MainType, Integer> pluginCount = PluginDefinition.countPlugins(dc, guiContext);
119  annotationTypes = annotationTypeQuery.list(dc);
120  experimentalFactors = experimentalFactorQuery.list(dc);
121  try
122  {
123    final ItemQuery<BioAssay> query = Base.getConfiguredQuery(dc, cc, true, bioAssaySet.getBioAssays(), mode);
124    query.join(Hql.leftJoin("rawParents", "rba"));
125    query.setDistinct(true);
126    bioAssays = query.iterate(dc);
127  }
128  catch (Throwable t)
129  {
130    t.printStackTrace();
131    cc.setMessage(t.getMessage());
132  }
133  int numListed = 0;
134  JspContext jspContext = ExtensionsControl.createContext(dc, pageContext, 
135      guiContext, bioAssaySet);
136  ExtensionsInvoker invoker = ToolbarUtil.useExtensions(jspContext);
137  ExtensionsInvoker overviewPlotInvoker = ExtensionsControl.useExtensions(jspContext, 
138      "net.sf.basedb.clients.web.bioassayset.overviewplots");
139  %>
140  <base:page title="<%=title%>" type="<%=mode.getPageType()%>">
141  <base:head scripts="table.js,tabcontrol.js" styles="table.css,headertabcontrol.css,path.css">
142    <ext:scripts context="<%=jspContext%>" />
143    <ext:stylesheets context="<%=jspContext%>" />
144    <script language="JavaScript">
145    var submitPage = 'index.jsp';
146    var formId = 'bioAssaySets';
147    function editItem(itemId)
148    {
149      Main.viewOrEditItem('<%=ID%>', '<%=itemType.name()%>', itemId, true);
150    }
151    function viewItem(itemId)
152    {
153      Main.viewOrEditItem('<%=ID%>', '<%=itemType.name()%>', itemId, false);
154    }
155    function itemOnClick(evt, itemId)
156    {
157      Table.itemOnClick(formId, evt, itemId, '<%=mode.getName()%>', viewItem, editItem, returnSelected);
158    }
159    function configureColumns()
160    {
161      Table.configureColumns('<%=ID%>', formId, '<%=itemType.name()%>', '<%=(String)cc.getObject("defaultColumns")%>');
162    }
163    function runPlugin(cmd)
164    {
165      Table.submitToPopup(formId, cmd, 740, 540);
166    }
167    function returnSelected()
168    {
169      Table.returnSelected(formId, <%=callback != null ? "window.opener."+callback : "null" %>);
170      window.close();
171    }
172    function presetOnChange()
173    {
174      Table.presetOnChange('<%=ID%>', formId, '<%=itemType.name()%>', '<%=(String)cc.getObject("defaultColumns")%>');
175    }
176    function switchTab(tabControlId, tabId)
177    {
178      if (tabId == 'properties' || tabId == 'overviewplots' || tabId == 'annotations')
179      {
180        location.href = '../bioassaysets/index.jsp?ID=<%=ID%>&cmd=ViewItem&experiment_id=<%=experiment.getId()%>&item_id=<%=bioAssaySetId%>&tab='+tabId;
181      }
182      else if (tabId == 'spotdata')
183      {
184        location.href = '../spotdata/index.jsp?ID=<%=ID%>&experiment_id=<%=experimentId%>&bioassayset_id=<%=bioAssaySetId%>';
185      }
186      else
187      {
188        TabControl.setActiveTab(tabControlId, tabId);
189      }
190    }
191    function openPlotTool(bioAssayId)
192    {
193      Main.openPopup('../plotter/index.jsp?ID=<%=ID%>&bioassay_id='+bioAssayId, 'Plotter', 1000, 700);
194    }
195    function viewSpotData(bioAssayId)
196    {
197      location.href = '../spotdata/index.jsp?ID=<%=ID%>&bioassay_id='+bioAssayId;
198    }
199    </script>
200  </base:head>
201 
202  <base:body>
203    <p>
204    <%
205    if (!mode.isSelectionMode())
206    {
207      %>
208      <p:path>
209        <p:pathelement title="Experiments" href="<%="../index.jsp?ID="+ID%>" />
210        <p:pathelement title="<%=HTML.encodeTags(experiment.getName())%>" 
211          href="<%="../bioassaysets/index.jsp?ID="+ID+"&experiment_id="+experiment.getId()%>" />
212        <p:pathelement title="<%=HTML.encodeTags(bioAssaySet.getName())%>" />
213      </p:path>
214      <%
215    }
216    %>
217
218    <t:tabcontrol id="main" active="bioassays" switch="switchTab" notabs="<%=mode.isSelectionMode()%>">
219    <t:tab id="properties" title="Properties" />
220   
221    <t:tab id="annotations" title="Annotations" 
222        tooltip="View annotation values" />
223   
224    <t:tab id="bioassays" title="Bioassays">
225    <%
226    if (cc.getMessage() != null)
227    {
228      %>
229      <div class="error"><%=cc.getMessage()%></div>
230      <%
231      cc.setMessage(null);
232    }
233    %>
234    <tbl:table 
235      id="bioAssaySets" 
236      clazz="itemlist" 
237      columns="<%=cc.getSetting("columns")%>"
238      sortby="<%=cc.getSortProperty()%>" 
239      direction="<%=cc.getSortDirection()%>"
240      title="<%=title%>"
241      action="index.jsp"
242      sc="<%=sc%>"
243      item="<%=itemType%>"
244      >
245      <tbl:hidden 
246        name="mode" 
247        value="<%=mode.getName()%>" 
248      />
249      <tbl:hidden 
250        name="bioassayset_id" 
251        value="<%=String.valueOf(bioAssaySetId)%>" 
252      />
253      <tbl:hidden 
254        name="callback" 
255        value="<%=callback%>" 
256        skip="<%=callback == null%>" 
257      />
258      <tbl:columndef 
259        id="name"
260        property="name"
261        datatype="string"
262        title="Name"
263        sortable="true" 
264        filterable="true"
265        exportable="true"
266        show="always" 
267      />
268      <tbl:columndef 
269        id="id"
270        clazz="uniquecol"
271        property="id"
272        datatype="int"
273        title="ID"
274        sortable="true"
275        filterable="true"
276        exportable="true"
277      />
278      <tbl:columndef 
279        id="spots"
280        property="numSpots"
281        datatype="int"
282        title="Spots in db"
283        sortable="true" 
284        filterable="true"
285        exportable="true"
286      />
287      <tbl:columndef 
288        id="fileSpots"
289        property="numFileSpots"
290        datatype="int"
291        title="Spots in file"
292        sortable="true" 
293        filterable="true"
294        exportable="true"
295      />
296      <tbl:columndef
297        id="rawBioAssays"
298        title="Raw bioassays"
299      />
300      <tbl:columndef 
301        id="description"
302        property="description"
303        datatype="string"
304        title="Description" 
305        sortable="true" 
306        filterable="true" 
307        exportable="true"
308      />
309      <tbl:columndef 
310        id="tools"
311        title="Tools" 
312        show="<%=mode.isSelectionMode() ? "never" : "auto"%>"
313      />
314      <%
315      for (AnnotationType at : annotationTypes)
316      {
317        Enumeration<String, String> annotationEnum = null;
318        Formatter formatter = FormatterFactory.getTypeFormatter(sc, at.getValueType());
319        if (at.isEnumeration())
320        {
321          annotationEnum = new Enumeration<String, String>();
322          List<?> values = at.getValues();
323          for (Object value : values)
324          {
325            String encoded = formatter.format(value);
326            annotationEnum.add(encoded, encoded);
327          }
328        }
329        %>
330        <tbl:columndef 
331          id="<%="at"+at.getId()%>"
332          title="<%=HTML.encodeTags(at.getName())+" [A]"%>" 
333          property="<%="#"+at.getId()%>"
334          annotation="true"
335          datatype="<%=at.getValueType().getStringValue()%>"
336          enumeration="<%=annotationEnum%>"
337          sortable="false" 
338          filterable="true" 
339          exportable="true"
340          formatter="<%=formatter%>"
341          unit="<%=at.getDefaultUnit()%>"
342        />
343        <%
344      }
345      %>
346      <%
347      for (AnnotationType at : experimentalFactors)
348      {
349        Enumeration<String, String> annotationEnum = null;
350        Formatter formatter = FormatterFactory.getTypeFormatter(sc, at.getValueType());
351        if (at.isEnumeration())
352        {
353          annotationEnum = new Enumeration<String, String>();
354          List<?> values = at.getValues();
355          for (Object value : values)
356          {
357            String encoded = formatter.format(value);
358            annotationEnum.add(encoded, encoded);
359          }
360        }
361        %>
362        <tbl:columndef 
363          id="<%="ef"+at.getId()%>"
364          title="<%=HTML.encodeTags(at.getName())+" [EF]"%>" 
365          property="<%="$rba.##"+at.getId()%>"
366          annotation="true"
367          datatype="<%=at.getValueType().getStringValue()%>"
368          enumeration="<%=annotationEnum%>"
369          sortable="false" 
370          filterable="true" 
371          exportable="false"
372          formatter="<%=formatter%>"
373        />
374        <%
375      }
376      %>
377      <tbl:toolbar
378        visible="<%=mode.hasToolbar()%>"
379        >
380        <tbl:button 
381          image="columns.gif" 
382          onclick="configureColumns()" 
383          title="Columns&hellip;" 
384          tooltip="Show, hide and re-order columns" 
385        />
386        <tbl:button 
387          image="import.gif" 
388          onclick="runPlugin('ImportItems')" 
389          title="Import&hellip;" 
390          tooltip="Import data" 
391          visible="<%=pluginCount.containsKey(Plugin.MainType.IMPORT)%>"
392        />
393        <tbl:button 
394          image="export.gif" 
395          onclick="runPlugin('ExportItems')" 
396          title="Export&hellip;" 
397          tooltip="Export data" 
398          visible="<%=pluginCount.containsKey(Plugin.MainType.EXPORT)%>"
399        />
400        <tbl:button
401          disabled="<%=!createPermission%>"
402          image="<%=createPermission ? "filter.gif" : "filter_disabled.gif"%>"
403          onclick="<%="runPlugin('NewFilteredBioAssaySet')"%>"
404          title="Filter bioassay set&hellip;"
405          tooltip="<%=createPermission ? 
406            "Create a new bioassay set by filtering this bioassayset" :
407            "You do not have permission analyze this experiment"%>"
408          visible="<%=!mode.isSelectionMode()%>"
409        />
410        <tbl:button 
411          image="runplugin.gif" 
412          onclick="runPlugin('RunListPlugin')" 
413          title="Run plugin&hellip;" 
414          tooltip="Run a plugin" 
415          visible="<%=pluginCount.containsKey(Plugin.MainType.OTHER) && !mode.isSelectionMode()%>"
416        />
417        <tbl:button 
418          disabled="<%=!createPermission%>"
419          image="<%=createPermission ? "runplugin.gif" : "runplugin_disabled.gif"%>" 
420          onclick="<%="runPlugin('RunListAnalysisPlugin')"%>"
421          title="Run analysis&hellip;" 
422          tooltip="<%=createPermission ? "Run an analysis plugin" : 
423            "You do not have permission to analyze this experiment"%>"
424          visible="<%=pluginCount.containsKey(Plugin.MainType.ANALYZE) && !mode.isSelectionMode()%>"
425        />
426        <ext:render extensions="<%=invoker%>" context="<%=jspContext%>" 
427          wrapper="<%=new PrefixSuffixRenderer(jspContext, "<td>", "</td>") %>"/>
428      </tbl:toolbar>
429      <tbl:navigator
430        page="<%=cc.getPage()%>" 
431        rowsperpage="<%=cc.getRowsPerPage()%>" 
432        totalrows="<%=bioAssays == null ? 0 : bioAssays.getTotalCount()%>" 
433        visible="<%=mode.hasNavigator()%>"
434      />
435      <tbl:data>
436        <tbl:columns>
437        <tbl:presetselector 
438          clazz="columnheader"
439          colspan="3"
440          onchange="presetOnChange()"
441        />
442        </tbl:columns>
443        <tr>
444          <tbl:header 
445            clazz="index"
446            >&nbsp;</tbl:header>
447          <tbl:header 
448            clazz="check" 
449            visible="<%=mode.hasCheck()%>"
450            ><base:icon 
451              image="check_uncheck.gif" 
452              tooltip="Check/uncheck all" 
453              onclick="Forms.checkUncheck(document.forms[formId])" style="align: left;"
454            /></tbl:header>
455          <tbl:header 
456            clazz="check" 
457            visible="<%=mode.hasRadio()%>"
458            />
459          <tbl:header 
460            clazz="icons" 
461            visible="<%=mode.hasIcons()%>"
462            >&nbsp;</tbl:header>
463          <tbl:propertyfilter />
464        </tr>
465   
466          <tbl:rows>
467          <%
468          int index = cc.getPage()*cc.getRowsPerPage();
469          int selectedItemId = cc.getId();
470          if (bioAssays != null)
471          {           
472            while (bioAssays.hasNext())
473            {
474              BioAssay item = bioAssays.next();
475              boolean bioAssayHasDbSpots = item.getNumSpots() > 0;
476              int itemId = item.getId();
477              String name = HTML.encodeTags(item.getName());
478              String tooltip = mode.isSelectionMode() ?
479                  "Select this item" : "View this item" + (writePermission ? " (use CTRL, ALT or SHIFT to edit)" : "");
480              index++;
481              numListed++;         
482              %>
483              <tbl:row>
484                <tbl:header 
485                  clazz="index"
486                  ><%=index%></tbl:header>
487                <tbl:header 
488                  clazz="check" 
489                  visible="<%=mode.hasCheck()%>"
490                  ><input 
491                      type="checkbox" 
492                      name="<%=itemId%>" 
493                      value="<%=itemId%>" 
494                      title="<%=name%>" 
495                      <%=cc.getSelected().contains(itemId) ? "checked" : ""%>
496                    ></tbl:header>
497                <tbl:header 
498                  clazz="check" 
499                  visible="<%=mode.hasRadio()%>"
500                  ><input 
501                      type="radio" 
502                      name="item_id" 
503                      value="<%=itemId%>" 
504                      title="<%=name%>" 
505                      <%=selectedItemId == itemId ? "checked" : ""%>
506                    ></tbl:header>
507                <tbl:header 
508                  clazz="icons" 
509                  visible="<%=mode.hasIcons()%>"
510                  >&nbsp;</tbl:header>
511                <tbl:cell column="name"><div class="link" 
512                  onclick="itemOnClick(<%=writePermission ? "event" : null%>, <%=itemId%>)" 
513                  title="<%=tooltip%>"><%=name%></div></tbl:cell>
514                <tbl:cell column="id"><%=item.getId()%></tbl:cell>
515                <tbl:cell column="spots"><%=item.getNumSpots()%></tbl:cell>
516                <tbl:cell column="fileSpots"><%=item.getNumFileSpots()%></tbl:cell>
517                <tbl:cell column="description"><%=HTML.encodeTags(item.getDescription())%></tbl:cell>
518                <tbl:cell column="rawBioAssays">
519                  <%
520                  rawQuery.setParameter("bioAssay", itemId, Type.INT);
521                  try
522                  {
523                    String separator = "";
524                    for (RawBioAssay rba : rawQuery.list(dc))
525                    {
526                      out.write(separator);
527                      if (mode.hasPropertyLink())
528                      {
529                        out.write(Base.getLinkedName(ID, rba, false, mode.hasEditLink()));
530                      }
531                      else
532                      {
533                        out.write(HTML.encodeTags(rba.getName()));
534                      }
535                      separator = ", ";
536                    }
537                  }
538                  catch (Throwable t)
539                  {
540                    %>
541                    <div class="error"><%=t.getMessage()%></div>
542                    <%
543                  }
544                  %>
545                </tbl:cell>
546                <%
547                AnnotationSet as = item.isAnnotated() ? item.getAnnotationSet() : null;
548                if (as != null)
549                {
550                  for (AnnotationType at : annotationTypes)
551                  {
552                    if (as.hasAnnotation(at))
553                    {
554                      Annotation a = as.getAnnotation(at);
555                      String suffix = a.getUnitSymbol(null);
556                      if (suffix != null) suffix = "&nbsp;" + suffix;
557                      %>
558                      <tbl:cell 
559                        column="<%="at"+at.getId()%>"
560                        ><tbl:cellvalue 
561                          list="<%=a.getValues(null)%>"
562                          suffix="<%=suffix%>"
563                      /></tbl:cell>
564                      <%
565                    }
566                  }
567                }
568                for (AnnotationType at : experimentalFactors)
569                {
570                  %>
571                  <tbl:cell column="<%="ef"+at.getId()%>"
572                    ><tbl:cellvalue
573                    list="<%=BioAssaySetUtil.getAnnotationValues(dc, item, at)%>"
574                  /></tbl:cell>
575                  <%
576                }               
577                %>
578                <tbl:cell column="tools">
579                  <nobr>
580                  <% 
581                  if (bioAssayHasDbSpots) 
582                  {
583                    %>
584                    <a href="javascript:openPlotTool(<%=itemId%>)" 
585                      title="A simple plot tool"><img 
586                      src="../../../images/plotter.gif" border="0"></a>
587                    <a href="javascript:viewSpotData(<%=itemId%>)"
588                      title="View spot data as a table"><img 
589                      src="../../../images/table.gif" border="0"></a>
590                    <%
591                  }
592                  %>
593                  </nobr>
594                </tbl:cell>
595              </tbl:row>
596              <%
597            }
598          }
599          %>
600          </tbl:rows>
601        </tbl:data>
602      <%
603      if (numListed == 0)
604      {
605        %>
606        <tbl:panel><%=bioAssays == null || bioAssays.getTotalCount() == 0 ? "No bioassays were found" : "No bioassays on this page. Please select another page!" %></tbl:panel>
607        <%
608      }
609      else
610      {
611        %>
612        <tbl:navigator
613          page="<%=cc.getPage()%>" 
614          rowsperpage="<%=cc.getRowsPerPage()%>" 
615          totalrows="<%=bioAssays == null ? 0 : bioAssays.getTotalCount()%>" 
616          visible="<%=mode.hasNavigator()%>"
617          locked="true"
618        />
619        <%
620      }
621      %>
622
623    </tbl:table>
624    <base:buttongroup align="center" clazz="fixedatbottom">
625      <base:button onclick="returnSelected();" title="Ok" visible="<%=mode.hasOkButton()%>" />
626      <base:button onclick="window.close();" title="Cancel" visible="<%=mode.hasCancelButton()%>" />
627      <base:button onclick="window.close();" title="Close" visible="<%=mode.hasCloseButton()%>" />
628    </base:buttongroup>
629    </t:tab>
630   
631    <t:tab id="spotdata" title="Spot data" visible="<%=hasDbSpots%>" />
632   
633    <t:tab id="overviewplots" title="Overview plots" 
634      visible="<%=overviewPlotInvoker.getNumExtensions() > 0%>" />
635   
636    </t:tabcontrol>
637
638  </base:body>
639  </base:page>
640  <%
641}
642finally
643{
644  if (bioAssays != null) bioAssays.close();
645  if (dc != null) dc.close();
646}
647%>
Note: See TracBrowser for help on using the repository browser.