source: branches/3.18-stable/www/views/derivedbioassays/list_bioassays.jsp @ 7932

Last change on this file since 7932 was 7932, checked in by Nicklas Nordborg, 3 months ago

References #2246: Sticky table headers

Implemented for all item list pages and a few other places:

  • Extensions installation dialog
  • Administrate / Services list page
  • Batch inherit annotations
  • Manage list presets
  • List of changed item in view job dialog


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