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

Last change on this file since 6191 was 6191, checked in by Nicklas Nordborg, 9 years ago

References #1729: Move in-page <script> elements to external *.js files

Fixed for the "overflowed text" functionality.

  • Property svn:eol-style set to native
  • Property svn:keywords set to Id
File size: 28.6 KB
Line 
1<%-- $Id: view_experiment.jsp 6191 2012-10-31 10:27:38Z nicklas $
2  ------------------------------------------------------------------
3  Copyright (C) 2006 Jari Häkkinen, Nicklas Nordborg, Martin Svensson, Gregory Vincic
4  Copyright (C) 2007 Nicklas Nordborg, Martin Svensson
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.ItemContext"
31  import="net.sf.basedb.core.Permission"
32  import="net.sf.basedb.core.Experiment"
33  import="net.sf.basedb.core.VirtualDb"
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.Annotatable"
39  import="net.sf.basedb.core.Unit"
40  import="net.sf.basedb.core.Type"
41  import="net.sf.basedb.core.User"
42  import="net.sf.basedb.core.Group"
43  import="net.sf.basedb.core.VirtualTable"
44  import="net.sf.basedb.core.ItemQuery"
45  import="net.sf.basedb.core.ItemResultList"
46  import="net.sf.basedb.core.ItemResultIterator"
47  import="net.sf.basedb.core.Include"
48  import="net.sf.basedb.core.MultiPermissions"
49  import="net.sf.basedb.core.PermissionDeniedException"
50  import="net.sf.basedb.core.PluginDefinition"
51  import="net.sf.basedb.core.plugin.GuiContext"
52  import="net.sf.basedb.core.plugin.Plugin"
53  import="net.sf.basedb.core.Project"
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.ChangeHistoryUtil"
59  import="net.sf.basedb.clients.web.util.HTML"
60  import="net.sf.basedb.util.Values"
61  import="net.sf.basedb.core.snapshot.SnapshotManager"
62  import="net.sf.basedb.core.snapshot.AnnotationSetSnapshot"
63  import="net.sf.basedb.core.snapshot.AnnotationSnapshot"
64  import="net.sf.basedb.core.snapshot.AnnotationTypeFilter"
65  import="net.sf.basedb.util.formatter.Formatter"
66  import="net.sf.basedb.clients.web.formatter.FormatterFactory"
67  import="net.sf.basedb.clients.web.extensions.ExtensionsControl"
68  import="net.sf.basedb.clients.web.extensions.JspContext"
69  import="net.sf.basedb.clients.web.extensions.renderer.PrefixSuffixRenderer"
70  import="net.sf.basedb.clients.web.extensions.toolbar.ToolbarUtil"
71  import="net.sf.basedb.util.extensions.ExtensionsInvoker"
72  import="java.util.Collections"
73  import="java.util.Date"
74  import="java.util.Map"
75  import="java.util.HashMap"
76  import="java.util.Set"
77  import="java.util.HashSet"
78  import="java.util.List"
79  import="java.util.LinkedList"
80  import="java.util.Date"
81%>
82<%@ taglib prefix="base" uri="/WEB-INF/base.tld" %>
83<%@ taglib prefix="tbl" uri="/WEB-INF/table.tld" %>
84<%@ taglib prefix="t" uri="/WEB-INF/tab.tld" %>
85<%@ taglib prefix="p" uri="/WEB-INF/path.tld" %>
86<%@ taglib prefix="ext" uri="/WEB-INF/extensions.tld" %>
87<%!
88  private static final Item itemType = Item.EXPERIMENT;
89  private static final GuiContext guiContext = new GuiContext(itemType, GuiContext.Type.ITEM);
90%>
91<%
92final SessionControl sc = Base.getExistingSessionControl(pageContext, true);
93final String ID = sc.getId();
94final ItemContext cc = Base.getAndSetCurrentContext(sc, itemType, null, null);
95final int itemId = cc.getId();
96final String tab = Values.getString(request.getParameter("tab"), "properties");
97final float scale = Base.getScale(sc);
98final String root = request.getContextPath();
99final DbControl dc = sc.newDbControl();
100try
101{
102  Formatter<Date> dateFormatter = FormatterFactory.getDateFormatter(sc);
103  Map<Plugin.MainType, Integer> pluginCount = PluginDefinition.countPlugins(dc, guiContext);
104
105  String title = null;
106  Experiment experiment = Experiment.getById(dc, itemId);
107  VirtualDb virtualDb = experiment.getVirtualDb();
108 
109  final boolean writePermission = experiment.hasPermission(Permission.WRITE);
110  final boolean deletePermission = experiment.hasPermission(Permission.DELETE);
111  final boolean sharePermission = experiment.hasPermission(Permission.SET_PERMISSION);
112  final boolean setOwnerPermission = experiment.hasPermission(Permission.SET_OWNER);
113  final boolean isOwner = experiment.isOwner();
114  final boolean isRemoved = experiment.isRemoved();
115  final boolean isUsed = isRemoved && experiment.isUsed();
116  final boolean deletePermanentlyPermission = deletePermission && !isUsed;
117 
118  Map<AnnotationType, Set<Object>> usedFactorValues = 
119    new HashMap<AnnotationType, Set<Object>>();
120  Map<AnnotationType, Integer> factorValuesCount = new HashMap<AnnotationType, Integer>();
121  JspContext jspContext = ExtensionsControl.createContext(dc, pageContext, guiContext, experiment);
122  ExtensionsInvoker invoker = ToolbarUtil.useExtensions(jspContext);
123  %>
124  <base:page title="<%=title%>">
125  <base:head scripts="table.js,tabcontrol.js" styles="table.css,toolbar.css,headertabcontrol.css,path.css">
126    <ext:scripts context="<%=jspContext%>" />
127    <ext:stylesheets context="<%=jspContext%>" />
128    <script>
129    function editItem()
130    {
131      Main.viewOrEditItem('<%=ID%>', '<%=itemType.name()%>', <%=itemId%>, true);
132    }
133    function shareItem()
134    {
135      Main.openPopup('index.jsp?ID=<%=ID%>&cmd=ShareItem&item_id=<%=itemId%>', 'ShareRawBioAssay', 600, 400);
136    }
137    function deleteItem()
138    {
139      location.replace('index.jsp?ID=<%=ID%>&cmd=DeleteItem&item_id=<%=itemId%>');
140    }
141    function restoreItem()
142    {
143      location.replace('index.jsp?ID=<%=ID%>&cmd=RestoreItem&item_id=<%=itemId%>');
144    }
145    function deleteItemPermanently()
146    {
147      Main.deleteItemPermanently('<%=ID%>', true, '<%=itemType.name()%>', <%=itemId%>, '&callback=itemDeleted');
148    }
149    function itemDeleted()
150    {
151      Main.listItems('<%=ID%>', '<%=itemType.name()%>');
152    }
153    function showUsingItems()
154    {
155      Main.showUsingItems('<%=ID%>', '<%=itemType.name()%>', <%=itemId%>);
156    }   
157    function setOwner()
158    {
159      Main.openPopup('index.jsp?ID=<%=ID%>&cmd=SetOwnerOfItem&item_id=<%=itemId%>', 'SetOwnerOfItem', 450, 300);
160    }
161    function runPlugin(cmd)
162    {
163      Main.openPopup('index.jsp?ID=<%=ID%>&cmd='+cmd+'&item_id=<%=itemId%>', 'RunPlugin'+cmd, 750, 500);
164    }
165    function analyzeItem()
166    {
167      location.href = '<%=root%>/analyze/index.jsp?ID=<%=ID%>&experiment_id=<%=itemId%>';
168    }
169    function viewBioAssaySets()
170    {
171      location.href = 'bioassaysets/index.jsp?ID=<%=ID%>&experiment_id=<%=itemId%>';
172    }
173    function viewClonedReporters()
174    {
175      location.href = 'reporters/index.jsp?ID=<%=ID%>&experiment_id=<%=itemId%>';
176    }
177    function switchTab(tabControlId, tabId)
178    {
179      if (TabControl.isActive(tabControlId, tabId)) return;
180      if ((tabId == 'overview' || tabId == 'history') && tabId != '<%=tab%>')
181      {
182        location.href = 'index.jsp?ID=<%=ID%>&cmd=ViewItem&item_id=<%=itemId%>&tab='+tabId;
183      }
184      else if (tabId == 'clonedreporters')
185      {
186        viewClonedReporters();
187      }
188      else if (tabId == 'bioassaysets')
189      {
190        viewBioAssaySets();
191      }
192      else
193      {
194        TabControl.setActiveTab(tabControlId, tabId);
195      }
196    }
197    function editExperimentalFactor(itemType, itemId, annotationTypeId)
198    {
199      var url = getRoot() + 'common/annotations/annotate.jsp?ID=<%=ID%>';
200      url += '&item_type='+itemType;
201      url += '&item_id='+itemId;
202      url += '&annotationtype_id='+annotationTypeId;
203      url += '&standalone=1';
204      Main.openPopup(url, 'EditAnnotation', 750, 500);
205    }
206    function setUsedFactorValue(annotationTypeId, values)
207    {
208      var div = document.getElementById('usedvalues.'+annotationTypeId);
209      div.innerHTML = values;
210      if (values && values.length > 50)
211      {
212        Main.addClass(div, 'constrained unchecked autoshow');
213        if (TextOverflow.getOverflowMethod() == 'click')
214        {
215          TextOverflow.checkAndFixTag(div);
216        }
217      }
218    }
219    var hasMissingFactors = false;
220    function showStatus(annotationTypeId, numTotal, numInherited)
221    {
222      var sss = document.getElementById('status.'+annotationTypeId);
223      var html;
224      if (numInherited >= numTotal)
225      {
226        html = '<img src="../../images/ok.png" alt="Ok" title="All ' + numTotal +
227          ' raw bioassays have a value for this experimental factor">';
228      }
229      else
230      {
231        var numMissing = numTotal - numInherited;
232        html = '<table><tr>';
233        html += '<td><img src="../../images/warning.png" alt="!"';
234        html += ' title="' + numMissing + ' raw bioassays are missing a value for this experimental factor"></td>';
235        html += '<td style="text-align: center;">';
236        html += '<input type="checkbox" name="autoinherit" id="autoinherit'+annotationTypeId+'" value="'+annotationTypeId+'" checked';
237        html += ' title="Select to automatically inherit annotations from parents"></td>';
238        html += '<td>&nbsp;<label for="autoinherit'+annotationTypeId+'">' + numMissing + ' missing</label></td>'
239        html += '</tr></table>';
240        if (!hasMissingFactors)
241        {
242          hasMissingFactors = true;
243          var checkAll = '<table><tr>';
244          checkAll += '<td></td>';
245          checkAll += '<td style="text-align: center;">';
246          checkAll += '<a id="check.uncheck" href="javascript:checkFactors()" title="Check/uncheck all">';
247          checkAll += '<img src="../../images/check_uncheck.png" alt="x"></a></td>';
248          checkAll += '<td><img src="../../images/bullet.png" alt="*"></td>';
249          checkAll += '<td><a href="javascript:autoInherit()"';
250          checkAll += ' title="Automatically try to inherit values for the selected experimental factors from parent items">';
251          checkAll += 'Auto-inherit</a></td>'
252          checkAll += '</tr></table>';
253          document.getElementById('tbl.experimentalFactors.status').innerHTML = checkAll;
254          Main.show('warning.missing');
255        }
256      }
257      sss.innerHTML = html;
258    }
259    function checkFactors()
260    {
261      var frm = document.forms['tbl.experimentalFactors'];
262      Forms.checkUncheck(frm, /autoinherit/);
263    }
264    function autoInherit()
265    {
266      var frm = document.forms['tbl.experimentalFactors'];
267      if (Forms.numChecked(frm, /autoinherit/) == 0)
268      {
269        Forms.showNotification('check.uncheck', 'Please select at least on experimental factor', null, 'pointer-below');
270        return;
271      }
272      Main.openPopup('../../common/progress_reporter.jsp?ID=<%=ID%>&progress=autoinherit&title=Inheriting experimental factors', 'Progress', 300, 200);
273      frm.cmd.value = 'AutoInherit';
274      frm.submit();
275    }
276    function cloneReporters()
277    {
278      Main.openPopup('clone_reporters.jsp?ID=<%=ID%>&item_id=<%=itemId%>', 'CloneReporters', 600, 400);
279    }
280    function removeClonedReporters()
281    {
282      if (confirm('Are you sure that you want to remove all cloned reporter annotations?\nThis action can\'t be undone.'))
283      {
284        Main.openPopup('index.jsp?ID=<%=ID%>&cmd=RemoveClonedReporters&item_id=<%=itemId%>', 'RemoveClonedReporters', 450, 300);
285      }
286    }
287    </script>
288  </base:head>
289  <base:body onload="initUsedFactorValues()">
290    <p:path><p:pathelement 
291      title="Experiments" href="<%="index.jsp?ID="+ID%>" 
292      /><p:pathelement title="<%=HTML.encodeTags(experiment.getName())%>" 
293      /></p:path>
294   
295    <t:tabcontrol 
296      id="main" 
297      subclass="content mastertabcontrol" 
298      active="<%=tab%>" switch="switchTab" remember="false">
299    <t:tab id="properties" title="Properties">
300      <div>
301      <table class="fullform">
302      <tr>
303        <th class="itemstatus">
304          <base:icon 
305            image="shared.png" 
306            visible="<%=experiment.isShared()%>"
307            tooltip="This item is shared to other users, groups and/or projects"
308          />
309          <base:icon 
310            image="deleted.png"
311            onclick="deleteItemPermanently()"
312            tooltip="This item has been flagged for deletion. Click to delete it now."
313            enabled="<%=deletePermanentlyPermission %>"
314            visible="<%=isRemoved%>" 
315          />
316          <base:icon image="used.png" 
317            onclick="showUsingItems()"
318            tooltip="This item is used by other items and can't be permanently deleted. Show the items that are using this one"
319            visible="<%=isRemoved && isUsed%>" />
320        </th>
321        <td style="padding: 0px;">
322          <tbl:toolbar subclass="bottomborder">
323            <tbl:button 
324              disabled="<%=!writePermission%>" 
325              image="edit.png" 
326              onclick="editItem()" 
327              title="Edit&hellip;" 
328              tooltip="<%=writePermission ? "Edit this experiment" : "You do not have permission to edit this experiment"%>" 
329            />
330            <tbl:button 
331              disabled="<%=!deletePermission%>" 
332              image="delete.png" 
333              onclick="deleteItem()" 
334              title="Delete"
335              visible="<%=!experiment.isRemoved()%>"
336              tooltip="<%=deletePermission ? "Delete this experiment" : "You do not have permission to delete this experiment"%>" 
337            />
338            <tbl:button 
339              disabled="<%=!writePermission%>" 
340              image="restore.png" 
341              onclick="restoreItem()" 
342              title="Restore"
343              visible="<%=experiment.isRemoved()%>"
344              tooltip="<%=writePermission ? "Restore this experiment" : "You do not have permission to restore this experiment"%>" 
345            />
346            <tbl:button 
347              disabled="<%=!sharePermission%>"
348              image="share.png"
349              onclick="shareItem()" 
350              title="Share&hellip;" 
351              tooltip="<%=sharePermission ? "Share this experiment to other user, groups and projects" : "You do not have permission to share this experiment"%>"
352            />
353            <tbl:button 
354              disabled="<%=!setOwnerPermission%>"
355              image="take_ownership.png"
356              onclick="setOwner()" 
357              title="Set owner&hellip;"
358              tooltip="<%=setOwnerPermission ? "Change owner of this item" : "You do not have permission to change ownership of this item"%>"
359            />
360            <tbl:button
361              visible="<%=writePermission && (virtualDb.hasTable(VirtualTable.POSITION) || experiment.getRawDataType().isStoredInDb()) %>"
362              image="copy.png"
363              onclick="cloneReporters()"
364              title="Clone reporters&hellip;"
365              tooltip="Clone reporter annotations for all reporters that are used in this experiment"
366            />
367            <tbl:button
368              visible="<%=writePermission && virtualDb.hasClonedReporters() %>"
369              image="delete_permanently.png"
370              onclick="removeClonedReporters()"
371              title="Remove cloned reporters&hellip;"
372              tooltip="Remove all cloned reporter annotations"
373            />
374            <tbl:button 
375              image="import.png" 
376              onclick="runPlugin('ImportItem')" 
377              title="Import&hellip;" 
378              tooltip="Import data" 
379              visible="<%=pluginCount.containsKey(Plugin.MainType.IMPORT)%>"
380            />
381            <tbl:button 
382              image="export.png" 
383              onclick="runPlugin('ExportItem')" 
384              title="Export&hellip;" 
385              tooltip="Export data" 
386              visible="<%=pluginCount.containsKey(Plugin.MainType.EXPORT)%>"
387            />
388            <tbl:button 
389              image="runplugin.png" 
390              onclick="runPlugin('RunPlugin')" 
391              title="Run plugin&hellip;" 
392              tooltip="Run a plugin" 
393              visible="<%=pluginCount.containsKey(Plugin.MainType.OTHER)%>"
394            />
395            <ext:render extensions="<%=invoker%>" context="<%=jspContext%>" 
396              wrapper="<%=new PrefixSuffixRenderer(jspContext, "<td>", "</td>") %>"/>
397            <tbl:button
398              image="help.png"
399              onclick="<%="Main.openHelp('" + ID +"', 'experiment.view.properties')"%>"
400              title="Help&hellip;"
401              tooltip="Get help about this page"
402            />
403          </tbl:toolbar>
404        </td>
405      </tr>
406    </table>
407    <table style="width: 100%; height: 16em;" class="bottomborder">
408    <tr>
409      <td style="width: 50%; height: 100%;">
410        <table class="fullform" >
411        <tr>
412          <th>Name</th>
413          <td><%=HTML.encodeTags(experiment.getName())%></td>
414        </tr>
415        <tr>
416          <th>Registered</th>
417          <td><%=dateFormatter.format(experiment.getEntryDate())%></td>
418        </tr>
419        <tr>
420          <th>Raw data type</th>
421          <td><base:catch><%=HTML.encodeTags(experiment.getRawDataType().getName())%></base:catch></td>
422        </tr>
423        <tr>
424          <th>Directory</th>
425          <td><base:propertyvalue item="<%=experiment%>" property="directory" /></td>
426        </tr>
427        <tr>
428          <th>Reporter clone template</th>
429          <td><base:propertyvalue item="<%=experiment%>" property="virtualDb.reporterCloneTemplate" nulltext="<i>- no cloned reporters -</i>" /></td>
430        </tr>
431        <tr>
432          <th>Bytes</th>
433          <td><%=Values.formatBytes(experiment.getBytes())%></td>
434        </tr>
435        <tr>
436          <th>Owner</th>
437          <td><base:propertyvalue item="<%=experiment%>" property="owner" /></td>
438        </tr>
439        <tr>
440          <th>Permissions</th>
441          <td><%=PermissionUtil.getFullPermissionNames(experiment)%></td>
442        </tr>
443        <tr class="dynamic">
444          <th>Description</th>
445          <td><%=HTML.niceFormat(experiment.getDescription())%></td>
446        </tr>
447        </table>
448      </td>
449      <td style="width: 50%; height: 100%;" class="leftborder">
450        <table class="fullform">
451        <tr>
452          <th>PubMed ID</th>
453          <td>
454            <%=HTML.encodeTags(experiment.getPubMedId())%>
455            <%
456            int pubMedId = Values.getInt(experiment.getPubMedId(), -1);
457            if (pubMedId != -1)
458            {
459              %>
460              <b>Link to:</b>
461              <a href="http://www.ebi.ac.uk/citexplore/citationDetails.do?externalId=<%=pubMedId%>&dataSource=MED"
462                target="_blank" title="External link to EBI Citation database"
463                >EBI Citation database</a>,
464              <a href="http://www.ncbi.nlm.nih.gov/entrez/query.fcgi?cmd=PureSearch&db=pubmed&details_term=<%=pubMedId%>"
465                target="_blank" title="External link to NCBI Entrez PubMed">NCBI Entrez PubMed</a>
466              <%
467            }
468            %>
469          </td>
470        </tr>
471        <tr>
472          <th>Title</th>
473          <td><%=HTML.niceFormat(experiment.getTitle())%></td>
474        </tr>
475        <tr>
476          <th>Publication date</th>
477          <td><%=dateFormatter.format(experiment.getPublicationDate())%></td>
478        </tr>
479        <tr>
480          <th>Abstract</th>
481          <td><%=HTML.niceFormat(experiment.getAbstract())%></td>
482        </tr>
483        <tr>
484          <th>Experiment design</th>
485          <td><%=HTML.niceFormat(experiment.getExperimentDesign())%></td>
486        </tr>
487        <tr>
488          <th>Experiment type</th>
489          <td><%=HTML.niceFormat(experiment.getExperimentType())%></td>
490        </tr>
491        <tr>
492          <th>Affiliations</th>
493          <td><%=HTML.niceFormat(experiment.getAffiliations())%></td>
494        </tr>
495        <tr>
496          <th>Authors</th>
497          <td><%=HTML.niceFormat(experiment.getAuthors())%></td>
498        </tr>
499        <tr class="dynamic">
500          <th>Publication</th>
501          <td><%=HTML.niceFormat(experiment.getPublication())%></td>
502        </tr>
503        </table>
504      </td>
505    </tr>
506    </table>
507    </div>
508     
509      <%
510      ItemQuery<AnnotationType> efQuery = experiment.getExperimentalFactors();
511      efQuery.include(Include.ALL);
512      efQuery.order(Orders.asc(Hql.property("name")));
513      ItemResultList<AnnotationType> experimentalFactors = efQuery.list(dc);
514      %>
515      <base:section 
516        id="experimentalFactors" 
517        title="<%="Experimental factors (" + experimentalFactors.size() +")"%>"
518        context="<%=cc%>"
519        >
520        <%
521        if (experimentalFactors.size() == 0)
522        {
523          %>
524          <div class="messagecontainer note">
525          No experimental factors has been added to this experiment
526          (or, you don't have permission to view them).
527          </div>
528          <%
529        }
530        else
531        {
532          %>
533          <div style="width: 100%; max-width: 1000px;">
534          <tbl:table
535            id="tbl.experimentalFactors"
536            columns="all"
537            action="index.jsp"
538            >
539            <tbl:hidden name="item_id" value="<%=Integer.toString(itemId)%>" />
540            <tbl:columndef 
541              id="name"
542              title="Name"
543            />
544            <tbl:columndef
545              id="type"
546              title="Value type"
547            />
548            <tbl:columndef
549              id="values"
550              title="Used values"
551            />
552            <tbl:columndef 
553              id="description"
554              title="Description"
555            />
556            <tbl:columndef 
557              id="status"
558              title="Status"
559            />
560            <tbl:data>
561              <tbl:headers>
562                <tbl:headerrow>
563                  <tbl:columnheaders />
564                </tbl:headerrow>
565              </tbl:headers>
566              <tbl:rows>
567              <%
568              for (AnnotationType item : experimentalFactors)
569              {
570                Type valueType = item.getValueType();
571                usedFactorValues.put(item, new HashSet<Object>());
572                factorValuesCount.put(item, 0);
573                Formatter formatter = FormatterFactory.getTypeFormatter(sc, valueType);
574                %>
575                <tbl:row>
576                  <tbl:cell column="name"><base:icon 
577                      image="deleted.png" 
578                      tooltip="This item has been scheduled for deletion" 
579                      visible="<%=item.isRemoved()%>"
580                    /><%=Base.getLinkedName(ID, item, false, true)%></tbl:cell>
581                  <tbl:cell column="description"><%=HTML.encodeTags(item.getDescription())%></tbl:cell>
582                  <tbl:cell column="type">
583                    <%=valueType%>
584                    <%=item.isEnumeration() ? "(enumeration)" : ""%>
585                  </tbl:cell>
586                  <tbl:cell column="values">
587                    <%
588                    if (!item.isEnumeration() && (valueType == Type.TEXT || valueType == Type.STRING))
589                    {
590                      %>
591                      N/A
592                      <%
593                    }
594                    else
595                    {
596                      %>
597                      <div id="usedvalues.<%=item.getId()%>">Loading...</div>
598                      <%
599                    }
600                    %>
601                  </tbl:cell>
602                  <tbl:cell column="status" id="<%="status." + item.getId()%>">
603                  </tbl:cell>
604                </tbl:row>
605                <%
606              }
607              %>
608              </tbl:rows>
609            </tbl:data>
610          </tbl:table>
611          <div id="warning.missing" style="display: none; text-align: right;">
612            <base:icon image="warning.png" /> = Some raw bioassays are missing this factor value
613          </div>
614        </div>
615        <%
616        }
617        %>
618      </base:section>
619      <%
620      ItemQuery<RawBioAssay> rbaQuery = experiment.getRawBioAssays();
621      rbaQuery.include(Include.ALL);
622      rbaQuery.order(Orders.asc(Hql.property("name")));
623      ItemResultList<RawBioAssay> rawBioAssays = rbaQuery.list(dc);
624      %>
625      <base:section 
626        id="rawbioassays" 
627        title="<%="Raw bioassays (" + rawBioAssays.size() +")"%>"
628        context="<%=cc%>">
629        <%
630        if (rawBioAssays.size() == 0)
631        {
632          %>
633          <div class="messagecontainer note">
634          No raw bioassays has been added to this experiment
635          (or, you don't have permission to view them).
636          </div>
637          <%
638        }
639        else
640        {
641          %>
642          <tbl:table
643            id="tbl.rawbioassays"
644            columns="all"
645            >
646          <tbl:columndef 
647            id="name"
648            title="Name"
649          />
650          <tbl:columndef 
651            id="description"
652            title="Description"
653          />
654          <%
655          for (AnnotationType at : experimentalFactors)
656          {
657            Formatter formatter = FormatterFactory.getTypeFormatter(sc, at.getValueType());
658            %>
659            <tbl:columndef
660              id="<%="at"+at.getId()%>"
661              title="<%=HTML.encodeTags(at.getName())%>"
662              formatter="<%=formatter%>"
663            />
664            <%
665          }
666          %>
667          <tbl:data>
668            <tbl:headers>
669              <tbl:headerrow>
670                <tbl:columnheaders />
671              </tbl:headerrow>
672            </tbl:headers>
673            <tbl:rows>
674            <%
675            SnapshotManager manager = new SnapshotManager();
676            AnnotationTypeFilter annotationTypeFilter = new AnnotationTypeFilter();
677            for (RawBioAssay item : rawBioAssays)
678            {
679              AnnotationSet as = item.isAnnotated() ? item.getAnnotationSet() : null;
680              AnnotationSetSnapshot snapshot = as == null ? null : manager.getSnapshot(dc, as.getId());
681              %>
682              <tbl:row>
683                <tbl:cell column="name"><base:icon 
684                    image="deleted.png" 
685                    tooltip="This item has been scheduled for deletion" 
686                    visible="<%=item.isRemoved()%>"
687                  /><%=Base.getLinkedName(ID, item, false, true)%></tbl:cell>
688                <tbl:cell column="description"><%=HTML.encodeTags(item.getDescription())%></tbl:cell>
689                <%
690                for (AnnotationType at : experimentalFactors)
691                {
692                  Unit unit = at.getDefaultUnit();
693                  String unitSymbol = unit == null ? "" : "&nbsp;" + unit.getDisplaySymbol();
694                 
695                  String value = "<i>- none -</i>";
696                  annotationTypeFilter.setAnnotationType(at);
697                  List<AnnotationSnapshot> all = snapshot == null ? 
698                      null : manager.findAnnotations(dc, snapshot, annotationTypeFilter, true);
699                  Map<Annotatable, List> factorValues = new HashMap<Annotatable, List>();
700                  if (all != null && all.size() > 0)
701                  {
702                    for (AnnotationSnapshot a : all)
703                    {
704                      List values = a.getValues();
705                      usedFactorValues.get(at).addAll(values);
706                      factorValuesCount.put(at, factorValuesCount.get(at)+1);
707                      Annotatable aItem = null;
708                      try
709                      {
710                        aItem = a.getItem(dc);
711                      }
712                      catch (Throwable t)
713                      {}
714                      List toAdd = factorValues.get(aItem);
715                      if (toAdd == null)
716                      {
717                        toAdd = new LinkedList();
718                        factorValues.put(aItem, toAdd);
719                      }
720                      toAdd.addAll(values);
721                    }
722                  }
723                  %>
724                  <tbl:cell column="<%="at"+at.getId()%>"
725                    >
726                    <%
727                    for (Map.Entry<Annotatable, List> entry : factorValues.entrySet())
728                    {
729                      Annotatable aItem = entry.getKey();
730                      List values = entry.getValue();
731                      %>
732                      <tbl:cellvalue list="<%=values%>" suffix="<%=unitSymbol%>"/>
733                      <%
734                      if (aItem != null && aItem.hasPermission(Permission.WRITE))
735                      {
736                        %>: <base:icon image="edit.png" 
737                          onclick="<%="editExperimentalFactor('"+aItem.getType().name()+"',"+aItem.getId()+","+at.getId()+")"%>" 
738                          tooltip="Modify the values of this experimental factor" />
739                        <%
740                      }
741                    }
742                    %>
743                  </tbl:cell>
744                  <%
745                }
746                %>
747              </tbl:row>
748              <%
749            }
750            %>
751            </tbl:rows>
752          </tbl:data>
753        </tbl:table>
754        <%
755      }
756      %>
757      </base:section>
758      <jsp:include page="../../common/anytoany/list_anytoany.jsp">
759        <jsp:param name="ID" value="<%=ID%>" />
760        <jsp:param name="item_type" value="<%=itemType.name()%>" />
761        <jsp:param name="item_id" value="<%=itemId%>" />
762        <jsp:param name="title" value="Other items related to this experiment" />
763      </jsp:include>
764      <jsp:include page="../../common/share/list_share.jsp">
765        <jsp:param name="ID" value="<%=ID%>" />
766        <jsp:param name="item_type" value="<%=itemType.name()%>" />
767        <jsp:param name="item_id" value="<%=itemId%>" />
768        <jsp:param name="title" value="Shared to" />
769      </jsp:include>
770   
771    <script>
772    function initUsedFactorValues()
773    {
774      <%
775      int numRawBioAssays = rawBioAssays.size();
776      for (Map.Entry<AnnotationType, Set<Object>> entry : usedFactorValues.entrySet())
777      {
778        AnnotationType at = entry.getKey();
779        int numRawBioAssaysWithFactor = factorValuesCount.get(at);
780        Type valueType = at.getValueType();
781        if (at.isEnumeration() || (valueType != Type.TEXT && valueType != Type.STRING))
782        {
783          Set<Object> values = entry.getValue();
784          Formatter formatter = FormatterFactory.getTypeFormatter(sc, valueType);
785          Unit unit = at.getDefaultUnit();
786          if (unit != null) formatter = unit.getFormatter(formatter);
787          String formattedValues = HTML.encodeTags(Values.getString(values, ", ", true, formatter));
788          %>
789          setUsedFactorValue(<%=at.getId()%>, '<%=HTML.javaScriptEncode(formattedValues)%>');
790          <%
791        }
792        %>
793        showStatus(<%=at.getId()%>, <%=numRawBioAssays%>, <%=numRawBioAssaysWithFactor%>);
794        <%
795      }
796      %>
797    }
798    </script>
799      </t:tab>
800      <t:tab id="annotations" title="Annotations" 
801        tooltip="View annotation values" clazz="white">
802        <jsp:include page="../../common/annotations/list_annotations.jsp">
803          <jsp:param name="item_type" value="<%=itemType.name()%>" />
804          <jsp:param name="item_id" value="<%=itemId%>" />
805          <jsp:param name="ID" value="<%=ID%>" />
806        </jsp:include>
807      </t:tab>
808     
809      <t:tab id="bioassaysets" title="Bioassay sets" />
810      <t:tab id="clonedreporters" 
811        title="Cloned reporters" 
812        visible="<%=virtualDb.hasClonedReporters() %>"
813        tooltip="Show information about cloned reporters"
814      />
815      <t:tab id="overview" title="Overview" 
816        tooltip="Display a tree overview of related items">
817        <%
818        if ("overview".equals(tab))
819        {
820          %>
821          <jsp:include page="../../common/overview/overview.jsp">
822            <jsp:param name="item_type" value="<%=itemType.name()%>" />
823            <jsp:param name="item_id" value="<%=itemId%>" />
824            <jsp:param name="ID" value="<%=ID%>" />
825          </jsp:include>
826          <%
827        }
828        %>
829      </t:tab>     
830      <t:tab id="history" title="Change history" 
831        tooltip="Displays a log of all modifications made to this item"
832        visible="<%=ChangeHistoryUtil.showChangeHistoryTab(sc)%>">
833        <%
834        if ("history".equals(tab))
835        {
836          %>
837          <jsp:include page="../../common/history/frameset.jsp">
838            <jsp:param name="source_type" value="<%=itemType.name()%>" />
839            <jsp:param name="source_id" value="<%=itemId%>" />
840            <jsp:param name="ID" value="<%=ID%>" />
841          </jsp:include>
842          <%
843        }
844        %>
845      </t:tab>
846      </t:tabcontrol>
847
848  </base:body>
849  </base:page>
850  <%
851}
852finally
853{
854  if (dc != null) dc.close();
855}
856
857%>
Note: See TracBrowser for help on using the repository browser.