source: trunk/www/biomaterials/biosources/list_biosources.jsp @ 5918

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

References #1655: GUI improvements

Started with the redesign of list and view pages. I am using the biosource and sample pages for testing.
Changes affect more of the non-fixed pages since a lot of the contents is generated by taglibs. This means that the non-fixed pages doesn't look very good at the moment.

Table listings has only been fixed so that they display and can be used. Much more work is needed as part of #160.

I have also fixed the following pages:

  • The main menu
  • Login page + Home page
  • Item overview frameset
  • Plugins and extensions overview
  • Property svn:eol-style set to native
  • Property svn:keywords set to Date Id
File size: 20.8 KB
Line 
1<%-- $Id: list_biosources.jsp 5918 2011-12-21 10:43:35Z nicklas $
2  ------------------------------------------------------------------
3  Copyright (C) 2006 Jari Häkkinen, Nicklas Nordborg, Martin Svensson
4  Copyright (C) 2007 Johan Enell, Martin Svensson
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 pageEncoding="UTF-8" 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.BioSource"
31  import="net.sf.basedb.core.Sample"
32  import="net.sf.basedb.core.AnnotationType"
33  import="net.sf.basedb.core.ItemSubtype"
34  import="net.sf.basedb.core.AnnotationSet"
35  import="net.sf.basedb.core.Annotation"
36  import="net.sf.basedb.core.ItemQuery"
37  import="net.sf.basedb.core.Include"
38  import="net.sf.basedb.core.ItemResultIterator"
39  import="net.sf.basedb.core.ItemResultList"
40  import="net.sf.basedb.core.ItemContext"
41  import="net.sf.basedb.core.Nameable"
42  import="net.sf.basedb.core.Permission"
43  import="net.sf.basedb.core.PluginDefinition"
44  import="net.sf.basedb.core.Type"
45  import="net.sf.basedb.core.query.Hql"
46  import="net.sf.basedb.core.query.Restrictions"
47  import="net.sf.basedb.core.query.Expressions"
48  import="net.sf.basedb.core.query.Orders"
49  import="net.sf.basedb.core.plugin.GuiContext"
50  import="net.sf.basedb.core.plugin.Plugin"
51  import="net.sf.basedb.util.Enumeration"
52  import="net.sf.basedb.util.ShareableUtil"
53  import="net.sf.basedb.clients.web.Base"
54  import="net.sf.basedb.clients.web.ModeInfo"
55  import="net.sf.basedb.clients.web.PermissionUtil"
56  import="net.sf.basedb.clients.web.util.HTML"
57  import="net.sf.basedb.util.formatter.Formatter"
58  import="net.sf.basedb.clients.web.formatter.FormatterFactory"
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.renderer.PrefixSuffixRenderer"
62  import="net.sf.basedb.clients.web.extensions.toolbar.ToolbarUtil"
63  import="net.sf.basedb.util.extensions.ExtensionsInvoker"
64  import="net.sf.basedb.util.Values"
65  import="java.util.Iterator"
66  import="java.util.Date"
67  import="java.util.List"
68  import="java.util.Map"
69%>
70<%@ taglib prefix="base" uri="/WEB-INF/base.tld" %>
71<%@ taglib prefix="tbl" uri="/WEB-INF/table.tld" %>
72<%@ taglib prefix="ext" uri="/WEB-INF/extensions.tld" %>
73<%!
74  private static final Item itemType = Item.BIOSOURCE;
75  private static final GuiContext guiContext = new GuiContext(itemType, GuiContext.Type.LIST);
76%>
77<%
78final SessionControl sc = Base.getExistingSessionControl(pageContext, Permission.DENIED, itemType);
79final String ID = sc.getId();
80final boolean createPermission = sc.hasPermission(Permission.CREATE, itemType);
81final ItemContext cc = Base.getAndSetCurrentContext(sc, itemType, null, null);
82
83final ModeInfo mode = ModeInfo.get(request.getParameter("mode"));
84final String callback = request.getParameter("callback");
85final String title = mode.generateTitle("biosource", "biosources");
86final DbControl dc = sc.newDbControl();
87ItemResultIterator<BioSource> bioSources = null;
88ItemResultList<AnnotationType> annotationTypes = null;
89try
90{
91  final ItemQuery<AnnotationType> annotationTypeQuery = Base.getAnnotationTypesQuery(itemType);
92  final ItemQuery<ItemSubtype> subtypesQuery = Base.getSubtypesQuery(itemType);
93
94  final ItemQuery<Sample> sampleQuery = Sample.getQuery();
95  sampleQuery.include(cc.getInclude());
96  sampleQuery.restrict(Restrictions.eq(Hql.property("parent"), Expressions.parameter("bioSource")));
97  sampleQuery.order(Orders.asc(Hql.property("name")));
98  final boolean createSamplePermission = sc.hasPermission(Permission.CREATE, Item.SAMPLE);
99
100  Map<Plugin.MainType, Integer> pluginCount = PluginDefinition.countPlugins(dc, guiContext);
101  annotationTypes = annotationTypeQuery.list(dc);
102  try
103  {
104    final ItemQuery<BioSource> query = Base.getConfiguredQuery(dc, cc, true, BioSource.getQuery(), mode);
105    bioSources = query.iterate(dc);
106  }
107  catch (Throwable t)
108  {
109    cc.setMessage(t.getMessage());
110    t.printStackTrace();
111  }
112  int numListed = 0;
113  Formatter<Date> dateFormatter = FormatterFactory.getDateFormatter(sc);
114  JspContext jspContext = ExtensionsControl.createContext(dc, pageContext, guiContext, null);
115  ExtensionsInvoker invoker = ToolbarUtil.useExtensions(jspContext);
116  %>
117  <base:page title="<%=title==null ? "Biosources" : title%>" type="<%=mode.getPageType()%>">
118  <base:head scripts="menu.js,table.js" styles="menu.css,table.css,toolbar.css">
119    <ext:scripts context="<%=jspContext%>" />
120    <ext:stylesheets context="<%=jspContext%>" />
121    <script language="JavaScript">
122    var submitPage = 'index.jsp';
123    var formId = 'biosources';
124    function newItem()
125    {
126      Main.viewOrEditItem('<%=ID%>', '<%=itemType.name()%>', 0, true);
127    }
128    function editItem(itemId)
129    {
130      Main.viewOrEditItem('<%=ID%>', '<%=itemType.name()%>', itemId, true);
131    }
132    function viewItem(itemId)
133    {
134      Main.viewOrEditItem('<%=ID%>', '<%=itemType.name()%>', itemId, false);
135    }
136    function itemOnClick(evt, itemId)
137    {
138      Table.itemOnClick(formId, evt, itemId, '<%=mode.getName()%>', viewItem, editItem, returnSelected);
139    }
140    function deleteItems()
141    {
142      var frm = document.forms[formId];
143      if (Forms.numChecked(frm) == 0)
144      {
145        alert('Please select at least one item in the list');
146        return;
147      }
148      frm.action = submitPage;
149      frm.cmd.value = 'DeleteItems';
150      frm.submit();
151    }
152    function restoreItems()
153    {
154      var frm = document.forms[formId];
155      if (Forms.numChecked(frm) == 0)
156      {
157        alert('Please select at least one item in the list');
158        return;
159      }
160      frm.action = submitPage;
161      frm.cmd.value = 'RestoreItems';
162      frm.submit();
163    }
164    function deleteItemPermanently(itemId)
165    {
166      Main.deleteItemPermanently('<%=ID%>', true, '<%=itemType.name()%>', itemId);
167    }
168    function setOwner()
169    {
170      Table.setOwnerOfItems(submitPage, '<%=ID%>', formId, '<%=itemType.name()%>', 'SetOwnerOfItems');
171    }
172    function shareItem(itemId)
173    {
174      Main.openPopup('index.jsp?ID=<%=ID%>&cmd=ShareItem&item_id='+itemId, 'ShareBiosources', 600, 400);
175    }
176    function shareItems()
177    {
178      Table.shareItems(submitPage, '<%=ID%>', formId, '<%=itemType.name()%>', 'ShareItems');
179    }
180    function configureColumns()
181    {
182      Table.configureColumns('<%=ID%>', formId, '<%=itemType.name()%>', '<%=(String)cc.getObject("defaultColumns")%>');
183    }
184    function runPlugin(cmd)
185    {
186      Table.submitToPopup(formId, cmd, 750, 500);
187    }
188    function returnSelected()
189    {
190      Table.returnSelected(formId, <%=callback != null ? "window.opener."+callback : "null" %>);
191      window.close();
192    }
193    function presetOnChange()
194    {
195      Table.presetOnChange('<%=ID%>', formId, '<%=itemType.name()%>', '<%=(String)cc.getObject("defaultColumns")%>');
196    }
197    function newSample(bioSourceId)
198    {
199      Main.viewOrEditItem('<%=ID%>', 'SAMPLE', 0, true, '&biosource_id='+bioSourceId);
200    }
201    function newBioMaterialList()
202    {
203      var controller = Main.getController('BIOMATERIALLIST');
204      Table.submitToPopup(formId, 'CreateBioMaterialList', controller.width, controller.height);
205    }
206    </script>
207  </base:head>
208 
209  <base:body>
210    <h1><%=title==null ? "Biosources" : title%></h1>
211    <div class="content">
212    <%
213    if (cc.getMessage() != null)
214    {
215      %>
216      <div class="error"><%=cc.getMessage()%></div>
217      <%
218      cc.setMessage(null);
219    }
220    %>
221      <tbl:toolbar
222        visible="<%=mode.hasToolbar()%>"
223        subclass="topborder"
224        >
225        <tbl:button 
226          disabled="<%=createPermission ? false : true%>" 
227          image="new.gif" 
228          onclick="newItem()" 
229          title="New&hellip;" 
230          tooltip="<%=createPermission ? "Create new biosource" : "You do not have permission to create biosources"%>" 
231        />
232        <tbl:button 
233          image="delete.gif"
234          onclick="deleteItems()" 
235          title="Delete" 
236          tooltip="Delete the selected items" 
237        />
238        <tbl:button 
239          image="restore.gif"
240          onclick="restoreItems()" 
241          title="Restore" 
242          tooltip="Restore the selected (deleted) items"
243        />
244        <tbl:button 
245          image="share.gif"
246          onclick="shareItems()" 
247          title="Share&hellip;" 
248          tooltip="Share the selected items"
249        />
250        <tbl:button 
251          image="take_ownership.png"
252          onclick="setOwner()" 
253          title="Set owner&hellip;"
254          tooltip="Change owner of the selected items"
255        />
256        <tbl:button 
257          image="columns.gif" 
258          onclick="configureColumns()" 
259          title="Columns&hellip;" 
260          tooltip="Show, hide and re-order columns" 
261        />
262        <tbl:button
263          image="add.png"
264          onclick="newBioMaterialList()"
265          title="New biomaterial list&hellip;"
266          tooltip="Create a new biomaterial list from matching biosources"
267          visible="<%=sc.hasPermission(Permission.CREATE, Item.BIOMATERIALLIST)%>"
268        />
269        <tbl:button 
270          image="import.gif" 
271          onclick="runPlugin('ImportItems')" 
272          title="Import&hellip;" 
273          tooltip="Import data" 
274          visible="<%=pluginCount.containsKey(Plugin.MainType.IMPORT)%>"
275        />
276        <tbl:button 
277          image="export.gif" 
278          onclick="runPlugin('ExportItems')" 
279          title="Export&hellip;" 
280          tooltip="Export data" 
281          visible="<%=pluginCount.containsKey(Plugin.MainType.EXPORT)%>"
282        />
283        <tbl:button 
284          image="runplugin.gif" 
285          onclick="runPlugin('RunListPlugin')" 
286          title="Run plugin&hellip;" 
287          tooltip="Run a plugin" 
288          visible="<%=pluginCount.containsKey(Plugin.MainType.OTHER)%>"
289        />
290        <ext:render extensions="<%=invoker%>" context="<%=jspContext%>" 
291          wrapper="<%=new PrefixSuffixRenderer(jspContext, "<td>", "</td>") %>"/>
292      </tbl:toolbar>
293      <tbl:table 
294        id="biosources" 
295        clazz="itemlist" 
296        columns="<%=cc.getSetting("columns")%>"
297        sortby="<%=cc.getSortProperty()%>" 
298        direction="<%=cc.getSortDirection()%>"
299        action="index.jsp"
300        sc="<%=sc%>"
301        item="<%=itemType%>"
302      >
303      <tbl:hidden 
304        name="mode" 
305        value="<%=mode.getName()%>" 
306      />
307      <tbl:hidden 
308        name="callback" 
309        value="<%=callback%>" 
310        skip="<%=callback == null%>" 
311      />
312      <tbl:columndef 
313        id="name"
314        property="name"
315        datatype="string"
316        title="Name"
317        sortable="true" 
318        filterable="true"
319        exportable="true"
320        show="always" 
321      />
322      <tbl:columndef 
323        id="itemSubtype"
324        property="itemSubtype"
325        sortproperty="itemSubtype.name"
326        exportproperty="itemSubtype.name:string"
327        datatype="int"
328        enumeration="<%=Enumeration.fromItems(subtypesQuery.list(dc), "-none-")%>"
329        title="Type"
330        sortable="true" 
331        filterable="true"
332        exportable="true"
333      />
334      <tbl:columndef 
335         id="id"
336        clazz="uniquecol"
337         property="id"
338         datatype="int"
339         title="ID"
340         sortable="true" 
341         filterable="true"
342         exportable="true"
343      />
344      <tbl:columndef 
345        id="externalId"
346        property="externalId"
347        datatype="string"
348        title="External id"
349        sortable="true" 
350        filterable="true"
351        exportable="true"
352      />
353      <tbl:columndef 
354        id="entryDate"
355        property="entryDate"
356        datatype="date"
357        title="Registered"
358        sortable="true" 
359        filterable="true"
360        exportable="true"
361        formatter="<%=dateFormatter%>"
362      />
363      <tbl:columndef
364        id="samples"
365        title="Samples"
366        property="&children(name)"
367        datatype="string"
368        filterable="true"
369        exportable="true"
370      />
371      <tbl:columndef 
372        id="owner"
373        property="owner.name"
374        datatype="string"
375        title="Owner"
376        sortable="true" 
377        filterable="true"
378        exportable="true"
379      />
380      <tbl:columndef 
381        id="description"
382        property="description"
383        datatype="string"
384        title="Description" 
385        sortable="true" 
386        filterable="true" 
387        exportable="true"
388      />     
389      <tbl:columndef
390        id="bioMaterialList"
391        property="@bioMaterialLists"
392        datatype="int"
393        title="Biomaterial list"
394        filterable="true"
395        enumeration="<%=Base.getBioMaterialListsEnum(dc, itemType, cc.getInclude())%>"
396        multiple="false"
397      />
398      <%
399      for (AnnotationType at : annotationTypes)
400      {
401        Enumeration<String, String> annotationEnum = null;
402        Formatter formatter = FormatterFactory.getTypeFormatter(sc, at.getValueType());
403        if (at.isEnumeration())
404        {
405          annotationEnum = new Enumeration<String, String>();
406          List<?> values = at.getValues();
407          for (Object value : values)
408          {
409            String encoded = formatter.format(value);
410            annotationEnum.add(encoded, encoded);
411          }
412        }
413        %>
414        <tbl:columndef 
415          id="<%="at"+at.getId()%>"
416          title="<%=HTML.encodeTags(at.getName())+" [A]"%>" 
417          property="<%="#"+at.getId()%>"
418          annotation="true"
419          datatype="<%=at.getValueType().getStringValue()%>"
420          enumeration="<%=annotationEnum%>"
421          smartenum="<%=at.getDisplayAsList() %>"
422          sortable="false" 
423          filterable="true" 
424          exportable="true"
425          formatter="<%=formatter%>"
426          unit="<%=at.getDefaultUnit()%>"
427        />
428        <%
429      }
430      %>
431      <tbl:columndef
432        id="permission"
433        title="Permission"
434      />
435      <tbl:columndef
436        id="sharedTo"
437        title="Shared to"
438        filterable="true"
439        filterproperty="!sharedTo.name"
440        datatype="string"
441      />
442      <tbl:navigator
443        page="<%=cc.getPage()%>" 
444        rowsperpage="<%=cc.getRowsPerPage()%>" 
445        totalrows="<%=bioSources == null ? 0 : bioSources.getTotalCount()%>" 
446        visible="<%=mode.hasNavigator()%>"
447      />
448      <tbl:data>
449        <tbl:columns>
450        <tbl:presetselector 
451          clazz="columnheader"
452          colspan="3"
453          onchange="presetOnChange()"
454        />
455        </tbl:columns>
456
457        <tr>
458          <tbl:header 
459            clazz="index"
460            >&nbsp;</tbl:header>
461          <tbl:header 
462            clazz="check" 
463            visible="<%=mode.hasCheck()%>"
464            ><base:icon 
465              image="check_uncheck.gif" 
466              tooltip="Check/uncheck all" 
467              onclick="Forms.checkUncheck(document.forms[formId])" 
468            /></tbl:header>
469          <tbl:header 
470            clazz="check" 
471            visible="<%=mode.hasRadio()%>"
472            >&nbsp;</tbl:header>
473          <tbl:header 
474            clazz="icons" 
475            visible="<%=mode.hasIcons()%>"
476            >&nbsp;</tbl:header>
477          <tbl:propertyfilter />
478        </tr>
479         
480          <tbl:rows>
481          <%
482          int index = cc.getPage()*cc.getRowsPerPage();
483          int selectedItemId = cc.getId();
484          if (bioSources != null)
485          {           
486            while (bioSources.hasNext())
487            {
488              BioSource item = bioSources.next();
489              int itemId = item.getId();
490              boolean usePermission = item.hasPermission(Permission.USE);
491              String openSharePopup = "shareItem("+itemId+")";
492              String deletePermanently = "deleteItemPermanently("+itemId+")";
493              boolean deletePermission = item.hasPermission(Permission.DELETE);
494              boolean sharePermission = item.hasPermission(Permission.SET_PERMISSION);
495              boolean writePermission = item.hasPermission(Permission.WRITE);
496              String tooltip = mode.isSelectionMode() ? 
497                  "Select this item" : "View this item" + (writePermission ? " (use CTRL, ALT or SHIFT to edit)" : "");
498              String name = HTML.encodeTags(item.getName());
499              index++;
500              numListed++;
501              %>
502              <tbl:row>
503                <tbl:header 
504                  clazz="index"
505                  ><%=index%></tbl:header>
506                <tbl:header 
507                  clazz="check" 
508                  visible="<%=mode.hasCheck()%>"
509                  ><input 
510                    type="checkbox" 
511                    name="<%=itemId%>" 
512                    value="<%=itemId%>" 
513                    title="<%=name%>" 
514                    <%=cc.getSelected().contains(itemId) ? "checked" : ""%> 
515                  ></tbl:header>
516                <tbl:header 
517                  clazz="check" 
518                  visible="<%=mode.hasRadio()%>"
519                  ><input 
520                    type="radio" 
521                    name="item_id" 
522                    value="<%=itemId%>" 
523                    title="<%=name%>" 
524                    <%=selectedItemId == itemId ? "checked" : ""%>
525                  ></tbl:header>
526                <tbl:header 
527                  clazz="icons" 
528                  visible="<%=mode.hasIcons()%>"
529                  ><base:icon 
530                    image="<%=deletePermission ? "deleted.gif" : "deleted_disabled.gif"%>"
531                    onclick="<%=deletePermission ? deletePermanently : null%>"
532                    tooltip="This item has been scheduled for deletion" 
533                    visible="<%=item.isRemoved()%>"
534                  /><base:icon 
535                    image="<%=sharePermission ? "shared.gif" : "shared_disabled.gif"%>" 
536                    onclick="<%=sharePermission ? openSharePopup : null%>"
537                    tooltip="This item is shared to other users, groups and/or projects" 
538                    visible="<%=item.isShared()%>"
539                  />&nbsp;</tbl:header>
540                <tbl:cell column="name"><div class="link" 
541                  onclick="itemOnClick(<%=writePermission ? "event" : null%>, <%=itemId%>)" 
542                  title="<%=tooltip%>"><%=name%></div></tbl:cell>
543                <tbl:cell column="id"><%=item.getId()%></tbl:cell>
544                <tbl:cell column="itemSubtype"><base:propertyvalue 
545                    item="<%=item%>" 
546                    property="itemSubtype"
547                    enableEditLink="<%=mode.hasEditLink()%>" 
548                    enablePropertyLink="<%=mode.hasPropertyLink()%>"
549                  /></tbl:cell>
550                <tbl:cell column="externalId"><%=HTML.encodeTags(item.getExternalId())%></tbl:cell>
551                <tbl:cell column="samples">
552                  <%
553                  sampleQuery.setParameter("bioSource", itemId, Type.INT);
554                  try
555                  {
556                    String separator = "";
557                    for (Sample s : sampleQuery.list(dc))
558                    {
559                      out.write(separator);
560                      if (mode.hasPropertyLink())
561                      {
562                        out.write(Base.getLinkedName(ID, s, false, mode.hasEditLink()));
563                      }
564                      else
565                      {
566                        out.write(HTML.encodeTags(s.getName()));
567                      }
568                      separator = ", ";
569                    }
570                  }
571                  catch (Throwable t)
572                  {
573                    %>
574                    <div class="error"><%=t.getMessage()%></div>
575                    <%
576                  }
577                  %>
578                  <base:icon
579                    image="add.png" 
580                    onclick="<%="newSample("+itemId+")"%>" 
581                    tooltip="Create new sample" 
582                    visible="<%=mode.hasEditLink() && createSamplePermission && usePermission %>"
583                  />
584                </tbl:cell>
585                <tbl:cell column="owner"
586                  ><base:propertyvalue 
587                    item="<%=item%>" 
588                    property="owner"
589                    enableEditLink="<%=mode.hasEditLink()%>" 
590                    enablePropertyLink="<%=mode.hasPropertyLink()%>"
591                  /></tbl:cell>
592                <tbl:cell column="entryDate" value="<%=item.getEntryDate()%>" />
593                <tbl:cell column="description"><%=HTML.encodeTags(item.getDescription())%></tbl:cell>               
594                <%
595                AnnotationSet as = item.isAnnotated() ? item.getAnnotationSet() : null;
596                if (as != null)
597                {
598                  for (AnnotationType at : annotationTypes)
599                  {
600                    if (as.hasAnnotation(at))
601                    {
602                      Annotation a = as.getAnnotation(at);
603                      String suffix = a.getUnitSymbol(null);
604                      if (suffix != null) suffix = "&nbsp;" + suffix;
605                      %>
606                      <tbl:cell 
607                        column="<%="at"+at.getId()%>"
608                        ><tbl:cellvalue 
609                          list="<%=a.getValues(null)%>"
610                          suffix="<%=suffix%>"
611                      /></tbl:cell>
612                      <%
613                    }
614                  }
615                }
616                %>
617                <tbl:cell column="permission"><%=PermissionUtil.getShortPermissions(item)%></tbl:cell>
618                <tbl:cell column="sharedTo">
619                  <%
620                  Iterator<Nameable> sharees = ShareableUtil.getSharedTo(dc, item).iterator();
621                  while(sharees.hasNext())
622                  {
623                    Nameable n = sharees.next();
624                    if (mode.hasPropertyLink())
625                    {
626                      out.write(Base.getLinkedName(ID, n, false, mode.hasEditLink()));
627                    }
628                    else
629                    {
630                      out.write(HTML.encodeTags(n.getName()));
631                    }
632                    out.write(sharees.hasNext() ? ", " : "");
633                  }
634                  %>
635                </tbl:cell>
636              </tbl:row>
637              <%
638              }
639            }
640          %>
641          </tbl:rows>
642      </tbl:data>
643      <%
644      if (numListed == 0)
645      {
646        %>
647        <tbl:panel><%=bioSources == null || bioSources.getTotalCount() == 0 ? "No biosources were found" : "No biosources on this page. Please select another page!" %></tbl:panel>
648        <%
649      }
650      else
651      {
652        %>
653        <tbl:navigator
654          page="<%=cc.getPage()%>" 
655          rowsperpage="<%=cc.getRowsPerPage()%>" 
656          totalrows="<%=bioSources == null ? 0 : bioSources.getTotalCount()%>" 
657          visible="<%=mode.hasNavigator()%>"
658          locked="true"
659        />
660        <%
661      }
662      %>
663    </tbl:table>
664    </div>
665
666    <base:buttongroup subclass="dialogbuttons">
667      <base:button onclick="returnSelected();" title="Ok" visible="<%=mode.hasOkButton()%>" />
668      <base:button onclick="window.close();" title="Cancel" visible="<%=mode.hasCancelButton()%>" />
669      <base:button onclick="window.close();" title="Close" visible="<%=mode.hasCloseButton()%>" />
670    </base:buttongroup>
671  </base:body>
672  </base:page>
673  <%
674}
675finally
676{
677  if (bioSources != null) bioSources.close();
678  if (dc != null) dc.close();
679}
680%>
Note: See TracBrowser for help on using the repository browser.