source: trunk/www/views/experiments/spotdata/list_spotdata.jsp @ 4916

Last change on this file since 4916 was 4916, checked in by Nicklas Nordborg, 13 years ago

References #1120: The dynamic part of BASE should keep track whether intensity data is in log space or not

Fixes for spot data listings and experiment explorer.

  • Property svn:eol-style set to native
  • Property svn:keywords set to Date Id
File size: 14.6 KB
Line 
1<%-- $Id: list_spotdata.jsp 4916 2009-04-30 09:32:26Z nicklas $
2  ------------------------------------------------------------------
3  Copyright (C) 2006 Jari Häkkinen, Nicklas Nordborg
4  Copyright (C) 2007 Johan Enell
5
6  This file is part of BASE - BioArray Software Environment.
7  Available at http://base.thep.lu.se/
8
9  BASE is free software; you can redistribute it and/or
10  modify it under the terms of the GNU General Public License
11  as published by the Free Software Foundation; either version 3
12  of the License, or (at your option) any later version.
13
14  BASE is distributed in the hope that it will be useful,
15  but WITHOUT ANY WARRANTY; without even the implied warranty of
16  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
17  GNU General Public License for more details.
18
19  You should have received a copy of the GNU General Public License
20  along with BASE. If not, see <http://www.gnu.org/licenses/>.
21  ------------------------------------------------------------------
22
23  @author Nicklas
24  @version 2.0
25--%>
26<%@ page 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.Type"
31  import="net.sf.basedb.core.ItemContext"
32  import="net.sf.basedb.core.Permission"
33  import="net.sf.basedb.core.Experiment"
34  import="net.sf.basedb.core.BioAssaySet"
35  import="net.sf.basedb.core.BioAssay"
36  import="net.sf.basedb.core.RawDataType"
37  import="net.sf.basedb.core.BaseException"
38  import="net.sf.basedb.core.DynamicSpotQuery"
39  import="net.sf.basedb.core.DynamicResultIterator"
40  import="net.sf.basedb.core.PluginDefinition"
41  import="net.sf.basedb.core.Formula"
42  import="net.sf.basedb.core.IntensityTransform"
43  import="net.sf.basedb.core.plugin.GuiContext"
44  import="net.sf.basedb.core.plugin.Plugin"
45  import="net.sf.basedb.core.query.SqlResult"
46  import="net.sf.basedb.util.Enumeration"
47  import="net.sf.basedb.util.ColorGenerator"
48  import="net.sf.basedb.util.formatter.LookupFormatter"
49  import="net.sf.basedb.clients.web.Base"
50  import="net.sf.basedb.clients.web.ModeInfo"
51  import="net.sf.basedb.clients.web.DynamicUtil"
52  import="net.sf.basedb.clients.web.WebException"
53  import="net.sf.basedb.clients.web.util.HTML"
54  import="net.sf.basedb.util.Values"
55  import="net.sf.basedb.clients.web.taglib.table.TableColumn"
56  import="net.sf.basedb.clients.web.extensions.ExtensionsControl"
57  import="net.sf.basedb.clients.web.extensions.JspContext"
58  import="net.sf.basedb.clients.web.extensions.renderer.PrefixSuffixRenderer"
59  import="net.sf.basedb.clients.web.extensions.toolbar.ToolbarUtil"
60  import="net.sf.basedb.util.extensions.ExtensionsInvoker"
61  import="java.util.Map"
62  import="java.util.HashMap"
63  import="java.util.List"
64  import="java.util.LinkedList"
65  import="java.util.ArrayList"
66  import="java.util.Set"
67  import="java.util.HashSet"
68  import="java.util.Arrays"
69  import="java.awt.Color"
70%>
71<%@ taglib prefix="base" uri="/WEB-INF/base.tld" %>
72<%@ taglib prefix="t" uri="/WEB-INF/tab.tld" %>
73<%@ taglib prefix="p" uri="/WEB-INF/path.tld" %>
74<%@ taglib prefix="tbl" uri="/WEB-INF/table.tld" %>
75<%@ taglib prefix="ext" uri="/WEB-INF/extensions.tld" %>
76<%!
77  private static final Item itemType = Item.SPOTDATA;
78  private static final GuiContext guiContext = new GuiContext(itemType, GuiContext.Type.LIST);
79%>
80<%
81final int bioAssayId = Values.getInt(request.getParameter("bioassay_id"));
82final int bioAssaySetId = Values.getInt(request.getParameter("bioassayset_id"));
83final SessionControl sc = Base.getExistingSessionControl(pageContext, true);
84final String ID = sc.getId();
85
86final ModeInfo mode = ModeInfo.get(request.getParameter("mode"));
87final String callback = request.getParameter("callback");
88final String title = mode.generateTitle("spot data", "spot data");
89final DbControl dc = sc.newDbControl();
90DynamicResultIterator spotData = null;
91try
92{
93  final BioAssay bioAssay = bioAssayId == 0 ? null : BioAssay.getById(dc, bioAssayId);
94  final BioAssaySet bioAssaySet = bioAssay != null ? bioAssay.getBioAssaySet() : BioAssaySet.getById(dc, bioAssaySetId);
95  final Experiment experiment = bioAssaySet.getExperiment();
96  final int experimentId = experiment.getId();
97  final RawDataType rawDataType = bioAssaySet.getRawDataType();
98  final IntensityTransform transform = bioAssaySet.getIntensityTransform();
99 
100  final String subContext = rawDataType.getId();
101  final ItemContext cc = Base.getAndSetCurrentContext(sc, itemType, subContext, null, null);
102  Map<Plugin.MainType, Integer> pluginCount = PluginDefinition.countPlugins(dc, guiContext);
103 
104  List<TableColumn> columns = new LinkedList<TableColumn>();
105  DynamicUtil.addSpotColumns(columns, dc, rawDataType.getChannels(), transform);
106  DynamicUtil.addFormulaColumns(columns, dc, rawDataType, Formula.Type.COLUMN_EXPRESSION, "frm.", "", true);
107  DynamicUtil.addExtraColumns(columns, dc, bioAssaySet, "ev", "#", "[Xtra] ");
108  DynamicUtil.addRawDataColumns(columns, dc, rawDataType, "raw.", "$", "[Raw] ");
109  DynamicUtil.addReporterColumns(columns, dc, "rep.", "@", "[Rep] ");
110  DynamicUtil.SelectedInfo selected = DynamicUtil.getSelectedColumns(cc, columns, false);
111  if (bioAssay == null && cc.getSetting("columns").indexOf("COLUMN") >= 0) 
112  {
113    selected.selectedIds.add("COLUMN");
114    selected.selectedProperties.add("COLUMN");
115  }
116  try
117  {
118    final DynamicSpotQuery query = bioAssay != null ? bioAssay.getSpotData() : bioAssaySet.getSpotData();
119    cc.configureQuery(dc, query, selected.selectedProperties);
120    spotData = query.iterate(dc);
121  }
122  catch (Throwable t)
123  {
124    cc.setMessage(t.getMessage());
125  }
126
127  int numListed = 0;
128  JspContext jspContext = ExtensionsControl.createContext(dc, pageContext, 
129    guiContext, bioAssay == null ? bioAssaySet : bioAssay);
130  ExtensionsInvoker invoker = ToolbarUtil.useExtensions(jspContext);
131  ExtensionsInvoker overviewPlotInvoker = bioAssay != null ? 
132    null : ExtensionsControl.useExtensions(jspContext, "net.sf.basedb.clients.web.bioassayset.overviewplots");
133  %>
134  <base:page title="<%=title%>">
135  <base:head scripts="table.js,tabcontrol.js" styles="table.css,toolbar.css,headertabcontrol.css,path.css">
136    <ext:scripts context="<%=jspContext%>" />
137    <ext:stylesheets context="<%=jspContext%>" />
138    <script language="JavaScript">
139    var submitPage = 'index.jsp';
140    var formId = 'spotdata';
141    function configureColumns()
142    {
143      Table.configureColumns('<%=ID%>', formId, '<%=itemType.name()%>', '<%=(String)cc.getObject("defaultColumns")%>', '<%=subContext%>');
144    }
145    function presetOnChange()
146    {
147      Table.presetOnChange('<%=ID%>', formId, '<%=itemType.name()%>', '<%=(String)cc.getObject("defaultColumns")%>', '<%=subContext%>');
148    }
149    function runPlugin(cmd)
150    {
151      Table.submitToPopup(formId, cmd, 800, 500);
152    }
153    function switchTab(tabControlId, tabId)
154    {
155      if (tabId == 'properties.bioassay')
156      {
157        location.href = '../bioassays/index.jsp?ID=<%=ID%>&cmd=ViewItem&item_id=<%=bioAssayId%>&tab=properties';
158      }
159      else if (tabId == 'annotations.bioassay')
160      {
161        location.href = '../bioassays/index.jsp?ID=<%=ID%>&cmd=ViewItem&item_id=<%=bioAssayId%>&tab=annotations';
162      }
163      else if (tabId == 'properties.bioassayset')
164      {
165        location.href = '../bioassaysets/index.jsp?ID=<%=ID%>&cmd=ViewItem&item_id=<%=bioAssaySetId%>&tab=properties';
166      }
167      else if (tabId == 'annotations.bioassayset')
168      {
169        location.href = '../bioassaysets/index.jsp?ID=<%=ID%>&cmd=ViewItem&item_id=<%=bioAssaySetId%>&tab=annotations';
170      }
171      else if (tabId == 'overviewplots')
172      {
173        location.href = '../bioassaysets/index.jsp?ID=<%=ID%>&cmd=ViewItem&experiment_id=<%=experimentId%>&item_id=<%=bioAssaySetId%>&tab='+tabId;
174      }
175      else if (tabId == 'bioassays')
176      {
177        location.href = '../bioassays/index.jsp?ID=<%=ID%>&experiment_id=<%=experimentId%>&bioassayset_id=<%=bioAssaySetId%>&tab='+tabId;
178      }
179      else
180      {
181        TabControl.setActiveTab(tabControlId, tabId);
182      }
183    }
184    function newReporterList()
185    {
186      Table.submitToPopup(formId, 'CreateReporterList', 540, 400);
187    }
188    </script>
189  </base:head>
190  <base:body>
191    <p>
192    <p:path>
193      <p:pathelement title="Experiments" href="<%="../index.jsp?ID="+ID%>" />
194      <p:pathelement title="<%=HTML.encodeTags(experiment.getName())%>" 
195        href="<%="../bioassaysets/index.jsp?ID="+ID+"&experiment_id="+experiment.getId()%>" />
196       
197      <%
198      if (bioAssay == null)
199      {
200        %>
201        <p:pathelement title="<%=HTML.encodeTags(bioAssaySet.getName())%>" />
202        <%
203      }
204      else
205      {
206        %>
207        <p:pathelement title="<%=HTML.encodeTags(bioAssaySet.getName())%>" 
208          href="<%="../bioassays/index.jsp?ID="+ID+"&bioassayset_id="+bioAssaySet.getId()%>" />
209        <p:pathelement title="<%=HTML.encodeTags(bioAssay.getName())%>" />
210        <%
211      }
212      %>
213    </p:path>
214
215    <t:tabcontrol id="main" active="spotdata" switch="switchTab">
216    <t:tab id="properties.bioassay" title="Properties" visible="<%=bioAssay != null%>"/>
217    <t:tab id="properties.bioassayset" title="Properties" visible="<%=bioAssay == null%>"/>
218
219    <t:tab id="annotations.bioassay" title="Annotations" 
220      tooltip="View annotation values" visible="<%=bioAssay != null%>" />
221    <t:tab id="annotations.bioassayset" title="Annotations" 
222        tooltip="View annotation values" visible="<%=bioAssay == null%>" />
223
224    <t:tab id="bioassays" visible="<%=bioAssay == null%>" title="BioAssays" />
225    <t:tab id="spotdata" title="Spot data" >
226    <%
227    if (cc.getMessage() != null)
228    {
229      %>
230      <div class="error"><%=cc.getMessage()%></div>
231      <%
232      cc.setMessage(null);
233    }
234    %>
235    <tbl:table 
236      id="spotdata" 
237      clazz="itemlist" 
238      columns="<%=cc.getSetting("columns")%>"
239      sortby="<%=cc.getSortProperty()%>" 
240      direction="<%=cc.getSortDirection()%>"
241      title="<%=title%>"
242      action="index.jsp"
243      sc="<%=sc%>"
244      item="<%=itemType%>"
245      subcontext="<%=subContext%>"
246      >
247      <tbl:hidden 
248        name="mode" 
249        value="<%=mode.getName()%>" 
250      />
251      <tbl:hidden 
252        name="bioassayset_id" 
253        value="<%=String.valueOf(bioAssaySetId)%>" 
254      />
255      <tbl:hidden 
256        name="bioassay_id" 
257        value="<%=String.valueOf(bioAssayId)%>" 
258      />
259      <tbl:hidden 
260        name="callback" 
261        value="<%=callback%>" 
262        skip="<%=callback == null%>" 
263      />
264
265      <%
266      for (TableColumn tc : columns)
267      {
268        %>
269        <tbl:columndef
270          id="<%=tc.getId()%>"
271          property="<%=tc.getProperty()%>"
272          tooltip="<%=tc.getDescription()%>"
273          datatype="<%=tc.getDatatype().getStringValue()%>"
274          title="<%=HTML.encodeTags(tc.getTitle())%>"
275          sortable="<%=tc.getSortable()%>"
276          filterable="<%=tc.getFilterable()%>"
277          exportable="<%=tc.getExportable()%>"
278          show="<%=tc.getShow()%>"
279          formatter="<%=tc.getFormatter()%>"
280        />
281        <%
282      }
283      %>
284      <%
285      if (bioAssay == null)
286      {
287        Map<Number, String> bioAssayMap = new HashMap<Number, String>();
288        Enumeration<String, String> bioAssayEnum = new Enumeration<String, String>();
289        for (BioAssay ba : bioAssaySet.getBioAssays().list(dc))
290        {
291          short columnNo = ba.getDataCubeColumnNo();
292          String linkedBioAssay = Base.getLinkedName(ID, ba, false, true);
293          // Safety measure, since JDBC driver seems to return 'short' as 'int'
294          bioAssayMap.put(columnNo, linkedBioAssay);
295          bioAssayMap.put((int)columnNo, linkedBioAssay);
296          bioAssayEnum.add(String.valueOf(columnNo), HTML.encodeTags(ba.getName()));
297        }
298        %>
299        <tbl:columndef
300          id="COLUMN"
301          property="COLUMN"
302          datatype="int"
303          title="Bioassay"
304          sortable="true"
305          filterable="true"
306          exportable="true"
307          enumeration="<%=bioAssayEnum%>"
308          formatter="<%=new LookupFormatter<Number>(bioAssayMap)%>"
309        />
310        <%
311      }
312      %>
313      <tbl:columndef 
314        id="reporterList"
315        property="£reporterList"
316        datatype="int"
317        title="Reporter list"
318        filterable="true"
319        enumeration="<%=Base.getReporterListsEnum(dc)%>"
320        multiple="false"
321      />
322      <tbl:toolbar
323        visible="<%=mode.hasToolbar()%>"
324        >
325        <tbl:button 
326          image="columns.gif" 
327          onclick="configureColumns()" 
328          title="Columns&hellip;" 
329          tooltip="Show, hide and re-order columns" 
330        />
331        <tbl:button
332          image="add.png"
333          onclick="newReporterList()"
334          title="New reporter list&hellip;"
335          tooltip="Create a new reporter list from matching spots"
336          visible="<%=sc.hasPermission(Permission.CREATE, Item.REPORTERLIST)%>"
337        />
338        <tbl:button 
339          image="export.gif" 
340          onclick="runPlugin('ExportItems')" 
341          title="Export&hellip;" 
342          tooltip="Export data" 
343          visible="<%=pluginCount.containsKey(Plugin.MainType.EXPORT)%>"
344        />
345        <ext:render extensions="<%=invoker%>" context="<%=jspContext%>" 
346          wrapper="<%=new PrefixSuffixRenderer(jspContext, "<td>", "</td>") %>"/>
347      </tbl:toolbar>
348      <tbl:navigator
349        page="<%=cc.getPage()%>" 
350        rowsperpage="<%=cc.getRowsPerPage()%>" 
351        totalrows="<%=spotData == null ? 0 : spotData.getTotalCount()%>" 
352        visible="<%=mode.hasNavigator()%>"
353      />
354      <tbl:data>
355        <tbl:columns>
356        <tbl:presetselector 
357          clazz="columnheader"
358          colspan="2"
359          onchange="presetOnChange()"
360        />
361        </tbl:columns>
362        <tr>
363          <tbl:header 
364            clazz="index"
365            >&nbsp;</tbl:header>
366          <tbl:header 
367            clazz="icons" 
368            visible="<%=mode.hasIcons()%>"
369            >&nbsp;</tbl:header>
370          <tbl:propertyfilter />
371        </tr>
372   
373          <tbl:rows>
374          <%
375          int index = cc.getPage()*cc.getRowsPerPage();
376          int selectedItemId = cc.getId();
377          if (spotData != null)
378          {
379            while (spotData.hasNext())
380            {
381              SqlResult item = spotData.next();
382              index++;
383              numListed++;
384              %>
385              <tbl:row>
386                <tbl:header 
387                  clazz="index"
388                  ><%=index%></tbl:header>
389                <tbl:header 
390                  clazz="icons" 
391                  visible="<%=mode.hasIcons()%>"
392                  >&nbsp;</tbl:header>
393                <%
394                int i = 1;
395                for (String columnId : selected.selectedIds)
396                {
397                  %>
398                  <tbl:cell column="<%=columnId%>" value="<%=item.getObject(i++)%>" />
399                  <%
400                }
401                %>
402              </tbl:row>
403              <%
404            }
405          }
406          %>
407          </tbl:rows>
408        </tbl:data>
409      <%
410      if (numListed == 0)
411      {
412        %>
413        <tbl:panel><%=spotData == null || spotData.getTotalCount() == 0 ? "No spot data were found" : "No spot data on this page. Please select another page!" %></tbl:panel>
414        <%
415      }
416      else
417      {
418        %>
419        <tbl:navigator
420          page="<%=cc.getPage()%>" 
421          rowsperpage="<%=cc.getRowsPerPage()%>" 
422          totalrows="<%=spotData == null ? 0 : spotData.getTotalCount()%>" 
423          visible="<%=mode.hasNavigator()%>"
424          locked="true"
425        />
426        <%
427      }
428      %>
429    </tbl:table>
430    <base:buttongroup align="center">
431      <base:button onclick="returnSelected();" title="Ok" visible="<%=mode.hasOkButton()%>" />
432      <base:button onclick="window.close();" title="Cancel" visible="<%=mode.hasCancelButton()%>" />
433      <base:button onclick="window.close();" title="Close" visible="<%=mode.hasCloseButton()%>" />
434    </base:buttongroup>
435    </t:tab>
436
437    <t:tab id="overviewplots" title="Overview plots"
438      visible="<%=overviewPlotInvoker != null && overviewPlotInvoker.getNumExtensions() > 0%>" 
439    />
440    </t:tabcontrol>
441
442  </base:body>
443  </base:page>
444  <%
445}
446finally
447{
448  if (dc != null) dc.close();
449}
450%>
Note: See TracBrowser for help on using the repository browser.