source: branches/3.18-stable/www/views/experiments/list_experiments.jsp @ 7932

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

References #2246: Sticky table headers

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

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


  • Property svn:eol-style set to native
  • Property svn:keywords set to Id
File size: 22.3 KB
Line 
1<%-- $Id: list_experiments.jsp 7932 2021-04-28 07:16:56Z 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.AnnotationType"
31  import="net.sf.basedb.core.Experiment"
32  import="net.sf.basedb.core.RawDataType"
33  import="net.sf.basedb.core.RawDataTypes"
34  import="net.sf.basedb.core.ItemQuery"
35  import="net.sf.basedb.core.Include"
36  import="net.sf.basedb.core.ItemResultIterator"
37  import="net.sf.basedb.core.ItemResultList"
38  import="net.sf.basedb.core.ItemContext"
39  import="net.sf.basedb.core.Nameable"
40  import="net.sf.basedb.core.Permission"
41  import="net.sf.basedb.core.PluginDefinition"
42  import="net.sf.basedb.core.Quantity"
43  import="net.sf.basedb.core.Unit"
44  import="net.sf.basedb.core.query.Hql"
45  import="net.sf.basedb.core.query.Restrictions"
46  import="net.sf.basedb.core.query.Expressions"
47  import="net.sf.basedb.core.plugin.GuiContext"
48  import="net.sf.basedb.core.plugin.Plugin"
49  import="net.sf.basedb.core.snapshot.AnnotationLoaderUtil"
50  import="net.sf.basedb.core.snapshot.AnnotationSetSnapshot"
51  import="net.sf.basedb.core.snapshot.SnapshotManager"
52  import="net.sf.basedb.util.Enumeration"
53  import="net.sf.basedb.util.ShareableUtil"
54  import="net.sf.basedb.util.units.UnitUtil"
55  import="net.sf.basedb.clients.web.Base"
56  import="net.sf.basedb.clients.web.ModeInfo"
57  import="net.sf.basedb.clients.web.PermissionUtil"
58  import="net.sf.basedb.clients.web.util.HTML"
59  import="net.sf.basedb.util.Values"
60  import="net.sf.basedb.util.formatter.Formatter"
61  import="net.sf.basedb.clients.web.formatter.FormatterFactory"
62  import="net.sf.basedb.clients.web.extensions.ExtensionsControl"
63  import="net.sf.basedb.clients.web.extensions.JspContext"
64  import="net.sf.basedb.clients.web.extensions.renderer.PrefixSuffixRenderer"
65  import="net.sf.basedb.clients.web.extensions.toolbar.ButtonAction" 
66  import="net.sf.basedb.clients.web.extensions.toolbar.ToolbarUtil"
67  import="net.sf.basedb.clients.web.extensions.list.ListColumnAction"
68  import="net.sf.basedb.clients.web.extensions.list.ListColumnUtil"
69  import="net.sf.basedb.clients.web.util.ProjectSpecificInfoFilter"
70  import="net.sf.basedb.util.extensions.ExtensionsInvoker"
71  import="java.util.Iterator"
72  import="java.util.List"
73  import="java.util.ArrayList"
74  import="java.util.Map"
75  import="java.util.Date"
76%>
77<%@ taglib prefix="base" uri="/WEB-INF/base.tld" %>
78<%@ taglib prefix="tbl" uri="/WEB-INF/table.tld" %>
79<%@ taglib prefix="ext" uri="/WEB-INF/extensions.tld" %>
80<%!
81  private static final Item itemType = Item.EXPERIMENT;
82  private static final GuiContext guiContext = new GuiContext(itemType, GuiContext.Type.LIST);
83%>
84<%
85final SessionControl sc = Base.getExistingSessionControl(pageContext, Permission.DENIED, itemType);
86final String ID = sc.getId();
87final boolean createPermission = sc.hasPermission(Permission.CREATE, itemType);
88final ItemContext cc = Base.getAndSetCurrentContext(sc, itemType, null, null);
89
90final ModeInfo mode = ModeInfo.get(request.getParameter("mode"));
91final String callback = request.getParameter("callback");
92final String title = mode.generateTitle("experiment", "experiments");
93final DbControl dc = sc.newDbControl();
94ItemResultIterator<Experiment> experiments = null;
95List<AnnotationLoaderUtil> annotationLoaders = new ArrayList<AnnotationLoaderUtil>();
96try
97{
98  ItemQuery<AnnotationType> annotationTypeQuery = Base.getAnnotationTypesQuery(itemType);
99  SnapshotManager manager = new SnapshotManager();
100  ProjectSpecificInfoFilter psInfo = new ProjectSpecificInfoFilter();
101  for (AnnotationType at : annotationTypeQuery.list(dc))
102  {
103    annotationLoaders.add(new AnnotationLoaderUtil(dc, manager, at));
104  }
105
106  Unit bytes = UnitUtil.getUnit(dc, Quantity.STORAGE_SIZE, "B");
107  Map<Plugin.MainType, Integer> pluginCount = PluginDefinition.countPlugins(dc, guiContext);
108  JspContext jspContext = ExtensionsControl.createContext(dc, pageContext, guiContext, null);
109  try
110  {
111    final ItemQuery<Experiment> query = Base.getConfiguredQuery(dc, cc, jspContext, true, Experiment.getQuery(), mode);
112    experiments = query.iterate(dc);
113  }
114  catch (Throwable t)
115  {
116    cc.setMessage(t.getMessage());
117  }
118  int numListed = 0;
119  Formatter<Date> dateFormatter = FormatterFactory.getDateFormatter(sc);
120  ExtensionsInvoker<ButtonAction> invoker = ToolbarUtil.useExtensions(jspContext);
121  ExtensionsInvoker<ListColumnAction<Experiment,?>> columnsInvoker = ListColumnUtil.useExtensions(jspContext);
122  %>
123  <base:page title="<%=title==null ? "Experiments" : title%>" type="<%=mode.getPageType()%>" id="list-page">
124  <base:head scripts="table.js,~experiments.js" styles="table.css,toolbar.css">
125    <ext:scripts context="<%=jspContext%>" />
126    <ext:stylesheets context="<%=jspContext%>" />
127  </base:head>
128 
129  <base:body>
130    <h1><%=title==null ? "Experiments" : title%></h1>
131    <div class="content">
132    <tbl:table 
133      id="experiments" 
134      columns="<%=cc.getSetting("columns")%>"
135      sortby="<%=cc.getSortProperty()%>" 
136      direction="<%=cc.getSortDirection()%>"
137      action="index.jsp"
138      sc="<%=sc%>"
139      item="<%=itemType%>"
140      filterrows="<%=cc.getFilterRows()%>"
141      subclass="fulltable sticky-headers"
142      >
143      <tbl:hidden 
144        name="mode" 
145        value="<%=mode.getName()%>" 
146      />
147      <tbl:hidden 
148        name="callback" 
149        value="<%=callback%>" 
150        skip="<%=callback == null%>" 
151      />
152      <tbl:columndef 
153        id="name"
154        property="name"
155        datatype="string"
156        title="Name"
157        sortable="true" 
158        filterable="true"
159        exportable="true"
160        show="always" 
161      />
162      <tbl:columndef 
163        id="id"
164        clazz="uniquecol"
165        property="id"
166        datatype="int"
167        title="ID"
168        sortable="true"
169        filterable="true"
170        exportable="true"
171      />
172      <tbl:columndef 
173        id="entryDate"
174        property="entryDate"
175        datatype="date"
176        title="Registered"
177        sortable="true" 
178        filterable="true"
179        exportable="true"
180        formatter="<%=dateFormatter%>"
181      />
182      <%
183      Enumeration<String, String> rawEnumeration = new Enumeration<String, String>();
184      for (RawDataType rdt : RawDataTypes.getRawDataTypes())
185      {
186        rawEnumeration.add(rdt.getId(), HTML.encodeTags(rdt.getName()));
187      }
188      rawEnumeration.sortValues();
189      %>
190      <tbl:columndef 
191        id="rawDataType"
192        property="rawDataType"
193        datatype="string"
194        enumeration="<%=rawEnumeration%>"
195        title="Raw data type"
196        sortable="true" 
197        filterable="true"
198        exportable="true"
199      />
200      <tbl:columndef 
201        id="bytes"
202        property="bytes"
203        datatype="long"
204        title="Bytes"
205        sortable="true" 
206        filterable="true"
207        exportable="true"
208        unit="<%=bytes%>"
209      />
210      <tbl:columndef 
211        id="directory"
212        property="directory.name"
213        datatype="string"
214        title="Directory"
215        sortable="true" 
216        filterable="true"
217        exportable="true"
218      />
219      <tbl:columndef 
220        id="reporterCloneTemplate"
221        property="virtualDb.reporterCloneTemplate.name"
222        datatype="string"
223        title="Reporter clone template"
224        sortable="true" 
225        filterable="true"
226        exportable="true"
227      />
228      <tbl:columndef 
229        id="title"
230        property="title"
231        datatype="string"
232        title="Title"
233        sortable="true" 
234        filterable="true"
235        exportable="true"
236      />
237      <tbl:columndef 
238        id="abstract"
239        property="abstract"
240        datatype="string"
241        title="Abstract"
242        sortable="true" 
243        filterable="true"
244        exportable="true"
245      />
246      <tbl:columndef 
247        id="affiliations"
248        property="affiliations"
249        datatype="string"
250        title="Affiliations"
251        sortable="true" 
252        filterable="true"
253        exportable="true"
254      />
255      <tbl:columndef 
256        id="authors"
257        property="authors"
258        datatype="string"
259        title="Authors"
260        sortable="true" 
261        filterable="true"
262        exportable="true"
263      />
264      <tbl:columndef 
265        id="experimentDesign"
266        property="experimentDesign"
267        datatype="string"
268        title="Experiment design"
269        sortable="true" 
270        filterable="true"
271        exportable="true"
272      />
273      <tbl:columndef 
274        id="experimentType"
275        property="experimentType"
276        datatype="string"
277        title="Experiment type"
278        sortable="true" 
279        filterable="true"
280        exportable="true"
281      />
282      <tbl:columndef 
283        id="publication"
284        property="publication"
285        datatype="string"
286        title="Publication"
287        sortable="true" 
288        filterable="true"
289        exportable="true"
290      />
291      <tbl:columndef 
292        id="publicationDate"
293        property="publicationDate"
294        datatype="date"
295        title="Publication date"
296        sortable="true" 
297        filterable="true"
298        exportable="true"
299        formatter="<%=dateFormatter%>"
300      />
301      <tbl:columndef 
302        id="pubMedId"
303        property="pubMedId"
304        datatype="string"
305        title="PubMedId"
306        sortable="true" 
307        filterable="true"
308        exportable="true"
309      />
310      <tbl:columndef 
311        id="owner"
312        property="owner.name"
313        datatype="string"
314        title="Owner"
315        sortable="true" 
316        filterable="true"
317        exportable="true"
318      />
319      <tbl:columndef 
320        id="description"
321        property="description"
322        datatype="string"
323        title="Description" 
324        sortable="true" 
325        filterable="true" 
326        exportable="true"
327      />
328      <tbl:columndef 
329        id="actions"
330        title="Actions"
331      />
332      <%
333      for (AnnotationLoaderUtil loader : annotationLoaders)
334      {
335        AnnotationType at = loader.getAnnotationType();
336        Formatter<Object> formatter = FormatterFactory.getTypeFormatter(sc, at.getValueType());
337        Enumeration<String, String> annotationEnum = null;
338        if (at.isEnumeration())
339        {
340          annotationEnum = new Enumeration<String, String>();
341          if (!at.getDisplayAsList()) annotationEnum.add("", "-none-");
342          List<?> values = at.getValues();
343          for (Object value : values)
344          {
345            String encoded = HTML.encodeTags(value.toString());
346            annotationEnum.add(encoded, encoded);
347          }
348        }
349        %>
350        <tbl:columndef 
351          id="<%=(loader.isSearchingInheritedAnnotations() ? "ia" : "at")+at.getId()%>"
352          title="<%=HTML.encodeTags(at.getName())+(loader.isSearchingInheritedAnnotations() ? " [I]" : " [A]")%>" 
353          property="<%=(loader.isSearchingInheritedAnnotations() ? "##" : "#")+at.getId()%>"
354          annotation="true"
355          datatype="<%=at.getValueType().getStringValue()%>"
356          enumeration="<%=annotationEnum%>"
357          smartenum="<%=at.getDisplayAsList() %>"
358          sortable="<%=at.getMultiplicity() == 1 && !loader.isSearchingInheritedAnnotations()%>" 
359          filterable="true" 
360          exportable="true"
361          formatter="<%=formatter%>"
362          unit="<%=at.getDefaultUnit()%>"
363        />
364        <%
365      }
366      %>
367      <tbl:columndef
368        id="permission"
369        title="Permission"
370      />
371      <tbl:columndef
372        id="sharedTo"
373        title="Shared to"
374        filterable="true"
375        filterproperty="!sharedTo.name"
376        datatype="string"
377      />
378      <tbl:columndef 
379        id="xt-columns" 
380        extensions="<%=columnsInvoker%>" 
381        jspcontext="<%=jspContext%>" 
382      />
383      <div class="panelgroup bg-filled-50 bottomborder">
384        <tbl:toolbar
385          subclass="bottomborder"
386          visible="<%=mode.hasToolbar()%>"
387          >
388          <tbl:button 
389            id="btnNewItem"
390            disabled="<%=!createPermission%>" 
391            image="new.png" 
392            title="New&hellip;" 
393            tooltip="<%=createPermission ? "Create new experiment" : "You do not have permission to create experiments"%>" 
394          />
395          <tbl:button 
396            id="btnDeleteItems"
397            image="delete.png"
398            title="Delete" 
399            tooltip="Delete the selected items" 
400          />
401          <tbl:button 
402            id="btnRestoreItems"
403            image="restore.png"
404            title="Restore" 
405            tooltip="Restore the selected (deleted) items"
406          />
407          <tbl:button 
408            id="btnShareItems"
409            image="share.png"
410            title="Share&hellip;" 
411            tooltip="Share the selected items"
412          />
413          <tbl:button 
414            id="btnSetOwner"
415            image="take_ownership.png"
416            title="Set owner&hellip;"
417            tooltip="Change owner of the selected items"
418          />
419          <tbl:button 
420            id="btnColumns"
421            image="columns.png" 
422            title="Columns&hellip;" 
423            tooltip="Show, hide and re-order columns" 
424          />
425          <tbl:button 
426            id="btnImport"
427            data-plugin-type="IMPORT"
428            image="import.png" 
429            title="Import&hellip;" 
430            tooltip="Import data" 
431            visible="<%=pluginCount.containsKey(Plugin.MainType.IMPORT)%>"
432          />
433          <tbl:button 
434            id="btnExport"
435            data-plugin-type="EXPORT"
436            image="export.png" 
437            title="Export&hellip;" 
438            tooltip="Export data" 
439            visible="<%=pluginCount.containsKey(Plugin.MainType.EXPORT)%>"
440          />
441          <tbl:button 
442            id="btnRunPlugin"
443            data-plugin-type="OTHER"
444            image="runplugin.png" 
445            title="Run plugin&hellip;" 
446            tooltip="Run a plugin" 
447            visible="<%=pluginCount.containsKey(Plugin.MainType.OTHER)%>"
448          />
449          <ext:render extensions="<%=invoker%>" context="<%=jspContext%>" 
450            wrapper="<%=new PrefixSuffixRenderer<ButtonAction>(jspContext, "<td>", "</td>") %>"/>
451        </tbl:toolbar>
452        <tbl:panel>
453          <tbl:presetselector />
454          <tbl:navigator
455            page="<%=cc.getPage()%>" 
456            rowsperpage="<%=cc.getRowsPerPage()%>" 
457            totalrows="<%=experiments == null ? 0 : experiments.getTotalCount()%>" 
458            visible="<%=mode.hasNavigator()%>"
459          />
460        </tbl:panel>
461      </div>
462      <tbl:data>
463        <tbl:headers>
464          <tbl:headerrow>
465            <tbl:header colspan="3" />
466            <tbl:columnheaders />
467          </tbl:headerrow>
468          <%
469          int numFilters = cc.getNumPropertyFilters();
470          int numRows = cc.getFilterRows();
471          for (int filterNo = 0; filterNo < numRows; filterNo++)
472          {
473            boolean lastRow = filterNo == numRows-1;
474            %>
475            <tbl:headerrow>
476              <tbl:header subclass="index" />
477              <tbl:header 
478                subclass="check" 
479                visible="<%=mode.hasCheck()%>"
480                ><base:icon 
481                  subclass="link table-check"
482                  image="check_uncheck.png" 
483                  tooltip="Toggle all (use CTRL, ALT or SHIFT to check/uncheck)" 
484                  visible="<%=lastRow%>"
485                /></tbl:header>
486              <tbl:header 
487                subclass="check" 
488                visible="<%=mode.hasRadio()%>"
489                />
490              <tbl:header 
491                subclass="icons" 
492                visible="<%=mode.hasIcons()%>"
493                >
494                <base:icon
495                  subclass="link table-filter-row-action"
496                  image="add.png"
497                  tooltip="Add extra filter row"
498                  visible="<%=lastRow%>"
499                /><base:icon
500                  subclass="link table-filter-row-action"
501                  image="remove.png"
502                  tooltip="Remove this filter row"
503                  visible="<%=numRows > 1 || numFilters > 0 %>"
504                  data-remove-row="<%=filterNo%>"
505                />
506              </tbl:header>
507              <tbl:propertyfilter row="<%=filterNo%>" />
508            </tbl:headerrow>
509            <%
510          }
511          %>
512          <tbl:columnsubtitles />
513        </tbl:headers>
514        <tbl:rows>
515          <%
516          if (cc.getMessage() != null)
517          {
518            %>
519            <tbl:panel subclass="bg-filled-50">
520              <div class="messagecontainer error"><%=cc.getMessage()%></div>
521            </tbl:panel>
522            <%
523            cc.setMessage(null);
524          }
525          int index = cc.getPage()*cc.getRowsPerPage();
526          int selectedItemId = Values.getInt(request.getParameter("item_id"));
527          if (experiments != null)
528          {           
529            while (experiments.hasNext())
530            {
531              Experiment item = experiments.next();
532              int itemId = item.getId();
533             
534             
535              boolean deletePermission = item.hasPermission(Permission.DELETE);
536              boolean sharePermission = item.hasPermission(Permission.SET_PERMISSION);
537              boolean writePermission = item.hasPermission(Permission.WRITE);
538              String tooltip = mode.isSelectionMode() ?
539                  "Select this item" : "View this item" + (writePermission ? " (use CTRL, ALT or SHIFT to edit)" : "");
540              String name = HTML.encodeTags(item.getName());
541              index++;
542              numListed++;
543              %>
544              <tbl:row>
545                <tbl:header 
546                  clazz="index"
547                  ><%=index%></tbl:header>
548                <tbl:header 
549                  clazz="check" 
550                  visible="<%=mode.hasCheck()%>"
551                  ><input 
552                    type="checkbox" 
553                    name="<%=itemId%>" 
554                    value="<%=itemId%>" 
555                    title="<%=name%>" 
556                    <%=cc.getSelected().contains(itemId) ? "checked" : ""%> 
557                  ></tbl:header>
558                <tbl:header 
559                  clazz="check" 
560                  visible="<%=mode.hasRadio()%>"
561                  ><input 
562                    type="radio" 
563                    name="item_id" 
564                    value="<%=itemId%>" 
565                    title="<%=name%>" 
566                    <%=selectedItemId == itemId ? "checked" : ""%>
567                  ></tbl:header>
568                <tbl:header 
569                  clazz="icons" 
570                  visible="<%=mode.hasIcons()%>"
571                  ><base:icon 
572                    image="deleted.png"
573                    id="<%="delete."+itemId %>"
574                    subclass="<%=deletePermission ? "table-delete-item" : "disabled" %>"
575                    data-item-id="<%=itemId%>"
576                    tooltip="This item has been scheduled for deletion" 
577                    visible="<%=item.isRemoved()%>"
578                  /><base:icon 
579                    image="shared.png" 
580                    id="<%="share."+itemId %>"
581                    subclass="<%=sharePermission ? "table-share-item" : "disabled" %>"
582                    data-item-id="<%=itemId%>"
583                    tooltip="This item is shared to other users, groups and/or projects" 
584                    visible="<%=item.isShared()%>"
585                  />&nbsp;</tbl:header>
586                <tbl:cell column="name"><div 
587                  class="link table-item"
588                  data-item-id="<%=itemId%>"
589                  data-no-edit="<%=writePermission ? 0 : 1 %>" 
590                  tabindex="0"
591                  title="<%=tooltip%>"><%=name%></div></tbl:cell>
592                <tbl:cell column="id"><%=item.getId()%></tbl:cell>
593                <tbl:cell column="entryDate" value="<%=item.getEntryDate()%>" />
594                <tbl:cell column="bytes"><%=Values.formatBytes(item.getBytes())%></tbl:cell>
595                <tbl:cell column="rawDataType"><%=HTML.encodeTags(item.getRawDataType().getName())%></tbl:cell>
596                <tbl:cell column="directory"
597                  ><base:propertyvalue 
598                    item="<%=item%>" 
599                    property="directory" 
600                    enableEditLink="<%=mode.hasEditLink()%>" 
601                    enablePropertyLink="<%=mode.hasPropertyLink()%>"
602                  /></tbl:cell>
603                <tbl:cell column="reporterCloneTemplate"
604                  ><base:propertyvalue 
605                    item="<%=item%>" 
606                    property="virtualDb.reporterCloneTemplate" 
607                    enableEditLink="<%=mode.hasEditLink()%>" 
608                    enablePropertyLink="<%=mode.hasPropertyLink()%>"
609                  /></tbl:cell>
610                <tbl:cell column="title"><%=HTML.encodeTags(item.getTitle())%></tbl:cell>
611                <tbl:cell column="abstract"><%=HTML.encodeTags(item.getAbstract())%></tbl:cell>
612                <tbl:cell column="affiliations"><%=HTML.encodeTags(item.getAffiliations())%></tbl:cell>
613                <tbl:cell column="authors"><%=HTML.encodeTags(item.getAuthors())%></tbl:cell>
614                <tbl:cell column="experimentDesign"><%=HTML.encodeTags(item.getExperimentDesign())%></tbl:cell>
615                <tbl:cell column="experimentType"><%=HTML.encodeTags(item.getExperimentType())%></tbl:cell>
616                <tbl:cell column="publication"><%=HTML.encodeTags(item.getPublication())%></tbl:cell>
617                <tbl:cell column="publicationDate" value="<%=item.getPublicationDate()%>" />
618                <tbl:cell column="pubMedId"><%=HTML.encodeTags(item.getPubMedId())%></tbl:cell>
619                <tbl:cell column="owner"
620                  ><base:propertyvalue 
621                    item="<%=item%>" 
622                    property="owner"
623                    enableEditLink="<%=mode.hasEditLink()%>" 
624                    enablePropertyLink="<%=mode.hasPropertyLink()%>"
625                  /></tbl:cell>
626                <tbl:cell column="description"><%=HTML.encodeTags(item.getDescription())%></tbl:cell>
627                <tbl:cell column="actions"><a href="bioassaysets/index.jsp?ID=<%=ID%>&amp;experiment_id=<%=itemId%>">Analyze</a></tbl:cell>
628                <%
629                if (item.isAnnotated())
630                {
631                  AnnotationSetSnapshot snapshot = manager.getSnapshot(dc, item.getAnnotationSet().getId());
632                  for (AnnotationLoaderUtil loader : annotationLoaders)
633                  {
634                    %>
635                    <tbl:cell 
636                      column="<%=(loader.isSearchingInheritedAnnotations() ? "ia" : "at")+loader.getId()%>"
637                      ><%
638                      if (loader.find(snapshot, psInfo.reset())) 
639                      {
640                        %><tbl:cellvalue 
641                          list="<%=loader.getValues()%>"
642                          suffix="<%=loader.getUnitSymbol()%>"
643                          clazz="<%=psInfo.overridesDefaultAnnotation() ? "ps-annotation" : null%>"
644                        /><%
645                      }
646                      %></tbl:cell>
647                    <%
648                  }
649                }
650                %>
651                <tbl:cell column="permission"><%=PermissionUtil.getShortPermissions(item)%></tbl:cell>
652                <tbl:cell column="sharedTo">
653                  <%
654                  Iterator<Nameable> sharees = ShareableUtil.getSharedTo(dc, item).iterator();
655                  while(sharees.hasNext())
656                  {
657                    Nameable n = sharees.next();
658                    if (mode.hasPropertyLink())
659                    {
660                      out.write(Base.getLinkedName(ID, n, false, mode.hasEditLink()));
661                    }
662                    else
663                    {
664                      out.write(HTML.encodeTags(n.getName()));
665                    }
666                    out.write(sharees.hasNext() ? ", " : "");
667                  }
668                  %>
669                </tbl:cell>
670                <tbl:xt-cells dc="<%=dc%>" item="<%=item%>">
671                  <tbl:cell column="xt-columns" />
672                </tbl:xt-cells>
673              </tbl:row>
674              <%
675              }
676            }
677          if (numListed == 0)
678          {
679            %>
680            <tbl:panel subclass="bg-filled-50">
681              <div class="messagecontainer note">
682              <%=experiments == null || experiments.getTotalCount() == 0 ? "No experiments were found" : "No experiments on this page. Please select another page!" %>
683              </div>
684            </tbl:panel>
685            <%
686          }
687          %>
688        </tbl:rows>
689      </tbl:data>
690    </tbl:table>
691    </div>
692   
693    <base:buttongroup subclass="dialogbuttons">
694      <base:button id="btnOk" title="Ok" visible="<%=mode.hasOkButton()%>" />
695      <base:button id="close" title="Cancel" visible="<%=mode.hasCancelButton()%>" />
696      <base:button id="close" title="Close" visible="<%=mode.hasCloseButton()%>" />
697    </base:buttongroup>
698   
699  </base:body>
700  </base:page>
701  <%
702}
703finally
704{
705  if (experiments != null) experiments.close();
706  if (dc != null) dc.close();
707}
708%>
Note: See TracBrowser for help on using the repository browser.