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

Last change on this file since 6604 was 6604, checked in by Nicklas Nordborg, 8 years ago

References #1890: Improve skinnability of BASE

Updated table listings with some new css classes to make it easier to modify background color.

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