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

Last change on this file since 4511 was 4511, checked in by Jari Häkkinen, 14 years ago

Addresses #1106. Missed to change reference wherefrom retrive GPLv3 license text. And some other changes.

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