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

Last change on this file since 6698 was 6698, checked in by Nicklas Nordborg, 7 years ago

References #1912: Add more filter rows in list pages

Implemented in list pages on the lower half of 'View' menu (physical bioassays, derived bioassays, experiments, formulas, reporters and reporter lists).

  • Property svn:eol-style set to native
  • Property svn:keywords set to Date Id
File size: 26.9 KB
Line 
1<%-- $Id: list_bioassays.jsp 6698 2015-01-30 09:38:36Z 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.core.snapshot.AnnotationLoaderUtil"
53  import="net.sf.basedb.core.snapshot.AnnotationTypeFilter"
54  import="net.sf.basedb.core.snapshot.AnnotationSnapshot"
55  import="net.sf.basedb.core.snapshot.AnnotationSetSnapshot"
56  import="net.sf.basedb.core.snapshot.SnapshotManager"
57  import="net.sf.basedb.util.Enumeration"
58  import="net.sf.basedb.util.ShareableUtil"
59  import="net.sf.basedb.clients.web.Base"
60  import="net.sf.basedb.clients.web.ModeInfo"
61  import="net.sf.basedb.clients.web.PermissionUtil"
62  import="net.sf.basedb.clients.web.util.HTML"
63  import="net.sf.basedb.util.formatter.Formatter"
64  import="net.sf.basedb.clients.web.formatter.FormatterFactory"
65  import="net.sf.basedb.clients.web.extensions.ExtensionsControl"
66  import="net.sf.basedb.clients.web.extensions.JspContext"
67  import="net.sf.basedb.clients.web.extensions.renderer.PrefixSuffixRenderer"
68  import="net.sf.basedb.clients.web.extensions.toolbar.ToolbarUtil"
69  import="net.sf.basedb.clients.web.extensions.list.ListColumnUtil"
70  import="net.sf.basedb.util.extensions.ExtensionsInvoker"
71  import="net.sf.basedb.util.Values"
72  import="java.util.Iterator"
73  import="java.util.List"
74  import="java.util.Map"
75  import="java.util.Date"
76  import="java.util.ArrayList"
77%>
78<%@ taglib prefix="base" uri="/WEB-INF/base.tld" %>
79<%@ taglib prefix="tbl" uri="/WEB-INF/table.tld" %>
80<%@ taglib prefix="ext" uri="/WEB-INF/extensions.tld" %>
81<%!
82  private static final Item itemType = Item.DERIVEDBIOASSAY;
83  private static final GuiContext guiContext = new GuiContext(itemType, GuiContext.Type.LIST);
84%>
85<%
86final SessionControl sc = Base.getExistingSessionControl(pageContext, Permission.DENIED, itemType);
87final String ID = sc.getId();
88final boolean createPermission = sc.hasPermission(Permission.CREATE, itemType);
89final boolean createRawBioAssayPermission = sc.hasPermission(Permission.CREATE, Item.RAWBIOASSAY);
90final ItemContext cc = Base.getAndSetCurrentContext(sc, itemType, null, null);
91
92final ModeInfo mode = ModeInfo.get(request.getParameter("mode"));
93final String callback = request.getParameter("callback");
94final String title = mode.generateTitle("derived bioassay", "derived bioassays");
95final DbControl dc = sc.newDbControl();
96ItemResultIterator<DerivedBioAssay> bioAssays = null;
97List<AnnotationLoaderUtil> annotationLoaders = new ArrayList<AnnotationLoaderUtil>();
98try
99{
100  ItemQuery<AnnotationType> annotationTypeQuery = Base.getAnnotationTypesQuery(itemType);
101  SnapshotManager manager = new SnapshotManager();
102  for (AnnotationType at : annotationTypeQuery.list(dc))
103  {
104    annotationLoaders.add(new AnnotationLoaderUtil(dc, manager, at));
105  }
106  annotationTypeQuery = Base.getInheritedAnnotationColumns(cc.getSetting("columns"));
107  for (AnnotationType at : annotationTypeQuery.list(dc))
108  {
109    annotationLoaders.add(new AnnotationLoaderUtil(dc, manager, at, false, true));
110  }
111  final ItemQuery<ItemSubtype> subtypesQuery = Base.getSubtypesQuery(itemType);
112
113  // Query for parent physical bioassays to the current bioassay
114  final ItemQuery<PhysicalBioAssay> physicalBioAssayQuery = PhysicalBioAssay.getQuery();
115  physicalBioAssayQuery.include(cc.getInclude());
116  physicalBioAssayQuery.join(Hql.innerJoin("derivedBioAssays", "dba"));
117  physicalBioAssayQuery.restrict(Restrictions.eq(Hql.alias("dba"), Expressions.parameter("bioAssay")));
118  physicalBioAssayQuery.order(Orders.asc(Hql.property("name"))); 
119
120  // Query for parent bioassays to the current bioassay
121  final ItemQuery<DerivedBioAssay> parentQuery = DerivedBioAssay.getQuery();
122  parentQuery.include(cc.getInclude());
123  parentQuery.join(Hql.innerJoin("children", "c"));
124  parentQuery.restrict(Restrictions.eq(Hql.alias("c"), Expressions.parameter("bioAssay")));
125  parentQuery.order(Orders.asc(Hql.property("name"))); 
126
127  // Query for child bioassays to the current bioassay
128  final ItemQuery<DerivedBioAssay> childQuery = DerivedBioAssay.getQuery();
129  childQuery.include(cc.getInclude());
130  childQuery.join(Hql.innerJoin("parents", "p"));
131  childQuery.restrict(Restrictions.eq(Hql.alias("p"), Expressions.parameter("bioAssay")));
132  childQuery.order(Orders.asc(Hql.property("name"))); 
133
134  // Query for raw bioassays to the current bioassay
135  final ItemQuery<RawBioAssay> rawBioAssayQuery = RawBioAssay.getQuery();
136  rawBioAssayQuery.include(cc.getInclude());
137  rawBioAssayQuery.restrict(Restrictions.eq(Hql.property("parentBioAssay"), Expressions.parameter("bioAssay")));
138  rawBioAssayQuery.order(Orders.asc(Hql.property("name"))); 
139 
140  Map<Plugin.MainType, Integer> pluginCount = PluginDefinition.countPlugins(dc, guiContext);
141  try
142  {
143    final ItemQuery<DerivedBioAssay> query = Base.getConfiguredQuery(dc, cc, true, DerivedBioAssay.getQuery(), mode);
144    bioAssays = query.iterate(dc);
145  }
146  catch (Throwable t)
147  {
148    cc.setMessage(t.getMessage());
149    t.printStackTrace();
150  }
151  int numListed = 0;
152  Formatter<Date> dateFormatter = FormatterFactory.getDateFormatter(sc);
153  JspContext jspContext = ExtensionsControl.createContext(dc, pageContext, guiContext, null);
154  ExtensionsInvoker invoker = ToolbarUtil.useExtensions(jspContext);
155  ExtensionsInvoker columnsInvoker = ListColumnUtil.useExtensions(jspContext);
156  %>
157  <base:page title="<%=title==null ? "Derived bioassays" : title%>" type="<%=mode.getPageType()%>" id="list-page">
158  <base:head scripts="table.js,~bioassays.js" styles="table.css,toolbar.css">
159    <ext:scripts context="<%=jspContext%>" />
160    <ext:stylesheets context="<%=jspContext%>" />
161  </base:head>
162 
163  <base:body>
164    <h1><%=title==null ? "Derived bioassays" : title%></h1>
165    <div class="content">
166    <tbl:table 
167      id="bioassays" 
168      columns="<%=cc.getSetting("columns")%>"
169      sortby="<%=cc.getSortProperty()%>" 
170      direction="<%=cc.getSortDirection()%>"
171      action="index.jsp"
172      sc="<%=sc%>"
173      item="<%=itemType%>"
174      filterrows="<%=cc.getFilterRows()%>"
175      subclass="fulltable"
176      data-inherited-annotations="true"
177      >
178      <tbl:hidden 
179        name="mode" 
180        value="<%=mode.getName()%>" 
181      />
182      <tbl:hidden 
183        name="callback" 
184        value="<%=callback%>" 
185        skip="<%=callback == null%>" 
186      />
187      <tbl:columndef 
188        id="name"
189        property="name"
190        datatype="string"
191        title="Name"
192        sortable="true" 
193        filterable="true"
194        exportable="true"
195        show="always" 
196      />
197      <tbl:columndef 
198        id="itemSubtype"
199        property="itemSubtype"
200        sortproperty="itemSubtype.name"
201        exportproperty="itemSubtype.name:string"
202        datatype="int"
203        enumeration="<%=Enumeration.fromItems(subtypesQuery.list(dc), "-none-")%>"
204        title="Type"
205        sortable="true" 
206        filterable="true"
207        exportable="true"
208      />
209      <tbl:columndef
210        id="id"
211        clazz="uniquecol"
212        property="id"
213        datatype="int"
214        title="ID"
215        sortable="true"
216        filterable="true"
217        exportable="true"
218      />
219      <tbl:columndef 
220        id="physicalBioAssays"
221        property="&physicalBioAssays(name)"
222        datatype="string"
223        title="Physical bioassays"
224        filterable="true"
225        exportable="true"
226      />
227      <tbl:columndef 
228        id="parents"
229        property="&parents(name)"
230        datatype="string"
231        title="Parent bioassays"
232        filterable="true"
233        exportable="true"
234      />
235      <tbl:columndef
236        id="children"
237        title="Child bioassays"
238        property="&children(name)"
239        datatype="string"
240        filterable="true"
241        exportable="true"
242      />
243      <tbl:columndef 
244        id="extract"
245        property="extract.name"
246        datatype="string"
247        title="Extract"
248        sortable="true" 
249        filterable="true"
250        exportable="true"
251      />
252      <tbl:columndef
253        id="rawBioAssays"
254        title="Raw bioassays"
255        property="&rawBioAssays(name)"
256        datatype="string"
257        filterable="true"
258        exportable="true"
259      />
260      <tbl:columndef 
261        id="plugin"
262        property="job.pluginDefinition.name"
263        datatype="string"
264        title="Plugin"
265        sortable="true" 
266        filterable="true"
267        exportable="true"
268      />
269      <tbl:columndef 
270        id="protocol"
271        property="protocol.name"
272        datatype="string"
273        title="Protocol"
274        sortable="true" 
275        filterable="true"
276        exportable="true"
277      />
278      <tbl:columndef
279        id="hardware"
280        property="hardware.name"
281        datatype="string"
282        title="Hardware"
283        sortable="true"
284        filterable="true"
285        exportable="true"
286      />
287      <tbl:columndef
288        id="software"
289        property="software.name"
290        datatype="string"
291        title="Software"
292        sortable="true"
293        filterable="true"
294        exportable="true"
295      />
296      <tbl:columndef 
297        id="entryDate"
298        property="entryDate"
299        datatype="date"
300        title="Registered"
301        sortable="true" 
302        filterable="true"
303        exportable="true"
304        formatter="<%=dateFormatter%>"
305      />
306      <tbl:columndef 
307        id="owner"
308        property="owner.name"
309        datatype="string"
310        title="Owner"
311        sortable="true" 
312        filterable="true"
313        exportable="true"
314      />
315      <tbl:columndef 
316        id="description"
317        property="description"
318        datatype="string"
319        title="Description" 
320        sortable="true" 
321        filterable="true" 
322        exportable="true"
323      />
324      <%
325      for (AnnotationLoaderUtil loader : annotationLoaders)
326      {
327        AnnotationType at = loader.getAnnotationType();
328        Formatter formatter = FormatterFactory.getTypeFormatter(sc, at.getValueType());
329        Enumeration<String, String> annotationEnum = null;
330        if (at.isEnumeration())
331        {
332          annotationEnum = new Enumeration<String, String>();
333          List<?> values = at.getValues();
334          for (Object value : values)
335          {
336            String encoded = formatter.format(value);
337            annotationEnum.add(encoded, encoded);
338          }
339        }
340        %>
341        <tbl:columndef 
342          id="<%=(loader.isSearchingInheritedAnnotations() ? "ia" : "at")+at.getId()%>"
343          title="<%=HTML.encodeTags(at.getName())+(loader.isSearchingInheritedAnnotations() ? " [I]" : " [A]")%>" 
344          property="<%=(loader.isSearchingInheritedAnnotations() ? "##" : "#")+at.getId()%>"
345          annotation="true"
346          datatype="<%=at.getValueType().getStringValue()%>"
347          enumeration="<%=annotationEnum%>"
348          smartenum="<%=at.getDisplayAsList() %>"
349          sortable="<%=at.getMultiplicity() == 1 && !loader.isSearchingInheritedAnnotations()%>" 
350          filterable="true" 
351          exportable="true"
352          formatter="<%=formatter%>"
353          unit="<%=at.getDefaultUnit()%>"
354        />
355        <%
356      }
357      %>
358      <tbl:columndef
359        id="permission"
360        title="Permission"
361      />
362      <tbl:columndef
363        id="sharedTo"
364        title="Shared to"
365        filterable="true"
366        filterproperty="!sharedTo.name"
367        datatype="string"
368      />
369      <tbl:columndef 
370        id="xt-columns" 
371        extensions="<%=columnsInvoker%>" 
372        jspcontext="<%=jspContext%>" 
373      />
374      <div class="panelgroup bg-filled-50 bottomborder">
375        <tbl:toolbar
376          subclass="bottomborder"
377          visible="<%=mode.hasToolbar()%>"
378          >
379          <tbl:button 
380            id="btnNewItem"
381            disabled="<%=!createPermission%>" 
382            image="new.png" 
383            title="New&hellip;" 
384            tooltip="<%=createPermission ? "Create new derived bioassay" : "You do not have permission to create derived bioassays"%>" 
385          />
386          <tbl:button 
387            id="btnNewMergedDerivedBioAssay"
388            disabled="<%=!createPermission%>" 
389            image="new_pooled.png" 
390            title="Merge&hellip;" 
391            tooltip="<%=createPermission ? "Create new merged bioassay" : "You do not have permission to create derived bioassay"%>" 
392          />
393          <tbl:button 
394            id="btnDeleteItems"
395            image="delete.png"
396            title="Delete" 
397            tooltip="Delete the selected items" 
398          />
399          <tbl:button 
400            id="btnRestoreItems"
401            image="restore.png"
402            title="Restore" 
403            tooltip="Restore the selected (deleted) items"
404          />
405          <tbl:button 
406            id="btnShareItems"
407            image="share.png"
408            title="Share&hellip;" 
409            tooltip="Share the selected items"
410          />
411          <tbl:button 
412            id="btnSetOwner"
413            image="take_ownership.png"
414            title="Set owner&hellip;"
415            tooltip="Change owner of the selected items"
416          />
417          <tbl:button 
418            id="btnColumns"
419            image="columns.png" 
420            title="Columns&hellip;" 
421            tooltip="Show, hide and re-order columns" 
422          />
423          <tbl:button
424            id="btnInheritAnnotations"
425            image="inherit.png"
426            title="Inherit annotations&hellip;"
427            tooltip="Batch inherit annotations from parent items"
428          />
429          <tbl:button 
430            id="btnImport"
431            data-plugin-type="IMPORT"
432            image="import.png" 
433            title="Import&hellip;" 
434            tooltip="Import data" 
435            visible="<%=pluginCount.containsKey(Plugin.MainType.IMPORT)%>"
436          />
437          <tbl:button 
438            id="btnExport"
439            data-plugin-type="EXPORT"
440            image="export.png" 
441            title="Export&hellip;" 
442            tooltip="Export data" 
443            visible="<%=pluginCount.containsKey(Plugin.MainType.EXPORT)%>"
444          />
445          <tbl:button 
446            id="btnRunPlugin"
447            data-plugin-type="OTHER"
448            image="runplugin.png" 
449            title="Run plugin&hellip;" 
450            tooltip="Run a plugin" 
451            visible="<%=pluginCount.containsKey(Plugin.MainType.OTHER)%>"
452          />
453          <ext:render extensions="<%=invoker%>" context="<%=jspContext%>" 
454            wrapper="<%=new PrefixSuffixRenderer(jspContext, "<td>", "</td>") %>"/>
455        </tbl:toolbar>
456        <tbl:panel>
457          <tbl:presetselector />
458          <tbl:navigator
459            page="<%=cc.getPage()%>" 
460            rowsperpage="<%=cc.getRowsPerPage()%>" 
461            totalrows="<%=bioAssays == null ? 0 : bioAssays.getTotalCount()%>" 
462            visible="<%=mode.hasNavigator()%>"
463          />
464        </tbl:panel>
465      </div>
466      <tbl:data>
467        <tbl:headers>
468          <tbl:headerrow>
469            <tbl:header colspan="3" />
470            <tbl:columnheaders />
471          </tbl:headerrow>
472          <%
473          int numFilters = cc.getNumPropertyFilters();
474          int numRows = cc.getFilterRows();
475          for (int filterNo = 0; filterNo < numRows; filterNo++)
476          {
477            boolean lastRow = filterNo == numRows-1;
478            %>
479            <tbl:headerrow>
480              <tbl:header subclass="index" />
481              <tbl:header 
482                subclass="check" 
483                visible="<%=mode.hasCheck()%>"
484                ><base:icon 
485                  id="check.uncheck"
486                  image="check_uncheck.png" 
487                  tooltip="Check/uncheck all" 
488                  visible="<%=lastRow%>"
489                /></tbl:header>
490              <tbl:header 
491                subclass="check" 
492                visible="<%=mode.hasRadio()%>"
493                />
494              <tbl:header 
495                subclass="icons" 
496                visible="<%=mode.hasIcons()%>"
497                >
498                <base:icon
499                  id="table-add-filter-row"
500                  image="add.png"
501                  tooltip="Add extra filter row"
502                  visible="<%=lastRow%>"
503                /><base:icon
504                  id="<%="remove-filter-row-"+filterNo %>"
505                  subclass="table-remove-filter-row"
506                  image="remove.png"
507                  tooltip="Remove this filter row"
508                  visible="<%=numRows > 1 || numFilters > 0 %>"
509                  data-filter-index="<%=filterNo%>"
510                />
511              </tbl:header>
512              <tbl:propertyfilter row="<%=filterNo%>" />
513            </tbl:headerrow>
514            <%
515          }
516          %>
517        </tbl:headers>
518        <tbl:rows>
519          <%
520          if (cc.getMessage() != null)
521          {
522            %>
523            <tbl:panel subclass="bg-filled-50">
524              <div class="messagecontainer error"><%=cc.getMessage()%></div>
525            </tbl:panel>
526            <%
527            cc.setMessage(null);
528          }
529          int index = cc.getPage()*cc.getRowsPerPage();
530          int selectedItemId = cc.getId();
531          if (bioAssays != null)
532          {           
533            while (bioAssays.hasNext())
534            {
535              DerivedBioAssay item = bioAssays.next();
536              int itemId = item.getId();
537              boolean usePermission = item.hasPermission(Permission.USE);
538             
539             
540              boolean deletePermission = item.hasPermission(Permission.DELETE);
541              boolean sharePermission = item.hasPermission(Permission.SET_PERMISSION);
542              boolean writePermission = item.hasPermission(Permission.WRITE);
543              String tooltip = mode.isSelectionMode() ? 
544                  "Select this item" : "View this item" + (writePermission ? " (use CTRL, ALT or SHIFT to edit)" : "");
545              String name = HTML.encodeTags(item.getName());
546              index++;
547              numListed++;
548              %>
549              <tbl:row>
550                <tbl:header 
551                  clazz="index"
552                  ><%=index%></tbl:header>
553                <tbl:header 
554                  clazz="check" 
555                  visible="<%=mode.hasCheck()%>"
556                  ><input 
557                    type="checkbox" 
558                    name="<%=itemId%>" 
559                    value="<%=itemId%>" 
560                    title="<%=name%>" 
561                    <%=cc.getSelected().contains(itemId) ? "checked" : ""%> 
562                  ></tbl:header>
563                <tbl:header 
564                  clazz="check" 
565                  visible="<%=mode.hasRadio()%>"
566                  ><input 
567                    type="radio" 
568                    name="item_id" 
569                    value="<%=itemId%>" 
570                    title="<%=name%>" 
571                    <%=selectedItemId == itemId ? "checked" : ""%>
572                  ></tbl:header>
573                <tbl:header 
574                  clazz="icons" 
575                  visible="<%=mode.hasIcons()%>"
576                  ><base:icon 
577                    image="deleted.png"
578                    id="<%="delete."+itemId %>"
579                    subclass="<%=deletePermission ? "table-delete-item" : null %>"
580                    data-item-id="<%=itemId%>"
581                    tooltip="This item has been scheduled for deletion" 
582                    visible="<%=item.isRemoved()%>"
583                  /><base:icon 
584                    image="shared.png" 
585                    id="<%="share."+itemId %>"
586                    subclass="<%=sharePermission ? "table-share-item" : null %>"
587                    data-item-id="<%=itemId%>"
588                    tooltip="This item is shared to other users, groups and/or projects" 
589                    visible="<%=item.isShared()%>"
590                  />&nbsp;</tbl:header>
591                <tbl:cell column="name"><div 
592                  class="link table-item"
593                  data-item-id="<%=itemId%>"
594                  data-no-edit="<%=writePermission ? 0 : 1 %>" 
595                  tabindex="0"
596                  title="<%=tooltip%>"><%=name%></div></tbl:cell>
597                <tbl:cell column="id"><%=item.getId()%></tbl:cell>
598                <tbl:cell column="itemSubtype"><base:propertyvalue 
599                    item="<%=item%>" 
600                    property="itemSubtype"
601                    enableEditLink="<%=mode.hasEditLink()%>" 
602                    enablePropertyLink="<%=mode.hasPropertyLink()%>"
603                  /></tbl:cell>
604                <tbl:cell column="children">
605                  <%
606                  childQuery.setParameter("bioAssay", itemId, Type.INT);
607                  try
608                  {
609                    String separator = "";
610                    for (DerivedBioAssay child : childQuery.list(dc))
611                    {
612                      out.write(separator);
613                      if (mode.hasPropertyLink())
614                      {
615                        out.write(Base.getLinkedName(ID, child, false, mode.hasEditLink()));
616                      }
617                      else
618                      {
619                        out.write(HTML.encodeTags(child.getName()));
620                      }
621                      separator = ", ";
622                    }
623                  }
624                  catch (Throwable t)
625                  {
626                    %>
627                    <div class="error"><%=t.getMessage()%></div>
628                    <%
629                  }
630                  %>             
631                  <base:icon
632                    subclass="link auto-init"
633                    data-auto-init="new-child-bioassay"
634                    data-item-id="<%=itemId %>"
635                    image="add.png" 
636                    tooltip="Create new child bioassay" 
637                    visible="<%=mode.hasEditLink() && createPermission && usePermission %>"
638                  />
639                </tbl:cell>
640                <tbl:cell column="rawBioAssays">
641                  <%
642                  rawBioAssayQuery.setParameter("bioAssay", itemId, Type.INT);
643                  try
644                  {
645                    String separator = "";
646                    for (RawBioAssay rba : rawBioAssayQuery.list(dc))
647                    {
648                      out.write(separator);
649                      if (mode.hasPropertyLink())
650                      {
651                        out.write(Base.getLinkedName(ID, rba, false, mode.hasEditLink()));
652                      }
653                      else
654                      {
655                        out.write(HTML.encodeTags(rba.getName()));
656                      }
657                      separator = ", ";
658                    }
659                  }
660                  catch (Throwable t)
661                  {
662                    %>
663                    <div class="error"><%=t.getMessage()%></div>
664                    <%
665                  }
666                  %>             
667                  <base:icon
668                    subclass="link auto-init"
669                    data-auto-init="new-raw-bioassay"
670                    data-item-id="<%=itemId %>"
671                    image="add.png" 
672                    tooltip="Create new raw bioassay" 
673                    visible="<%=mode.hasEditLink() && createRawBioAssayPermission && usePermission %>"
674                  />
675                </tbl:cell>
676                <tbl:cell column="physicalBioAssays">
677                  <%
678                  physicalBioAssayQuery.setParameter("bioAssay", itemId, Type.INT);
679                  try
680                  {
681                    String separator = "";
682                    for (PhysicalBioAssay pba : physicalBioAssayQuery.list(dc))
683                    {
684                      out.write(separator);
685                      if (mode.hasPropertyLink())
686                      {
687                        out.write(Base.getLinkedName(ID, pba, false, mode.hasEditLink()));
688                      }
689                      else
690                      {
691                        out.write(HTML.encodeTags(pba.getName()));
692                      }
693                      separator = ", ";
694                    }
695                  }
696                  catch (Throwable t)
697                  {
698                    %>
699                    <div class="error"><%=t.getMessage()%></div>
700                    <%
701                  }
702                  %>             
703                </tbl:cell>
704                <tbl:cell column="parents">
705                  <%
706                  if (!item.isRoot())
707                  {
708                    parentQuery.setParameter("bioAssay", itemId, Type.INT);
709                    try
710                    {
711                      String separator = "";
712                      for (DerivedBioAssay dba : parentQuery.list(dc))
713                      {
714                        out.write(separator);
715                        if (mode.hasPropertyLink())
716                        {
717                          out.write(Base.getLinkedName(ID, dba, false, mode.hasEditLink()));
718                        }
719                        else
720                        {
721                          out.write(HTML.encodeTags(dba.getName()));
722                        }
723                        separator = ", ";
724                      }
725                    }
726                    catch (Throwable t)
727                    {
728                      %>
729                      <div class="error"><%=t.getMessage()%></div>
730                      <%
731                    }
732                  }
733                  %>             
734                </tbl:cell>
735                <tbl:cell column="extract"
736                  ><base:propertyvalue 
737                    item="<%=item%>" 
738                    property="extract"
739                    enableEditLink="<%=mode.hasEditLink()%>" 
740                    enablePropertyLink="<%=mode.hasPropertyLink()%>"
741                  /></tbl:cell>
742                <tbl:cell column="plugin"
743                  ><base:propertyvalue 
744                    item="<%=item%>" 
745                    property="job.pluginDefinition"
746                    enableEditLink="<%=mode.hasEditLink()%>" 
747                    enablePropertyLink="<%=mode.hasPropertyLink()%>"
748                  /></tbl:cell>
749                <tbl:cell column="protocol"
750                  ><base:propertyvalue 
751                    item="<%=item%>" 
752                    property="protocol"
753                    enableEditLink="<%=mode.hasEditLink()%>" 
754                    enablePropertyLink="<%=mode.hasPropertyLink()%>"
755                  /></tbl:cell>
756                <tbl:cell column="hardware"
757                  ><base:propertyvalue 
758                    item="<%=item%>"
759                    property="hardware"
760                    enableEditLink="<%=mode.hasEditLink()%>" 
761                    enablePropertyLink="<%=mode.hasPropertyLink()%>"
762                  /></tbl:cell>
763                <tbl:cell column="software"
764                  ><base:propertyvalue 
765                    item="<%=item%>"
766                    property="software"
767                    enableEditLink="<%=mode.hasEditLink()%>" 
768                    enablePropertyLink="<%=mode.hasPropertyLink()%>"
769                  /></tbl:cell>
770                <tbl:cell column="entryDate" value="<%=item.getEntryDate()%>" />
771                <tbl:cell column="owner"
772                  ><base:propertyvalue 
773                    item="<%=item%>" 
774                    property="owner"
775                    enableEditLink="<%=mode.hasEditLink()%>" 
776                    enablePropertyLink="<%=mode.hasPropertyLink()%>"
777                  /></tbl:cell>
778                <tbl:cell column="description"><%=HTML.encodeTags(item.getDescription())%></tbl:cell>
779                <%
780                if (item.isAnnotated())
781                {
782                  AnnotationSetSnapshot snapshot = manager.getSnapshot(dc, item.getAnnotationSet().getId());
783                  for (AnnotationLoaderUtil loader : annotationLoaders)
784                  {
785                    if (loader.find(snapshot))
786                    {
787                      %>
788                      <tbl:cell 
789                        column="<%=(loader.isSearchingInheritedAnnotations() ? "ia" : "at")+loader.getId()%>"
790                        ><tbl:cellvalue 
791                          list="<%=loader.getValues()%>"
792                          suffix="<%=loader.getUnitSymbol()%>"
793                      /></tbl:cell>
794                      <%
795                    }
796                  }
797                }
798                %>
799                <tbl:cell column="permission"><%=PermissionUtil.getShortPermissions(item)%></tbl:cell>
800                <tbl:cell column="sharedTo">
801                  <%
802                  Iterator<Nameable> sharees = ShareableUtil.getSharedTo(dc, item).iterator();
803                  while(sharees.hasNext())
804                  {
805                    Nameable n = sharees.next();
806                    if (mode.hasPropertyLink())
807                    {
808                      out.write(Base.getLinkedName(ID, n, false, mode.hasEditLink()));
809                    }
810                    else
811                    {
812                      out.write(HTML.encodeTags(n.getName()));
813                    }
814                    out.write(sharees.hasNext() ? ", " : "");
815                  }
816                  %>
817                </tbl:cell>
818                <tbl:xt-cells dc="<%=dc%>" item="<%=item%>">
819                  <tbl:cell column="xt-columns" />
820                </tbl:xt-cells>
821              </tbl:row>
822              <%
823              }
824            }
825          if (numListed == 0)
826          {
827            %>
828            <tbl:panel subclass="bg-filled-50">
829              <div class="messagecontainer note">
830              <%=bioAssays == null || bioAssays.getTotalCount() == 0 ? "No bioassays were found" : "No bioassays on this page. Please select another page!" %>
831              </div>
832            </tbl:panel>
833            <%
834          }
835          %>
836        </tbl:rows>
837      </tbl:data>
838    </tbl:table>
839    </div>
840   
841    <base:buttongroup subclass="dialogbuttons">
842      <base:button id="btnOk" title="Ok" visible="<%=mode.hasOkButton()%>" />
843      <base:button id="close" title="Cancel" visible="<%=mode.hasCancelButton()%>" />
844      <base:button id="close" title="Close" visible="<%=mode.hasCloseButton()%>" />
845    </base:buttongroup>
846   
847  </base:body>
848  </base:page>
849  <%
850}
851finally
852{
853  if (bioAssays != null) bioAssays.close();
854  if (dc != null) dc.close();
855}
856%>
Note: See TracBrowser for help on using the repository browser.