source: trunk/www/views/experiments/bioassays/view_bioassay.jsp @ 6942

Last change on this file since 6942 was 6942, checked in by Nicklas Nordborg, 6 years ago

References #1941: Store experimental factor values as part experiments

Updated lists that display experimental factors so that they are able to handle inherited/cloned annotations correctly.

  • Property svn:eol-style set to native
  • Property svn:keywords set to Date Id
File size: 12.4 KB
Line 
1<%-- $Id: view_bioassay.jsp 6942 2015-08-31 10:50:45Z nicklas $
2  ------------------------------------------------------------------
3  Copyright (C) 2006 Jari Häkkinen, Nicklas Nordborg, Martin Svensson
4
5  This file is part of BASE - BioArray Software Environment.
6  Available at http://base.thep.lu.se/
7
8  BASE is free software; you can redistribute it and/or
9  modify it under the terms of the GNU General Public License
10  as published by the Free Software Foundation; either version 3
11  of the License, or (at your option) any later version.
12
13  BASE is distributed in the hope that it will be useful,
14  but WITHOUT ANY WARRANTY; without even the implied warranty of
15  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
16  GNU General Public License for more details.
17
18  You should have received a copy of the GNU General Public License
19  along with BASE. If not, see <http://www.gnu.org/licenses/>.
20  ------------------------------------------------------------------
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.ItemContext"
31  import="net.sf.basedb.core.Permission"
32  import="net.sf.basedb.core.Experiment"
33  import="net.sf.basedb.core.BioAssaySet"
34  import="net.sf.basedb.core.BioAssay"
35  import="net.sf.basedb.core.RawBioAssay"
36  import="net.sf.basedb.core.RootRawBioAssay"
37  import="net.sf.basedb.core.Unit"
38  import="net.sf.basedb.core.Annotatable"
39  import="net.sf.basedb.core.AnnotationSet"
40  import="net.sf.basedb.core.AnnotationType"
41  import="net.sf.basedb.core.Annotation"
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.BaseException"
46  import="net.sf.basedb.core.PluginDefinition"
47  import="net.sf.basedb.core.plugin.GuiContext"
48  import="net.sf.basedb.core.plugin.Plugin"
49  import="net.sf.basedb.core.query.Orders"
50  import="net.sf.basedb.core.query.Hql"
51  import="net.sf.basedb.core.snapshot.SnapshotManager"
52  import="net.sf.basedb.core.snapshot.AnnotationSetSnapshot"
53  import="net.sf.basedb.core.snapshot.AnnotationSnapshot"
54  import="net.sf.basedb.core.snapshot.AnnotationTypeFilter"
55  import="net.sf.basedb.util.formatter.Formatter"
56  import="net.sf.basedb.clients.web.formatter.FormatterFactory"
57  import="net.sf.basedb.clients.web.Base"
58  import="net.sf.basedb.clients.web.PermissionUtil"
59  import="net.sf.basedb.clients.web.util.HTML"
60  import="net.sf.basedb.clients.web.extensions.ExtensionsControl"
61  import="net.sf.basedb.clients.web.extensions.JspContext"
62  import="net.sf.basedb.clients.web.extensions.renderer.PrefixSuffixRenderer"
63  import="net.sf.basedb.clients.web.extensions.toolbar.ToolbarUtil"
64  import="net.sf.basedb.util.extensions.ExtensionsInvoker"
65  import="net.sf.basedb.util.Values"
66  import="java.util.Map"
67  import="java.util.List"
68  import="java.util.HashMap"
69  import="java.util.LinkedList"
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.BIOASSAY;
78  private static final GuiContext guiContext = new GuiContext(itemType, GuiContext.Type.ITEM);
79%>
80<%
81final Item itemType = Item.BIOASSAY;
82final SessionControl sc = Base.getExistingSessionControl(pageContext, true);
83final ItemContext cc = Base.getAndSetCurrentContext(sc, itemType, null, null);
84final int itemId = cc.getId();
85final String ID = sc.getId();
86final float scale = Base.getScale(sc);
87final String tabId = Values.getString(request.getParameter("tab"), "properties");
88final DbControl dc = sc.newDbControl();
89try
90{
91  BioAssay bioAssay = BioAssay.getById(dc, itemId);
92  final boolean hasDbSpots = bioAssay.getNumSpots() > 0;
93  BioAssaySet bioAssaySet = bioAssay.getBioAssaySet();
94  Experiment experiment = bioAssay.getExperiment();
95  String title = null;
96  final boolean writePermission = bioAssay.hasPermission(Permission.WRITE);
97  Map<Plugin.MainType, Integer> pluginCount = PluginDefinition.countPlugins(dc, guiContext);
98  JspContext jspContext = ExtensionsControl.createContext(dc, pageContext, guiContext, bioAssay);
99  ExtensionsInvoker invoker = ToolbarUtil.useExtensions(jspContext);
100  %>
101  <base:page title="<%=title%>" id="view-page">
102  <base:head scripts="table.js,tabcontrol-2.js,~bioassays.js" styles="table.css,toolbar.css,headertabcontrol.css,path.css">
103    <ext:scripts context="<%=jspContext%>" />
104    <ext:stylesheets context="<%=jspContext%>" />
105  </base:head>
106  <base:body>
107    <p:path><p:pathelement 
108      title="Experiments" href="<%="../index.jsp?ID="+ID%>" 
109      /><p:pathelement title="<%=HTML.encodeTags(experiment.getName())%>" 
110        href="<%="../bioassaysets/index.jsp?ID="+ID+"&amp;experiment_id="+experiment.getId()%>"
111      /><p:pathelement title="<%=HTML.encodeTags(bioAssaySet.getName())%>" 
112        href="<%="index.jsp?ID="+ID+"&amp;bioassayset_id="+bioAssaySet.getId()%>" 
113      /><p:pathelement title="<%=HTML.encodeTags(bioAssay.getName())%>"
114      /></p:path>
115    <div id="page-data" data-item-id="<%=itemId%>"></div>
116
117    <t:tabcontrol 
118      id="main" 
119      subclass="content mastertabcontrol"
120      active="<%=tabId%>">
121    <t:tab id="properties" title="Properties">
122      <div>
123      <table class="fullform bottomborder">
124      <tr>
125        <th class="itemstatus">
126        </th>
127        <td style="padding: 0px;">
128          <tbl:toolbar subclass="bottomborder bg-filled-50">
129            <tbl:button 
130              id="btnEdit"
131              disabled="<%=!writePermission%>" 
132              image="edit.png" 
133              title="Edit&hellip;" 
134              tooltip="<%=writePermission ? "Edit this bioassay" : "You do not have permission to edit this bioassay"%>" 
135            />
136            <tbl:button 
137              id="btnImport"
138              image="import.png" 
139              data-plugin-type="IMPORT" 
140              title="Import&hellip;" 
141              tooltip="Import data" 
142              visible="<%=pluginCount.containsKey(Plugin.MainType.IMPORT)%>"
143            />
144            <tbl:button 
145              id="btnExport"
146              image="export.png"
147              data-plugin-type="EXPORT" 
148              title="Export&hellip;" 
149              tooltip="Export data" 
150              visible="<%=pluginCount.containsKey(Plugin.MainType.EXPORT)%>"
151            />
152            <tbl:button 
153              id="btnRunPlugin"
154              image="runplugin.png" 
155              data-plugin-type="OTHER" 
156              title="Run plugin&hellip;" 
157              tooltip="Run a plugin" 
158              visible="<%=pluginCount.containsKey(Plugin.MainType.OTHER)%>"
159            />
160            <tbl:button
161              id="btnPlotter"
162              image="plotter.png"
163              title="Plot tool&hellip;"
164              tooltip="A simple tool for generating plots"
165              visible="<%=hasDbSpots%>"
166            />
167            <ext:render extensions="<%=invoker%>" context="<%=jspContext%>" 
168              wrapper="<%=new PrefixSuffixRenderer(jspContext, "<td>", "</td>") %>"/>
169            <tbl:button
170              image="help.png"
171              subclass="auto-init"
172              data-auto-init="help"
173              data-help-id="bioassay.view.properties"
174              title="Help&hellip;"
175              tooltip="Get help about this page"
176            />
177          </tbl:toolbar>
178        </td>
179      </tr>
180      <tr>
181        <th>Name</th>
182        <td><%=HTML.encodeTags(bioAssay.getName())%></td>
183      </tr>
184      <tr>
185        <th>Spots</th>
186        <td>db: <%=bioAssay.getNumSpots()%>; file: <%=bioAssay.getNumFileSpots()%></td>
187      </tr>
188      <tr >
189        <th>Description</th>
190        <td><%=HTML.encodeTags(bioAssay.getDescription())%></td>
191      </tr>
192      </table>
193      </div>
194
195      <jsp:include page="../../../common/datafiles/list_files.jsp">
196        <jsp:param name="item_type" value="BIOASSAYSET" />
197        <jsp:param name="item_id" value="<%=bioAssaySet.getId()%>" />
198        <jsp:param name="ID" value="<%=ID%>" />
199      </jsp:include>
200   
201      <%
202      ItemQuery<RootRawBioAssay> rawQuery = bioAssay.getRootRawBioAssays();
203      rawQuery.include(Include.MINE, Include.SHARED, Include.OTHERS, Include.IN_PROJECT);
204      rawQuery.order(Orders.asc(Hql.property("rawBioAssay.name")));
205      ItemResultList<RootRawBioAssay> rawBioAssays = rawQuery.list(dc);
206      %>
207      <base:section
208        id="rawBioAssaySection"
209        title="<%="Root raw bioassays (" + rawBioAssays.size() + ")"%>"
210        context="<%=cc%>"
211        >
212        <%
213        if (rawBioAssays.size() == 0)
214        {
215          %>
216          <div class="messagecontainer note">
217          No raw bioassays are linked to this bioassay
218          (or, you don't have permission to view them).
219          </div>
220          <%
221        }
222        else
223        {
224          %>
225          <tbl:table
226            id="rawBioAssays"
227            columns="all"
228            >
229            <tbl:columndef 
230              id="name"
231              title="Name"
232            />
233            <tbl:columndef
234              id="spots"
235              title="Spots"
236            />
237            <tbl:columndef 
238              id="description"
239              title="Description"
240            />
241            <%
242            ItemQuery<AnnotationType> efQuery = experiment.getExperimentalFactors();
243            efQuery.include(Include.ALL);
244            efQuery.order(Orders.asc(Hql.property("name")));
245            ItemResultList<AnnotationType> experimentalFactors = efQuery.list(dc);
246            for (AnnotationType at : experimentalFactors)
247            {
248              Formatter formatter = FormatterFactory.getTypeFormatter(sc, at.getValueType());
249              %>
250              <tbl:columndef
251                id="<%="at"+at.getId()%>"
252                title="<%=HTML.encodeTags(at.getName())%>"
253                formatter="<%=formatter%>"
254              />
255              <%
256            }
257            %>
258            <tbl:data>
259              <tbl:headers>
260                <tbl:headerrow>
261                  <tbl:columnheaders />
262                </tbl:headerrow>
263              </tbl:headers>
264              <tbl:rows>
265              <%
266              SnapshotManager manager = new SnapshotManager();
267              AnnotationTypeFilter annotationTypeFilter = new AnnotationTypeFilter();
268              for (RootRawBioAssay item : rawBioAssays)
269              {
270                RawBioAssay rba = item.getRawBioAssay();
271                AnnotationSet as = item.isAnnotated() ? item.getAnnotationSet() : null;
272                AnnotationSetSnapshot snapshot = as == null ? null : manager.getSnapshot(dc, as.getId());
273                %>
274                <tbl:row>
275                  <tbl:cell column="name"><%=Base.getLinkedName(ID, item, false, true)%></tbl:cell>
276                  <tbl:cell column="spots"><%=rba.getSpots()%></tbl:cell>
277                  <tbl:cell column="description"><%=HTML.encodeTags(item.getDescription())%></tbl:cell>
278                  <%
279                  for (AnnotationType at : experimentalFactors)
280                  {
281                    Unit unit = at.getDefaultUnit();
282                    String unitSymbol = unit == null ? "" : "&nbsp;" + unit.getDisplaySymbol();
283                   
284                    annotationTypeFilter.setAnnotationType(at);
285                    List<AnnotationSnapshot> all = snapshot == null ? 
286                        null : manager.findAnnotations(dc, snapshot, annotationTypeFilter, true);
287                    %>
288                    <tbl:cell column="<%="at"+at.getId()%>">
289                      <%
290                      if (all != null && all.size() > 0)
291                      {
292                        for (AnnotationSnapshot a : all)
293                        {
294                          List values = a.getActualValues();
295                          %>
296                          <tbl:cellvalue list="<%=values%>" suffix="<%=unitSymbol%>"/>
297                          <base:icon 
298                            subclass="link auto-init"
299                            data-auto-init="edit-experimental-factor"
300                            data-item-type="<%=a.getThisItemType().name()%>"
301                            data-item-id="<%=a.getThisItemId() %>"
302                            data-annotation-type="<%=at.getId() %>"
303                            data-annotation="<%=a.getThisAnnotationId()%>"
304                            visible="<%=writePermission%>"
305                            image="edit.png" 
306                            tooltip="Modify the values of this experimental factor"
307                          />
308                          <%
309                        }
310                      }
311                      %>
312                    </tbl:cell>
313                    <%
314                  }
315                  %>
316                </tbl:row>
317                <%
318              }
319              %>
320              </tbl:rows>
321            </tbl:data>
322          </tbl:table>
323          <%
324        }
325        %>
326      </base:section>
327      <jsp:include page="../../../common/anytoany/list_anytoany.jsp">
328        <jsp:param name="ID" value="<%=ID%>" />
329        <jsp:param name="item_type" value="<%=itemType.name()%>" />
330        <jsp:param name="item_id" value="<%=itemId%>" />
331        <jsp:param name="title" value="Other items related to this bioassay" />
332      </jsp:include>
333    </t:tab>
334   
335    <t:tab id="annotations" title="Annotations" 
336      tooltip="View annotation values" clazz="white">
337      <jsp:include page="../../../common/annotations/list_frameset.jsp">
338        <jsp:param name="item_type" value="<%=itemType.name()%>" />
339        <jsp:param name="item_id" value="<%=itemId%>" />
340        <jsp:param name="ID" value="<%=ID%>" />
341      </jsp:include>
342    </t:tab>
343
344    <t:tab id="spotdata" title="Spot data" visible="<%=hasDbSpots%>">
345      <div class="bg-filled-50 absolutefull">
346        <table style="margin: auto; height: 100%;"><tr><td>
347        <b>Please wait. The spot data is loading...</b>
348        </td></tr></table>
349      </div>
350    </t:tab>
351    </t:tabcontrol>
352
353  </base:body>
354  </base:page>
355  <%
356}
357finally
358{
359  if (dc != null) dc.close();
360}
361%>
Note: See TracBrowser for help on using the repository browser.