source: trunk/www/biomaterials/bioplates/list_bioplates.jsp @ 5948

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

References #1655: GUI improvements

Started with the list pages. So far the reporters and the biosurce, sample and extract list pages have been done. The other pages have just been modified to not cause any compilation problems and to display almost ok.

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