source: branches/3.16-stable/www/views/physicalbioassays/list_bioassays.jsp @ 7804

Last change on this file since 7804 was 7804, checked in by Nicklas Nordborg, 2 years ago

References #2209: Add items to existing item list from list page

Fixed on the list pages for extracts, physical, derived and raw bioassays.

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