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

Last change on this file since 4857 was 4857, checked in by Nicklas Nordborg, 14 years ago

Fixes #1259: Exporting spot data (with table exporter): Bioassay column is numerated 1, 2, 3, ...

Also changed the list page to use the same formatter.

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