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