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

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

Fixes #1302: Overview plots and correction factor plots as extension

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