source: trunk/www/views/experiments/spotdata/list_spotdata.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: 14.8 KB
Line 
1<%-- $Id: list_spotdata.jsp 5952 2012-02-10 12:27:27Z 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 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.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, 
107      transform, "frm.", "[Formula] ", true);
108  DynamicUtil.addExtraColumns(columns, dc, bioAssaySet, "ev", "#", "[Xtra] ");
109  DynamicUtil.addRawDataColumns(columns, dc, rawDataType, "raw.", "$", "[Raw] ");
110  DynamicUtil.addReporterColumns(columns, dc, experiment.getVirtualDb().getReporterCloneTemplate(), "rep.", "@", "[Rep] ");
111  DynamicUtil.SelectedInfo selected = DynamicUtil.getSelectedColumns(cc, columns, false);
112  if (bioAssay == null && cc.getSetting("columns").indexOf("COLUMN") >= 0) 
113  {
114    selected.selectedIds.add("COLUMN");
115    selected.selectedProperties.add("COLUMN");
116  }
117  try
118  {
119    final DynamicSpotQuery query = bioAssay != null ? bioAssay.getSpotData() : bioAssaySet.getSpotData();
120    cc.configureQuery(dc, query, selected.selectedProperties);
121    query.setFailSafe(true);
122    spotData = query.iterate(dc);
123  }
124  catch (Throwable t)
125  {
126    cc.setMessage(t.getMessage());
127    t.printStackTrace();
128  }
129
130  int numListed = 0;
131  JspContext jspContext = ExtensionsControl.createContext(dc, pageContext, 
132    guiContext, bioAssay == null ? bioAssaySet : bioAssay);
133  ExtensionsInvoker invoker = ToolbarUtil.useExtensions(jspContext);
134  ExtensionsInvoker overviewPlotInvoker = bioAssay != null ? 
135    null : ExtensionsControl.useExtensions(jspContext, "net.sf.basedb.clients.web.bioassayset.overviewplots");
136  %>
137  <base:page title="<%=title%>">
138  <base:head scripts="table.js,tabcontrol.js" styles="table.css,toolbar.css,headertabcontrol.css,path.css">
139    <ext:scripts context="<%=jspContext%>" />
140    <ext:stylesheets context="<%=jspContext%>" />
141    <script language="JavaScript">
142    var submitPage = 'index.jsp';
143    var formId = 'spotdata';
144    function configureColumns()
145    {
146      Table.configureColumns('<%=ID%>', formId, '<%=itemType.name()%>', '<%=(String)cc.getObject("defaultColumns")%>', '<%=subContext%>');
147    }
148    function presetOnChange()
149    {
150      Table.presetOnChange('<%=ID%>', formId, '<%=itemType.name()%>', '<%=(String)cc.getObject("defaultColumns")%>', '<%=subContext%>');
151    }
152    function runPlugin(cmd)
153    {
154      Table.submitToPopup(formId, cmd, 750, 500);
155    }
156    function switchTab(tabControlId, tabId)
157    {
158      if (tabId == 'properties.bioassay')
159      {
160        location.href = '../bioassays/index.jsp?ID=<%=ID%>&cmd=ViewItem&item_id=<%=bioAssayId%>&tab=properties';
161      }
162      else if (tabId == 'annotations.bioassay')
163      {
164        location.href = '../bioassays/index.jsp?ID=<%=ID%>&cmd=ViewItem&item_id=<%=bioAssayId%>&tab=annotations';
165      }
166      else if (tabId == 'properties.bioassayset')
167      {
168        location.href = '../bioassaysets/index.jsp?ID=<%=ID%>&cmd=ViewItem&item_id=<%=bioAssaySetId%>&tab=properties';
169      }
170      else if (tabId == 'annotations.bioassayset')
171      {
172        location.href = '../bioassaysets/index.jsp?ID=<%=ID%>&cmd=ViewItem&item_id=<%=bioAssaySetId%>&tab=annotations';
173      }
174      else if (tabId == 'overviewplots')
175      {
176        location.href = '../bioassaysets/index.jsp?ID=<%=ID%>&cmd=ViewItem&experiment_id=<%=experimentId%>&item_id=<%=bioAssaySetId%>&tab='+tabId;
177      }
178      else if (tabId == 'bioassays')
179      {
180        location.href = '../bioassays/index.jsp?ID=<%=ID%>&experiment_id=<%=experimentId%>&bioassayset_id=<%=bioAssaySetId%>&tab='+tabId;
181      }
182      else
183      {
184        TabControl.setActiveTab(tabControlId, tabId);
185      }
186    }
187    function newReporterList()
188    {
189      Table.submitToPopup(formId, 'CreateReporterList', 600, 400);
190    }
191    </script>
192  </base:head>
193  <base:body>
194    <p:path>
195      <p:pathelement 
196        title="Experiments" href="<%="../index.jsp?ID="+ID%>" 
197      /><p:pathelement title="<%=HTML.encodeTags(experiment.getName())%>" 
198        href="<%="../bioassaysets/index.jsp?ID="+ID+"&experiment_id="+experiment.getId()%>" 
199      /><%
200      if (bioAssay == null)
201      {
202        %><p:pathelement title="<%=HTML.encodeTags(bioAssaySet.getName())%>" 
203        /><%
204      }
205      else
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      %></p:path>
213
214    <t:tabcontrol 
215      id="main" 
216      subclass="mastertabcontrol content"
217      active="spotdata" switch="switchTab">
218    <t:tab id="properties.bioassay" title="Properties" visible="<%=bioAssay != null%>"/>
219    <t:tab id="properties.bioassayset" title="Properties" visible="<%=bioAssay == null%>"/>
220
221    <t:tab id="annotations.bioassay" title="Annotations" 
222      tooltip="View annotation values" visible="<%=bioAssay != null%>" />
223    <t:tab id="annotations.bioassayset" title="Annotations" 
224        tooltip="View annotation values" visible="<%=bioAssay == null%>" />
225
226    <t:tab id="bioassays" visible="<%=bioAssay == null%>" title="BioAssays" />
227    <t:tab id="spotdata" title="Spot data" >
228    <tbl:table 
229      id="spotdata" 
230      columns="<%=cc.getSetting("columns")%>"
231      sortby="<%=cc.getSortProperty()%>" 
232      direction="<%=cc.getSortDirection()%>"
233      action="index.jsp"
234      sc="<%=sc%>"
235      item="<%=itemType%>"
236      subcontext="<%=subContext%>"
237      subclass="fulltable"
238      >
239      <tbl:hidden 
240        name="mode" 
241        value="<%=mode.getName()%>" 
242      />
243      <tbl:hidden 
244        name="bioassayset_id" 
245        value="<%=String.valueOf(bioAssaySetId)%>" 
246      />
247      <tbl:hidden 
248        name="bioassay_id" 
249        value="<%=String.valueOf(bioAssayId)%>" 
250      />
251      <tbl:hidden 
252        name="callback" 
253        value="<%=callback%>" 
254        skip="<%=callback == null%>" 
255      />
256      <%
257      for (TableColumn tc : columns)
258      {
259        %>
260        <tbl:columndef
261          id="<%=tc.getId()%>"
262          property="<%=tc.getProperty()%>"
263          tooltip="<%=tc.getDescription()%>"
264          datatype="<%=tc.getDatatype().getStringValue()%>"
265          title="<%=HTML.encodeTags(tc.getTitle())%>"
266          sortable="<%=tc.getSortable()%>"
267          filterable="<%=tc.getFilterable()%>"
268          exportable="<%=tc.getExportable()%>"
269          show="<%=tc.getShow()%>"
270          formatter="<%=tc.getFormatter()%>"
271        />
272        <%
273      }
274      %>
275      <%
276      if (bioAssay == null)
277      {
278        Map<Number, String> bioAssayMap = new HashMap<Number, String>();
279        Enumeration<String, String> bioAssayEnum = new Enumeration<String, String>();
280        for (BioAssay ba : bioAssaySet.getBioAssays().list(dc))
281        {
282          short columnNo = ba.getDataCubeColumnNo();
283          String linkedBioAssay = Base.getLinkedName(ID, ba, false, true);
284          // Safety measure, since JDBC driver seems to return 'short' as 'int'
285          bioAssayMap.put(columnNo, linkedBioAssay);
286          bioAssayMap.put((int)columnNo, linkedBioAssay);
287          bioAssayEnum.add(String.valueOf(columnNo), HTML.encodeTags(ba.getName()));
288        }
289        %>
290        <tbl:columndef
291          id="COLUMN"
292          property="COLUMN"
293          datatype="int"
294          title="Bioassay"
295          sortable="true"
296          filterable="true"
297          exportable="true"
298          enumeration="<%=bioAssayEnum%>"
299          formatter="<%=new LookupFormatter<Number>(bioAssayMap)%>"
300        />
301        <%
302      }
303      %>
304      <tbl:columndef 
305        id="reporterList"
306        property="£reporterList"
307        datatype="int"
308        title="Reporter list"
309        filterable="true"
310        enumeration="<%=Base.getReporterListsEnum(dc)%>"
311        multiple="false"
312      />
313      <div class="panelgroup bottomborder">
314        <tbl:toolbar
315          subclass="bottomborder"
316          visible="<%=mode.hasToolbar()%>"
317          >
318          <tbl:button 
319            image="columns.png" 
320            onclick="configureColumns()" 
321            title="Columns&hellip;" 
322            tooltip="Show, hide and re-order columns" 
323          />
324          <tbl:button
325            image="add.png"
326            onclick="newReporterList()"
327            title="New reporter list&hellip;"
328            tooltip="Create a new reporter list from matching spots"
329            visible="<%=sc.hasPermission(Permission.CREATE, Item.REPORTERLIST)%>"
330          />
331          <tbl:button 
332            image="export.png" 
333            onclick="runPlugin('ExportItems')" 
334            title="Export&hellip;" 
335            tooltip="Export data" 
336            visible="<%=pluginCount.containsKey(Plugin.MainType.EXPORT)%>"
337          />
338          <ext:render extensions="<%=invoker%>" context="<%=jspContext%>" 
339            wrapper="<%=new PrefixSuffixRenderer(jspContext, "<td>", "</td>") %>"/>
340        </tbl:toolbar>
341        <tbl:panel>
342          <tbl:presetselector 
343            onchange="presetOnChange()"
344          />
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:panel>
352      </div>
353      <tbl:data>
354        <tbl:headers>
355          <tbl:headerrow>
356            <tbl:header 
357              clazz="index"
358              colspan="2"
359            />
360            <tbl:columnheaders />
361          </tbl:headerrow>
362          <tbl:headerrow>
363            <tbl:header 
364              clazz="index"
365              colspan="2"
366            />
367            <tbl:propertyfilter />
368          </tbl:headerrow>
369        </tbl:headers>
370        <tbl:rows>
371          <%
372          if (cc.getMessage() != null)
373          {
374            %>
375            <tbl:panel clazz="messagepanel">
376              <div class="messagecontainer error"><%=cc.getMessage()%></div>
377            </tbl:panel>
378            <%
379            cc.setMessage(null);
380          }
381          int index = cc.getPage()*cc.getRowsPerPage();
382          int selectedItemId = cc.getId();
383          if (spotData != null)
384          {
385            while (spotData.hasNext())
386            {
387              SqlResult item = spotData.next();
388              index++;
389              numListed++;
390              %>
391              <tbl:row>
392                <tbl:header 
393                  clazz="index"
394                  ><%=index%></tbl:header>
395                <tbl:header 
396                  clazz="icons" 
397                  visible="<%=mode.hasIcons()%>"
398                  >&nbsp;</tbl:header>
399                <%
400                int i = 1;
401                for (String columnId : selected.selectedIds)
402                {
403                  %>
404                  <tbl:cell column="<%=columnId%>" value="<%=item.getObject(i++)%>" />
405                  <%
406                }
407                %>
408              </tbl:row>
409              <%
410            }
411          }
412          if (numListed == 0)
413          {
414            %>
415            <tbl:panel clazz="messagepanel">
416              <div class="messagecontainer note">
417              <%=spotData == null || spotData.getTotalCount() == 0 ? "No spot data were found" : "No spot data on this page. Please select another page!" %>
418              </div>
419            </tbl:panel>
420            <%
421          }
422          %>
423          </tbl:rows>
424        </tbl:data>
425    </tbl:table>
426    </t:tab>
427
428    <t:tab id="overviewplots" title="Overview plots"
429      visible="<%=overviewPlotInvoker != null && overviewPlotInvoker.getNumExtensions() > 0%>" 
430    />
431    </t:tabcontrol>
432
433    <base:buttongroup>
434      <base:button onclick="returnSelected();" title="Ok" visible="<%=mode.hasOkButton()%>" />
435      <base:button onclick="window.close();" title="Cancel" visible="<%=mode.hasCancelButton()%>" />
436      <base:button onclick="window.close();" title="Close" visible="<%=mode.hasCloseButton()%>" />
437    </base:buttongroup>
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.