source: trunk/www/views/rawbioassays/rawdata/list_rawdata.jsp @ 7014

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

Merged patch release 3.6.2 to the trunk

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