source: trunk/www/views/derivedbioassays/list_bioassays.jsp @ 5685

Last change on this file since 5685 was 5685, checked in by Nicklas Nordborg, 11 years ago

References #1153: Handling short read transcript sequence data

Simplified the design by only keeping DerivedBioAssay between PhysicalBioAssay and RawBioAssay. This should make batch importer, validation, etc. easier to implement and also provides the better backwards compatibility with array experiments. The web gui is usable but may need improvements in some cases.

  • Property svn:eol-style set to native
  • Property svn:keywords set to Date Id
File size: 24.2 KB
Line 
1<%-- $Id: list_bioassays.jsp 5685 2011-08-04 10:58:23Z nicklas $
2  ------------------------------------------------------------------
3  Copyright (C) 2011 Nicklas Nordborg
4
5  This file is part of BASE - BioArray Software Environment.
6  Available at http://base.thep.lu.se/
7
8  BASE is free software; you can redistribute it and/or
9  modify it under the terms of the GNU General Public License
10  as published by the Free Software Foundation; either version 3
11  of the License, or (at your option) any later version.
12
13  BASE is distributed in the hope that it will be useful,
14  but WITHOUT ANY WARRANTY; without even the implied warranty of
15  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
16  GNU General Public License for more details.
17
18  You should have received a copy of the GNU General Public License
19  along with BASE. If not, see <http://www.gnu.org/licenses/>.
20  ------------------------------------------------------------------
21
22--%>
23<%@ page pageEncoding="UTF-8" session="false"
24  import="net.sf.basedb.core.SessionControl"
25  import="net.sf.basedb.core.DbControl"
26  import="net.sf.basedb.core.Item"
27  import="net.sf.basedb.core.PhysicalBioAssay"
28  import="net.sf.basedb.core.DerivedBioAssay"
29  import="net.sf.basedb.core.RawBioAssay"
30  import="net.sf.basedb.core.BioMaterialEvent"
31  import="net.sf.basedb.core.AnnotationType"
32  import="net.sf.basedb.core.AnnotationSet"
33  import="net.sf.basedb.core.Annotation"
34  import="net.sf.basedb.core.ItemSubtype"
35  import="net.sf.basedb.core.ItemQuery"
36  import="net.sf.basedb.core.Include"
37  import="net.sf.basedb.core.Type"
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.PermissionDeniedException"
44  import="net.sf.basedb.core.PluginDefinition"
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.query.Hql"
50  import="net.sf.basedb.core.plugin.GuiContext"
51  import="net.sf.basedb.core.plugin.Plugin"
52  import="net.sf.basedb.util.Enumeration"
53  import="net.sf.basedb.util.ShareableUtil"
54  import="net.sf.basedb.clients.web.Base"
55  import="net.sf.basedb.clients.web.ModeInfo"
56  import="net.sf.basedb.clients.web.PermissionUtil"
57  import="net.sf.basedb.clients.web.util.HTML"
58  import="net.sf.basedb.util.formatter.Formatter"
59  import="net.sf.basedb.clients.web.formatter.FormatterFactory"
60  import="net.sf.basedb.clients.web.extensions.ExtensionsControl"
61  import="net.sf.basedb.clients.web.extensions.JspContext"
62  import="net.sf.basedb.clients.web.extensions.renderer.PrefixSuffixRenderer"
63  import="net.sf.basedb.clients.web.extensions.toolbar.ToolbarUtil"
64  import="net.sf.basedb.util.extensions.ExtensionsInvoker"
65  import="net.sf.basedb.util.Values"
66  import="java.util.Iterator"
67  import="java.util.List"
68  import="java.util.Map"
69  import="java.util.Date"
70%>
71<%@ taglib prefix="base" uri="/WEB-INF/base.tld" %>
72<%@ taglib prefix="tbl" uri="/WEB-INF/table.tld" %>
73<%@ taglib prefix="ext" uri="/WEB-INF/extensions.tld" %>
74<%!
75  private static final Item itemType = Item.DERIVEDBIOASSAY;
76  private static final GuiContext guiContext = new GuiContext(itemType, GuiContext.Type.LIST);
77%>
78<%
79final SessionControl sc = Base.getExistingSessionControl(pageContext, Permission.DENIED, itemType);
80final String ID = sc.getId();
81final boolean createPermission = sc.hasPermission(Permission.CREATE, itemType);
82final boolean createRawBioAssayPermission = sc.hasPermission(Permission.CREATE, Item.RAWBIOASSAY);
83final ItemContext cc = Base.getAndSetCurrentContext(sc, itemType, null, null);
84
85final ModeInfo mode = ModeInfo.get(request.getParameter("mode"));
86final String callback = request.getParameter("callback");
87final String title = mode.generateTitle("derived bioassay", "derived bioassays");
88final DbControl dc = sc.newDbControl();
89ItemResultIterator<DerivedBioAssay> bioAssays = null;
90ItemResultList<AnnotationType> annotationTypes = null;
91try
92{
93  final ItemQuery<AnnotationType> annotationTypeQuery = Base.getAnnotationTypesQuery(itemType);
94  final ItemQuery<ItemSubtype> subtypesQuery = Base.getSubtypesQuery(itemType);
95
96  // Query for child bioassays to the current bioassay
97  final ItemQuery<DerivedBioAssay> childQuery = DerivedBioAssay.getQuery();
98  childQuery.include(cc.getInclude());
99  childQuery.restrict(Restrictions.eq(Hql.property("parent"), Expressions.parameter("bioAssay")));
100  childQuery.order(Orders.asc(Hql.property("name"))); 
101
102  // Query for raw bioassays to the current bioassay
103  final ItemQuery<RawBioAssay> rawBioAssayQuery = RawBioAssay.getQuery();
104  rawBioAssayQuery.include(cc.getInclude());
105  rawBioAssayQuery.restrict(Restrictions.eq(Hql.property("parentBioAssay"), Expressions.parameter("bioAssay")));
106  rawBioAssayQuery.order(Orders.asc(Hql.property("name"))); 
107 
108  Map<Plugin.MainType, Integer> pluginCount = PluginDefinition.countPlugins(dc, guiContext);
109  annotationTypes = annotationTypeQuery.list(dc);
110  try
111  {
112    final ItemQuery<DerivedBioAssay> query = Base.getConfiguredQuery(dc, cc, true, DerivedBioAssay.getQuery(), mode);
113    bioAssays = query.iterate(dc);
114  }
115  catch (Throwable t)
116  {
117    cc.setMessage(t.getMessage());
118    t.printStackTrace();
119  }
120  int numListed = 0;
121  Formatter<Date> dateFormatter = FormatterFactory.getDateFormatter(sc);
122  JspContext jspContext = ExtensionsControl.createContext(dc, pageContext, guiContext, null);
123  ExtensionsInvoker invoker = ToolbarUtil.useExtensions(jspContext);
124  %>
125  <base:page title="<%=title==null ? "Derived bioassays" : title%>" type="<%=mode.getPageType()%>">
126  <base:head scripts="menu.js,table.js" styles="menu.css,table.css">
127    <ext:scripts context="<%=jspContext%>" />
128    <ext:stylesheets context="<%=jspContext%>" />
129    <script language="JavaScript">
130    var submitPage = 'index.jsp';
131    var formId = 'bioassays';
132    function newItem()
133    {
134      Main.viewOrEditItem('<%=ID%>', '<%=itemType.name()%>', 0, true);
135    }
136    function editItem(itemId)
137    {
138      Main.viewOrEditItem('<%=ID%>', '<%=itemType.name()%>', itemId, true);
139    }
140    function viewItem(itemId)
141    {
142      Main.viewOrEditItem('<%=ID%>', '<%=itemType.name()%>', itemId, false);
143    }
144    function itemOnClick(evt, itemId)
145    {
146      Table.itemOnClick(formId, evt, itemId, '<%=mode.getName()%>', viewItem, editItem, returnSelected);
147    }
148    function deleteItems()
149    {
150      var frm = document.forms[formId];
151      if (Forms.numChecked(frm) == 0)
152      {
153        alert('Please select at least one item in the list');
154        return;
155      }
156      frm.action = submitPage;
157      frm.cmd.value = 'DeleteItems';
158      frm.submit();
159    }
160    function restoreItems()
161    {
162      var frm = document.forms[formId];
163      if (Forms.numChecked(frm) == 0)
164      {
165        alert('Please select at least one item in the list');
166        return;
167      }
168      frm.action = submitPage;
169      frm.cmd.value = 'RestoreItems';
170      frm.submit();
171    }
172    function deleteItemPermanently(itemId)
173    {
174      Main.deleteItemPermanently('<%=ID%>', true, '<%=itemType.name()%>', itemId);
175    }
176    function setOwner()
177    {
178      Table.setOwnerOfItems(submitPage, '<%=ID%>', formId, '<%=itemType.name()%>', 'SetOwnerOfItems');
179    }
180    function shareItem(itemId)
181    {
182      Main.openPopup('index.jsp?ID=<%=ID%>&cmd=ShareItem&item_id='+itemId, 'ShareItem', 600, 400);
183    }
184    function shareItems()
185    {
186      Table.shareItems(submitPage, '<%=ID%>', formId, '<%=itemType.name()%>', 'ShareItems');
187    }
188    function configureColumns()
189    {
190      Table.configureColumns('<%=ID%>', formId, '<%=itemType.name()%>', '<%=(String)cc.getObject("defaultColumns")%>');
191    }
192    function runPlugin(cmd)
193    {
194      Table.submitToPopup(formId, cmd, 740, 540);
195    }
196    function returnSelected()
197    {
198      Table.returnSelected(formId, <%=callback != null ? "window.opener."+callback : "null" %>);
199      window.close();
200    }
201    function presetOnChange()
202    {
203      Table.presetOnChange('<%=ID%>', formId, '<%=itemType.name()%>', '<%=(String)cc.getObject("defaultColumns")%>');
204    }
205    function newChildBioAssay(parentId)
206    {
207      Main.viewOrEditItem('<%=ID%>', 'DERIVEDBIOASSAY', 0, true, '&parent_id='+parentId);
208    }
209    function newRawBioAssay(parentId)
210    {
211      Main.viewOrEditItem('<%=ID%>', 'RAWBIOASSAY', 0, true, '&bioassay_id='+parentId);
212    }
213    </script>
214  </base:head>
215 
216  <base:body>
217    <%
218    if (cc.getMessage() != null)
219    {
220      %>
221      <div class="error"><%=cc.getMessage()%></div>
222      <%
223      cc.setMessage(null);
224    }
225    %>
226    <tbl:table 
227      id="bioassays" 
228      clazz="itemlist" 
229      columns="<%=cc.getSetting("columns")%>"
230      sortby="<%=cc.getSortProperty()%>" 
231      direction="<%=cc.getSortDirection()%>"
232      title="<%=title%>"
233      action="index.jsp"
234      sc="<%=sc%>"
235      item="<%=itemType%>"
236      >
237      <tbl:hidden 
238        name="mode" 
239        value="<%=mode.getName()%>" 
240      />
241      <tbl:hidden 
242        name="callback" 
243        value="<%=callback%>" 
244        skip="<%=callback == null%>" 
245      />
246      <tbl:columndef 
247        id="name"
248        property="name"
249        datatype="string"
250        title="Name"
251        sortable="true" 
252        filterable="true"
253        exportable="true"
254        show="always" 
255      />
256      <tbl:columndef 
257        id="itemSubtype"
258        property="itemSubtype"
259        sortproperty="itemSubtype.name"
260        exportproperty="itemSubtype.name:string"
261        datatype="int"
262        enumeration="<%=Enumeration.fromItems(subtypesQuery.list(dc), "-none-")%>"
263        title="Type"
264        sortable="true" 
265        filterable="true"
266        exportable="true"
267      />
268      <tbl:columndef
269        id="id"
270        clazz="uniquecol"
271        property="id"
272        datatype="int"
273        title="ID"
274        sortable="true"
275        filterable="true"
276        exportable="true"
277      />
278      <tbl:columndef 
279        id="physicalBioAssay"
280        property="physicalBioAssay.name"
281        datatype="string"
282        title="Physical bioassay"
283        sortable="true" 
284        filterable="true"
285        exportable="true"
286      />
287      <tbl:columndef 
288        id="parent"
289        property="parent.name"
290        datatype="string"
291        title="Parent bioassay"
292        sortable="true" 
293        filterable="true"
294        exportable="true"
295      />
296      <tbl:columndef
297        id="children"
298        title="Child bioassays"
299        property="&children(name)"
300        datatype="string"
301        filterable="true"
302        exportable="true"
303      />
304      <tbl:columndef 
305        id="extract"
306        property="extract.name"
307        datatype="string"
308        title="Extract"
309        sortable="true" 
310        filterable="true"
311        exportable="true"
312      />
313      <tbl:columndef
314        id="rawBioAssays"
315        title="Raw bioassays"
316        property="&rawBioAssays(name)"
317        datatype="string"
318        filterable="true"
319        exportable="true"
320      />
321      <tbl:columndef 
322        id="protocol"
323        property="protocol.name"
324        datatype="string"
325        title="Protocol"
326        sortable="true" 
327        filterable="true"
328        exportable="true"
329      />
330      <tbl:columndef
331        id="hardware"
332        property="hardware.name"
333        datatype="string"
334        title="Hardware"
335        sortable="true"
336        filterable="true"
337        exportable="true"
338      />
339      <tbl:columndef
340        id="software"
341        property="software.name"
342        datatype="string"
343        title="Software"
344        sortable="true"
345        filterable="true"
346        exportable="true"
347      />
348      <tbl:columndef 
349        id="entryDate"
350        property="entryDate"
351        datatype="date"
352        title="Registered"
353        sortable="true" 
354        filterable="true"
355        exportable="true"
356        formatter="<%=dateFormatter%>"
357      />
358      <tbl:columndef 
359        id="owner"
360        property="owner.name"
361        datatype="string"
362        title="Owner"
363        sortable="true" 
364        filterable="true"
365        exportable="true"
366      />
367      <tbl:columndef 
368        id="description"
369        property="description"
370        datatype="string"
371        title="Description" 
372        sortable="true" 
373        filterable="true" 
374        exportable="true"
375      />
376      <%
377      for (AnnotationType at : annotationTypes)
378      {
379        Formatter formatter = FormatterFactory.getTypeFormatter(sc, at.getValueType());
380        Enumeration<String, String> annotationEnum = null;
381        if (at.isEnumeration())
382        {
383          annotationEnum = new Enumeration<String, String>();
384          List<?> values = at.getValues();
385          for (Object value : values)
386          {
387            String encoded = formatter.format(value);
388            annotationEnum.add(encoded, encoded);
389          }
390        }
391        %>
392        <tbl:columndef 
393          id="<%="at"+at.getId()%>"
394          title="<%=HTML.encodeTags(at.getName())+" [A]"%>" 
395          property="<%="#"+at.getId()%>"
396          annotation="true"
397          datatype="<%=at.getValueType().getStringValue()%>"
398          enumeration="<%=annotationEnum%>"
399          smartenum="<%=at.getDisplayAsList() %>"
400          sortable="false" 
401          filterable="true" 
402          exportable="true"
403          formatter="<%=formatter%>"
404          unit="<%=at.getDefaultUnit()%>"
405        />
406        <%
407      }
408      %>
409      <tbl:columndef
410        id="permission"
411        title="Permission"
412      />
413      <tbl:columndef
414        id="sharedTo"
415        title="Shared to"
416        filterable="true"
417        filterproperty="!sharedTo.name"
418        datatype="string"
419      />
420      <tbl:toolbar
421        visible="<%=mode.hasToolbar()%>"
422        >
423        <tbl:button 
424          disabled="<%=createPermission ? false : true%>" 
425          image="<%=createPermission ? "new.gif" : "new_disabled.gif"%>" 
426          onclick="newItem()" 
427          title="New&hellip;" 
428          tooltip="<%=createPermission ? "Create new derived bioassay" : "You do not have permission to create derived bioassays"%>" 
429        />
430        <tbl:button 
431          image="delete.gif"
432          onclick="deleteItems()" 
433          title="Delete" 
434          tooltip="Delete the selected items" 
435        />
436        <tbl:button 
437          image="restore.gif"
438          onclick="restoreItems()" 
439          title="Restore" 
440          tooltip="Restore the selected (deleted) items"
441        />
442        <tbl:button 
443          image="share.gif"
444          onclick="shareItems()" 
445          title="Share&hellip;" 
446          tooltip="Share the selected items"
447        />
448        <tbl:button 
449          image="take_ownership.png"
450          onclick="setOwner()" 
451          title="Set owner&hellip;"
452          tooltip="Change owner of the selected items"
453        />
454        <tbl:button 
455          image="columns.gif" 
456          onclick="configureColumns()" 
457          title="Columns&hellip;" 
458          tooltip="Show, hide and re-order columns" 
459        />
460        <tbl:button 
461          image="import.gif" 
462          onclick="runPlugin('ImportItems')" 
463          title="Import&hellip;" 
464          tooltip="Import data" 
465          visible="<%=pluginCount.containsKey(Plugin.MainType.IMPORT)%>"
466        />
467        <tbl:button 
468          image="export.gif" 
469          onclick="runPlugin('ExportItems')" 
470          title="Export&hellip;" 
471          tooltip="Export data" 
472          visible="<%=pluginCount.containsKey(Plugin.MainType.EXPORT)%>"
473        />
474        <tbl:button 
475          image="runplugin.gif" 
476          onclick="runPlugin('RunListPlugin')" 
477          title="Run plugin&hellip;" 
478          tooltip="Run a plugin" 
479          visible="<%=pluginCount.containsKey(Plugin.MainType.OTHER)%>"
480        />
481        <ext:render extensions="<%=invoker%>" context="<%=jspContext%>" 
482          wrapper="<%=new PrefixSuffixRenderer(jspContext, "<td>", "</td>") %>"/>
483      </tbl:toolbar>
484      <tbl:navigator
485        page="<%=cc.getPage()%>" 
486        rowsperpage="<%=cc.getRowsPerPage()%>" 
487        totalrows="<%=bioAssays == null ? 0 : bioAssays.getTotalCount()%>" 
488        visible="<%=mode.hasNavigator()%>"
489      />
490      <tbl:data>
491        <tbl:columns>
492        <tbl:presetselector 
493          clazz="columnheader"
494          colspan="3"
495          onchange="presetOnChange()"
496        />
497        </tbl:columns>
498
499        <tr>
500          <tbl:header 
501            clazz="index"
502            >&nbsp;</tbl:header>
503          <tbl:header 
504            clazz="check" 
505            visible="<%=mode.hasCheck()%>"
506            ><base:icon 
507              image="check_uncheck.gif" 
508              tooltip="Check/uncheck all" 
509              onclick="Forms.checkUncheck(document.forms[formId])" style="align: left;"
510            /></tbl:header>
511          <tbl:header 
512            clazz="check" 
513            visible="<%=mode.hasRadio()%>"
514            >&nbsp;</tbl:header>
515          <tbl:header 
516            clazz="icons" 
517            visible="<%=mode.hasIcons()%>"
518            >&nbsp;</tbl:header>
519          <tbl:propertyfilter />
520        </tr>
521         
522          <tbl:rows>
523          <%
524          int index = cc.getPage()*cc.getRowsPerPage();
525          int selectedItemId = cc.getId();
526          if (bioAssays != null)
527          {           
528            while (bioAssays.hasNext())
529            {
530              DerivedBioAssay item = bioAssays.next();
531              int itemId = item.getId();
532              boolean usePermission = item.hasPermission(Permission.USE);
533              String openSharePopup = "shareItem("+itemId+")";
534              String deletePermanently = "deleteItemPermanently("+itemId+")";
535              boolean deletePermission = item.hasPermission(Permission.DELETE);
536              boolean sharePermission = item.hasPermission(Permission.SET_PERMISSION);
537              boolean writePermission = item.hasPermission(Permission.WRITE);
538              String tooltip = mode.isSelectionMode() ? 
539                  "Select this item" : "View this item" + (writePermission ? " (use CTRL, ALT or SHIFT to edit)" : "");
540              String name = HTML.encodeTags(item.getName());
541              index++;
542              numListed++;
543              %>
544              <tbl:row>
545                <tbl:header 
546                  clazz="index"
547                  ><%=index%></tbl:header>
548                <tbl:header 
549                  clazz="check" 
550                  visible="<%=mode.hasCheck()%>"
551                  ><input 
552                    type="checkbox" 
553                    name="<%=itemId%>" 
554                    value="<%=itemId%>" 
555                    title="<%=name%>" 
556                    <%=cc.getSelected().contains(itemId) ? "checked" : ""%> 
557                  ></tbl:header>
558                <tbl:header 
559                  clazz="check" 
560                  visible="<%=mode.hasRadio()%>"
561                  ><input 
562                    type="radio" 
563                    name="item_id" 
564                    value="<%=itemId%>" 
565                    title="<%=name%>" 
566                    <%=selectedItemId == itemId ? "checked" : ""%>
567                  ></tbl:header>
568                <tbl:header 
569                  clazz="icons" 
570                  visible="<%=mode.hasIcons()%>"
571                  ><base:icon 
572                    image="<%=deletePermission ? "deleted.gif" : "deleted_disabled.gif"%>"
573                    onclick="<%=deletePermission ? deletePermanently : null%>"
574                    tooltip="This item has been scheduled for deletion" 
575                    visible="<%=item.isRemoved()%>"
576                  /><base:icon 
577                    image="<%=sharePermission ? "shared.gif" : "shared_disabled.gif"%>" 
578                    onclick="<%=sharePermission ? openSharePopup : null%>"
579                    tooltip="This item is shared to other users, groups and/or projects" 
580                    visible="<%=item.isShared()%>"
581                  />&nbsp;</tbl:header>
582                <tbl:cell column="name"><div class="link" 
583                  onclick="itemOnClick(<%=writePermission ? "event" : null%>, <%=itemId%>)" 
584                  title="<%=tooltip%>"><%=name%></div></tbl:cell>
585                <tbl:cell column="id"><%=item.getId()%></tbl:cell>
586                <tbl:cell column="itemSubtype"><base:propertyvalue 
587                    item="<%=item%>" 
588                    property="itemSubtype"
589                    enableEditLink="<%=mode.hasEditLink()%>" 
590                    enablePropertyLink="<%=mode.hasPropertyLink()%>"
591                  /></tbl:cell>
592                <tbl:cell column="children">
593                  <%
594                  childQuery.setParameter("bioAssay", itemId, Type.INT);
595                  try
596                  {
597                    String separator = "";
598                    for (DerivedBioAssay child : childQuery.list(dc))
599                    {
600                      out.write(separator);
601                      if (mode.hasPropertyLink())
602                      {
603                        out.write(Base.getLinkedName(ID, child, false, mode.hasEditLink()));
604                      }
605                      else
606                      {
607                        out.write(HTML.encodeTags(child.getName()));
608                      }
609                      separator = ", ";
610                    }
611                  }
612                  catch (Throwable t)
613                  {
614                    %>
615                    <div class="error"><%=t.getMessage()%></div>
616                    <%
617                  }
618                  %>             
619                  <base:icon
620                    image="add.png" 
621                    onclick="<%="newChildBioAssay("+itemId+")"%>" 
622                    tooltip="Create new child bioassay" 
623                    visible="<%=mode.hasEditLink() && createPermission && usePermission %>"
624                  />
625                </tbl:cell>
626                <tbl:cell column="rawBioAssays">
627                  <%
628                  rawBioAssayQuery.setParameter("bioAssay", itemId, Type.INT);
629                  try
630                  {
631                    String separator = "";
632                    for (RawBioAssay rba : rawBioAssayQuery.list(dc))
633                    {
634                      out.write(separator);
635                      if (mode.hasPropertyLink())
636                      {
637                        out.write(Base.getLinkedName(ID, rba, false, mode.hasEditLink()));
638                      }
639                      else
640                      {
641                        out.write(HTML.encodeTags(rba.getName()));
642                      }
643                      separator = ", ";
644                    }
645                  }
646                  catch (Throwable t)
647                  {
648                    %>
649                    <div class="error"><%=t.getMessage()%></div>
650                    <%
651                  }
652                  %>             
653                  <base:icon
654                    image="add.png" 
655                    onclick="<%="newRawBioAssay("+itemId+")"%>" 
656                    tooltip="Create new raw bioassay" 
657                    visible="<%=mode.hasEditLink() && createRawBioAssayPermission && usePermission %>"
658                  />
659                </tbl:cell>
660                <tbl:cell column="physicalBioAssay"
661                  ><base:propertyvalue 
662                    item="<%=item%>" 
663                    property="physicalBioAssay"
664                    enableEditLink="<%=mode.hasEditLink()%>" 
665                    enablePropertyLink="<%=mode.hasPropertyLink()%>"
666                  /></tbl:cell>
667                <tbl:cell column="parent"
668                  ><base:propertyvalue 
669                    item="<%=item%>" 
670                    property="parent"
671                    enableEditLink="<%=mode.hasEditLink()%>" 
672                    enablePropertyLink="<%=mode.hasPropertyLink()%>"
673                  /></tbl:cell>
674                <tbl:cell column="extract"
675                  ><base:propertyvalue 
676                    item="<%=item%>" 
677                    property="extract"
678                    enableEditLink="<%=mode.hasEditLink()%>" 
679                    enablePropertyLink="<%=mode.hasPropertyLink()%>"
680                  /></tbl:cell>
681                <tbl:cell column="protocol"
682                  ><base:propertyvalue 
683                    item="<%=item%>" 
684                    property="protocol"
685                    enableEditLink="<%=mode.hasEditLink()%>" 
686                    enablePropertyLink="<%=mode.hasPropertyLink()%>"
687                  /></tbl:cell>
688                <tbl:cell column="hardware"
689                  ><base:propertyvalue 
690                    item="<%=item%>"
691                    property="hardware"
692                    enableEditLink="<%=mode.hasEditLink()%>" 
693                    enablePropertyLink="<%=mode.hasPropertyLink()%>"
694                  /></tbl:cell>
695                <tbl:cell column="hardware"
696                  ><base:propertyvalue 
697                    item="<%=item%>"
698                    property="software"
699                    enableEditLink="<%=mode.hasEditLink()%>" 
700                    enablePropertyLink="<%=mode.hasPropertyLink()%>"
701                  /></tbl:cell>
702                <tbl:cell column="entryDate" value="<%=item.getEntryDate()%>" />
703                <tbl:cell column="owner"
704                  ><base:propertyvalue 
705                    item="<%=item%>" 
706                    property="owner"
707                    enableEditLink="<%=mode.hasEditLink()%>" 
708                    enablePropertyLink="<%=mode.hasPropertyLink()%>"
709                  /></tbl:cell>
710                <tbl:cell column="description"><%=HTML.encodeTags(item.getDescription())%></tbl:cell>
711                <%
712                AnnotationSet as = item.isAnnotated() ? item.getAnnotationSet() : null;
713                if (as != null)
714                {
715                  for (AnnotationType at : annotationTypes)
716                  {
717                    if (as.hasAnnotation(at))
718                    {
719                      Annotation a = as.getAnnotation(at);
720                      String suffix = a.getUnitSymbol(null);
721                      if (suffix != null) suffix = "&nbsp;" + suffix;
722                      %>
723                      <tbl:cell 
724                        column="<%="at"+at.getId()%>"
725                        ><tbl:cellvalue 
726                          list="<%=a.getValues(null)%>"
727                          suffix="<%=suffix%>"
728                      /></tbl:cell>
729                      <%
730                    }
731                  }
732                }
733                %>
734                <tbl:cell column="permission"><%=PermissionUtil.getShortPermissions(item)%></tbl:cell>
735                <tbl:cell column="sharedTo">
736                  <%
737                  Iterator<Nameable> sharees = ShareableUtil.getSharedTo(dc, item).iterator();
738                  while(sharees.hasNext())
739                  {
740                    Nameable n = sharees.next();
741                    if (mode.hasPropertyLink())
742                    {
743                      out.write(Base.getLinkedName(ID, n, false, mode.hasEditLink()));
744                    }
745                    else
746                    {
747                      out.write(HTML.encodeTags(n.getName()));
748                    }
749                    out.write(sharees.hasNext() ? ", " : "");
750                  }
751                  %>
752                </tbl:cell>
753              </tbl:row>
754              <%
755              }
756            }
757          %>
758          </tbl:rows>
759      </tbl:data>
760      <%
761      if (numListed == 0)
762      {
763        %>
764        <tbl:panel><%=bioAssays == null || bioAssays.getTotalCount() == 0 ? "No bioassays were found" : "No bioassays on this page. Please select another page!" %></tbl:panel>
765        <%
766      }
767      else
768      {
769        %>
770        <tbl:navigator
771          page="<%=cc.getPage()%>" 
772          rowsperpage="<%=cc.getRowsPerPage()%>" 
773          totalrows="<%=bioAssays == null ? 0 : bioAssays.getTotalCount()%>" 
774          visible="<%=mode.hasNavigator()%>"
775          locked="true"
776        />
777        <%
778      }
779      %>
780    </tbl:table>
781    <base:buttongroup align="center" clazz="fixedatbottom">
782      <base:button onclick="returnSelected();" title="Ok" visible="<%=mode.hasOkButton()%>" />
783      <base:button onclick="window.close();" title="Cancel" visible="<%=mode.hasCancelButton()%>" />
784      <base:button onclick="window.close();" title="Close" visible="<%=mode.hasCloseButton()%>" />
785    </base:buttongroup>
786    <br><br><br>
787  </base:body>
788  </base:page>
789  <%
790}
791finally
792{
793  if (bioAssays != null) bioAssays.close();
794  if (dc != null) dc.close();
795}
796%>
Note: See TracBrowser for help on using the repository browser.