source: trunk/www/views/experiments/view_experiment.jsp @ 3033

Last change on this file since 3033 was 3033, checked in by Nicklas Nordborg, 16 years ago

References #262, #340: First prototype for experiment overview. Reads most of an
experiment. Limited validation. No presets. No detailed information about an error/warning.

  • Property svn:eol-style set to native
  • Property svn:keywords set to Id
File size: 14.8 KB
Line 
1<%-- $Id: view_experiment.jsp 3033 2006-12-15 14:30:37Z nicklas $
2  ------------------------------------------------------------------
3  Copyright (C) Authors contributing to this file.
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 2
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 this program; if not, write to the Free Software
20  Foundation, Inc., 59 Temple Place - Suite 330,
21  Boston, MA  02111-1307, USA.
22  ------------------------------------------------------------------
23
24  @author Nicklas
25  @version 2.0
26--%>
27<%@ page session="false"
28  import="net.sf.basedb.core.SessionControl"
29  import="net.sf.basedb.core.DbControl"
30  import="net.sf.basedb.core.Item"
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.RawBioAssay"
35  import="net.sf.basedb.core.AnnotationType"
36  import="net.sf.basedb.core.AnnotationSet"
37  import="net.sf.basedb.core.Annotation"
38  import="net.sf.basedb.core.User"
39  import="net.sf.basedb.core.ItemQuery"
40  import="net.sf.basedb.core.ItemResultList"
41  import="net.sf.basedb.core.Include"
42  import="net.sf.basedb.core.PermissionDeniedException"
43  import="net.sf.basedb.core.PluginDefinition"
44  import="net.sf.basedb.core.plugin.GuiContext"
45  import="net.sf.basedb.core.plugin.Plugin"
46  import="net.sf.basedb.core.query.Orders"
47  import="net.sf.basedb.core.query.Hql"
48  import="net.sf.basedb.clients.web.Base"
49  import="net.sf.basedb.clients.web.PermissionUtil"
50  import="net.sf.basedb.clients.web.util.HTML"
51  import="net.sf.basedb.util.Values"
52  import="net.sf.basedb.util.formatter.Formatter"
53  import="net.sf.basedb.clients.web.formatter.FormatterFactory"
54  import="java.util.Date"
55  import="java.util.Map"
56  import="java.util.Set"
57  import="java.util.Date"
58%>
59<%@ taglib prefix="base" uri="/WEB-INF/base.tld" %>
60<%@ taglib prefix="tbl" uri="/WEB-INF/table.tld" %>
61<%@ taglib prefix="t" uri="/WEB-INF/tab.tld" %>
62<%@ taglib prefix="p" uri="/WEB-INF/path.tld" %>
63<%!
64  private static final Item itemType = Item.EXPERIMENT;
65  private static final GuiContext guiContext = new GuiContext(itemType, GuiContext.Type.ITEM);
66%>
67<%
68final SessionControl sc = Base.getExistingSessionControl(pageContext, true);
69final String ID = sc.getId();
70final ItemContext cc = Base.getAndSetCurrentContext(sc, itemType, null, null);
71final int itemId = cc.getId();
72final float scale = Base.getScale(sc);
73final String root = request.getContextPath();
74final DbControl dc = sc.newDbControl();
75try
76{
77  Formatter<Date> dateFormatter = FormatterFactory.getDateFormatter(sc);
78  Map<Plugin.MainType, Integer> pluginCount = PluginDefinition.countPlugins(dc, guiContext);
79
80  String title = null;
81  Experiment experiment = Experiment.getById(dc, itemId);
82 
83  final boolean writePermission = experiment.hasPermission(Permission.WRITE);
84  final boolean deletePermission = experiment.hasPermission(Permission.DELETE);
85  final boolean sharePermission = experiment.hasPermission(Permission.SET_PERMISSION);
86  final boolean setOwnerPermission = experiment.hasPermission(Permission.SET_OWNER);
87  final boolean isOwner = experiment.isOwner();
88  %>
89
90  <base:page title="<%=title%>">
91  <base:head scripts="table.js,tabcontrol.js" styles="table.css,toolbar.css,headertabcontrol.css,path.css">
92    <script language="JavaScript">
93    function editItem()
94    {
95      Main.viewOrEditItem('<%=ID%>', '<%=itemType.name()%>', <%=itemId%>, true);
96    }
97    function shareItem()
98    {
99      Main.openPopup('index.jsp?ID=<%=ID%>&cmd=ShareItem&item_id=<%=itemId%>', 'ShareRawBioAssay', 500, 400);
100    }
101    function deleteItem()
102    {
103      location.replace('index.jsp?ID=<%=ID%>&cmd=DeleteItem&item_id=<%=itemId%>');
104    }
105    function restoreItem()
106    {
107      location.replace('index.jsp?ID=<%=ID%>&cmd=RestoreItem&item_id=<%=itemId%>');
108    }
109    function takeOwnership()
110    {
111      if (confirm('Are you sure that you want to take ownership of this item? It can\'t be undone.'))
112      {
113        location.replace('index.jsp?ID=<%=ID%>&cmd=TakeOwnershipOfItem&item_id=<%=itemId%>');
114      }
115    }
116    function runPlugin(cmd)
117    {
118      Main.openPopup('index.jsp?ID=<%=ID%>&cmd='+cmd+'&item_id=<%=itemId%>', 'RunPlugin'+cmd, 740, 540);
119    }
120    function analyzeItem()
121    {
122      location.href = '<%=root%>/analyze/index.jsp?ID=<%=ID%>&experiment_id=<%=itemId%>';
123    }
124    function viewBioAssaySets()
125    {
126      location.href = 'bioassaysets/index.jsp?ID=<%=ID%>&experiment_id=<%=itemId%>';
127    }
128    function viewOverview()
129    {
130      location.href = 'overview/index.jsp?ID=<%=ID%>&experiment_id=<%=itemId%>';
131    }
132    function switchTab(tabControlId, tabId)
133    {
134      if (tabId == 'bioassaysets')
135      {
136        viewBioAssaySets();
137      }
138      else if (tabId == 'overview')
139      {
140        viewOverview();
141      }
142      else
143      {
144        TabControl.setActiveTab(tabControlId, tabId);
145      }
146    }
147    </script>
148  </base:head>
149  <base:body>
150    <p>
151    <p:path>
152      <p:pathelement title="Experiments" href="<%="index.jsp?ID="+ID%>" />
153      <p:pathelement title="<%=HTML.encodeTags(experiment.getName())%>" />
154    </p:path>
155   
156    <t:tabcontrol id="main" active="properties" switch="switchTab">
157    <t:tab id="properties" title="Properties">
158   
159    <tbl:toolbar
160      >
161      <tbl:button 
162        disabled="<%=writePermission ? false : true%>" 
163        image="<%=writePermission ? "edit.gif" : "edit_disabled.gif"%>" 
164        onclick="editItem()" 
165        title="Edit&hellip;" 
166        tooltip="<%=writePermission ? "Edit this experiment" : "You do not have permission to edit this experiment"%>" 
167      />
168      <tbl:button 
169        disabled="<%=deletePermission ? false : true%>" 
170        image="<%=deletePermission ? "delete.gif" : "delete_disabled.gif"%>" 
171        onclick="deleteItem()" 
172        title="Delete"
173        visible="<%=!experiment.isRemoved()%>"
174        tooltip="<%=deletePermission ? "Delete this experiment" : "You do not have permission to delete this experiment"%>" 
175      />
176      <tbl:button 
177        disabled="<%=writePermission ? false : true%>" 
178        image="<%=writePermission ? "restore.gif" : "restore_disabled.gif"%>" 
179        onclick="restoreItem()" 
180        title="Restore"
181        visible="<%=experiment.isRemoved()%>"
182        tooltip="<%=writePermission ? "Restore this experiment" : "You do not have permission to restore this experiment"%>" 
183      />
184      <tbl:button 
185        disabled="<%=sharePermission ? false : true%>"
186        image="<%=sharePermission ? "share.gif" : "share_disabled.gif"%>"
187        onclick="shareItem()" 
188        title="Share&hellip;" 
189        tooltip="<%=sharePermission ? "Share this experiment to other user, groups and projects" : "You do not have permission to share this experiment"%>"
190      />
191      <tbl:button 
192        disabled="<%=setOwnerPermission ? false : true%>"
193        image="<%=setOwnerPermission ? "take_ownership.png" : "take_ownership_disabled.png"%>"
194        onclick="takeOwnership()" 
195        title="Take ownership&hellip;"
196        visible="<%=!isOwner%>"
197        tooltip="<%=setOwnerPermission ? "Take ownership of this item" : "You do not have permission to take ownership of this item"%>"
198      />
199      <tbl:button 
200        image="import.gif" 
201        onclick="runPlugin('ImportItem')" 
202        title="Import&hellip;" 
203        tooltip="Import data" 
204        visible="<%=pluginCount.containsKey(Plugin.MainType.IMPORT)%>"
205      />
206      <tbl:button 
207        image="export.gif" 
208        onclick="runPlugin('ExportItem')" 
209        title="Export&hellip;" 
210        tooltip="Export data" 
211        visible="<%=pluginCount.containsKey(Plugin.MainType.EXPORT)%>"
212      />
213      <tbl:button 
214        image="runplugin.gif" 
215        onclick="runPlugin('RunPlugin')" 
216        title="Run plugin&hellip;" 
217        tooltip="Run a plugin" 
218        visible="<%=pluginCount.containsKey(Plugin.MainType.OTHER)%>"
219      />
220      <tbl:button
221        image="help.gif"
222        onclick="<%="Main.openHelp('" + ID +"', 'experiment.view.properties')"%>"
223        title="Help&hellip;"
224        tooltip="Get help about this page"
225      />
226      </tbl:toolbar>
227    <div class="boxedbottom">
228      <div class="itemstatus">Permissions on this item: <i><%=PermissionUtil.getFullPermissionNames(experiment)%></i></div>
229      <%
230      if (experiment.isRemoved() || experiment.isShared())
231      {
232        %>
233        <div class="itemstatus">
234          <base:icon image="deleted.gif" 
235            visible="<%=experiment.isRemoved()%>"> This item has been flagged for deletion<br></base:icon>
236          <base:icon image="shared.gif" 
237            visible="<%=experiment.isShared()%>"> This item is shared to other user, groups and/or projects</base:icon>
238        </div>
239        <%
240      }
241      %>
242      <table class="form" cellspacing=0>
243      <tr>
244        <td class="prompt">Name</td>
245        <td><%=HTML.encodeTags(experiment.getName())%></td>
246      </tr>
247      <tr>
248        <td class="prompt">Raw data type</td>
249        <td><%=HTML.encodeTags(experiment.getRawDataType().getName())%></td>
250      </tr>
251      <tr>
252        <td class="prompt">Directory</td>
253        <td><base:propertyvalue item="<%=experiment%>" property="directory" /></td>
254      </tr>
255      <tr>
256        <td class="prompt">Bytes</td>
257        <td><%=Values.formatBytes(experiment.getBytes())%></td>
258      </tr>
259      <tr>
260        <td class="prompt">Owner</td>
261        <td><base:propertyvalue item="<%=experiment%>" property="owner" /></td>
262      </tr>
263      <tr>
264        <td class="prompt">Description</td>
265        <td><%=HTML.niceFormat(experiment.getDescription())%></td>
266      </tr>
267      </table>
268     
269      <h4>Publication</h4>
270      <table class="form" cellspacing=0>
271      <tr>
272        <td class="prompt">PubMed ID</td>
273        <td>
274          <%=HTML.encodeTags(experiment.getPubMedId())%>
275          <%
276          int pubMedId = Values.getInt(experiment.getPubMedId(), -1);
277          if (pubMedId != -1)
278          {
279            %>
280            <b>Link to:</b>
281            <a href="http://www.ebi.ac.uk/citexplore/citationDetails.do?externalId=<%=pubMedId%>&dataSource=MED"
282              target="_new" title="External link to EBI Citation database"
283              >EBI Citation database</a>,
284            <a href="http://www.ncbi.nlm.nih.gov/entrez/query.fcgi?cmd=PureSearch&db=pubmed&details_term=<%=pubMedId%>"
285              target="_new" title="External link to NCBI Entrez PubMed">NCBI Entrez PubMed</a>
286            <%
287          }
288          %>
289        </td>
290      </tr>
291      <tr>
292        <td class="prompt">Title</td>
293        <td><%=HTML.niceFormat(experiment.getTitle())%></td>
294      </tr>
295      <tr>
296        <td class="prompt">Publication date</td>
297        <td><%=dateFormatter.format(experiment.getPublicationDate())%></td>
298      </tr>
299      <tr>
300        <td class="prompt">Abstract</td>
301        <td><%=HTML.niceFormat(experiment.getAbstract())%></td>
302      </tr>
303      <tr>
304        <td class="prompt">Experiment design</td>
305        <td><%=HTML.niceFormat(experiment.getExperimentDesign())%></td>
306      </tr>
307      <tr>
308        <td class="prompt">Experiment type</td>
309        <td><%=HTML.niceFormat(experiment.getExperimentType())%></td>
310      </tr>
311      <tr>
312        <td class="prompt">Affiliations</td>
313        <td><%=HTML.niceFormat(experiment.getAffiliations())%></td>
314      </tr>
315      <tr>
316        <td class="prompt">Authors</td>
317        <td><%=HTML.niceFormat(experiment.getAuthors())%></td>
318      </tr>
319      <tr>
320        <td class="prompt">Publication</td>
321        <td><%=HTML.niceFormat(experiment.getPublication())%></td>
322      </tr>
323      </table>
324     
325      <%
326      ItemQuery<AnnotationType> efQuery = experiment.getExperimentalFactors();
327      efQuery.include(Include.MINE, Include.SHARED, Include.OTHERS, Include.IN_PROJECT);
328      efQuery.order(Orders.asc(Hql.property("name")));
329      ItemResultList<AnnotationType> experimentalFactors = efQuery.list(dc);
330      if (experimentalFactors.size() == 0)
331      {
332        %>
333        <h4>Experimental factors</h4>
334        No experimental factors has been added to this experiment
335        (or, you don't have permission to view them).
336        <%
337      }
338      else
339      {
340        %>
341        <h4 class="docked">Experimental factors</h4>
342        <tbl:table
343          id="experimentalFactors"
344          clazz="itemlist"
345          columns="all"
346          >
347        <tbl:columndef 
348          id="name"
349          title="Name"
350        />
351        <tbl:columndef
352          id="values"
353          title="Values"
354        />
355        <tbl:columndef 
356          id="description"
357          title="Description"
358        />
359        <tbl:data>
360          <tbl:columns>
361          </tbl:columns>
362          <tbl:rows>
363          <%
364          for (AnnotationType item : experimentalFactors)
365          {
366            Formatter formatter = FormatterFactory.getTypeFormatter(sc, item.getValueType());
367            %>
368            <tbl:row>
369              <tbl:cell column="name"><%=Base.getLinkedName(ID, item, false, true)%></tbl:cell>
370              <tbl:cell column="description"><%=HTML.encodeTags(item.getDescription())%></tbl:cell>
371              <tbl:cell column="values">
372              <%=item.isEnumeration() ? 
373                "Enumeration: " + Values.getString(item.getValues(), ", ", true, formatter) :
374                item.getValueType()%>
375              </tbl:cell>
376            </tbl:row>
377            <%
378          }
379          %>
380          </tbl:rows>
381        </tbl:data>
382        </tbl:table>
383        <%
384      }
385      %>
386     
387      <%
388      ItemQuery<RawBioAssay> rbaQuery = experiment.getRawBioAssays();
389      rbaQuery.include(Include.MINE, Include.SHARED, Include.OTHERS, Include.IN_PROJECT);
390      rbaQuery.order(Orders.asc(Hql.property("name")));
391      ItemResultList<RawBioAssay> rawBioAssays = rbaQuery.list(dc);
392      if (rawBioAssays.size() == 0)
393      {
394        %>
395        <h4>Raw bioassays</h4>
396        No raw bioassays has been added to this experiment
397        (or, you don't have permission to view them).
398        <%
399      }
400      else
401      {
402        %>
403        <h4 class="docked">Raw bioassays</h4>
404        <tbl:table
405          id="rawbioassays"
406          clazz="itemlist"
407          columns="all"
408          >
409        <tbl:columndef 
410          id="name"
411          title="Name"
412        />
413        <tbl:columndef 
414          id="description"
415          title="Description"
416        />
417        <%
418        for (AnnotationType at : experimentalFactors)
419        {
420          Formatter formatter = FormatterFactory.getTypeFormatter(sc, at.getValueType());
421          %>
422          <tbl:columndef
423            id="<%="at"+at.getId()%>"
424            title="<%=HTML.encodeTags(at.getName())+" [EF]"%>"
425            formatter="<%=formatter%>"
426          />
427          <%
428        }
429        %>
430       
431        <tbl:data>
432          <tbl:columns>
433          </tbl:columns>
434          <tbl:rows>
435          <%
436          for (RawBioAssay item : rawBioAssays)
437          {
438            AnnotationSet as = item.isAnnotated() ? item.getAnnotationSet() : null;
439            %>
440            <tbl:row>
441              <tbl:cell column="name"><%=Base.getLinkedName(ID, item, false, true)%></tbl:cell>
442              <tbl:cell column="description"><%=HTML.encodeTags(item.getDescription())%></tbl:cell>
443              <%
444              for (AnnotationType at : experimentalFactors)
445              {
446                String value = "<i>- none -</i>";
447                Annotation a = as == null ? null : as.findAnnotation(at);
448                %>
449                <tbl:cell column="<%="at"+at.getId()%>"
450                  ><tbl:cellvalue list="<%=a == null ? null : a.getValues()%>" 
451                /></tbl:cell>
452                <%
453              }
454              %>
455            </tbl:row>
456            <%
457          }
458          %>
459          </tbl:rows>
460        </tbl:data>
461        </tbl:table>
462        <%
463      }
464      %>
465    </div>
466      </t:tab>
467     
468      <t:tab id="bioassaysets" title="Bioassay sets" />
469     
470      <t:tab id="overview" title="Overview" 
471        tooltip="Get an overview of all items in this experiment" />
472     
473      </t:tabcontrol>
474
475  </base:body>
476  </base:page>
477  <%
478}
479finally
480{
481  if (dc != null) dc.close();
482}
483
484%>
Note: See TracBrowser for help on using the repository browser.