source: branches/3.18-stable/www/views/experiments/bioassays/list_bioassays.jsp @ 7938

Last change on this file since 7938 was 7938, checked in by Nicklas Nordborg, 3 months ago

References #2246: Sticky table headers

Implemented for all items in the "View" menu.

  • Property svn:eol-style set to native
  • Property svn:keywords set to Date Id
File size: 21.6 KB
Line 
1<%-- $Id: list_bioassays.jsp 7938 2021-05-03 11:20:19Z 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 import="net.sf.basedb.clients.web.extensions.plot.OverviewPlotAction"%>
27<%@ page pageEncoding="UTF-8" session="false"
28  import="net.sf.basedb.core.SessionControl"
29  import="net.sf.basedb.core.DbControl"
30  import="net.sf.basedb.core.Item"
31  import="net.sf.basedb.core.ItemContext"
32  import="net.sf.basedb.core.Experiment"
33  import="net.sf.basedb.core.BioAssaySet"
34  import="net.sf.basedb.core.BioAssay"
35  import="net.sf.basedb.core.RawBioAssay"
36  import="net.sf.basedb.core.AnnotationSet"
37  import="net.sf.basedb.core.AnnotationType"
38  import="net.sf.basedb.core.Annotation"
39  import="net.sf.basedb.core.Unit"
40  import="net.sf.basedb.core.ItemQuery"
41  import="net.sf.basedb.core.ItemResultIterator"
42  import="net.sf.basedb.core.ItemResultList"
43  import="net.sf.basedb.core.Permission"
44  import="net.sf.basedb.core.PluginDefinition"
45  import="net.sf.basedb.core.PermissionDeniedException"
46  import="net.sf.basedb.core.RawDataType"
47  import="net.sf.basedb.core.Type"
48  import="net.sf.basedb.core.Include"
49  import="net.sf.basedb.core.query.Restrictions"
50  import="net.sf.basedb.core.query.Expressions"
51  import="net.sf.basedb.core.query.Orders"
52  import="net.sf.basedb.core.query.Hql"
53  import="net.sf.basedb.core.plugin.GuiContext"
54  import="net.sf.basedb.core.plugin.Plugin"
55  import="net.sf.basedb.core.snapshot.AnnotationLoaderUtil"
56  import="net.sf.basedb.core.snapshot.AnnotationTypeFilter"
57  import="net.sf.basedb.core.snapshot.AnnotationSnapshot"
58  import="net.sf.basedb.core.snapshot.AnnotationSetSnapshot"
59  import="net.sf.basedb.core.snapshot.SnapshotManager"
60  import="net.sf.basedb.util.Tree"
61  import="net.sf.basedb.util.Enumeration"
62  import="net.sf.basedb.util.BioAssaySetUtil"
63  import="net.sf.basedb.clients.web.Base"
64  import="net.sf.basedb.clients.web.ModeInfo"
65  import="net.sf.basedb.clients.web.PermissionUtil"
66  import="net.sf.basedb.clients.web.util.HTML"
67  import="net.sf.basedb.util.Values"
68  import="net.sf.basedb.util.formatter.Formatter"
69  import="net.sf.basedb.clients.web.formatter.FormatterFactory"
70  import="net.sf.basedb.clients.web.extensions.ExtensionsControl"
71  import="net.sf.basedb.clients.web.extensions.JspContext"
72  import="net.sf.basedb.clients.web.extensions.renderer.PrefixSuffixRenderer"
73  import="net.sf.basedb.clients.web.extensions.toolbar.ButtonAction" 
74  import="net.sf.basedb.clients.web.extensions.toolbar.ToolbarUtil"
75  import="net.sf.basedb.clients.web.util.ProjectSpecificInfoFilter"
76  import="net.sf.basedb.util.extensions.ExtensionsInvoker"
77  import="java.util.List"
78  import="java.util.LinkedList"
79  import="java.util.ArrayList"
80  import="java.util.Map"
81  import="java.util.HashMap"
82  import="java.util.Iterator"
83  import="java.util.Collection"
84%>
85<%@ taglib prefix="base" uri="/WEB-INF/base.tld" %>
86<%@ taglib prefix="tbl" uri="/WEB-INF/table.tld" %>
87<%@ taglib prefix="t" uri="/WEB-INF/tab.tld" %>
88<%@ taglib prefix="p" uri="/WEB-INF/path.tld" %>
89<%@ taglib prefix="ext" uri="/WEB-INF/extensions.tld" %>
90<%!
91  private static final Item itemType = Item.BIOASSAY;
92  private static final GuiContext guiContext = new GuiContext(itemType, GuiContext.Type.LIST);
93%>
94<%
95final int bioAssaySetId = Values.getInt(request.getParameter("bioassayset_id"));
96final SessionControl sc = Base.getExistingSessionControl(pageContext, Permission.DENIED, itemType);
97final String ID = sc.getId();
98final ItemContext cc = Base.getAndSetCurrentContext(sc, itemType, null, null);
99
100final ModeInfo mode = ModeInfo.get(request.getParameter("mode"));
101final String callback = request.getParameter("callback");
102final String title = mode.generateTitle("bioassay", "bioassays");
103final DbControl dc = sc.newDbControl();
104ItemResultIterator<BioAssay> bioAssays = null;
105List<AnnotationLoaderUtil> annotationLoaders = new ArrayList<AnnotationLoaderUtil>();
106ItemResultList<AnnotationType> experimentalFactors = null;
107try
108{
109  ItemQuery<AnnotationType> annotationTypeQuery = Base.getAnnotationTypesQuery(itemType);
110  SnapshotManager manager = new SnapshotManager();
111  ProjectSpecificInfoFilter psInfo = new ProjectSpecificInfoFilter();
112  for (AnnotationType at : annotationTypeQuery.list(dc))
113  {
114    annotationLoaders.add(new AnnotationLoaderUtil(dc, manager, at));
115  }
116  annotationTypeQuery = Base.getInheritedAnnotationColumns(cc.getSetting("columns"));
117  for (AnnotationType at : annotationTypeQuery.list(dc))
118  {
119    annotationLoaders.add(new AnnotationLoaderUtil(dc, manager, at, false, true));
120  }
121  final BioAssaySet bioAssaySet = BioAssaySet.getById(dc, bioAssaySetId);
122  final Experiment experiment = bioAssaySet.getExperiment();
123  final boolean hasDbSpots = bioAssaySet.getNumSpots() > 0;
124  final ItemQuery<AnnotationType> experimentalFactorQuery = experiment.getExperimentalFactors();
125  experimentalFactorQuery.include(Include.MINE, Include.SHARED, Include.IN_PROJECT, Include.OTHERS);
126  final int experimentId = experiment.getId();
127  final RawDataType rawDataType = experiment.getRawDataType();
128  final boolean createPermission = experiment.hasPermission(Permission.USE);
129  final boolean deletePermission = bioAssaySet.hasPermission(Permission.DELETE);
130  final boolean writePermission = bioAssaySet.hasPermission(Permission.WRITE);
131
132  // Query for raw bioassays related to the current bioassay
133  final ItemQuery<RawBioAssay> rawQuery = RawBioAssay.getQuery();
134  rawQuery.include(Include.MINE, Include.SHARED, Include.IN_PROJECT, Include.OTHERS);
135  rawQuery.join(Hql.innerJoin("bioAssays", "bas"));
136  rawQuery.restrict(Restrictions.eq(Hql.alias("bas"), Expressions.parameter("bioAssay"))); 
137  rawQuery.order(Orders.asc(Hql.property("name"))); 
138 
139  Map<Plugin.MainType, Integer> pluginCount = PluginDefinition.countPlugins(dc, guiContext);
140  experimentalFactors = experimentalFactorQuery.list(dc);
141  JspContext jspContext = ExtensionsControl.createContext(dc, pageContext, 
142      guiContext, bioAssaySet);
143  try
144  {
145    final ItemQuery<BioAssay> query = Base.getConfiguredQuery(dc, cc, jspContext, true, bioAssaySet.getBioAssays(), mode);
146    query.join(Hql.leftJoin("rawParents", "rba"));
147    query.setDistinct(true);
148    bioAssays = query.iterate(dc);
149  }
150  catch (Throwable t)
151  {
152    t.printStackTrace();
153    cc.setMessage(t.getMessage());
154  }
155  int numListed = 0;
156  ExtensionsInvoker<ButtonAction> invoker = ToolbarUtil.useExtensions(jspContext);
157  ExtensionsInvoker<OverviewPlotAction> overviewPlotInvoker = ExtensionsControl.useExtensions(jspContext, 
158      "net.sf.basedb.clients.web.bioassayset.overviewplots");
159  %>
160  <base:page title="<%=title%>" type="<%=mode.getPageType()%>" id="list-page">
161  <base:head scripts="table.js,tabcontrol-2.js,~bioassays.js" styles="table.css,toolbar.css,headertabcontrol.css,path.css">
162    <ext:scripts context="<%=jspContext%>" />
163    <ext:stylesheets context="<%=jspContext%>" />
164  </base:head>
165  <base:body>
166    <%
167    if (!mode.isSelectionMode())
168    {
169      %>
170      <p:path><p:pathelement 
171        title="Experiments" href="<%="../index.jsp?ID="+ID%>" 
172        /><p:pathelement title="<%=HTML.encodeTags(experiment.getName())%>" 
173          href="<%="../bioassaysets/index.jsp?ID="+ID+"&amp;experiment_id="+experiment.getId()%>" 
174        /><p:pathelement title="<%=HTML.encodeTags(bioAssaySet.getName())%>"
175        /></p:path>
176      <%
177    }
178    else
179    {
180      %>
181      <h1><%=title %></h1>
182      <%
183    }
184    %>
185    <t:tabcontrol 
186      id="main"
187      subclass="mastertabcontrol content"
188      active="bioassays" notabs="<%=mode.isSelectionMode() %>">
189    <t:tab id="bioassayset.properties" title="Properties" />
190   
191    <t:tab id="bioassayset.annotations" title="Annotations" 
192        tooltip="View annotation values" />
193   
194    <t:tab id="bioassays" title="Bioassays">
195    <tbl:table 
196      id="bioassays" 
197      columns="<%=cc.getSetting("columns")%>"
198      sortby="<%=cc.getSortProperty()%>" 
199      direction="<%=cc.getSortDirection()%>"
200      action="index.jsp"
201      sc="<%=sc%>"
202      item="<%=itemType%>"
203      filterrows="<%=cc.getFilterRows()%>"
204      subclass="fulltable"
205      data-inherited-annotations="true"
206      stickyheaders="name"
207      >
208      <tbl:hidden 
209        name="mode" 
210        value="<%=mode.getName()%>" 
211      />
212      <tbl:hidden 
213        name="bioassayset_id" 
214        value="<%=String.valueOf(bioAssaySetId)%>" 
215      />
216      <tbl:hidden 
217        name="callback" 
218        value="<%=callback%>" 
219        skip="<%=callback == null%>" 
220      />
221      <tbl:columndef 
222        id="name"
223        property="name"
224        datatype="string"
225        title="Name"
226        sortable="true" 
227        filterable="true"
228        exportable="true"
229        show="always" 
230      />
231      <tbl:columndef 
232        id="id"
233        clazz="uniquecol"
234        property="id"
235        datatype="int"
236        title="ID"
237        sortable="true"
238        filterable="true"
239        exportable="true"
240      />
241      <tbl:columndef 
242        id="spots"
243        property="numSpots"
244        datatype="int"
245        title="Spots in db"
246        sortable="true" 
247        filterable="true"
248        exportable="true"
249      />
250      <tbl:columndef 
251        id="fileSpots"
252        property="numFileSpots"
253        datatype="int"
254        title="Spots in file"
255        sortable="true" 
256        filterable="true"
257        exportable="true"
258      />
259      <tbl:columndef
260        id="rawBioAssays"
261        title="Raw bioassays"
262      />
263      <tbl:columndef 
264        id="description"
265        property="description"
266        datatype="string"
267        title="Description" 
268        sortable="true" 
269        filterable="true" 
270        exportable="true"
271      />
272      <tbl:columndef 
273        id="tools"
274        title="Tools" 
275        show="<%=mode.isSelectionMode() ? "never" : "auto"%>"
276      />
277      <%
278      for (AnnotationLoaderUtil loader : annotationLoaders)
279      {
280        AnnotationType at = loader.getAnnotationType();
281        Enumeration<String, String> annotationEnum = null;
282        Formatter<Object> formatter = FormatterFactory.getTypeFormatter(sc, at.getValueType());
283        if (at.isEnumeration())
284        {
285          annotationEnum = new Enumeration<String, String>();
286          if (!at.getDisplayAsList()) annotationEnum.add("", "-none-");
287          List<?> values = at.getValues();
288          for (Object value : values)
289          {
290            String encoded = formatter.format(value);
291            annotationEnum.add(encoded, encoded);
292          }
293        }
294        %>
295        <tbl:columndef 
296          id="<%=(loader.isSearchingInheritedAnnotations() ? "ia" : "at")+at.getId()%>"
297          title="<%=HTML.encodeTags(at.getName())+(loader.isSearchingInheritedAnnotations() ? " [I]" : " [A]")%>" 
298          property="<%=(loader.isSearchingInheritedAnnotations() ? "##" : "#")+at.getId()%>"
299          annotation="true"
300          datatype="<%=at.getValueType().getStringValue()%>"
301          enumeration="<%=annotationEnum%>"
302          smartenum="<%=at.getDisplayAsList() %>"
303          sortable="<%=at.getMultiplicity() == 1 && !loader.isSearchingInheritedAnnotations()%>" 
304          filterable="true" 
305          exportable="true"
306          formatter="<%=formatter%>"
307          unit="<%=at.getDefaultUnit()%>"
308        />
309        <%
310      }
311      %>
312      <%
313      for (AnnotationType at : experimentalFactors)
314      {
315        Enumeration<String, String> annotationEnum = null;
316        Formatter<Object> formatter = FormatterFactory.getTypeFormatter(sc, at.getValueType());
317        if (at.isEnumeration())
318        {
319          annotationEnum = new Enumeration<String, String>();
320          if (!at.getDisplayAsList()) annotationEnum.add("", "-none-");
321          List<?> values = at.getValues();
322          for (Object value : values)
323          {
324            String encoded = formatter.format(value);
325            annotationEnum.add(encoded, encoded);
326          }
327        }
328        %>
329        <tbl:columndef 
330          id="<%="ef"+at.getId()%>"
331          title="<%=HTML.encodeTags(at.getName())+" [EF]"%>" 
332          property="<%="$rba.##"+at.getId()%>"
333          exportproperty="<%="#" + 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        />
342        <%
343      }
344      %>
345      <div class="panelgroup bg-filled-50 bottomborder">
346        <tbl:toolbar
347          subclass="bottomborder"
348          visible="<%=mode.hasToolbar()%>"
349          >
350          <tbl:button 
351            id="btnColumns"
352            image="columns.png" 
353            title="Columns&hellip;" 
354            tooltip="Show, hide and re-order columns" 
355          />
356          <tbl:button 
357            id="btnImport"
358            data-plugin-type="IMPORT"
359            image="import.png" 
360            title="Import&hellip;" 
361            tooltip="Import data" 
362            visible="<%=pluginCount.containsKey(Plugin.MainType.IMPORT)%>"
363          />
364          <tbl:button 
365            id="btnExport"
366            data-plugin-type="EXPORT"
367            image="export.png" 
368            title="Export&hellip;" 
369            tooltip="Export data" 
370            visible="<%=pluginCount.containsKey(Plugin.MainType.EXPORT)%>"
371          />
372          <tbl:button
373            id="btnFilter"
374            data-plugin-type="ANALYZE"
375            data-cmd="NewFilteredBioAssaySet"
376            disabled="<%=!createPermission%>"
377            image="filter.png"
378            title="Filter bioassay set&hellip;"
379            tooltip="<%=createPermission ? 
380              "Create a new bioassay set by filtering this bioassayset" :
381              "You do not have permission analyze this experiment"%>"
382            visible="<%=!mode.isSelectionMode()%>"
383          />
384          <tbl:button 
385            id="btnRunPlugin"
386            data-plugin-type="OTHER"
387            image="runplugin.png" 
388            title="Run plugin&hellip;" 
389            tooltip="Run a plugin" 
390            visible="<%=pluginCount.containsKey(Plugin.MainType.OTHER) && !mode.isSelectionMode()%>"
391          />
392          <tbl:button 
393            id="btnAnalyze"
394            data-plugin-type="ANALYZE"
395            disabled="<%=!createPermission%>"
396            image="runplugin.png" 
397            title="Run analysis&hellip;" 
398            tooltip="<%=createPermission ? "Run an analysis plugin" : 
399              "You do not have permission to analyze this experiment"%>"
400            visible="<%=pluginCount.containsKey(Plugin.MainType.ANALYZE) && !mode.isSelectionMode()%>"
401          />
402          <ext:render extensions="<%=invoker%>" context="<%=jspContext%>" 
403            wrapper="<%=new PrefixSuffixRenderer<ButtonAction>(jspContext, "<td>", "</td>") %>"/>
404        </tbl:toolbar>
405        <tbl:panel>
406          <tbl:presetselector />
407          <tbl:navigator
408            page="<%=cc.getPage()%>" 
409            rowsperpage="<%=cc.getRowsPerPage()%>" 
410            totalrows="<%=bioAssays == null ? 0 : bioAssays.getTotalCount()%>" 
411            visible="<%=mode.hasNavigator()%>"
412          />
413        </tbl:panel>
414      </div>
415      <tbl:data>
416        <tbl:headers>
417          <tbl:headerrow>
418            <tbl:header clazz="row-index bg-filled-100" />
419            <tbl:columnheaders />
420          </tbl:headerrow>
421          <%
422          int numFilters = cc.getNumPropertyFilters();
423          int numRows = cc.getFilterRows();
424          for (int filterNo = 0; filterNo < numRows; filterNo++)
425          {
426            boolean lastRow = filterNo == numRows-1;
427            %>
428            <tbl:headerrow>
429              <tbl:header subclass="row-index bg-filled-100">
430                <div class="index-<%=mode.getName()%>">
431                  <div class="index"></div>
432                  <div class="check">
433                    <base:icon 
434                      subclass="link table-check"
435                      image="check_uncheck.png" 
436                      tooltip="Toggle all (use CTRL, ALT or SHIFT to check/uncheck)" 
437                      visible="<%=lastRow && mode.hasCheck()%>"
438                    />
439                  </div>
440                  <div class="icons">
441                    <base:icon
442                      subclass="link table-filter-row-action"
443                      image="add.png"
444                      tooltip="Add extra filter row"
445                      visible="<%=lastRow%>"
446                    /><base:icon
447                      subclass="link table-filter-row-action"
448                      image="remove.png"
449                      tooltip="Remove this filter row"
450                      visible="<%=numRows > 1 || numFilters > 0 %>"
451                      data-remove-row="<%=filterNo%>"
452                    />
453                  </div>
454                </div>
455              </tbl:header>
456              <tbl:propertyfilter row="<%=filterNo%>" />
457            </tbl:headerrow>
458            <%
459          }
460          %>
461          <tbl:columnsubtitles />
462        </tbl:headers>
463        <tbl:rows>
464          <%
465          if (cc.getMessage() != null)
466          {
467            %>
468            <tbl:panel subclass="bg-filled-50">
469              <div class="messagecontainer error"><%=cc.getMessage()%></div>
470            </tbl:panel>
471            <%
472            cc.setMessage(null);
473          }
474          int index = cc.getPage()*cc.getRowsPerPage();
475          int selectedItemId = cc.getId();
476          if (bioAssays != null)
477          {           
478            while (bioAssays.hasNext())
479            {
480              BioAssay item = bioAssays.next();
481              boolean bioAssayHasDbSpots = item.getNumSpots() > 0;
482              int itemId = item.getId();
483              String name = HTML.encodeTags(item.getName());
484              String tooltip = mode.isSelectionMode() ?
485                  "Select this item" : "View this item" + (writePermission ? " (use CTRL, ALT or SHIFT to edit)" : "");
486              index++;
487              numListed++;         
488              %>
489              <tbl:row>
490                <tbl:header clazz="row-index bg-filled-100">
491                  <div class="index-<%=mode.getName()%>">
492                    <div class="index <%=index>999?"index-smaller":""%>"><%=index%></div>
493                    <div class="check">
494                      <base:input
495                        type="checkbox" 
496                        name="<%=itemId%>" 
497                        value="<%=itemId%>" 
498                        title="<%=name%>" 
499                        checked="<%=cc.getSelected().contains(itemId)%>"
500                        visible="<%=mode.hasCheck()%>"
501                      />
502                      <base:input 
503                        type="radio" 
504                        name="item_id" 
505                        value="<%=itemId%>" 
506                        title="<%=name%>" 
507                        checked="<%=selectedItemId == itemId%>"
508                        visible="<%=mode.hasRadio()%>"
509                      />
510                    </div>
511                    <div class="icons"></div>
512                  </div>
513                </tbl:header>
514                <tbl:cell column="name"><div 
515                  class="link table-item"
516                  data-item-id="<%=itemId%>"
517                  data-no-edit="<%=writePermission ? 0 : 1 %>" 
518                  tabindex="0"
519                  title="<%=tooltip%>"><%=name%></div></tbl:cell>
520                <tbl:cell column="id"><%=item.getId()%></tbl:cell>
521                <tbl:cell column="spots"><%=item.getNumSpots()%></tbl:cell>
522                <tbl:cell column="fileSpots"><%=item.getNumFileSpots()%></tbl:cell>
523                <tbl:cell column="description"><%=HTML.encodeTags(item.getDescription())%></tbl:cell>
524                <tbl:cell column="rawBioAssays">
525                  <%
526                  rawQuery.setParameter("bioAssay", itemId, Type.INT);
527                  try
528                  {
529                    String separator = "";
530                    for (RawBioAssay rba : rawQuery.list(dc))
531                    {
532                      out.write(separator);
533                      if (mode.hasPropertyLink())
534                      {
535                        out.write(Base.getLinkedName(ID, rba, false, mode.hasEditLink()));
536                      }
537                      else
538                      {
539                        out.write(HTML.encodeTags(rba.getName()));
540                      }
541                      separator = ", ";
542                    }
543                  }
544                  catch (Throwable t)
545                  {
546                    %>
547                    <div class="error"><%=t.getMessage()%></div>
548                    <%
549                  }
550                  %>
551                </tbl:cell>
552                <%
553                if (item.isAnnotated())
554                {
555                  AnnotationSetSnapshot snapshot = manager.getSnapshot(dc, item.getAnnotationSet().getId());
556                  for (AnnotationLoaderUtil loader : annotationLoaders)
557                  {
558                    %>
559                    <tbl:cell 
560                      column="<%=(loader.isSearchingInheritedAnnotations() ? "ia" : "at")+loader.getId()%>"
561                      ><%
562                      if (loader.find(snapshot, psInfo.reset())) 
563                      {
564                        %><tbl:cellvalue 
565                          list="<%=loader.getValues()%>"
566                          suffix="<%=loader.getUnitSymbol()%>"
567                          clazz="<%=psInfo.overridesDefaultAnnotation() ? "ps-annotation" : null%>"
568                        /><%
569                      }
570                      %></tbl:cell>
571                    <%
572                  }
573                }
574                for (AnnotationType at : experimentalFactors)
575                {
576                  Unit unit = at.getDefaultUnit();
577                  String symbol = unit == null ? null : unit.getDisplaySymbol();
578                  %>
579                  <tbl:cell column="<%="ef"+at.getId()%>"
580                    ><tbl:cellvalue
581                    list="<%=BioAssaySetUtil.getAnnotationValues(dc, manager, item, at)%>"
582                    suffix="<%=symbol%>"
583                  /></tbl:cell>
584                  <%
585                }               
586                %>
587                <tbl:cell column="tools" style="white-space: nowrap;">
588                  <% 
589                  if (bioAssayHasDbSpots) 
590                  {
591                    %>
592                    <base:icon 
593                      subclass="link auto-init"
594                      data-auto-init="plotter"
595                      data-item-id="<%=itemId %>"
596                      image="plotter.png" 
597                      tooltip="A simple plot tool"
598                    />
599                    <base:icon 
600                      subclass="link auto-init"
601                      data-auto-init="spotdata"
602                      data-item-id="<%=itemId %>"
603                      image="table.png" 
604                      tooltip="View spot data as a table"
605                    />
606                    <%
607                  }
608                  %>
609                </tbl:cell>
610              </tbl:row>
611              <%
612            }
613          }
614          if (numListed == 0)
615          {
616            %>
617            <tbl:panel subclass="bg-filled-50">
618              <div class="messagecontainer note">
619              <%=bioAssays == null || bioAssays.getTotalCount() == 0 ? "No bioassays were found" : "No bioassays on this page. Please select another page!" %>
620              </div>
621            </tbl:panel>
622            <%
623          }
624          %>
625          </tbl:rows>
626        </tbl:data>
627    </tbl:table>
628    </t:tab>
629   
630    <t:tab id="spotdata" title="Spot data" visible="<%=hasDbSpots%>" />
631   
632    <t:tab id="bioassayset.overviewplots" title="Overview plots" 
633      visible="<%=overviewPlotInvoker.getNumExtensions() > 0%>" />
634    </t:tabcontrol>
635
636    <base:buttongroup subclass="dialogbuttons">
637      <base:button id="btnOk" title="Ok" visible="<%=mode.hasOkButton()%>" />
638      <base:button id="close" title="Cancel" visible="<%=mode.hasCancelButton()%>" />
639      <base:button id="close" title="Close" visible="<%=mode.hasCloseButton()%>" />
640    </base:buttongroup>
641
642  </base:body>
643  </base:page>
644  <%
645}
646finally
647{
648  if (bioAssays != null) bioAssays.close();
649  if (dc != null) dc.close();
650}
651%>
Note: See TracBrowser for help on using the repository browser.