source: branches/3.18-stable/www/views/rawbioassays/rawdata/list_rawdata.jsp @ 7938

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

References #2246: Sticky table headers

Implemented for all items in the "View" menu.

  • Property svn:eol-style set to native
  • Property svn:keywords set to Date Id
File size: 29.9 KB
Line 
1<%-- $Id: list_rawdata.jsp 7938 2021-05-03 11:20:19Z nicklas $
2  ------------------------------------------------------------------
3  Copyright (C) 2006 Johan Enell, Jari Häkkinen, Nicklas Nordborg
4  Copyright (C) 2007 Johan Enell, Nicklas Nordborg
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.RawBioAssay"
32  import="net.sf.basedb.core.RawDataType"
33  import="net.sf.basedb.core.RawDataProperty"
34  import="net.sf.basedb.core.ReporterType"
35  import="net.sf.basedb.core.Feature"
36  import="net.sf.basedb.core.Reporter"
37  import="net.sf.basedb.core.ArrayDesignBlock"
38  import="net.sf.basedb.core.Well"
39  import="net.sf.basedb.core.ItemQuery"
40  import="net.sf.basedb.core.DataQuery"
41  import="net.sf.basedb.core.DataResultIterator"
42  import="net.sf.basedb.core.ItemResultIterator"
43  import="net.sf.basedb.core.ItemResultList"
44  import="net.sf.basedb.core.Permission"
45  import="net.sf.basedb.core.PlateGeometry"
46  import="net.sf.basedb.core.PluginDefinition"
47  import="net.sf.basedb.core.ExtendedProperty"
48  import="net.sf.basedb.core.ExtendedProperties"
49  import="net.sf.basedb.core.PermissionDeniedException"
50  import="net.sf.basedb.core.data.RawData"
51  import="net.sf.basedb.core.data.ReporterData"
52  import="net.sf.basedb.core.data.FeatureData"
53  import="net.sf.basedb.core.query.Restrictions"
54  import="net.sf.basedb.core.query.Expressions"
55  import="net.sf.basedb.core.query.Orders"
56  import="net.sf.basedb.core.query.Hql"
57  import="net.sf.basedb.core.plugin.GuiContext"
58  import="net.sf.basedb.core.plugin.Plugin"
59  import="net.sf.basedb.clients.web.Base"
60  import="net.sf.basedb.clients.web.ModeInfo"
61  import="net.sf.basedb.clients.web.ChangeHistoryUtil"
62  import="net.sf.basedb.clients.web.util.HTML"
63  import="net.sf.basedb.util.Values"
64  import="net.sf.basedb.util.Enumeration"
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.ButtonAction" 
72  import="net.sf.basedb.clients.web.extensions.toolbar.ToolbarUtil"
73  import="net.sf.basedb.clients.web.extensions.list.ListColumnAction"
74  import="net.sf.basedb.clients.web.extensions.list.ListColumnUtil"
75  import="net.sf.basedb.util.extensions.ExtensionsInvoker"
76  import="java.util.List"
77  import="java.util.Map"
78  import="java.util.Date"
79%>
80<%@ taglib prefix="base" uri="/WEB-INF/base.tld" %>
81<%@ taglib prefix="tbl" uri="/WEB-INF/table.tld" %>
82<%@ taglib prefix="t" uri="/WEB-INF/tab.tld" %>
83<%@ taglib prefix="p" uri="/WEB-INF/path.tld" %>
84<%@ taglib prefix="ext" uri="/WEB-INF/extensions.tld" %>
85<%!
86  private static final Item itemType = Item.RAWDATA;
87%>
88<%
89final int rawBioAssayId = Values.getInt(request.getParameter("rawbioassay_id"));
90final SessionControl sc = Base.getExistingSessionControl(pageContext, Permission.DENIED, itemType);
91final String ID = sc.getId();
92
93final ModeInfo mode = ModeInfo.get(request.getParameter("mode"));
94final String callback = request.getParameter("callback");
95final String title = mode.generateTitle("raw data", "raw data");
96final DbControl dc = sc.newDbControl();
97DataResultIterator<RawData> rawData = null;
98try
99{
100  final boolean readReporter = !sc.hasPermission(Permission.DENIED, Item.REPORTER);
101  RawBioAssay rawBioAssay = RawBioAssay.getById(dc, rawBioAssayId);
102  RawDataType rawDataType = rawBioAssay.getRawDataType();
103  final String subContext = rawDataType.getId();
104  final GuiContext guiContext = new GuiContext(itemType, GuiContext.Type.LIST, subContext);
105
106  final ItemContext cc = Base.getAndSetCurrentContext(sc, itemType, subContext, null, null);
107  JspContext jspContext = ExtensionsControl.createContext(dc, pageContext, guiContext, rawBioAssay);
108
109  final DataQuery<RawData> query = rawBioAssay.getRawData();
110  query.join(Hql.leftJoin(null, "reporter", "r", null, true));
111  query.join(Hql.leftJoin(null, "feature", "f", null, true));
112  cc.configureQuery(dc, query, jspContext, true);
113  if (!"row".equals(cc.getSortProperty())) query.order(Orders.asc(Hql.property("row")));
114  if (!"column".equals(cc.getSortProperty())) query.order(Orders.asc(Hql.property("column")));
115
116  Map<Plugin.MainType, Integer> pluginCount = PluginDefinition.countPlugins(dc, guiContext);
117  final ItemQuery<ReporterType> typeQuery = ReporterType.getQuery();
118  typeQuery.order(Orders.asc(Hql.property("name")));
119  typeQuery.setCacheResult(true);
120  List<ExtendedProperty> reporterProperties = ExtendedProperties.getProperties("ReporterData");
121 
122  WellCoordinateFormatter rowFormatter = new WellCoordinateFormatter(true);
123  WellCoordinateFormatter columnFormatter = new WellCoordinateFormatter(false);
124 
125  Enumeration<String, String> plateRows = new Enumeration<String, String>();
126  final ItemQuery<PlateGeometry> geometryQuery = PlateGeometry.getQuery();
127  geometryQuery.order(Orders.desc(Hql.property("rows")));
128  ItemResultIterator<PlateGeometry> result = geometryQuery.iterate(dc);
129  int maxRows = result.next().getRows();
130  for (int row = 0; row < maxRows && row < 256; row++)
131  {
132    plateRows.add(Integer.toString(row), rowFormatter.format(row));
133  }
134 
135  Enumeration<String, String> plateColumns = new Enumeration<String, String>();
136  final ItemQuery<PlateGeometry> columnsGeometryQuery = PlateGeometry.getQuery();
137  columnsGeometryQuery.order(Orders.desc(Hql.property("columns")));
138  ItemResultIterator<PlateGeometry> columnsResult = columnsGeometryQuery.iterate(dc);
139  int maxColumns = columnsResult.next().getColumns();
140  for (int column = 0; column < maxColumns && column < 256; column++)
141  {
142    plateColumns.add(Integer.toString(column), columnFormatter.format(column));
143  }
144 
145  try
146  {
147    rawData = query.iterate(dc);
148  }
149  catch (Throwable t)
150  {
151    cc.setMessage(t.getMessage());
152    t.printStackTrace();
153  }
154  int numListed = 0;
155  final boolean writeReporterPermission = sc.hasPermission(Permission.WRITE, Item.REPORTER);
156  Formatter<Date> dateFormatter = FormatterFactory.getDateTimeFormatter(sc);
157  ExtensionsInvoker<ButtonAction> invoker = ToolbarUtil.useExtensions(jspContext);
158  ExtensionsInvoker<ListColumnAction<RawData,?>> columnsInvoker = ListColumnUtil.useExtensions(jspContext);
159  %>
160  <base:page title="<%=title%>" id="list-page">
161  <base:head scripts="table.js,tabcontrol-2.js,~rawdata.js" styles="table.css,toolbar.css,headertabcontrol.css,path.css">
162    <ext:scripts context="<%=jspContext%>" />
163    <ext:stylesheets context="<%=jspContext%>" />
164  </base:head>
165 
166  <base:body>
167    <p:path><p:pathelement 
168      title="Raw bioassays" href="<%="../index.jsp?ID="+ID%>"
169      /><p:pathelement title="<%=HTML.encodeTags(rawBioAssay.getName())%>" 
170      /></p:path>
171     
172    <t:tabcontrol 
173      id="main" 
174      subclass="mastertabcontrol content"
175      active="rawdata">
176    <t:tab id="properties" title="Properties" />
177    <t:tab id="annotations" title="Annotations &amp; parameters" 
178      tooltip="View annotation values and protocol parameters" />
179   
180    <t:tab id="rawdata" title="Raw data">
181
182    <tbl:table 
183      id="rawdata"
184      columns="<%=cc.getSetting("columns")%>"
185      sortby="<%=cc.getSortProperty()%>" 
186      direction="<%=cc.getSortDirection()%>"
187      action="index.jsp"
188      sc="<%=sc%>"
189      item="<%=itemType%>"
190      subcontext="<%=subContext%>"
191      filterrows="<%=cc.getFilterRows()%>"
192      subclass="fulltable"
193      stickyheaders="position"
194      >
195      <tbl:hidden 
196        name="mode" 
197        value="<%=mode.getName()%>" 
198      />
199      <tbl:hidden 
200        name="rawbioassay_id" 
201        value="<%=String.valueOf(rawBioAssayId)%>" 
202      />
203      <tbl:hidden 
204        name="callback" 
205        value="<%=callback%>" 
206        skip="<%=callback == null%>" 
207      />
208      <tbl:columndef 
209        id="position"
210        clazz="uniquecol"
211        property="position"
212        datatype="int"
213        title="[Raw] Position"
214        sortable="true" 
215        filterable="true"
216        exportable="true"
217        show="always" 
218      />
219      <tbl:columndef 
220        id="id"
221        clazz="uniquecol"
222        property="id"
223        datatype="int"
224        title="ID"
225        sortable="true"
226        filterable="true"
227        exportable="true"
228      />
229      <tbl:columndef 
230        id="block"
231        property="block"
232        datatype="int"
233        title="[Raw] Block"
234        sortable="true" 
235        filterable="true"
236        exportable="true"
237      />
238      <tbl:columndef 
239        id="metaGridX"
240        property="metaGridX"
241        datatype="int"
242        title="[Raw] Meta grid X"
243        sortable="true" 
244        filterable="true"
245        exportable="true"
246      />
247      <tbl:columndef 
248        id="metaGridY"
249        property="metaGridY"
250        datatype="int"
251        title="[Raw] Meta grid Y"
252        sortable="true" 
253        filterable="true"
254        exportable="true"
255      />
256      <tbl:columndef 
257        id="row"
258        property="row"
259        datatype="int"
260        title="[Raw] Row"
261        sortable="true" 
262        filterable="true"
263        exportable="true"       
264      />
265      <tbl:columndef 
266        id="column"
267        property="column"
268        datatype="int"
269        title="[Raw] Column"
270        sortable="true" 
271        filterable="true"
272        exportable="true"
273      />
274      <tbl:columndef 
275        id="x"
276        property="x"
277        datatype="int"
278        title="[Raw] X"
279        sortable="true" 
280        filterable="true"
281        exportable="true"
282      />
283      <tbl:columndef 
284        id="y"
285        property="y"
286        datatype="int"
287        title="[Raw] Y"
288        sortable="true" 
289        filterable="true"
290        exportable="true"
291      />
292      <%
293      for (RawDataProperty rdp : rawBioAssay.getRawDataType().getProperties())
294      {
295        %>
296        <tbl:columndef
297          id="<%="raw."+rdp.getName()%>"
298          property="<%=rdp.getName()%>"
299          datatype="<%=rdp.getType().getStringValue()%>"
300          title="<%="[Raw] "+HTML.encodeTags(rdp.getTitle())%>"
301          sortable="true" 
302          filterable="true"
303          exportable="true"
304          formatter="<%=FormatterFactory.getExtendedPropertyFormatter(sc, rdp)%>"
305        />
306        <%
307      }
308      %>
309      <tbl:columndef
310        id="reporterList"
311        property="$r.£reporterListScores"
312        datatype="int"
313        title="[Rep] Reporter list"
314        filterable="true"
315        enumeration="<%=Base.getReporterListsEnum(dc)%>"
316        multiple="false"
317      />     
318      <tbl:columndef 
319        id="reporter.name"
320        property="$r.name"
321        exportproperty="reporter.name"
322        datatype="string"
323        title="[Rep] Name"
324        sortable="<%=readReporter%>" 
325        filterable="<%=readReporter%>"
326        exportable="<%=readReporter%>"
327      />
328      <%
329      if (readReporter)
330      {
331        %>
332        <tbl:columndef 
333          id="reporter.externalId"
334          clazz="uniquecol"
335          property="$r.externalId"
336          exportproperty="reporter.externalId"
337          datatype="string"
338          title="[Rep] ID"
339          sortable="true" 
340          filterable="true"
341          exportable="true"
342        />
343        <tbl:columndef 
344          id="reporter.symbol"
345          property="$r.symbol"
346          exportproperty="reporter.symbol"
347          datatype="string"
348          title="[Rep] Gene symbol"
349          sortable="true" 
350          filterable="true"
351          exportable="true"
352        />
353        <tbl:columndef 
354          id="reporter.description"
355          property="$r.description"
356          exportproperty="reporter.description"
357          datatype="string"
358          title="[Rep] Description" 
359          sortable="true" 
360          filterable="true" 
361          exportable="true"
362        />
363        <tbl:columndef 
364          id="reporter.lastUpdate"
365          property="$r.lastUpdate"
366          exportproperty="reporter.lastUpdate"
367          datatype="timestamp"
368          title="[Rep] Last update" 
369          sortable="true" 
370          filterable="true" 
371          exportable="true"
372          formatter="<%=dateFormatter%>"
373        />
374        <%
375        Enumeration<String, String> types = new Enumeration<String, String>();
376        ItemResultList<ReporterType> reporterTypes = typeQuery.list(dc);
377        types.add("", "- none -");
378        for (ReporterType rt : reporterTypes)
379        {
380          types.add(Integer.toString(rt.getId()), HTML.encodeTags(rt.getName()));
381        }
382        %>
383        <tbl:columndef 
384          id="reporter.reporterType"
385          property="$r.reporterType"
386          sortproperty="$r.reporterType.name"
387          exportproperty="reporter.reporterType.name:string"
388          datatype="int"
389          enumeration="<%=types%>"
390          title="[Rep] Type"
391          sortable="true" 
392          filterable="true"
393          exportable="true"
394        />
395        <%
396        if (reporterProperties != null)
397        {
398          for (ExtendedProperty ep : reporterProperties)
399          {
400            String name = ep.getName();
401            %>
402            <tbl:columndef
403              id="<%="reporter."+name%>"
404              property="<%="$r."+name%>"
405              exportproperty="<%="reporter."+name%>"
406              datatype="<%=ep.getType().getStringValue()%>"
407              title="<%="[Rep] "+HTML.encodeTags(ep.getTitle())%>"
408              sortable="true"
409              filterable="true"
410              exportable="true"
411              formatter="<%=FormatterFactory.getExtendedPropertyFormatter(sc, ep)%>"
412            />
413            <%
414          }
415        }
416      }
417      %>
418      <tbl:columndef 
419        id="feature.position"
420        clazz="uniquecol"
421        property="$f.position"
422        exportproperty="feature.position"
423        datatype="int"
424        title="[Feat] Position" 
425        sortable="true" 
426        filterable="true" 
427        exportable="true"
428      />
429      <tbl:columndef 
430        id="feature.externalId"
431        clazz="uniquecol"
432        property="$f.externalId"
433        exportproperty="feature.externalId"
434        datatype="string"
435        title="[Feat] Feature ID" 
436        sortable="true" 
437        filterable="true" 
438        exportable="true"
439      />
440      <tbl:columndef 
441        id="feature.block"
442        property="$f.arrayDesignBlock.blockNumber"
443        exportproperty="feature.arrayDesignBlock.blockNumber"
444        datatype="int"
445        title="[Feat] Block"
446        sortable="true" 
447        filterable="true"
448        exportable="true"
449      />
450      <tbl:columndef 
451        id="feature.metaGridX"
452        property="$f.arrayDesignBlock.metaGridX"
453        exportproperty="feature.arrayDesignBlock.metaGridX"
454        datatype="int"
455        title="[Feat] Meta grid X"
456        sortable="true" 
457        filterable="true"
458        exportable="true"
459      />
460      <tbl:columndef 
461        id="feature.metaGridY"
462        property="$f.arrayDesignBlock.metaGridY"
463        exportproperty="feature.arrayDesignBlock.metaGridY"
464        datatype="int"
465        title="[Feat] Meta grid Y"
466        sortable="true" 
467        filterable="true"
468        exportable="true"
469      />
470      <tbl:columndef 
471        id="feature.row"
472        property="$f.row"
473        exportproperty="feature.row"
474        datatype="int"
475        title="[Feat] Row"
476        sortable="true" 
477        filterable="true"
478        exportable="true"
479      />
480      <tbl:columndef 
481        id="feature.column"
482        property="$f.column"
483        exportproperty="feature.column"
484        datatype="int"
485        title="[Feat] Column"
486        sortable="true" 
487        filterable="true"
488        exportable="true"
489      />
490      <tbl:columndef 
491        id="feature.blockSizeX"
492        property="$f.arrayDesignBlock.blockSizeX"
493        exportproperty="feature.arrayDesignBlock.blockSizeX"
494        datatype="int"
495        title="[Feat] Block size X"
496        sortable="true" 
497        filterable="true"
498        exportable="true"
499      />
500      <tbl:columndef 
501        id="feature.blockSizeY"
502        property="$f.arrayDesignBlock.blockSizeY"
503        exportproperty="feature.arrayDesignBlock.blockSizeY"
504        datatype="int"
505        title="[Feat] Block size Y"
506        sortable="true" 
507        filterable="true"
508        exportable="true"
509      />
510      <tbl:columndef 
511        id="feature.originX"
512        property="$f.arrayDesignBlock.originX"
513        exportproperty="feature.arrayDesignBlock.originX"
514        datatype="int"
515        title="[Feat] Origin X"
516        sortable="true" 
517        filterable="true"
518        exportable="true"
519      />
520      <tbl:columndef 
521        id="feature.originY"
522        property="$f.arrayDesignBlock.originY"
523        exportproperty="feature.arrayDesignBlock.originY"
524        datatype="int"
525        title="[Feat] Origin Y"
526        sortable="true" 
527        filterable="true"
528        exportable="true"
529      />
530      <tbl:columndef 
531        id="feature.spacingX"
532        property="$f.arrayDesignBlock.spacingX"
533        exportproperty="feature.arrayDesignBlock.spacingX"
534        datatype="int"
535        title="[Feat] Spacing X"
536        sortable="true" 
537        filterable="true"
538        exportable="true"
539      />
540      <tbl:columndef 
541        id="feature.spacingY"
542        property="$f.arrayDesignBlock.spacingY"
543        exportproperty="feature.arrayDesignBlock.spacingY"
544        datatype="int"
545        title="[Feat] Spacing Y"
546        sortable="true" 
547        filterable="true"
548        exportable="true"
549      />
550      <tbl:columndef 
551        id="well.row"
552        property="$f.well.row"
553        exportproperty="feature.well.row"
554        datatype="int"
555        title="[Well] Row" 
556        sortable="true" 
557        filterable="true"
558        enumeration="<%=plateRows%>" 
559        exportable="true"
560        formatter="<%=rowFormatter%>"
561      />
562      <tbl:columndef 
563        id="well.column"
564        property="$f.well.column"
565        exportproperty="feature.well.column"
566        datatype="int"
567        title="[Well] Column" 
568        sortable="true" 
569        filterable="true" 
570        enumeration="<%=plateColumns%>" 
571        exportable="true"
572        formatter="<%=columnFormatter%>"
573      />
574      <tbl:columndef 
575        id="well.plate"
576        property="$f.well.plate.name"
577        exportproperty="feature.well.plate.name"
578        datatype="string"
579        title="[Well] Plate" 
580        sortable="true" 
581        filterable="true" 
582        exportable="true"
583      />
584      <tbl:columndef 
585        id="xt-columns" 
586        extensions="<%=columnsInvoker%>" 
587        jspcontext="<%=jspContext%>" 
588      />
589      <div class="panelgroup bg-filled-50 bottomborder">
590        <tbl:toolbar
591          subclass="bottomborder"
592          visible="<%=mode.hasToolbar()%>"
593          >
594          <tbl:button 
595            id="btnColumns"
596            image="columns.png" 
597            title="Columns&hellip;" 
598            tooltip="Show, hide and re-order columns" 
599          />
600          <tbl:button
601            id="btnNewReporterList"
602            image="add.png"
603            title="New reporter list&hellip;"
604            tooltip="Create a new reporter list from matching spots"
605            visible="<%=sc.hasPermission(Permission.CREATE, Item.REPORTERLIST)%>"
606          />
607          <tbl:button 
608            id="btnImport"
609            data-plugin-type="IMPORT"
610            image="import.png" 
611            title="Import&hellip;" 
612            tooltip="Import data" 
613            visible="<%=pluginCount.containsKey(Plugin.MainType.IMPORT)%>"
614          />
615          <tbl:button 
616            id="btnExport"
617            data-plugin-type="EXPORT"
618            image="export.png" 
619            title="Export&hellip;" 
620            tooltip="Export data" 
621            visible="<%=pluginCount.containsKey(Plugin.MainType.EXPORT)%>"
622          />
623          <tbl:button 
624            id="btnRunPlugin"
625            data-plugin-type="OTHER"
626            image="runplugin.png" 
627            title="Run plugin&hellip;" 
628            tooltip="Run a plugin" 
629            visible="<%=pluginCount.containsKey(Plugin.MainType.OTHER)%>"
630          />
631          <ext:render extensions="<%=invoker%>" context="<%=jspContext%>" 
632            wrapper="<%=new PrefixSuffixRenderer<ButtonAction>(jspContext, "<td>", "</td>") %>"/>
633        </tbl:toolbar>
634        <tbl:panel>
635          <tbl:presetselector />
636          <tbl:navigator
637            page="<%=cc.getPage()%>" 
638            rowsperpage="<%=cc.getRowsPerPage()%>" 
639            totalrows="<%=rawData == null ? 0 : rawData.getTotalCount()%>" 
640            visible="<%=mode.hasNavigator()%>"
641          />
642        </tbl:panel>
643      </div>
644      <tbl:data>
645        <tbl:headers>
646          <tbl:headerrow>
647            <tbl:header clazz="row-index bg-filled-100" />
648            <tbl:columnheaders />
649          </tbl:headerrow>
650          <%
651          int numFilters = cc.getNumPropertyFilters();
652          int numRows = cc.getFilterRows();
653          for (int filterNo = 0; filterNo < numRows; filterNo++)
654          {
655            boolean lastRow = filterNo == numRows-1;
656            %>
657            <tbl:headerrow>
658              <tbl:header subclass="row-index bg-filled-100">
659                <div class="index-<%=mode.getName()%>">
660                  <div class="index"></div>
661                  <div class="check">
662                    <base:icon 
663                      subclass="link table-check"
664                      image="check_uncheck.png" 
665                      tooltip="Toggle all (use CTRL, ALT or SHIFT to check/uncheck)" 
666                      visible="<%=lastRow && mode.hasCheck()%>"
667                    />
668                  </div>
669                  <div class="icons">
670                    <base:icon
671                      subclass="link table-filter-row-action"
672                      image="add.png"
673                      tooltip="Add extra filter row"
674                      visible="<%=lastRow%>"
675                    /><base:icon
676                      subclass="link table-filter-row-action"
677                      image="remove.png"
678                      tooltip="Remove this filter row"
679                      visible="<%=numRows > 1 || numFilters > 0 %>"
680                      data-remove-row="<%=filterNo%>"
681                    />
682                  </div>
683                </div>
684              </tbl:header>
685              <tbl:propertyfilter row="<%=filterNo%>" />
686            </tbl:headerrow>
687            <%
688          }
689          %>
690          <tbl:columnsubtitles />
691        </tbl:headers>
692        <tbl:rows>
693          <%
694          if (cc.getMessage() != null)
695          {
696            %>
697            <tbl:panel subclass="bg-filled-50">
698              <div class="messagecontainer error"><%=cc.getMessage()%></div>
699            </tbl:panel>
700            <%
701            cc.setMessage(null);
702          }
703          int index = cc.getPage()*cc.getRowsPerPage();
704          int selectedItemId = cc.getId();
705          if (rawData != null)
706          {
707            String tooltip = mode.isSelectionMode() ?
708              "Select this item" : "View this item";
709            while (rawData.hasNext())
710            {
711              RawData item = rawData.next();
712              int itemId = item.getId();
713              index++;
714              numListed++;
715              %>
716              <tbl:row>
717                <tbl:header clazz="row-index bg-filled-100">
718                  <div class="index-<%=mode.getName()%>">
719                    <div class="index <%=index>999?"index-smaller":""%>"><%=index%></div>
720                    <div class="check">
721                      <base:input
722                        type="checkbox" 
723                        name="<%=itemId%>" 
724                        value="<%=itemId%>" 
725                        checked="<%=request.getParameter(Integer.toString(itemId)) != null%>"
726                        visible="<%=mode.hasCheck()%>"
727                      />
728                      <base:input 
729                        type="radio" 
730                        name="item_id" 
731                        value="<%=itemId%>"
732                        checked="<%=selectedItemId == itemId%>"
733                        visible="<%=mode.hasRadio()%>"
734                      />
735                    </div>
736                    <div class="icons"></div>
737                  </div>
738                </tbl:header>
739                <tbl:cell column="position"><div
740                  class="link table-item"
741                  data-item-id="<%=itemId%>"
742                  data-extra-url="<%="&rawbioassay_id="+rawBioAssayId%>"
743                  tabindex="0"
744                  title="<%=tooltip%>"><%=item.getPosition()%></div></tbl:cell>
745                <tbl:cell column="id"><%=item.getId()%></tbl:cell>
746                <tbl:cell column="block"><%=item.getBlock()%></tbl:cell>
747                <tbl:cell column="row"><tbl:cellvalue value="<%=item.getRow()%>"/></tbl:cell>
748                <tbl:cell column="column"><tbl:cellvalue value="<%=item.getColumn()%>"/></tbl:cell>
749                <tbl:cell column="metaGridX"><%=item.getMetaGridX()%></tbl:cell>
750                <tbl:cell column="metaGridY"><%=item.getMetaGridY()%></tbl:cell>
751                <tbl:cell column="x"><%=item.getX()%></tbl:cell>
752                <tbl:cell column="y"><%=item.getY()%></tbl:cell>
753                <%
754                for (RawDataProperty rdp : rawBioAssay.getRawDataType().getProperties())
755                {
756                  %>
757                  <tbl:cell column="<%="raw."+rdp.getName()%>"><tbl:cellvalue value="<%=item.getExtended(rdp.getName())%>" /></tbl:cell>
758                  <%
759                }
760                %>
761                <%
762                if (!readReporter)
763                {
764                  %>
765                  <tbl:cell column="reporter.name"><i>- denied -</i></tbl:cell>
766                  <%
767                }
768                else
769                {
770                  ReporterData reporter = item.getReporter();
771                  if (reporter == null)
772                  {
773                    %>
774                    <tbl:cell column="reporter.name"><i>- none -</i></tbl:cell>
775                    <tbl:cell column="reporter.externalId"><i>- none -</i></tbl:cell>
776                    <%
777                  }
778                  else
779                  {
780                    %>
781                    <tbl:cell column="reporter.name"><%=Base.getLink(ID, reporter.getName(), Item.REPORTER, reporter.getId(), writeReporterPermission)%></tbl:cell>
782                    <tbl:cell column="reporter.externalId"><%=HTML.encodeTags(reporter.getExternalId())%></tbl:cell>
783                    <tbl:cell column="reporter.symbol"><%=HTML.encodeTags(reporter.getSymbol())%></tbl:cell>
784                    <tbl:cell column="reporter.description"><%=HTML.encodeTags(reporter.getDescription())%></tbl:cell>
785                    <tbl:cell column="reporter.lastUpdate" value="<%=reporter.getLastUpdate()%>" />
786                    <tbl:cell column="reporter.reporterType"><base:propertyvalue dbcontrol="<%=dc%>" item="<%=reporter%>" property="reporterType.name" /></tbl:cell>
787                    <%
788                    if (reporterProperties != null)
789                    {
790                      for (ExtendedProperty ep : reporterProperties)
791                      {
792                        String name = ep.getName();
793                        %>
794                        <tbl:cell column="<%="reporter."+name%>"><tbl:cellvalue value="<%=reporter.getExtended(name)%>" /></tbl:cell>
795                        <%
796                      }
797                    }
798                  }
799                }
800                %>
801                <%
802                FeatureData feature = item.getFeature();
803                if (feature == null)
804                {
805                  %>
806                  <tbl:cell column="feature.position"><i>- none -</i></tbl:cell>
807                  <tbl:cell column="feature.externalId"><i>- none -</i></tbl:cell>
808                  <tbl:cell column="feature.row"><i>- none -</i></tbl:cell>
809                  <tbl:cell column="feature.column"><i>- none -</i></tbl:cell>
810                  <tbl:cell column="feature.block"><i>- none -</i></tbl:cell>
811                  <tbl:cell column="feature.metaGridX"><i>- none -</i></tbl:cell>
812                  <tbl:cell column="feature.metaGridY"><i>- none -</i></tbl:cell>
813                  <tbl:cell column="feature.blockSizeX"><i>- none -</i></tbl:cell>
814                  <tbl:cell column="feature.blockSizeY"><i>- none -</i></tbl:cell>
815                  <tbl:cell column="feature.originX"><i>- none -</i></tbl:cell>
816                  <tbl:cell column="feature.originY"><i>- none -</i></tbl:cell>
817                  <tbl:cell column="feature.spacingX"><i>- none -</i></tbl:cell>
818                  <tbl:cell column="feature.spacingY"><i>- none -</i></tbl:cell>
819                  <%
820                }
821                else
822                {
823                  %>
824                  <tbl:cell column="feature.position"><%=feature.getPosition()%></tbl:cell>
825                  <tbl:cell column="feature.externalId"><%=HTML.encodeTags(feature.getExternalId())%></tbl:cell>
826                  <tbl:cell column="feature.row"><%=feature.getRow()%></tbl:cell>
827                  <tbl:cell column="feature.column"><%=feature.getColumn()%></tbl:cell>
828                  <%
829                  ArrayDesignBlock block = null;
830                  try
831                  {
832                    block = Feature.getArrayDesignBlock(dc, feature);
833                  }
834                  catch (PermissionDeniedException ex)
835                  {}
836                  if (block == null)
837                  {
838                    %>
839                    <tbl:cell column="feature.block"><i>- denied -</i></tbl:cell>
840                    <tbl:cell column="feature.metaGridX"><i>- denied -</i></tbl:cell>
841                    <tbl:cell column="feature.metaGridY"><i>- denied -</i></tbl:cell>
842                    <tbl:cell column="feature.blockSizeX"><i>- denied -</i></tbl:cell>
843                    <tbl:cell column="feature.blockSizeY"><i>- denied -</i></tbl:cell>
844                    <tbl:cell column="feature.originX"><i>- denied -</i></tbl:cell>
845                    <tbl:cell column="feature.originY"><i>- denied -</i></tbl:cell>
846                    <tbl:cell column="feature.spacingX"><i>- denied -</i></tbl:cell>
847                    <tbl:cell column="feature.spacingY"><i>- denied -</i></tbl:cell>
848                    <%
849                  }
850                  else
851                  {
852                    %>
853                    <tbl:cell column="feature.block"><%=block.getBlockNumber()%></tbl:cell>
854                    <tbl:cell column="feature.metaGridX"><%=block.getMetaGridX()%></tbl:cell>
855                    <tbl:cell column="feature.metaGridY"><%=block.getMetaGridY()%></tbl:cell>
856                    <tbl:cell column="feature.blockSizeX"><%=block.getBlockSizeX()%></tbl:cell>
857                    <tbl:cell column="feature.blockSizeY"><%=block.getBlockSizeY()%></tbl:cell>
858                    <tbl:cell column="feature.originX"><%=block.getOriginX()%></tbl:cell>
859                    <tbl:cell column="feature.originY"><%=block.getOriginY()%></tbl:cell>
860                    <tbl:cell column="feature.spacingX"><%=block.getSpacingX()%></tbl:cell>
861                    <tbl:cell column="feature.spacingY"><%=block.getSpacingY()%></tbl:cell>
862                    <%
863                  }
864                  Well well = null;
865                  boolean readWell = true;
866                  try
867                  {
868                    well = Feature.getWell(dc, feature);
869                  }
870                  catch (PermissionDeniedException ex)
871                  {
872                    readWell = false;
873                  }
874                  if (!readWell)
875                  {
876                    %>
877                    <tbl:cell column="well.row"><i>- denied -</i></tbl:cell>
878                    <tbl:cell column="well.column"><i>- denied -</i></tbl:cell>
879                    <tbl:cell column="well.plate"><i>- denied -</i></tbl:cell>
880                    <%
881                  }
882                  else if (well == null)
883                  {
884                    %>
885                    <tbl:cell column="well.row"><i>- none -</i></tbl:cell>
886                    <tbl:cell column="well.column"><i>- none -</i></tbl:cell>
887                    <tbl:cell column="well.plate"><i>- none -</i></tbl:cell>
888                    <%
889                  }
890                  else
891                  {
892                    %>
893                    <tbl:cell column="well.row"><tbl:cellvalue value="<%=well.getRow()%>"/></tbl:cell>
894                    <tbl:cell column="well.column"><tbl:cellvalue value="<%=well.getColumn()%>"/></tbl:cell>
895                    <tbl:cell column="well.plate"><%=well.getPlate().getName()%></tbl:cell>
896                    <%
897                  }
898                }
899                %>
900                <tbl:xt-cells dc="<%=dc%>" item="<%=item%>">
901                  <tbl:cell column="xt-columns" />
902                </tbl:xt-cells>
903              </tbl:row>
904              <%
905            }
906          }
907          if (numListed == 0)
908          {
909            %>
910            <tbl:panel subclass="bg-filled-50">
911              <div class="messagecontainer note">
912              <%=rawData == null || rawData.getTotalCount() == 0 ? "No raw data were found" : "No raw data on this page. Please select another page!" %>
913              </div>
914            </tbl:panel>
915            <%
916          }
917          %>
918          </tbl:rows>
919        </tbl:data>
920    </tbl:table>
921    </t:tab>
922    <t:tab id="overview" title="Overview" 
923      tooltip="Display a tree overview of related items" />
924    <t:tab id="history" title="History"
925      tooltip="Displays a log with the history of this item"
926      visible="<%=ChangeHistoryUtil.showChangeHistoryTab(sc)%>" />
927    </t:tabcontrol>
928
929    <base:buttongroup>
930      <base:button id="btnOk" title="Ok" visible="<%=mode.hasOkButton()%>" />
931      <base:button id="close" title="Cancel" visible="<%=mode.hasCancelButton()%>" />
932      <base:button id="close" title="Close" visible="<%=mode.hasCloseButton()%>" />
933    </base:buttongroup>
934
935  </base:body>
936  </base:page>
937  <%
938}
939finally
940{
941  if (rawData != null) rawData.close();
942  if (dc != null) dc.close();
943}
944%>
Note: See TracBrowser for help on using the repository browser.