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

Last change on this file since 4630 was 4630, checked in by Nicklas Nordborg, 13 years ago

Fixes #1133: Experimental factors - inherit annotations

  • Property svn:eol-style set to native
  • Property svn:keywords set to Id
File size: 24.8 KB
Line 
1<%-- $Id: view_experiment.jsp 4630 2008-11-07 08:36:37Z nicklas $
2  ------------------------------------------------------------------
3  Copyright (C) 2006 Jari Hakkinen, 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 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.RawBioAssay"
34  import="net.sf.basedb.core.AnnotationType"
35  import="net.sf.basedb.core.AnnotationSet"
36  import="net.sf.basedb.core.Annotation"
37  import="net.sf.basedb.core.Annotatable"
38  import="net.sf.basedb.core.Unit"
39  import="net.sf.basedb.core.Type"
40  import="net.sf.basedb.core.User"
41  import="net.sf.basedb.core.Group"
42  import="net.sf.basedb.core.ItemQuery"
43  import="net.sf.basedb.core.ItemResultList"
44  import="net.sf.basedb.core.ItemResultIterator"
45  import="net.sf.basedb.core.Include"
46  import="net.sf.basedb.core.MultiPermissions"
47  import="net.sf.basedb.core.PermissionDeniedException"
48  import="net.sf.basedb.core.PluginDefinition"
49  import="net.sf.basedb.core.plugin.GuiContext"
50  import="net.sf.basedb.core.plugin.Plugin"
51  import="net.sf.basedb.core.Project"
52  import="net.sf.basedb.core.query.Orders"
53  import="net.sf.basedb.core.query.Hql"
54  import="net.sf.basedb.clients.web.Base"
55  import="net.sf.basedb.clients.web.PermissionUtil"
56  import="net.sf.basedb.clients.web.util.HTML"
57  import="net.sf.basedb.util.Values"
58  import="net.sf.basedb.util.formatter.Formatter"
59  import="net.sf.basedb.clients.web.formatter.FormatterFactory"
60  import="java.util.Collections"
61  import="java.util.Date"
62  import="java.util.Map"
63  import="java.util.HashMap"
64  import="java.util.Set"
65  import="java.util.HashSet"
66  import="java.util.List"
67  import="java.util.LinkedList"
68  import="java.util.Date"
69%>
70<%@ taglib prefix="base" uri="/WEB-INF/base.tld" %>
71<%@ taglib prefix="tbl" uri="/WEB-INF/table.tld" %>
72<%@ taglib prefix="t" uri="/WEB-INF/tab.tld" %>
73<%@ taglib prefix="p" uri="/WEB-INF/path.tld" %>
74<%!
75  private static final Item itemType = Item.EXPERIMENT;
76  private static final GuiContext guiContext = new GuiContext(itemType, GuiContext.Type.ITEM);
77%>
78<%
79final SessionControl sc = Base.getExistingSessionControl(pageContext, true);
80final String ID = sc.getId();
81final ItemContext cc = Base.getAndSetCurrentContext(sc, itemType, null, null);
82final int itemId = cc.getId();
83final float scale = Base.getScale(sc);
84final String root = request.getContextPath();
85final DbControl dc = sc.newDbControl();
86try
87{
88  Formatter<Date> dateFormatter = FormatterFactory.getDateFormatter(sc);
89  Map<Plugin.MainType, Integer> pluginCount = PluginDefinition.countPlugins(dc, guiContext);
90
91  String title = null;
92  Experiment experiment = Experiment.getById(dc, itemId);
93 
94  final boolean writePermission = experiment.hasPermission(Permission.WRITE);
95  final boolean deletePermission = experiment.hasPermission(Permission.DELETE);
96  final boolean sharePermission = experiment.hasPermission(Permission.SET_PERMISSION);
97  final boolean setOwnerPermission = experiment.hasPermission(Permission.SET_OWNER);
98  final boolean isOwner = experiment.isOwner();
99  final boolean isRemoved = experiment.isRemoved();
100  final boolean isUsed = isRemoved && experiment.isUsed();
101  final boolean deletePermanentlyPermission = deletePermission && !isUsed;
102 
103  Map<AnnotationType, Set<Object>> usedFactorValues = 
104    new HashMap<AnnotationType, Set<Object>>();
105  Map<AnnotationType, Integer> factorValuesCount = new HashMap<AnnotationType, Integer>();
106  %>
107
108  <base:page title="<%=title%>">
109  <base:head scripts="table.js,tabcontrol.js" styles="table.css,toolbar.css,headertabcontrol.css,path.css">
110    <script language="JavaScript">
111    function editItem()
112    {
113      Main.viewOrEditItem('<%=ID%>', '<%=itemType.name()%>', <%=itemId%>, true);
114    }
115    function shareItem()
116    {
117      Main.openPopup('index.jsp?ID=<%=ID%>&cmd=ShareItem&item_id=<%=itemId%>', 'ShareRawBioAssay', 600, 400);
118    }
119    function deleteItem()
120    {
121      location.replace('index.jsp?ID=<%=ID%>&cmd=DeleteItem&item_id=<%=itemId%>');
122    }
123    function restoreItem()
124    {
125      location.replace('index.jsp?ID=<%=ID%>&cmd=RestoreItem&item_id=<%=itemId%>');
126    }
127    function deleteItemPermanently()
128    {
129      Main.deleteItemPermanently('<%=ID%>', true, '<%=itemType.name()%>', <%=itemId%>, '&callback=itemDeleted');
130    }
131    function itemDeleted()
132    {
133      Main.listItems('<%=ID%>', '<%=itemType.name()%>');
134    }
135    function showUsingItems()
136    {
137      Main.showUsingItems('<%=ID%>', '<%=itemType.name()%>', <%=itemId%>);
138    }   
139    function setOwner()
140    {
141      Main.openPopup('index.jsp?ID=<%=ID%>&cmd=SetOwnerOfItem&item_id=<%=itemId%>', 'SetOwnerOfItem', 450, 150);
142    }
143    function runPlugin(cmd)
144    {
145      Main.openPopup('index.jsp?ID=<%=ID%>&cmd='+cmd+'&item_id=<%=itemId%>', 'RunPlugin'+cmd, 740, 540);
146    }
147    function analyzeItem()
148    {
149      location.href = '<%=root%>/analyze/index.jsp?ID=<%=ID%>&experiment_id=<%=itemId%>';
150    }
151    function viewBioAssaySets()
152    {
153      location.href = 'bioassaysets/index.jsp?ID=<%=ID%>&experiment_id=<%=itemId%>';
154    }
155    function viewOverview()
156    {
157      location.href = 'overview/index.jsp?ID=<%=ID%>&experiment_id=<%=itemId%>';
158    }
159    function switchTab(tabControlId, tabId)
160    {
161      if (tabId == 'bioassaysets')
162      {
163        viewBioAssaySets();
164      }
165      else if (tabId == 'overview')
166      {
167        viewOverview();
168      }
169      else
170      {
171        TabControl.setActiveTab(tabControlId, tabId);
172      }
173    }
174    function editAnnotation(itemType, itemId, annotationTypeId)
175    {
176      var url = getRoot() + 'common/annotations/annotate.jsp?ID=<%=ID%>';
177      url += '&item_type='+itemType;
178      url += '&item_id='+itemId;
179      url += '&annotationtype_id='+annotationTypeId;
180      url += '&standalone=1';
181      Main.openPopup(url, 'EditAnnotation', 700, 460);
182    }
183    function editInheritedAnnotation(itemType, itemId, annotationTypeId)
184    {
185      var url = getRoot() + 'common/annotations/inherit.jsp?ID=<%=ID%>';
186      url += '&item_type='+itemType;
187      url += '&item_id='+itemId;
188      url += '&annotationtype_id='+annotationTypeId;
189      url += '&standalone=1';
190      Main.openPopup(url, 'EditAnnotation', 700, 460);
191    }
192    function setUsedFactorValue(annotationTypeId, values)
193    {
194      var div = document.getElementById('usedvalues.'+annotationTypeId);
195      div.innerHTML = values;
196    }
197    function showStatus(annotationTypeId, numTotal, numInherited)
198    {
199      var sss = document.getElementById('status.'+annotationTypeId);
200      var html;
201      if (numTotal == numInherited)
202      {
203        html = '<img src="../../images/ok.gif" title="All ' + numTotal +
204          ' raw bioassays have a value for this experimental factor">';
205      }
206      else
207      {
208        var numMissing = numTotal - numInherited;
209        html = '<a href="javascript:autoInherit('+annotationTypeId+')"' + 
210          ' title="Click for automatic inheritation of annotations from parents"';
211        html += '<img src="../../images/warning.gif" border="0">&nbsp;' + numMissing + ' missing</a>';
212      }
213      sss.innerHTML = html;
214    }
215    function autoInherit(annotationTypeId)
216    {
217      var url = 'index.jsp?ID=<%=ID%>&cmd=AutoInherit&item_id=<%=itemId%>&annotationtype_id=' + annotationTypeId;
218      Main.openPopup(url, 'AutoInherit', 400, 200);
219    }
220    </script>
221  </base:head>
222  <base:body onload="initUsedFactorValues()">
223    <p>
224    <p:path>
225      <p:pathelement title="Experiments" href="<%="index.jsp?ID="+ID%>" />
226      <p:pathelement title="<%=HTML.encodeTags(experiment.getName())%>" />
227    </p:path>
228   
229    <t:tabcontrol id="main" active="properties" switch="switchTab">
230    <t:tab id="properties" title="Properties">
231   
232    <tbl:toolbar
233      >
234      <tbl:button 
235        disabled="<%=writePermission ? false : true%>" 
236        image="<%=writePermission ? "edit.gif" : "edit_disabled.gif"%>" 
237        onclick="editItem()" 
238        title="Edit&hellip;" 
239        tooltip="<%=writePermission ? "Edit this experiment" : "You do not have permission to edit this experiment"%>" 
240      />
241      <tbl:button 
242        disabled="<%=deletePermission ? false : true%>" 
243        image="<%=deletePermission ? "delete.gif" : "delete_disabled.gif"%>" 
244        onclick="deleteItem()" 
245        title="Delete"
246        visible="<%=!experiment.isRemoved()%>"
247        tooltip="<%=deletePermission ? "Delete this experiment" : "You do not have permission to delete this experiment"%>" 
248      />
249      <tbl:button 
250        disabled="<%=writePermission ? false : true%>" 
251        image="<%=writePermission ? "restore.gif" : "restore_disabled.gif"%>" 
252        onclick="restoreItem()" 
253        title="Restore"
254        visible="<%=experiment.isRemoved()%>"
255        tooltip="<%=writePermission ? "Restore this experiment" : "You do not have permission to restore this experiment"%>" 
256      />
257      <tbl:button 
258        disabled="<%=sharePermission ? false : true%>"
259        image="<%=sharePermission ? "share.gif" : "share_disabled.gif"%>"
260        onclick="shareItem()" 
261        title="Share&hellip;" 
262        tooltip="<%=sharePermission ? "Share this experiment to other user, groups and projects" : "You do not have permission to share this experiment"%>"
263      />
264      <tbl:button 
265        disabled="<%=setOwnerPermission ? false : true%>"
266        image="<%=setOwnerPermission ? "take_ownership.png" : "take_ownership_disabled.png"%>"
267        onclick="setOwner()" 
268        title="Set owner&hellip;"
269        tooltip="<%=setOwnerPermission ? "Change owner of this item" : "You do not have permission to change ownership of this item"%>"
270      />
271      <tbl:button 
272        image="import.gif" 
273        onclick="runPlugin('ImportItem')" 
274        title="Import&hellip;" 
275        tooltip="Import data" 
276        visible="<%=pluginCount.containsKey(Plugin.MainType.IMPORT)%>"
277      />
278      <tbl:button 
279        image="export.gif" 
280        onclick="runPlugin('ExportItem')" 
281        title="Export&hellip;" 
282        tooltip="Export data" 
283        visible="<%=pluginCount.containsKey(Plugin.MainType.EXPORT)%>"
284      />
285      <tbl:button 
286        image="runplugin.gif" 
287        onclick="runPlugin('RunPlugin')" 
288        title="Run plugin&hellip;" 
289        tooltip="Run a plugin" 
290        visible="<%=pluginCount.containsKey(Plugin.MainType.OTHER)%>"
291      />
292      <tbl:button
293        image="help.gif"
294        onclick="<%="Main.openHelp('" + ID +"', 'experiment.view.properties')"%>"
295        title="Help&hellip;"
296        tooltip="Get help about this page"
297      />
298      </tbl:toolbar>
299    <div class="boxedbottom">
300      <div class="itemstatus">Permissions on this item: <i><%=PermissionUtil.getFullPermissionNames(experiment)%></i></div>
301      <%
302      if (experiment.isRemoved() || experiment.isShared())
303      {
304        %>
305        <div class="itemstatus">
306          <base:icon 
307            image="<%=deletePermanentlyPermission ? "deleted.gif" : "deleted_disabled.gif"%>"
308            onclick="<%=deletePermanentlyPermission ? "deleteItemPermanently()" : null%>"
309            tooltip="<%=deletePermanentlyPermission ? "Permanently delete this item" : null%>"
310            visible="<%=isRemoved%>"> This item has been flagged for deletion<br></base:icon>
311          <base:icon image="used.gif" 
312            onclick="showUsingItems()"
313            tooltip="Show the items that are using this one"
314            visible="<%=isUsed%>"> This item is used by other items and can't be permanently deleted<br></base:icon>
315          <base:icon image="shared.gif" 
316            visible="<%=experiment.isShared()%>"> This item is shared to other users, groups and/or projects</base:icon>
317        </div>
318        <%
319      }
320      %>
321      <table class="form" cellspacing="0">
322      <tr>
323        <td class="prompt">Name</td>
324        <td><%=HTML.encodeTags(experiment.getName())%></td>
325      </tr>
326      <tr>
327        <td class="prompt">Raw data type</td>
328        <td><%=HTML.encodeTags(experiment.getRawDataType().getName())%></td>
329      </tr>
330      <tr>
331        <td class="prompt">Directory</td>
332        <td><base:propertyvalue item="<%=experiment%>" property="directory" /></td>
333      </tr>
334      <tr>
335        <td class="prompt">Bytes</td>
336        <td><%=Values.formatBytes(experiment.getBytes())%></td>
337      </tr>
338      <tr>
339        <td class="prompt">Owner</td>
340        <td><base:propertyvalue item="<%=experiment%>" property="owner" /></td>
341      </tr>
342      <tr>
343        <td class="prompt">Description</td>
344        <td><%=HTML.niceFormat(experiment.getDescription())%></td>
345      </tr>
346      </table>
347     
348    <base:section 
349      id="publication" 
350      title="Publication"
351      context="<%=cc%>"
352      >
353      <table class="form" cellspacing="0">
354      <tr>
355        <td class="prompt">PubMed ID</td>
356        <td>
357          <%=HTML.encodeTags(experiment.getPubMedId())%>
358          <%
359          int pubMedId = Values.getInt(experiment.getPubMedId(), -1);
360          if (pubMedId != -1)
361          {
362            %>
363            <b>Link to:</b>
364            <a href="http://www.ebi.ac.uk/citexplore/citationDetails.do?externalId=<%=pubMedId%>&dataSource=MED"
365              target="_new" title="External link to EBI Citation database"
366              >EBI Citation database</a>,
367            <a href="http://www.ncbi.nlm.nih.gov/entrez/query.fcgi?cmd=PureSearch&db=pubmed&details_term=<%=pubMedId%>"
368              target="_new" title="External link to NCBI Entrez PubMed">NCBI Entrez PubMed</a>
369            <%
370          }
371          %>
372        </td>
373      </tr>
374      <tr>
375        <td class="prompt">Title</td>
376        <td><%=HTML.niceFormat(experiment.getTitle())%></td>
377      </tr>
378      <tr>
379        <td class="prompt">Publication date</td>
380        <td><%=dateFormatter.format(experiment.getPublicationDate())%></td>
381      </tr>
382      <tr>
383        <td class="prompt">Abstract</td>
384        <td><%=HTML.niceFormat(experiment.getAbstract())%></td>
385      </tr>
386      <tr>
387        <td class="prompt">Experiment design</td>
388        <td><%=HTML.niceFormat(experiment.getExperimentDesign())%></td>
389      </tr>
390      <tr>
391        <td class="prompt">Experiment type</td>
392        <td><%=HTML.niceFormat(experiment.getExperimentType())%></td>
393      </tr>
394      <tr>
395        <td class="prompt">Affiliations</td>
396        <td><%=HTML.niceFormat(experiment.getAffiliations())%></td>
397      </tr>
398      <tr>
399        <td class="prompt">Authors</td>
400        <td><%=HTML.niceFormat(experiment.getAuthors())%></td>
401      </tr>
402      <tr>
403        <td class="prompt">Publication</td>
404        <td><%=HTML.niceFormat(experiment.getPublication())%></td>
405      </tr>
406      </table>
407    </base:section>
408     
409      <%
410      ItemQuery<AnnotationType> efQuery = experiment.getExperimentalFactors();
411      efQuery.include(Include.ALL);
412      efQuery.order(Orders.asc(Hql.property("name")));
413      ItemResultList<AnnotationType> experimentalFactors = efQuery.list(dc);
414      if (experimentalFactors.size() == 0)
415      {
416        %>
417        <h4>Experimental factors</h4>
418        No experimental factors has been added to this experiment
419        (or, you don't have permission to view them).
420        <%
421      }
422      else
423      {
424        %>
425        <base:section 
426          id="experimentalFactors" 
427          title="<%="Experimental factors (" + experimentalFactors.size() +")"%>"
428          context="<%=cc%>">     
429        <tbl:table
430          id="experimentalFactors"
431          clazz="itemlist"
432          columns="all"
433          >
434        <tbl:columndef 
435          id="name"
436          title="Name"
437        />
438        <tbl:columndef
439          id="type"
440          title="Value type"
441        />
442        <tbl:columndef
443          id="values"
444          title="Used values"
445        />
446        <tbl:columndef 
447          id="description"
448          title="Description"
449        />
450        <tbl:columndef 
451          id="status"
452          title="Status"
453        />
454        <tbl:data>
455          <tbl:columns>
456          </tbl:columns>
457          <tbl:rows>
458          <%
459          for (AnnotationType item : experimentalFactors)
460          {
461            Type valueType = item.getValueType();
462            usedFactorValues.put(item, new HashSet<Object>());
463            factorValuesCount.put(item, 0);
464            Formatter formatter = FormatterFactory.getTypeFormatter(sc, valueType);
465            %>
466            <tbl:row>
467              <tbl:cell column="name"><base:icon 
468                  image="deleted.gif" 
469                  tooltip="This item has been scheduled for deletion" 
470                  visible="<%=item.isRemoved()%>"
471                /><%=Base.getLinkedName(ID, item, false, true)%></tbl:cell>
472              <tbl:cell column="description"><%=HTML.encodeTags(item.getDescription())%></tbl:cell>
473              <tbl:cell column="type">
474                <%=valueType%>
475                <%=item.isEnumeration() ? "(enumeration)" : ""%>
476              </tbl:cell>
477              <tbl:cell column="values">
478                <%
479                if (!item.isEnumeration() && (valueType == Type.TEXT || valueType == Type.STRING))
480                {
481                  %>
482                  N/A
483                  <%
484                }
485                else
486                {
487                  %>
488                  <div id="usedvalues.<%=item.getId()%>">Loading...</div>
489                  <%
490                }
491                %>
492              </tbl:cell>
493              <tbl:cell column="status"><div id="status.<%=item.getId()%>"></div></tbl:cell>
494            </tbl:row>
495            <%
496          }
497          %>
498          </tbl:rows>
499        </tbl:data>
500        </tbl:table>
501        <base:icon image="warning.gif" /> = Some raw bioassays are missing this factor value;
502          click to automatically try to inherit annotations from parents<br>
503        <base:icon image="ok.gif" /> = All raw bioassays have a value for this factor
504        </base:section>
505        <%
506      }
507      %>
508     
509      <%
510      ItemQuery<RawBioAssay> rbaQuery = experiment.getRawBioAssays();
511      rbaQuery.include(Include.ALL);
512      rbaQuery.order(Orders.asc(Hql.property("name")));
513      ItemResultList<RawBioAssay> rawBioAssays = rbaQuery.list(dc);
514      if (rawBioAssays.size() == 0)
515      {
516        %>
517        <h4>Raw bioassays</h4>
518        No raw bioassays has been added to this experiment
519        (or, you don't have permission to view them).
520        <%
521      }
522      else
523      {
524        %>
525        <base:section 
526          id="rawbioassays" 
527          title="<%="Raw bioassays (" + rawBioAssays.size() +")"%>"
528          context="<%=cc%>">
529        <tbl:table
530          id="rawbioassays"
531          clazz="itemlist"
532          columns="all"
533          >
534        <tbl:columndef 
535          id="name"
536          title="Name"
537        />
538        <tbl:columndef 
539          id="description"
540          title="Description"
541        />
542        <%
543        for (AnnotationType at : experimentalFactors)
544        {
545          Formatter formatter = FormatterFactory.getTypeFormatter(sc, at.getValueType());
546          %>
547          <tbl:columndef
548            id="<%="at"+at.getId()%>"
549            title="<%=HTML.encodeTags(at.getName())%>"
550            formatter="<%=formatter%>"
551          />
552          <%
553        }
554        %>
555       
556        <tbl:data>
557          <tbl:columns>
558          </tbl:columns>
559          <tbl:rows>
560          <%
561          for (RawBioAssay item : rawBioAssays)
562          {
563            AnnotationSet as = item.isAnnotated() ? item.getAnnotationSet() : null;
564            %>
565            <tbl:row>
566              <tbl:cell column="name"><base:icon 
567                  image="deleted.gif" 
568                  tooltip="This item has been scheduled for deletion" 
569                  visible="<%=item.isRemoved()%>"
570                /><%=Base.getLinkedName(ID, item, false, true)%></tbl:cell>
571              <tbl:cell column="description"><%=HTML.encodeTags(item.getDescription())%></tbl:cell>
572              <%
573              for (AnnotationType at : experimentalFactors)
574              {
575                Unit unit = at.getDefaultUnit();
576                String unitSymbol = unit == null ? "" : "&nbsp;" + unit.getDisplaySymbol();
577               
578                String value = "<i>- none -</i>";
579                List<Annotation> all = as == null ? null : as.findAnnotations(dc, at, true);
580                Map<Annotatable, List> factorValues = new HashMap<Annotatable, List>();
581                if (all != null && all.size() > 0)
582                {
583                  for (Annotation a : all)
584                  {
585                    List values = a.getValues();
586                    usedFactorValues.get(at).addAll(values);
587                    factorValuesCount.put(at, factorValuesCount.get(at)+1);
588                    Annotatable aItem = null;
589                    try
590                    {
591                      aItem = a.getAnnotationSet().getItem();
592                    }
593                    catch (Throwable t)
594                    {}
595                    List toAdd = factorValues.get(aItem);
596                    if (toAdd == null)
597                    {
598                      toAdd = new LinkedList();
599                      factorValues.put(aItem, toAdd);
600                    }
601                    toAdd.addAll(values);
602                  }
603                }
604               
605                %>
606                <tbl:cell column="<%="at"+at.getId()%>"
607                  >
608                  <%
609                  for (Map.Entry<Annotatable, List> entry : factorValues.entrySet())
610                  {
611                    Annotatable aItem = entry.getKey();
612                    List values = entry.getValue();
613                    %>
614                    <tbl:cellvalue list="<%=values%>" suffix="<%=unitSymbol%>"/>
615                    <%
616                    if (aItem != null && aItem.hasPermission(Permission.WRITE))
617                    {
618                      %>: <base:icon image="edit.gif" 
619                        onclick="<%="editAnnotation('"+aItem.getType().name()+"',"+aItem.getId()+","+at.getId()+")"%>" 
620                        tooltip="Modify the values of this experimental factor" />
621                      <%
622                    }
623                  }
624                  %>
625                </tbl:cell>
626                <%
627              }
628              %>
629            </tbl:row>
630            <%
631          }
632          %>
633          </tbl:rows>
634        </tbl:data>
635        </tbl:table>
636        </base:section>
637        <%
638      }
639     
640      // Tables with users/groups/projects that this item is shared to
641      MultiPermissions mp = new MultiPermissions(Collections.singleton(experiment));
642      ItemResultIterator<User> users = mp.getUsers().iterate(dc);
643      ItemResultIterator<Group> groups = mp.getGroups().iterate(dc);
644      ItemResultIterator<Project> projects = mp.getProjects().iterate(dc);
645     
646      if (users.hasNext() || groups.hasNext() || projects.hasNext())
647      {
648        %>
649        <base:section 
650          id="sharedTo" 
651          title="Shared to"
652          context="<%=cc%>">
653        <tbl:table 
654          id="itemsSharedTo"
655          clazz="itemlist"
656          columns="all"
657        >
658          <tbl:columndef 
659            id="itemType"
660            title="Item type"
661          />
662          <tbl:columndef 
663            id="name"
664            title="Name"
665          />
666          <tbl:columndef 
667            id="permissions"
668            title="Permissions"
669          />
670          <tbl:data>
671            <tbl:columns>
672            </tbl:columns>
673            <tbl:rows>
674            <%
675            while(projects.hasNext())
676            {
677              Project project = projects.next();
678              Set<Permission> permissions = mp.getPermissions(project).values().iterator().next();
679              %>     
680              <tbl:row>
681                <tbl:cell column="itemType"><%=project.getType()%></tbl:cell>
682                <tbl:cell column="name"><base:icon 
683                  image="deleted.gif" 
684                  tooltip="This item has been scheduled for deletion" 
685                  visible="<%=project.isRemoved()%>"
686                /><%=Base.getLinkedName(ID, project, false, true)%></tbl:cell>
687                <tbl:cell column="permissions">
688                  <%=PermissionUtil.translatePermissionsToString(permissions)%>
689                </tbl:cell>
690              </tbl:row>
691              <%
692            }
693            while(groups.hasNext())
694            {
695              Group group = groups.next();
696              Set<Permission> permissions = mp.getPermissions(group).values().iterator().next();
697              %>
698              <tbl:row>             
699                <tbl:cell column="itemType"><%=group.getType()%></tbl:cell>
700                <tbl:cell column="name"><base:icon 
701                  image="deleted.gif" 
702                  tooltip="This item has been scheduled for deletion" 
703                  visible="<%=group.isRemoved()%>"
704                /><%=Base.getLinkedName(ID, group, false, true)%></tbl:cell>
705                <tbl:cell column="permissions">
706                  <%=PermissionUtil.translatePermissionsToString(permissions)%>
707                </tbl:cell>
708              </tbl:row>
709              <% 
710            }
711            while (users.hasNext())
712            {
713              User user = users.next();
714              Set<Permission> permissions = mp.getPermissions(user).values().iterator().next();
715              %>
716              <tbl:row>             
717                <tbl:cell column="itemType"><%=user.getType()%></tbl:cell>
718                <tbl:cell column="name"><base:icon 
719                  image="deleted.gif" 
720                  tooltip="This item has been scheduled for deletion" 
721                  visible="<%=user.isRemoved()%>"
722                /><%=Base.getLinkedName(ID, user, false, true)%></tbl:cell>
723                <tbl:cell column="permissions">
724                  <%=PermissionUtil.translatePermissionsToString(permissions)%>
725                </tbl:cell>
726              </tbl:row>
727              <%
728            }
729            %>
730            </tbl:rows>
731          </tbl:data>
732        </tbl:table>
733        </base:section>
734        <%
735      }
736      else
737      {
738        %>
739        <h4>Shared to</h4>
740        This experiment is not shared
741        (or, you don't have permission to view the ones it is shared to).
742        <%
743      }
744      %>
745    </div>
746   
747    <script language="JavaScript">
748    function initUsedFactorValues()
749    {
750      <%
751      int numRawBioAssays = rawBioAssays.size();
752      for (Map.Entry<AnnotationType, Set<Object>> entry : usedFactorValues.entrySet())
753      {
754        AnnotationType at = entry.getKey();
755        int numRawBioAssaysWithFactor = factorValuesCount.get(at);
756        Type valueType = at.getValueType();
757        if (at.isEnumeration() || (valueType != Type.TEXT && valueType != Type.STRING))
758        {
759          Set<Object> values = entry.getValue();
760          Formatter formatter = FormatterFactory.getTypeFormatter(sc, valueType);
761          Unit unit = at.getDefaultUnit();
762          if (unit != null) formatter = unit.getFormatter(formatter);
763          String formattedValues = HTML.encodeTags(Values.getString(values, ", ", true, formatter));
764          %>
765          setUsedFactorValue(<%=at.getId()%>, '<%=HTML.javaScriptEncode(formattedValues)%>');
766          showStatus(<%=at.getId()%>, <%=numRawBioAssays%>, <%=numRawBioAssaysWithFactor%>);
767          <%
768        }
769      }
770      %>
771    }
772    </script>
773      </t:tab>
774     
775      <t:tab id="bioassaysets" title="Bioassay sets" />
776     
777      <t:tab id="overview" title="Overview" 
778        tooltip="Get an overview of all hybridizations, biomaterials, etc. in this experiment" />
779     
780      </t:tabcontrol>
781
782  </base:body>
783  </base:page>
784  <%
785}
786finally
787{
788  if (dc != null) dc.close();
789}
790
791%>
Note: See TracBrowser for help on using the repository browser.