source: branches/3.18-stable/www/lims/arraybatches/list_batches.jsp @ 7939

Last change on this file since 7939 was 7939, checked in by Nicklas Nordborg, 6 months ago

References #2246: Sticky table headers

It should now be implemented on all list pages.

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