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

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

References #2033: Permissions for annotating items may be incorrectly implemented

Changes in the web interface (Experimental factors in various places) so that the "edit" icon is only visible if the user has permission to modify an annotation.

  • Property svn:eol-style set to native
  • Property svn:keywords set to Date Id
File size: 12.6 KB
Line 
1<%-- $Id: view_bioassay.jsp 7210 2016-10-19 10:51:44Z 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                          boolean annotatePermission = a.hasPermission(dc, Permission.WRITE);
295                          List values = a.getActualValues();
296                          boolean isUpToDate = a.isUpToDate();
297                          %>
298                          <tbl:cellvalue list="<%=values%>" suffix="<%=unitSymbol%>"/>
299                          <base:icon 
300                            subclass="link auto-init"
301                            data-auto-init="edit-experimental-factor"
302                            data-item-type="<%=a.getThisItemType().name()%>"
303                            data-item-id="<%=a.getThisItemId() %>"
304                            data-annotation-type="<%=at.getId() %>"
305                            data-annotation="<%=a.getThisAnnotationId()%>"
306                            visible="<%=annotatePermission%>"
307                            image="<%=isUpToDate ? "edit.png" : "edit-outofsync.png"%>" 
308                            tooltip="Modify the values of this experimental factor"
309                          />
310                          <%
311                        }
312                      }
313                      %>
314                    </tbl:cell>
315                    <%
316                  }
317                  %>
318                </tbl:row>
319                <%
320              }
321              %>
322              </tbl:rows>
323            </tbl:data>
324          </tbl:table>
325          <%
326        }
327        %>
328      </base:section>
329      <jsp:include page="../../../common/anytoany/list_anytoany.jsp">
330        <jsp:param name="ID" value="<%=ID%>" />
331        <jsp:param name="item_type" value="<%=itemType.name()%>" />
332        <jsp:param name="item_id" value="<%=itemId%>" />
333        <jsp:param name="title" value="Other items related to this bioassay" />
334      </jsp:include>
335    </t:tab>
336   
337    <t:tab id="annotations" title="Annotations" 
338      tooltip="View annotation values" clazz="white">
339      <jsp:include page="../../../common/annotations/list_frameset.jsp">
340        <jsp:param name="item_type" value="<%=itemType.name()%>" />
341        <jsp:param name="item_id" value="<%=itemId%>" />
342        <jsp:param name="ID" value="<%=ID%>" />
343      </jsp:include>
344    </t:tab>
345
346    <t:tab id="spotdata" title="Spot data" visible="<%=hasDbSpots%>">
347      <div class="bg-filled-50 absolutefull">
348        <table style="margin: auto; height: 100%;"><tr><td>
349        <b>Please wait. The spot data is loading...</b>
350        </td></tr></table>
351      </div>
352    </t:tab>
353    </t:tabcontrol>
354
355  </base:body>
356  </base:page>
357  <%
358}
359finally
360{
361  if (dc != null) dc.close();
362}
363%>
Note: See TracBrowser for help on using the repository browser.