source: trunk/www/biomaterials/bioplates/wells/list_biowells.jsp @ 6701

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

References #1912: Add more filter rows in list pages

Implemented on the biomaterial list pages.

  • Property svn:eol-style set to native
  • Property svn:keywords set to Id
File size: 22.7 KB
Line 
1<%-- $Id: list_biowells.jsp 6701 2015-01-30 13:14:46Z nicklas $
2  ------------------------------------------------------------------
3  Copyright (C) 2005 Nicklas Nordborg
4  Copyright (C) 2006 Jari Häkkinen, Nicklas Nordborg, 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 Martin
24  @version 2.10
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.Include"
31  import="net.sf.basedb.core.ItemContext"
32  import="net.sf.basedb.core.AnnotationType"
33  import="net.sf.basedb.core.BioPlate"
34  import="net.sf.basedb.core.BioPlateType"
35  import="net.sf.basedb.core.BioWell"
36  import="net.sf.basedb.core.MeasuredBioMaterial"
37  import="net.sf.basedb.core.BioMaterialEvent"
38  import="net.sf.basedb.core.ItemQuery"
39  import="net.sf.basedb.core.ItemResultIterator"
40  import="net.sf.basedb.core.ItemResultList"
41  import="net.sf.basedb.core.Permission"
42  import="net.sf.basedb.core.PluginDefinition"
43  import="net.sf.basedb.core.PermissionDeniedException"
44  import="net.sf.basedb.core.Unit"
45  import="net.sf.basedb.core.Quantity"
46  import="net.sf.basedb.core.query.Restrictions"
47  import="net.sf.basedb.core.query.Expressions"
48  import="net.sf.basedb.core.query.Orders"
49  import="net.sf.basedb.core.query.Hql"
50  import="net.sf.basedb.core.plugin.GuiContext"
51  import="net.sf.basedb.core.plugin.Plugin"
52  import="net.sf.basedb.core.snapshot.AnnotationLoaderUtil"
53  import="net.sf.basedb.core.snapshot.AnnotationTypeFilter"
54  import="net.sf.basedb.core.snapshot.AnnotationSnapshot"
55  import="net.sf.basedb.core.snapshot.AnnotationSetSnapshot"
56  import="net.sf.basedb.core.snapshot.SnapshotManager"
57  import="net.sf.basedb.util.Enumeration"
58  import="net.sf.basedb.util.units.UnitUtil"
59  import="net.sf.basedb.clients.web.Base"
60  import="net.sf.basedb.clients.web.ChangeHistoryUtil"
61  import="net.sf.basedb.clients.web.ModeInfo"
62  import="net.sf.basedb.clients.web.PermissionUtil"
63  import="net.sf.basedb.clients.web.util.HTML"
64  import="net.sf.basedb.util.Values"
65  import="net.sf.basedb.util.formatter.Formatter"
66  import="net.sf.basedb.util.formatter.WellCoordinateFormatter"
67  import="net.sf.basedb.clients.web.formatter.FormatterFactory"
68  import="net.sf.basedb.clients.web.extensions.ExtensionsControl"
69  import="net.sf.basedb.clients.web.extensions.JspContext"
70  import="net.sf.basedb.clients.web.extensions.renderer.PrefixSuffixRenderer"
71  import="net.sf.basedb.clients.web.extensions.toolbar.ToolbarUtil"
72  import="net.sf.basedb.clients.web.extensions.list.ListColumnUtil"
73  import="net.sf.basedb.util.extensions.ExtensionsInvoker"
74  import="java.util.ArrayList"
75  import="java.util.List"
76  import="java.util.Map"
77  import="java.util.Date"
78%>
79<%@ taglib prefix="base" uri="/WEB-INF/base.tld" %>
80<%@ taglib prefix="tbl" uri="/WEB-INF/table.tld" %>
81<%@ taglib prefix="t" uri="/WEB-INF/tab.tld" %>
82<%@ taglib prefix="p" uri="/WEB-INF/path.tld" %>
83<%@ taglib prefix="ext" uri="/WEB-INF/extensions.tld" %>
84<%!
85  private static final Item itemType = Item.BIOWELL;
86  private static final GuiContext guiContext = new GuiContext(itemType, GuiContext.Type.LIST);
87%>
88<%
89final int bioPlateId = Values.getInt(request.getParameter("bioplate_id"));
90final SessionControl sc = Base.getExistingSessionControl(pageContext, Permission.DENIED, itemType);
91final String ID = sc.getId();
92final ItemContext cc = Base.getAndSetCurrentContext(sc, itemType, null, null);
93
94final ModeInfo mode = ModeInfo.get(request.getParameter("mode"));
95final String callback = request.getParameter("callback");
96final String title = mode.generateTitle("biowell", "biowells");
97final DbControl dc = sc.newDbControl();
98ItemResultIterator<BioWell> biowells = null;
99List<AnnotationLoaderUtil> annotationLoaders = new ArrayList<AnnotationLoaderUtil>();
100
101Formatter<Date> dateTimeFormatter = FormatterFactory.getDateTimeFormatter(sc);
102Formatter<Date> dateFormatter = FormatterFactory.getDateFormatter(sc);
103
104WellCoordinateFormatter rowFormatter = new WellCoordinateFormatter(true);
105WellCoordinateFormatter columnFormatter = new WellCoordinateFormatter(false);
106
107try
108{
109  final BioPlate bioplate = BioPlate.getById(dc, bioPlateId);
110  final BioPlateType bioPlateType = bioplate.getBioPlateType();
111  final boolean createPermission = bioplate.hasPermission(Permission.WRITE);
112  final boolean deletePermission = createPermission;
113  final BioWell.LockMode lockMode = bioPlateType.getLockMode();
114  final Item bioMaterialType = bioPlateType.getBioMaterialType();
115
116  Enumeration<String, String> rows = new Enumeration<String,String>();
117  for (int r = 0; r < bioplate.getPlateGeometry().getRows() && r < 256; r++)
118  {
119    rows.add(Integer.toString(r), rowFormatter.format(r));
120  }
121 
122  Enumeration<String, String> columns = new Enumeration<String,String>();
123  for (int c = 0; c < bioplate.getPlateGeometry().getColumns() && c < 256; c++)
124  {
125    columns.add(Integer.toString(c), columnFormatter.format(c));
126  }
127 
128  Map<Plugin.MainType, Integer> pluginCount = PluginDefinition.countPlugins(dc, guiContext);
129  Formatter<Number> numericFormatter = FormatterFactory.getNumberFormatter(sc);
130  Unit microGram = UnitUtil.getUnit(dc, Quantity.MASS, "µg");
131
132  SnapshotManager manager = new SnapshotManager();
133  if (bioMaterialType != null)
134  {
135    final ItemQuery<AnnotationType> annotationTypeQuery = Base.getAnnotationTypesQuery(bioMaterialType);
136    for (AnnotationType at : annotationTypeQuery.list(dc))
137    {
138      annotationLoaders.add(new AnnotationLoaderUtil(dc, manager, at));
139    }
140  }
141
142  try
143  {
144    final ItemQuery<BioWell> query = Base.getConfiguredQuery(dc, cc, true, bioplate.getBioWells(), mode);
145    query.join(Hql.leftJoin(null, "bioMaterial", "mbm", null, true));
146    query.join(Hql.leftJoin("mbm", "creationEvent", "evt", null, true));
147    query.join(Hql.leftJoin("mbm", "owner", "usr", null, false));
148    query.join(Hql.leftJoin("evt", "protocol", "pcl", null, false));
149    if (!"row".equals(cc.getSortProperty())) query.order(Orders.asc(Hql.property("row")));
150    if (!"column".equals(cc.getSortProperty())) query.order(Orders.asc(Hql.property("column")));
151    biowells = query.iterate(dc);
152  }
153  catch (Throwable t)
154  {
155    cc.setMessage(t.getMessage());
156    t.printStackTrace();
157  }
158  int numListed = 0;
159  JspContext jspContext = ExtensionsControl.createContext(dc, pageContext, guiContext, bioplate);
160  ExtensionsInvoker invoker = ToolbarUtil.useExtensions(jspContext);
161  ExtensionsInvoker columnsInvoker = ListColumnUtil.useExtensions(jspContext);
162  %>
163  <base:page title="<%=title%>" type="<%=mode.getPageType()%>" id="list-page">
164  <base:head scripts="table.js,tabcontrol-2.js,~biowells.js" styles="table.css,toolbar.css,headertabcontrol.css,path.css">
165    <ext:scripts context="<%=jspContext%>" />
166    <ext:stylesheets context="<%=jspContext%>" />
167  </base:head>
168  <base:body>
169    <%
170    if (!mode.isSelectionMode())
171    {
172      %>
173      <p:path><p:pathelement 
174        title="Bioplates" href="<%="../index.jsp?ID="+ID%>" 
175        /><p:pathelement title="<%=HTML.encodeTags(bioplate.getName())%>" 
176        /></p:path>
177      <%
178    }
179    else
180    {
181      %>
182      <h1><%=title%></h1>
183      <%
184    }
185    %>
186    <t:tabcontrol 
187      id="main"
188      subclass="content mastertabcontrol"
189      active="biowells" 
190      notabs="<%=mode.isSelectionMode()%>"
191      >
192    <t:tab id="properties" title="Properties" />
193    <t:tab id="annotations" title="Annotations" />       
194    <t:tab id="biowells" title="Wells">
195    <tbl:table 
196      id="biowells" 
197      columns="<%=cc.getSetting("columns")%>"
198      sortby="<%=cc.getSortProperty()%>" 
199      direction="<%=cc.getSortDirection()%>"
200      action="index.jsp"
201      sc="<%=sc%>"
202      item="<%=itemType%>"
203      filterrows="<%=cc.getFilterRows()%>"
204      subclass="fulltable"
205      >
206      <tbl:hidden 
207        name="mode" 
208        value="<%=mode.getName()%>" 
209      />
210      <tbl:hidden 
211        name="bioplate_id" 
212        value="<%=String.valueOf(bioPlateId)%>" 
213      />
214      <tbl:hidden 
215        name="callback" 
216        value="<%=callback%>" 
217        skip="<%=callback == null%>" 
218      />
219      <tbl:columndef 
220        id="row"
221        property="row"
222        datatype="int"
223        title="Row"
224        sortable="true" 
225        filterable="true"
226        enumeration="<%=rows%>"
227        exportable="true"
228        show="always" 
229        formatter="<%=rowFormatter%>"
230      />
231      <tbl:columndef 
232        id="column"
233        property="column"
234        datatype="int"
235        title="Column"
236        sortable="true" 
237        filterable="true"
238        enumeration="<%=columns%>"
239        exportable="true"
240        show="always" 
241        formatter="<%=columnFormatter%>"
242      />
243      <tbl:columndef 
244        id="id"
245        clazz="uniquecol"
246        property="id"
247        datatype="int"
248        title="ID"
249        sortable="true"
250        filterable="true"
251        exportable="true"
252      /> 
253      <tbl:columndef 
254        id="bioMaterial.name"
255        property="$mbm.name"
256        exportproperty="bioMaterial.name"
257        datatype="string"
258        title="Name"
259        sortable="true" 
260        filterable="true"
261        exportable="true"
262      />
263      <tbl:columndef 
264        id="bioMaterial.externalId"
265        property="$mbm.externalId"
266        exportproperty="bioMaterial.externalId"
267        datatype="string"
268        title="External id"
269        sortable="true" 
270        filterable="true"
271        exportable="true"
272      />     
273      <tbl:columndef 
274        id="bioMaterial.originalQuantity"
275        property="$mbm.originalQuantity"
276        exportproperty="bioMaterial.originalQuantity"
277        datatype="float"
278        title="Original quantity (µg)"
279        sortable="true" 
280        filterable="true"
281        exportable="true"
282        unit="<%=microGram%>"
283        formatter="<%=numericFormatter%>"
284      />
285      <tbl:columndef 
286        id="bioMaterial.remainingQuantity"
287        property="$mbm.remainingQuantity"
288        exportproperty="bioMaterial.remainingQuantity"
289        datatype="float"
290        title="Remaining quantity (µg)"
291        sortable="true" 
292        filterable="true"
293        exportable="true"
294        unit="<%=microGram%>"
295        formatter="<%=numericFormatter%>"
296      />
297      <tbl:columndef 
298        id="bioMaterial.protocol"
299        property="$evt.protocol"
300        sortproperty="$pcl.name"
301        filterproperty="$pcl.name"
302        exportproperty="bioMaterial.creationEvent.protocol.name"
303        datatype="string"
304        title="Protocol"
305        sortable="true" 
306        filterable="true"
307        exportable="true"
308      />
309      <tbl:columndef 
310        id="bioMaterial.entryDate"
311        property="$evt.entryDate"
312        exportproperty="bioMaterial.creationEvent.entryDate"
313        datatype="date"
314        title="Registered"
315        sortable="true" 
316        filterable="true"
317        exportable="true"
318        formatter="<%=dateFormatter%>"
319      />
320      <tbl:columndef 
321        id="bioMaterial.eventDate"
322        property="$evt.eventDate"
323        exportproperty="bioMaterial.creationEvent.eventDate"
324        datatype="date"
325        title="Created"
326        sortable="true" 
327        filterable="true"
328        exportable="true"
329        formatter="<%=dateFormatter%>"
330      />
331      <tbl:columndef 
332        id="bioMaterial.owner"
333        property="$usr.name"
334        exportproperty="bioMaterial.owner.name"
335        datatype="string"
336        title="Owner"
337        sortable="true" 
338        filterable="true"
339        exportable="true"
340      />
341      <tbl:columndef 
342        id="bioMaterial.description"
343        property="$mbm.description"
344        exportproperty="bioMaterial.description"
345        datatype="string"
346        title="Description" 
347        sortable="true" 
348        filterable="true" 
349        exportable="true"
350      />
351      <tbl:columndef
352        id="bioMaterialList"
353        property="@bioMaterial.bioMaterialLists"
354        datatype="int"
355        title="Biomaterial list"
356        filterable="true"
357        enumeration="<%=Base.getBioMaterialListsEnum(dc, bioMaterialType, Include.ALL)%>"
358        multiple="false"
359      />
360      <tbl:columndef 
361        id="originalBioMaterial.name"
362        property="originalBioMaterial.name"
363        datatype="string"
364        title="Original biomaterial"
365        sortable="true" 
366        filterable="true"
367        exportable="true"
368      />
369      <%
370      for (AnnotationLoaderUtil loader : annotationLoaders)
371      {
372        AnnotationType at = loader.getAnnotationType();
373        Enumeration<String, String> annotationEnum = null;
374        Formatter formatter = FormatterFactory.getTypeFormatter(sc, at.getValueType());
375        if (at.isEnumeration())
376        {
377          annotationEnum = new Enumeration<String, String>();
378          List<?> values = at.getValues();
379          for (Object value : values)
380          {
381            String encoded = formatter.format(value);
382            annotationEnum.add(encoded, encoded);
383          }
384        }
385        %>
386        <tbl:columndef 
387          id="<%="at"+at.getId()%>"
388          title="<%=HTML.encodeTags(at.getName())+" [A]"%>" 
389          property="<%="$mbm.#"+at.getId()%>"
390          annotation="true"
391          datatype="<%=at.getValueType().getStringValue()%>"
392          enumeration="<%=annotationEnum%>"
393          smartenum="<%=at.getDisplayAsList() %>"
394          sortable="<%=at.getMultiplicity() == 1%>" 
395          filterable="true" 
396          exportable="false"
397          formatter="<%=formatter%>"
398          unit="<%=at.getDefaultUnit()%>"
399        />
400        <%
401      }
402      %>
403      <tbl:columndef
404        id="permission"
405        title="Permission"
406      />
407      <tbl:columndef 
408        id="xt-columns" 
409        extensions="<%=columnsInvoker%>" 
410        jspcontext="<%=jspContext%>" 
411      />
412      <div class="panelgroup bg-filled-50 bottomborder">
413        <tbl:toolbar
414          visible="<%=mode.hasToolbar()%>"
415          subclass="bottomborder"
416          >
417          <tbl:button 
418            id="btnColumns"
419            image="columns.png" 
420            title="Columns&hellip;" 
421            tooltip="Show, hide and re-order columns" 
422          />
423          <tbl:button 
424            id="btnImport"
425            data-plugin-type="IMPORT"
426            image="import.png" 
427            title="Import&hellip;" 
428            tooltip="Import data" 
429            visible="<%=pluginCount.containsKey(Plugin.MainType.IMPORT)%>"
430          />
431          <tbl:button 
432            id="btnExport"
433            data-plugin-type="EXPORT"
434            image="export.png" 
435            title="Export&hellip;" 
436            tooltip="Export data" 
437            visible="<%=pluginCount.containsKey(Plugin.MainType.EXPORT)%>"
438          />
439          <tbl:button 
440            id="btnRunPlugin"
441            data-plugin-type="OTHER"
442            image="runplugin.png" 
443            title="Run plugin&hellip;" 
444            tooltip="Run a plugin" 
445            visible="<%=pluginCount.containsKey(Plugin.MainType.OTHER)%>"
446          />
447          <ext:render extensions="<%=invoker%>" context="<%=jspContext%>" 
448            wrapper="<%=new PrefixSuffixRenderer(jspContext, "<td>", "</td>") %>"/>
449        </tbl:toolbar>
450        <tbl:panel>
451          <tbl:presetselector />
452          <tbl:navigator
453            page="<%=cc.getPage()%>" 
454            rowsperpage="<%=cc.getRowsPerPage()%>" 
455            totalrows="<%=biowells == null ? 0 : biowells.getTotalCount()%>" 
456            visible="<%=mode.hasNavigator()%>"
457          />
458        </tbl:panel>
459      </div>
460      <tbl:data>
461        <tbl:headers>
462          <tbl:headerrow>
463            <tbl:header colspan="3" />
464            <tbl:columnheaders />
465          </tbl:headerrow>
466          <%
467          int numFilters = cc.getNumPropertyFilters();
468          int numRows = cc.getFilterRows();
469          for (int filterNo = 0; filterNo < numRows; filterNo++)
470          {
471            boolean lastRow = filterNo == numRows-1;
472            %>
473            <tbl:headerrow>
474              <tbl:header subclass="index" />
475              <tbl:header 
476                subclass="check" 
477                visible="<%=mode.hasCheck()%>"
478                ><base:icon 
479                  id="check.uncheck"
480                  image="check_uncheck.png" 
481                  tooltip="Check/uncheck all" 
482                  visible="<%=lastRow%>"
483                /></tbl:header>
484              <tbl:header 
485                subclass="check" 
486                visible="<%=mode.hasRadio()%>"
487                />
488              <tbl:header 
489                subclass="icons" 
490                visible="<%=mode.hasIcons()%>"
491                >
492                <base:icon
493                  subclass="link table-filter-row-action"
494                  image="add.png"
495                  tooltip="Add extra filter row"
496                  visible="<%=lastRow%>"
497                /><base:icon
498                  subclass="link table-filter-row-action"
499                  image="remove.png"
500                  tooltip="Remove this filter row"
501                  visible="<%=numRows > 1 || numFilters > 0 %>"
502                  data-remove-row="<%=filterNo%>"
503                />
504              </tbl:header>
505              <tbl:propertyfilter row="<%=filterNo%>" />
506            </tbl:headerrow>
507            <%
508          }
509          %>
510        </tbl:headers>
511        <tbl:rows>
512          <%
513          if (cc.getMessage() != null)
514          {
515            %>
516            <tbl:panel subclass="bg-filled-50">
517              <div class="messagecontainer error"><%=cc.getMessage()%></div>
518            </tbl:panel>
519            <%
520            cc.setMessage(null);
521          }
522          int index = cc.getPage()*cc.getRowsPerPage();
523          int selectedItemId = cc.getId();
524          if (biowells != null)
525          {           
526            while (biowells.hasNext())
527            {
528              BioWell item = biowells.next();
529              int itemId = item.getId();
530              String coordinate = rowFormatter.format(item.getRow()) + columnFormatter.format(item.getColumn());
531              index++;
532              numListed++;
533              MeasuredBioMaterial bioMaterial = null;
534              BioMaterialEvent creationEvent = null;
535              boolean editWellPermission = item.hasPermission(Permission.USE);
536              try
537              {
538                bioMaterial = item.getBioMaterial();
539                if (bioMaterial != null)
540                {
541                  creationEvent = bioMaterial.getCreationEvent();
542                  editWellPermission &= bioMaterial.hasPermission(Permission.WRITE) && !bioMaterial.isLockedInWell();
543                }
544                else
545                {
546                  editWellPermission &= item.canAddBioMaterial();
547                }
548              }
549              catch (PermissionDeniedException ex)
550              {
551                editWellPermission = false;
552              }
553              %>
554              <tbl:row>
555                <tbl:header 
556                  clazz="index"
557                  ><%=index%></tbl:header>
558                <tbl:header 
559                  clazz="check" 
560                  visible="<%=mode.hasCheck()%>"
561                  ><input 
562                    type="checkbox" 
563                    name="<%=itemId%>" 
564                    value="<%=itemId%>" 
565                    title="<%=coordinate%>" 
566                    <%=cc.getSelected().contains(itemId) ? "checked" : ""%> 
567                  ></tbl:header>
568                <tbl:header 
569                  clazz="check" 
570                  visible="<%=mode.hasRadio()%>"
571                  ><input 
572                    type="radio" 
573                    name="item_id" 
574                    value="<%=itemId%>" 
575                    title="<%=coordinate%>" 
576                    <%=selectedItemId == itemId ? "checked" : ""%>
577                  ></tbl:header>
578                <tbl:header 
579                  clazz="icons" 
580                  visible="<%=mode.hasIcons()%>"
581                  >&nbsp;</tbl:header>
582               
583                <tbl:cell column="id"><%=item.getId()%></tbl:cell>
584                <tbl:cell column="row">
585                  <%
586                  if (mode.isSelectionMode())
587                  {
588                    %>
589                    <div 
590                      class="link table-item"
591                      data-item-id="<%=itemId%>"
592                      tabindex="0"
593                      title="Select this item">
594                      <tbl:cellvalue value="<%=item.getRow()%>" />
595                    </div>
596                  <%
597                  }
598                  else
599                  {
600                    %><tbl:cellvalue value="<%=item.getRow()%>" /><%
601                  }
602                  %>
603                </tbl:cell>
604                <tbl:cell column="column" value="<%=item.getColumn()%>" />
605                <tbl:cell column="bioMaterial.name">
606                  <base:propertyvalue 
607                      item="<%=item%>" 
608                      property="bioMaterial"
609                      enableEditLink="<%=mode.hasEditLink()%>" 
610                      enablePropertyLink="<%=mode.hasPropertyLink()%>"
611                  />
612                  <base:icon 
613                    visible="<%=editWellPermission%>"
614                    subclass="link auto-init"
615                    data-auto-init="item-link" 
616                    data-item-type="BIOWELL" 
617                    data-item-id="<%=itemId %>"
618                    image="edit.png"
619                    tooltip="<%=bioMaterial == null ? "Add biomaterial to this well" : "Change the biomaterial in this well"%>"
620                  />
621                  <base:icon 
622                    visible="<%=!editWellPermission%>"
623                    image="locked.png"
624                    tooltip="<%=item.hasBeenUsed() ? "This well has already been used" : "This well is locked for modification"%>"
625                  />
626                </tbl:cell>
627                <tbl:cell column="bioMaterial.owner"
628                  ><base:propertyvalue 
629                    item="<%=bioMaterial%>" 
630                    property="owner"
631                    enableEditLink="<%=mode.hasEditLink()%>" 
632                    enablePropertyLink="<%=mode.hasPropertyLink()%>" 
633                  /></tbl:cell>
634                <tbl:cell column="bioMaterial.description"><base:propertyvalue item="<%=bioMaterial%>" property="description"/></tbl:cell>
635                <tbl:cell column="bioMaterial.protocol"><base:propertyvalue item="<%=creationEvent%>" property="protocol"/></tbl:cell>
636                <tbl:cell column="bioMaterial.entryDate" value="<%=creationEvent == null ? null : creationEvent.getEntryDate() %>" />
637                <tbl:cell column="bioMaterial.eventDate" value="<%=creationEvent == null ? null : creationEvent.getEntryDate() %>" />
638                <tbl:cell column="bioMaterial.externalId"><%=HTML.encodeTags(bioMaterial == null ? null : bioMaterial.getExternalId())%></tbl:cell>               
639                <tbl:cell column="bioMaterial.originalQuantity" value="<%=bioMaterial == null ? null : bioMaterial.getOriginalQuantity()%>" />
640                <tbl:cell column="bioMaterial.remainingQuantity" value="<%=bioMaterial == null ? null : bioMaterial.getRemainingQuantity()%>" />
641                <tbl:cell column="originalBioMaterial.name"><base:propertyvalue item="<%=item%>" property="originalBioMaterial" /></tbl:cell>
642                <%
643                if (bioMaterial != null && bioMaterial.isAnnotated())
644                {
645                  AnnotationSetSnapshot snapshot = manager.getSnapshot(dc, bioMaterial.getAnnotationSet().getId());
646                  for (AnnotationLoaderUtil loader : annotationLoaders)
647                  {
648                    if (loader.find(snapshot))
649                    {
650                      %>
651                      <tbl:cell 
652                        column="<%="at"+loader.getId()%>"
653                        ><tbl:cellvalue 
654                          list="<%=loader.getValues()%>"
655                          suffix="<%=loader.getUnitSymbol()%>"
656                      /></tbl:cell>
657                      <%
658                    }
659                  }
660                }
661                %>
662                <tbl:cell column="permission"><%=PermissionUtil.getShortPermissions(item)%></tbl:cell>
663                <tbl:xt-cells dc="<%=dc%>" item="<%=item%>">
664                  <tbl:cell column="xt-columns" />
665                </tbl:xt-cells>
666              </tbl:row>
667              <%
668            }
669          }
670          if (numListed == 0)
671          {
672            %>
673            <tbl:panel subclass="bg-filled-50">
674              <div class="messagecontainer note">
675                <%=biowells == null || biowells.getTotalCount() == 0 ? "No biowells were found" : "No biowells on this page. Please select another page!" %>
676              </div>
677            </tbl:panel>
678            <%
679          }
680          %>
681        </tbl:rows>
682      </tbl:data>
683    </tbl:table>
684    </t:tab>
685   
686    <t:tab id="events" title="Plate events" />
687    <t:tab id="overview" title="Overview" 
688      tooltip="Display a tree overview of related items" />
689    <t:tab id="history" title="Change history" 
690        tooltip="Displays a log of all modifications made to this item"
691        visible="<%=ChangeHistoryUtil.showChangeHistoryTab(sc)%>" />
692    </t:tabcontrol>
693
694    <base:buttongroup subclass="dialogbuttons">
695      <base:button id="btnOk" title="Ok" visible="<%=mode.hasOkButton()%>" />
696      <base:button id="close" title="Cancel" visible="<%=mode.hasCancelButton()%>" />
697      <base:button id="close" title="Close" visible="<%=mode.hasCloseButton()%>" />
698    </base:buttongroup>
699
700  </base:body>
701  </base:page>
702  <%
703}
704finally
705{
706  if (biowells != null) biowells.close();
707  if (dc != null) dc.close();
708}
709%>
Note: See TracBrowser for help on using the repository browser.