source: trunk/www/views/experiments/bioassaysets/view_bioassayset.jsp @ 3679

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

Changing the pesky "a (ä) character to a.

  • Property svn:eol-style set to native
  • Property svn:keywords set to Date Id
File size: 17.7 KB
Line 
1<%-- $Id: view_bioassayset.jsp 3679 2007-08-17 07:18:29Z jari $
2  ------------------------------------------------------------------
3  Copyright (C) 2006 Jari Hakkinen, Nicklas Nordborg, Martin Svensson
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 2
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 this program; if not, write to the Free Software
21  Foundation, Inc., 59 Temple Place - Suite 330,
22  Boston, MA  02111-1307, USA.
23  ------------------------------------------------------------------
24
25  @author Nicklas
26  @version 2.0
27--%>
28<%@ page session="false"
29  import="net.sf.basedb.core.SessionControl"
30  import="net.sf.basedb.core.DbControl"
31  import="net.sf.basedb.core.Item"
32  import="net.sf.basedb.core.ItemContext"
33  import="net.sf.basedb.core.Permission"
34  import="net.sf.basedb.core.Experiment"
35  import="net.sf.basedb.core.BioAssaySet"
36  import="net.sf.basedb.core.BioAssay"
37  import="net.sf.basedb.core.Transformation"
38  import="net.sf.basedb.core.Job"
39  import="net.sf.basedb.core.PluginDefinition"
40  import="net.sf.basedb.core.PluginConfiguration"
41  import="net.sf.basedb.core.User"
42  import="net.sf.basedb.core.ItemQuery"
43  import="net.sf.basedb.core.ItemResultList"
44  import="net.sf.basedb.core.Include"
45  import="net.sf.basedb.core.PermissionDeniedException"
46  import="net.sf.basedb.core.PluginDefinition"
47  import="net.sf.basedb.core.ParameterInfo"
48  import="net.sf.basedb.core.RawDataType"
49  import="net.sf.basedb.core.BasicItem"
50  import="net.sf.basedb.core.Nameable"
51  import="net.sf.basedb.core.File"
52  import="net.sf.basedb.core.plugin.GuiContext"
53  import="net.sf.basedb.core.plugin.Plugin"
54  import="net.sf.basedb.core.query.Orders"
55  import="net.sf.basedb.core.query.Hql"
56  import="net.sf.basedb.clients.web.Base"
57  import="net.sf.basedb.clients.web.PermissionUtil"
58  import="net.sf.basedb.clients.web.util.HTML"
59  import="net.sf.basedb.util.Values"
60  import="net.sf.basedb.clients.web.util.NameablePluginAdaptor"
61  import="net.sf.basedb.util.formatter.Formatter"
62  import="net.sf.basedb.clients.web.formatter.FormatterFactory"
63  import="java.util.Date"
64  import="java.util.Map"
65  import="java.util.Set"
66  import="java.util.List"
67%>
68<%@ taglib prefix="base" uri="/WEB-INF/base.tld" %>
69<%@ taglib prefix="tbl" uri="/WEB-INF/table.tld" %>
70<%@ taglib prefix="t" uri="/WEB-INF/tab.tld" %>
71<%@ taglib prefix="p" uri="/WEB-INF/path.tld" %>
72<%!
73  private static final Item itemType = Item.BIOASSAYSET;
74  private static final GuiContext guiContext = new GuiContext(itemType, GuiContext.Type.ITEM);
75%>
76<%
77final SessionControl sc = Base.getExistingSessionControl(pageContext, true);
78final String ID = sc.getId();
79final ItemContext cc = Base.getAndSetCurrentContext(sc, itemType, null, null);
80final int itemId = cc.getId();
81final String tabId = Values.getString(request.getParameter("tab"), "properties");
82
83final float scale = Base.getScale(sc);
84final String root = request.getContextPath();
85final DbControl dc = sc.newDbControl();
86try
87{
88  Map<Plugin.MainType, Integer> pluginCount = PluginDefinition.countPlugins(dc, guiContext);
89
90  String title = null;
91  final BioAssaySet bioAssaySet = BioAssaySet.getById(dc, itemId);
92  final Experiment experiment = bioAssaySet.getExperiment();
93  final int experimentId = experiment.getId();
94  Transformation transformation = bioAssaySet.getTransformation();
95  RawDataType rawDataType = experiment.getRawDataType();
96 
97  Job job = null;
98  boolean readJob = true;
99  PluginDefinition plugin = null;
100  boolean readPlugin = true;
101  PluginConfiguration configuration = null;
102  boolean readConfiguration = true;
103
104  try
105  {
106    job = transformation.getJob();
107  }
108  catch (PermissionDeniedException ex)
109  {
110    readJob = false;
111    readPlugin = false;
112    readConfiguration = false;
113  }
114  if (job != null)
115  {
116    try
117    {
118      plugin = job.getPluginDefinition();
119    }
120    catch (PermissionDeniedException ex)
121    {
122      readPlugin = false;
123    }
124    try
125    {
126      configuration = job.getPluginConfiguration();
127    }
128    catch (PermissionDeniedException ex)
129    {
130      readConfiguration = false;
131    }
132  }
133 
134  final boolean createPermission = experiment.hasPermission(Permission.USE);
135  final boolean writePermission = bioAssaySet.hasPermission(Permission.WRITE);
136  final boolean deletePermission = bioAssaySet.hasPermission(Permission.DELETE);
137  Formatter<Date> dateFormatter = FormatterFactory.getDateFormatter(sc);
138  Formatter<Date> dateTimeFormatter = FormatterFactory.getDateTimeFormatter(sc);
139  %>
140
141  <base:page title="<%=title%>">
142  <base:head scripts="table.js,tabcontrol.js,newjoust.js" styles="table.css,toolbar.css,headertabcontrol.css,path.css,newjoust.css">
143    <script language="JavaScript">
144    function editItem()
145    {
146      Main.viewOrEditItem('<%=ID%>', '<%=itemType.name()%>', <%=itemId%>, true);
147    }
148    function deleteItem()
149    {
150      location.replace('index.jsp?ID=<%=ID%>&cmd=DeleteItem&experiment_id=<%=experimentId%>&item_id=<%=itemId%>');
151    }
152    function restoreItem()
153    {
154      location.replace('index.jsp?ID=<%=ID%>&cmd=RestoreItem&experiment_id=<%=experimentId%>&item_id=<%=itemId%>');
155    }
156    function switchTab(tabControlId, tabId)
157    {
158      if (TabControl.isActive(tabControlId, tabId)) return;
159      if (tabId == 'bioassays')
160      {
161        location.href = '../bioassays/index.jsp?ID=<%=ID%>&experiment_id=<%=experimentId%>&bioassayset_id=<%=itemId%>&tab='+tabId;
162      }
163      else if (tabId == 'spotdata')
164      {
165        location.href = '../spotdata/index.jsp?ID=<%=ID%>&experiment_id=<%=experimentId%>&bioassayset_id=<%=itemId%>';
166      }
167      else if ((tabId == 'overviewplots' || tabId == 'cfplots') && tabId != '<%=tabId%>')
168      {
169        location.href = 'index.jsp?ID=<%=ID%>&cmd=ViewItem&experiment_id=<%=experimentId%>&bioassayset_id=<%=itemId%>&tab='+tabId;
170      }
171      else
172      {
173        TabControl.setActiveTab(tabControlId, tabId);
174      }
175    }
176    function changeImage(imageId, url)
177    {
178      var img = document.getElementById(imageId);
179      img.src = url;
180    }
181    function runItemPlugin(cmd)
182    {
183      Main.openPopup('index.jsp?ID=<%=ID%>&cmd='+cmd+'&experiment_id=<%=experimentId%>&item_id=<%=itemId%>', 'RunPlugin'+cmd, 740, 540);
184    }
185    </script>
186  </base:head>
187  <base:body>
188    <p>
189    <p:path>
190      <p:pathelement title="Experiments" href="<%="../index.jsp?ID="+ID%>" />
191      <p:pathelement title="<%=HTML.encodeTags(experiment.getName())%>" 
192        href="<%="index.jsp?ID="+ID+"&experiment_id="+experimentId%>" />
193      <p:pathelement title="<%=HTML.encodeTags(bioAssaySet.getName())%>" />
194    </p:path>
195   
196    <t:tabcontrol id="view" active="<%=tabId%>" switch="switchTab" remember="false">
197    <t:tab id="properties" title="Properties">
198   
199    <tbl:toolbar
200      >
201      <tbl:button 
202        disabled="<%=writePermission ? false : true%>" 
203        image="<%=writePermission ? "edit.gif" : "edit_disabled.gif"%>" 
204        onclick="editItem()" 
205        title="Edit&hellip;" 
206        tooltip="<%=writePermission ? "Edit this bioassay set" : "You do not have permission to edit this bioassay set"%>" 
207      />
208      <tbl:button 
209        disabled="<%=deletePermission ? false : true%>" 
210        image="<%=deletePermission ? "delete.gif" : "delete_disabled.gif"%>" 
211        onclick="deleteItem()" 
212        title="Delete"
213        visible="<%=!bioAssaySet.isRemoved()%>"
214        tooltip="<%=deletePermission ? "Delete this bioassay set" : "You do not have permission to delete this bioassay set"%>" 
215      />
216      <tbl:button 
217        disabled="<%=writePermission ? false : true%>" 
218        image="<%=writePermission ? "restore.gif" : "restore_disabled.gif"%>" 
219        onclick="restoreItem()" 
220        title="Restore"
221        visible="<%=bioAssaySet.isRemoved()%>"
222        tooltip="<%=writePermission ? "Restore this bioassay set" : "You do not have permission to restore this bioassay set"%>" 
223      />
224      <tbl:button 
225        image="import.gif" 
226        onclick="runItemPlugin('ImportItem')" 
227        title="Import&hellip;" 
228        tooltip="Import data" 
229        visible="<%=pluginCount.containsKey(Plugin.MainType.IMPORT)%>"
230      />
231      <tbl:button 
232        image="export.gif" 
233        onclick="runItemPlugin('ExportItem')" 
234        title="Export&hellip;" 
235        tooltip="Export data" 
236        visible="<%=pluginCount.containsKey(Plugin.MainType.EXPORT)%>"
237      />
238      <tbl:button
239        image="plotter.gif"
240        onclick="<%="openPlotTool(" + itemId + ")"%>"
241        title="Plot tool&hellip;"
242        tooltip="A simple tool for generating plots"
243      />
244      <tbl:button
245        image="explorer.png"
246        onclick="<%="openExperimentExplorer(" + itemId + ")"%>"
247        title="Experiment explorer"
248        tooltip="View the data reporter by reporter"
249      />
250      <tbl:button
251        disabled="<%=!createPermission%>"
252        image="<%=createPermission ? "filter.gif" : "filter_disabled.gif"%>"
253        onclick="<%="filter(" + itemId +")"%>"
254        title="Filter bioassay set&hellip;"
255        tooltip="<%=createPermission ? 
256          "Create a new bioassay set by filtering this bioassayset" :
257          "You do not have permission analyze this experiment"%>"
258      />
259      <tbl:button 
260        image="runplugin.gif" 
261        onclick="runItemPlugin('RunPlugin')"
262        title="Run plugin&hellip;" 
263        tooltip="Run a plugin" 
264        visible="<%=pluginCount.containsKey(Plugin.MainType.OTHER)%>"
265      />
266      <tbl:button 
267        disabled="<%=!createPermission%>"
268        image="<%=createPermission ? "runplugin.gif" : "runplugin_disabled.gif"%>" 
269        onclick="<%="runAnalysisPlugin(" + itemId + ")"%>"
270        title="Run analysis&hellip;" 
271        tooltip="<%=createPermission ? "Run an analysis plugin" : 
272          "You do not have permission to analyze this experiment"%>"
273        visible="<%=pluginCount.containsKey(Plugin.MainType.ANALYZE)%>"
274      />
275      <tbl:button
276        image="help.gif"
277        onclick="<%="Main.openHelp('" + ID +"', 'bioassayset.view.properties')"%>"
278        title="Help&hellip;"
279        tooltip="Get help about this page"
280      />
281      </tbl:toolbar>
282    <div class="boxedbottom">
283      <div class="itemstatus">Permissions on this item: <i><%=PermissionUtil.getFullPermissionNames(bioAssaySet)%></i></div>
284      <%
285      if (bioAssaySet.isRemoved())
286      {
287        %>
288        <div class="itemstatus">
289          <base:icon image="deleted.gif" 
290            visible="<%=bioAssaySet.isRemoved()%>"> This item has been flagged for deletion<br></base:icon>
291        </div>
292        <%
293      }
294      %>
295     
296      <table width="100%">
297      <tr valign="top">
298      <td width="50%">
299        <h4>Bioassay set</h4>
300        <table class="form" cellspacing=0>
301        <tr>
302          <td class="prompt">Name</td>
303          <td><%=HTML.encodeTags(bioAssaySet.getName())%></td>
304        </tr>
305        <tr>
306          <td class="prompt">Experiment</td>
307          <td><%=Base.getLinkedName(ID, experiment, false, writePermission)%>
308          (<%=experiment.getRawDataType()%>)</td>
309        </tr>
310        <tr>
311          <td class="prompt">Spots</td>
312          <td><%=bioAssaySet.getNumSpots()%></td>
313        </tr>
314        <tr>
315          <td class="prompt">Reporters</td>
316          <td><%=bioAssaySet.getNumReporters()%></td>
317        </tr>
318        <tr>
319          <td class="prompt">Description</td>
320          <td><%=HTML.niceFormat(bioAssaySet.getDescription())%></td>
321        </tr>
322        </table>
323       
324        <h4>Transformation &amp; job</h4>
325        <table class="form" cellspacing=0>
326        <tr>
327          <td class="prompt">Transformation</td>
328          <td><%=Base.getLinkedName(ID, transformation, false, 
329              transformation.hasPermission(Permission.WRITE))%></td>
330        </tr>
331        <tr>
332          <td class="prompt">Job</td>
333          <td><%=Base.getLinkedName(ID, job, !readJob, false)%></td>
334        </tr>
335        <tr valign=top>
336          <td class="prompt">Started</td>
337          <td>
338            <%=job == null ? "" : dateTimeFormatter.format(job.getStarted())%>
339          </td>
340        </tr>
341        <tr valign=top>
342          <td class="prompt">Ended</td>
343          <td>
344            <%=job == null ? "" : dateTimeFormatter.format(job.getEnded())%>
345          </td>
346        </tr>
347        <tr valign=top>
348          <td class="prompt">Server</td>
349          <td>
350            <%=job == null ? "" : HTML.encodeTags(job.getServer())%>
351          </td>
352        </tr>
353        <tr>
354          <td class="prompt">Description</td>
355          <td><%=HTML.niceFormat(transformation.getDescription())%></td>
356        </tr>
357        </table>
358      </td>
359      <td width="50%">
360        <h4>Plugin &amp; parameters</h4>
361        <table class="form" cellspacing=0>
362        <tr>
363          <td class="prompt">Plugin</td>
364          <td><%=Base.getLinkedName(ID, plugin == null ? null : new NameablePluginAdaptor(plugin), 
365              !readPlugin, plugin != null && plugin.hasPermission(Permission.WRITE))%></td>
366        </tr>
367        <tr>
368          <td class="prompt">Plugin configuration</td>
369          <td><%=Base.getLinkedName(ID, configuration, !readConfiguration, 
370            configuration != null && configuration.hasPermission(Permission.WRITE))%></td>
371        </tr>
372        <%
373        if (job != null)
374        {
375          for (String name : job.getParameterNames())
376          {
377            StringBuilder sb = new StringBuilder();
378            String displayValue = "";
379            String description = "";
380            try
381            {
382              ParameterInfo pi = job.getParameterInfo(name);
383              if (pi.getLabel() != null) name = HTML.encodeTags(pi.getLabel());
384              description = HTML.encodeTags(pi.getDescription());
385              List<?> values = pi.getValues();
386              int i = 0;
387              for (Object value : values)
388              {
389                if (value != null)
390                {
391                  if (i > 0) sb.append(", ");
392                  i++;
393                  if (value instanceof BasicItem)
394                  {
395                    BasicItem item = (BasicItem)value;
396                    String itemName = "";
397                    if (item instanceof File)
398                    {
399                      itemName = ((File)item).getPath().toString();
400                    }
401                    else if (item instanceof Nameable)
402                    {
403                      itemName = ((Nameable)item).getName();
404                    }
405                    else
406                    {
407                      itemName = item.toString();
408                    }
409                    sb.append(Base.getLink(ID, HTML.encodeTags(itemName), 
410                      item.getType(), item.getId(), item.hasPermission(Permission.WRITE)));
411                  }
412                  else if (value instanceof Date)
413                  {
414                    sb.append(dateFormatter.format((Date)value));
415                  }
416                  else
417                  {
418                    sb.append(HTML.encodeTags(value.toString()));
419                  }
420                }
421              }
422              displayValue = sb.toString();
423            }
424            catch (Throwable ex)
425            {
426              displayValue = "<i>ERROR: "+ex.getMessage()+"</i>";
427            }
428            %>
429            <tr>
430            <td class="prompt"><span title="<%=description%>"><%=name%></span></td>
431              <td>
432                <%=displayValue%>
433              </td>
434            </tr>
435            <%
436          }
437        }
438        %>
439        </table>
440
441      </td>
442      </tr>
443      </table>
444     
445      <p>
446      <h4 class="docked">Sub analysis tree</h4>
447      <jsp:include page="analysis_tree.jsp">
448        <jsp:param name="ID" value="<%=ID%>" />
449        <jsp:param name="experiment_id" value="<%=experimentId%>" />
450        <jsp:param name="item_id" value="<%=itemId%>" />
451      </jsp:include>
452      </div>
453      </t:tab>
454     
455      <t:tab id="annotations" title="Annotations" 
456        tooltip="View annotation values">
457        <div class="boxed">
458        <jsp:include page="../../../common/annotations/list_annotations.jsp">
459          <jsp:param name="item_type" value="<%=itemType.name()%>" />
460          <jsp:param name="item_id" value="<%=itemId%>" />
461          <jsp:param name="ID" value="<%=ID%>" />
462        </jsp:include>
463        </div>
464      </t:tab>
465     
466      <t:tab id="bioassays" title="Bioassays" />
467     
468      <t:tab id="spotdata" title="Spot data" />
469     
470      <t:tab id="overviewplots" title="Overview plots" 
471        tooltip="MA-plots of each bioassay in this bioassay set"
472        visible="<%=rawDataType.getChannels() == 2%>">
473      <%
474      if ("overviewplots".equals(tabId))
475      {
476        String M = HTML.urlEncode("log2(ch(1) / ch(2))");
477        String A = HTML.urlEncode("log(ch(1) * ch(2)) / 2");
478        String xLabel = HTML.urlEncode("A, log10(ch1 * ch2) / 2");
479        String yLabel = HTML.urlEncode("M, log2(ch1 / ch2)");
480        String filter = HTML.urlEncode("ch(1) > 0 && ch(2) > 0");
481        ItemQuery<BioAssay> bioAssayQuery = bioAssaySet.getBioAssays();
482        bioAssayQuery.order(Orders.asc(Hql.property("name")));
483        for (BioAssay bioAssay : bioAssayQuery.list(dc))
484        {
485          String url = "../plotter/plot?ID="+ID+"&bioassay_id="+bioAssay.getId();
486          url += "&type=scatter&width=400&height=300";
487          url += "&x="+A+"&y="+M+"&xLabel="+xLabel+"&yLabel="+yLabel;
488          url += "&filter="+filter;
489          url += "&title="+HTML.urlEncode(bioAssay.getName());
490          %>
491          <img id="MA<%=bioAssay.getId()%>" 
492            src="../../../images/plot_generating_400x300.gif" 
493            width="400" height="300" 
494            alt="MA-plot for bioassay <%=HTML.encodeTags(bioAssay.getName())%>"
495            style="border: 1px solid #666666;">
496          <script language="JavaScript">
497          setTimeout("changeImage('MA<%=bioAssay.getId()%>', '<%=url%>')", 100);
498          </script>
499          <%
500        }
501      }
502      %>
503      </t:tab>
504     
505      <t:tab id="cfplots" title="Correction factor plots" 
506        tooltip="MA-plot of the parent bioassays together with a correction factor for each spot in the current bioassayset."
507        visible="<%=rawDataType.getChannels() == 2 && bioAssaySet.getTransformation().getSource() != null %>">
508      <%
509      if ("cfplots".equals(tabId))
510      {
511        ItemQuery<BioAssay> bioAssayQuery = bioAssaySet.getBioAssays();
512        bioAssayQuery.order(Orders.asc(Hql.property("name")));
513        String xLabel = HTML.urlEncode("A, log10(ch1 * ch2) / 2");
514        String yLabel = HTML.urlEncode("M, log2(ch1 / ch2)");
515        for (BioAssay bioAssay : bioAssayQuery.list(dc))
516        {
517          String url = "../plotter/plot?ID="+ID+"&bioassay_id="+bioAssay.getId();
518          url += "&type=cfplot&width=400&height=300";
519          url += "&xLabel="+xLabel+"&yLabel="+yLabel;
520          url += "&title="+HTML.urlEncode(bioAssay.getName());
521          %>
522          <img id="CF<%=bioAssay.getId()%>" 
523            src="../../../images/plot_generating_400x300.gif" 
524            width="400" height="300" 
525            alt="Correction factor plot for bioassay <%=HTML.encodeTags(bioAssay.getName())%>"
526            style="border: 1px solid #666666;">
527          <script language="JavaScript">
528          setTimeout("changeImage('CF<%=bioAssay.getId()%>', '<%=url%>')", 100);
529          </script>
530          <%
531        }
532      }
533      %>
534      </t:tab>
535
536      </t:tabcontrol>
537
538  </base:body>
539  </base:page>
540  <%
541}
542finally
543{
544  if (dc != null) dc.close();
545}
546
547%>
Note: See TracBrowser for help on using the repository browser.