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

Last change on this file since 5952 was 5952, checked in by Nicklas Nordborg, 10 years ago

References #1655: GUI improvements

List page in the View menu

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