source: branches/3.18-stable/www/views/experiments/explorer/search/list.jsp @ 7932

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

References #2246: Sticky table headers

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

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


  • Property svn:eol-style set to native
  • Property svn:keywords set to Date Id
File size: 9.8 KB
Line 
1<%-- $Id: list.jsp 7932 2021-04-28 07:16:56Z nicklas $
2  ------------------------------------------------------------------
3  Copyright (C) 2006 Johan Enell, Nicklas Nordborg
4  Copyright (C) 2007 Johan Enell
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.ItemContext"
31  import="net.sf.basedb.core.Permission"
32  import="net.sf.basedb.core.BioAssaySet"
33  import="net.sf.basedb.core.Experiment"
34  import="net.sf.basedb.core.RawDataType"
35  import="net.sf.basedb.core.ExtendedProperties"
36  import="net.sf.basedb.core.ExtendedProperty"
37  import="net.sf.basedb.core.DynamicReporterQuery"
38  import="net.sf.basedb.core.DynamicResultIterator"
39  import="net.sf.basedb.core.VirtualColumn"
40  import="net.sf.basedb.core.data.ReporterData"
41  import="net.sf.basedb.core.query.Restrictions"
42  import="net.sf.basedb.core.query.Expressions"
43  import="net.sf.basedb.core.query.Dynamic"
44  import="net.sf.basedb.core.query.Orders"
45  import="net.sf.basedb.core.query.Selects"
46  import="net.sf.basedb.core.query.Aggregations"
47  import="net.sf.basedb.core.query.JoinType"
48  import="net.sf.basedb.core.query.SqlResult"
49  import="net.sf.basedb.clients.web.Base"
50  import="net.sf.basedb.clients.web.DynamicUtil"
51  import="net.sf.basedb.clients.web.ExperimentExplorer"
52  import="net.sf.basedb.clients.web.WebException"
53  import="net.sf.basedb.util.Values"
54  import="net.sf.basedb.clients.web.util.HTML"
55  import="net.sf.basedb.clients.web.taglib.table.TableColumn"
56  import="java.util.Date"
57  import="java.util.Map"
58  import="java.util.HashMap"
59  import="java.util.List"
60  import="java.util.LinkedList"
61%>
62<%@ taglib prefix="base" uri="/WEB-INF/base.tld" %>
63<%@ taglib prefix="tbl" uri="/WEB-INF/table.tld" %>
64<%@ taglib prefix="t" uri="/WEB-INF/tab.tld" %>
65<%@ taglib prefix="p" uri="/WEB-INF/path.tld" %>
66<%!
67  private static final Item itemType = Item.REPORTER;
68%>
69
70<%
71final SessionControl sc = Base.getExistingSessionControl(pageContext, true);
72final String ID = sc.getId();
73final float scale = Base.getScale(sc);
74final String root = request.getContextPath();
75
76final int bioAssaySetId = Values.getInt(request.getParameter("bioassayset_id"));
77final DbControl dc = sc.newDbControl();
78DynamicResultIterator reporters = null;
79long totalReporters = 0;
80try
81{
82  String title = null;
83  final BioAssaySet bioAssaySet = BioAssaySet.getById(dc, bioAssaySetId);
84  final Experiment experiment = bioAssaySet.getExperiment();
85  final RawDataType rawDataType = experiment.getRawDataType();
86 
87  final ExperimentExplorer explorer = ExperimentExplorer.getExplorer(bioAssaySet);
88  final ItemContext cc = explorer.getAndSetReporterContext(sc, null);
89  final String subContext = cc.getSubContext();
90
91  List<TableColumn> allColumns = new LinkedList<TableColumn>();
92  DynamicUtil.addReporterColumns(allColumns, dc, experiment.getVirtualDb().getReporterCloneTemplate(), "", "@", "");
93 
94  DynamicUtil.SelectedInfo selected = DynamicUtil.getSelectedColumns(cc, allColumns, false);
95  List<TableColumn> selectedColumns = selected.selectedColumns;
96 
97  try
98  {
99    DynamicReporterQuery reporterQuery = explorer.getReporterQuery(dc, selected.selectedProperties);
100    reporterQuery.setFailSafe(true);
101    totalReporters = explorer.getMatchingReporters(dc);
102    reporters = reporterQuery.iterate(dc);
103  }
104  catch (Throwable t)
105  {
106    cc.setMessage(t.getMessage());
107    t.printStackTrace();
108  }
109  int numListed = 0;
110  %>
111  <base:page title="<%=title%>">
112  <base:head scripts="table.js,tabcontrol-2.js,~list.js" styles="table.css,toolbar.css,headertabcontrol.css,path.css" />
113  <base:body>
114    <p:path><p:pathelement
115      title="Experiments" href="<%="../../index.jsp?ID="+ID%>" 
116      /><p:pathelement title="<%=HTML.encodeTags(experiment.getName())%>" 
117        href="<%="../../bioassaysets/index.jsp?ID="+ID+"&amp;experiment_id="+experiment.getId()%>" 
118      /><p:pathelement title="<%=HTML.encodeTags(bioAssaySet.getName())%>" 
119        href="<%="../../bioassaysets/index.jsp?ID="+ID+"&amp;cmd=ViewItem&amp;item_id="+bioAssaySetId%>" 
120      /><p:pathelement title="Explorer" /></p:path>
121    <t:tabcontrol 
122      id="explorer"
123      subclass="mastertabcontrol content"
124      remember="false" active="search">
125    <t:tab id="search" title="Reporter search">
126    <tbl:table 
127      id="reporters" 
128      columns="<%=cc.getSetting("columns")%>"
129      sortby="<%=cc.getSortProperty()%>" 
130      direction="<%=cc.getSortDirection()%>"
131      action="index.jsp"
132      sc="<%=sc%>"
133      item="<%=itemType%>"
134      subcontext="<%=subContext%>"
135      filterrows="<%=cc.getFilterRows()%>"
136      subclass="fulltable sticky-headers"
137      >
138      <tbl:hidden 
139        name="bioassayset_id" 
140        value="<%=String.valueOf(bioAssaySetId)%>" 
141      />
142      <%
143      for (TableColumn tc : allColumns)
144      {
145        %>
146        <tbl:columndef
147          id="<%=tc.getId()%>"
148          clazz="<%="externalId".equals(tc.getId()) ? "uniquecol" : "columnheader"%>"
149          property="<%=tc.getProperty()%>"
150          datatype="<%=tc.getDatatype().getStringValue()%>"
151          title="<%=tc.getTitle()%>"
152          sortable="<%=tc.getSortable()%>"
153          filterable="<%=tc.getFilterable()%>"
154          exportable="<%=tc.getExportable()%>"
155          show="<%=tc.getShow()%>"
156          formatter="<%=tc.getFormatter()%>"
157        />
158        <%
159      }
160      %>
161      <tbl:columndef 
162        id="reporterList"
163        property="£reporterList"
164        datatype="int"
165        title="Reporter list"
166        filterable="true"
167        enumeration="<%=Base.getReporterListsEnum(dc)%>"
168        multiple="false"
169      />     
170     
171      <div class="panelgroup bg-filled-50 bottomborder">
172        <tbl:toolbar subclass="bottomborder">
173          <tbl:button 
174            id="btnColumns"
175            image="columns.png" 
176            title="Columns&hellip;" 
177            tooltip="Show, hide and re-order columns" 
178          />
179          <tbl:button
180            id="btnNewReporterList"
181            image="add.png"
182            title="New reporter list&hellip;"
183            tooltip="Create a new reporter list from matching reporters"
184            visible="<%=sc.hasPermission(Permission.CREATE, Item.REPORTERLIST)%>"
185          />
186        </tbl:toolbar>
187        <tbl:panel>
188          <tbl:presetselector />
189          <tbl:navigator
190            page="<%=cc.getPage()%>" 
191            rowsperpage="<%=cc.getRowsPerPage()%>" 
192            totalrows="<%=totalReporters%>" 
193          />
194        </tbl:panel>
195      </div>
196      <tbl:data>
197        <tbl:headers>
198          <tbl:headerrow>
199            <tbl:header clazz="icons"/>
200            <tbl:columnheaders />
201          </tbl:headerrow>
202          <%
203          int numFilters = cc.getNumPropertyFilters();
204          int numRows = cc.getFilterRows();
205          for (int filterNo = 0; filterNo < numRows; filterNo++)
206          {
207            boolean lastRow = filterNo == numRows-1;
208            %>
209            <tbl:headerrow>
210              <tbl:header subclass="icons">
211                <base:icon
212                  subclass="link table-filter-row-action"
213                  image="add.png"
214                  tooltip="Add extra filter row"
215                  visible="<%=lastRow%>"
216                /><base:icon
217                  subclass="link table-filter-row-action"
218                  image="remove.png"
219                  tooltip="Remove this filter row"
220                  visible="<%=numRows > 1 || numFilters > 0 %>"
221                  data-remove-row="<%=filterNo%>"
222                />
223              </tbl:header>
224              <tbl:propertyfilter row="<%=filterNo%>" />
225            </tbl:headerrow>
226            <%
227          }
228          %>
229        </tbl:headers>
230        <tbl:rows>
231      <%
232      if (cc.getMessage() != null)
233      {
234        %>
235        <tbl:panel subclass="bg-filled-50">
236          <div class="messagecontainer error"><%=cc.getMessage()%></div>
237        </tbl:panel>
238        <%
239        cc.setMessage(null);
240      }
241      int rowIndex = cc.getPage()*cc.getRowsPerPage();
242      if (reporters != null)
243      {
244        boolean writeReporterPermission = sc.hasPermission(Permission.WRITE, Item.REPORTER);
245        String tooltip = "View this item" + (writeReporterPermission ? " (use CTRL, ALT or SHIFT to edit)" : "");
246        while (reporters.hasNext())
247        {
248          SqlResult item = reporters.next();
249          int itemId = item.getInt(1);
250          rowIndex++;
251          numListed++;
252          %>
253          <tbl:row>
254            <tbl:header 
255              clazz="icons"
256              style="padding-right: 3px;"
257              ><span class="link auto-init" 
258                data-auto-init="view-reporter"
259                data-index="<%=rowIndex-1%>"><%=rowIndex%></span></tbl:header>
260            <%
261            int colIndex = 2;
262            for (TableColumn tc : selectedColumns)
263            {
264              String name = tc.getId();
265              if ("externalId".equals(name))
266              {
267                %>
268                <tbl:cell column="externalId"><div 
269                  class="link table-item"
270                  data-item-id="<%=itemId%>"
271                  data-no-edit="<%=writeReporterPermission ? 0 : 1%>"
272                  tabindex="0"
273                  title="<%=tooltip%>"><%=HTML.encodeTags(item.getString(colIndex))%></div></tbl:cell>
274                <%
275              }
276              else
277              {
278                %>
279                <tbl:cell column="<%=name%>"><tbl:cellvalue value="<%=item.getObject(colIndex)%>" /></tbl:cell>
280                <%
281              }
282              colIndex++;
283            }
284            %>
285          </tbl:row>
286          <%
287        }
288      }
289      if (numListed == 0)
290      {
291        %>
292        <tbl:panel subclass="bg-filled-50">
293          <div class="messagecontainer note">
294          <%=totalReporters == 0 ? "No reporters were found" : "No reporters on this page. Please select another page!" %>
295          </div>
296        </tbl:panel>
297        <%
298      }
299      %>
300      </tbl:rows>
301      </tbl:data>
302      </tbl:table>
303    </t:tab>
304
305    <t:tab id="view" title="Reporter view" />
306    </t:tabcontrol>
307
308  </base:body>
309  </base:page>
310  <%
311}
312finally
313{
314  if (reporters != null) reporters.close();
315  if (dc != null) dc.close();
316}
317
318%>
Note: See TracBrowser for help on using the repository browser.