source: trunk/www/biomaterials/labeledextracts/view_labeledextract.jsp @ 4882

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

References #1271: Add extension points to all toolbars

Added code for displaying extensions to all biomaterial pages.

  • Property svn:eol-style set to native
  • Property svn:keywords set to Date Id
File size: 22.9 KB
Line 
1<%-- $Id: view_labeledextract.jsp 4882 2009-04-03 10:53:42Z nicklas $
2  ------------------------------------------------------------------
3  Copyright (C) 2006 Johan Enell, Jari Hakkinen, Nicklas Nordborg, Martin Svensson
4  Copyright (C) 2007 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.SystemItems"
30  import="net.sf.basedb.core.Group"
31  import="net.sf.basedb.core.Hybridization"
32  import="net.sf.basedb.core.Item"
33  import="net.sf.basedb.core.ItemContext"
34  import="net.sf.basedb.core.Permission"
35  import="net.sf.basedb.core.Extract"
36  import="net.sf.basedb.core.LabeledExtract"
37  import="net.sf.basedb.core.Label"
38  import="net.sf.basedb.core.BioMaterialEvent"
39  import="net.sf.basedb.core.BioWell"
40  import="net.sf.basedb.core.Protocol"
41  import="net.sf.basedb.core.User"
42  import="net.sf.basedb.core.ItemProxy"
43  import="net.sf.basedb.core.ItemQuery"
44  import="net.sf.basedb.core.ItemResultIterator"
45  import="net.sf.basedb.core.ItemResultList"
46  import="net.sf.basedb.core.Include"
47  import="net.sf.basedb.core.MeasuredBioMaterial"
48  import="net.sf.basedb.core.MultiPermissions"
49  import="net.sf.basedb.core.query.Orders"
50  import="net.sf.basedb.core.query.Hql"
51  import="net.sf.basedb.core.PermissionDeniedException"
52  import="net.sf.basedb.core.PluginDefinition"
53  import="net.sf.basedb.core.plugin.GuiContext"
54  import="net.sf.basedb.core.plugin.Plugin"
55  import="net.sf.basedb.core.Project"
56  import="net.sf.basedb.clients.web.Base"
57  import="net.sf.basedb.clients.web.PermissionUtil"
58  import="net.sf.basedb.clients.web.util.HTML"
59  import="net.sf.basedb.util.Values"
60  import="net.sf.basedb.util.formatter.Formatter"
61  import="net.sf.basedb.util.formatter.WellCoordinateFormatter"
62  import="net.sf.basedb.clients.web.formatter.FormatterFactory"
63  import="net.sf.basedb.clients.web.extensions.ExtensionsControl"
64  import="net.sf.basedb.clients.web.extensions.JspContext"
65  import="net.sf.basedb.clients.web.extensions.renderer.PrefixSuffixRenderer"
66  import="net.sf.basedb.clients.web.extensions.toolbar.ToolbarUtil"
67  import="net.sf.basedb.util.extensions.ExtensionsInvoker"
68  import="java.util.ArrayList"
69  import="java.util.Collections"
70  import="java.util.Date"
71  import="java.util.Map"
72  import="java.util.Set"
73  import="java.util.List"
74%>
75<%@ taglib prefix="base" uri="/WEB-INF/base.tld" %>
76<%@ taglib prefix="t" uri="/WEB-INF/tab.tld" %>
77<%@ taglib prefix="tbl" uri="/WEB-INF/table.tld" %>
78<%@ taglib prefix="p" uri="/WEB-INF/path.tld" %>
79<%@ taglib prefix="ext" uri="/WEB-INF/extensions.tld" %>
80<%!
81  private static final Item itemType = Item.LABELEDEXTRACT;
82  private static final GuiContext guiContext = new GuiContext(itemType, GuiContext.Type.ITEM);
83%>
84<%
85final SessionControl sc = Base.getExistingSessionControl(pageContext, true);
86final String ID = sc.getId();
87final ItemContext cc = Base.getAndSetCurrentContext(sc, itemType, null, null);
88final int itemId = cc.getId();
89final String tab = Values.getString(request.getParameter("tab"), "properties");
90final float scale = Base.getScale(sc);
91final DbControl dc = sc.newDbControl();
92try
93{
94  Map<Plugin.MainType, Integer> pluginCount = PluginDefinition.countPlugins(dc, guiContext);
95  Formatter<Date> dateFormatter = FormatterFactory.getDateFormatter(sc);
96 
97  WellCoordinateFormatter rowFormatter = new WellCoordinateFormatter(true);
98  WellCoordinateFormatter columnFormatter = new WellCoordinateFormatter(false);
99
100  String title = null;
101  LabeledExtract extract = LabeledExtract.getById(dc, itemId);
102  BioMaterialEvent creationEvent = extract.getCreationEvent();
103 
104  final boolean writePermission = extract.hasPermission(Permission.WRITE);
105  final boolean deletePermission = extract.hasPermission(Permission.DELETE);
106  final boolean sharePermission = extract.hasPermission(Permission.SET_PERMISSION);
107  final boolean usePermission = extract.hasPermission(Permission.USE);
108  final boolean setOwnerPermission = extract.hasPermission(Permission.SET_OWNER);
109  final boolean isRemoved = extract.isRemoved();
110  final boolean isUsed = isRemoved && extract.isUsed();
111  final boolean deletePermanentlyPermission = deletePermission && !isUsed;
112  final boolean isOwner = extract.isOwner();
113  JspContext jspContext = ExtensionsControl.createContext(dc, pageContext, guiContext, extract);
114  ExtensionsInvoker invoker = ToolbarUtil.useExtensions(jspContext);
115  %>
116  <base:page title="<%=title%>">
117  <base:head scripts="table.js,tabcontrol.js" styles="table.css,toolbar.css,headertabcontrol.css,path.css">
118    <ext:scripts context="<%=jspContext%>" />
119    <ext:stylesheets context="<%=jspContext%>" />
120    <script language="JavaScript">
121    function editItem()
122    {
123      Main.viewOrEditItem('<%=ID%>', '<%=itemType.name()%>', <%=itemId%>, true);
124    }
125    function shareItem()
126    {
127      Main.openPopup('index.jsp?ID=<%=ID%>&cmd=ShareItem&item_id=<%=itemId%>', 'ShareLabeledExtract', 600, 400);
128    }
129    function deleteItem()
130    {
131      location.replace('index.jsp?ID=<%=ID%>&cmd=DeleteItem&item_id=<%=itemId%>');
132    }
133    function restoreItem()
134    {
135      location.replace('index.jsp?ID=<%=ID%>&cmd=RestoreItem&item_id=<%=itemId%>');
136    }
137    function deleteItemPermanently()
138    {
139      Main.deleteItemPermanently('<%=ID%>', true, '<%=itemType.name()%>', <%=itemId%>, '&callback=itemDeleted');
140    }
141    function itemDeleted()
142    {
143      Main.listItems('<%=ID%>', '<%=itemType.name()%>');
144    }
145    function showUsingItems()
146    {
147      Main.showUsingItems('<%=ID%>', '<%=itemType.name()%>', <%=itemId%>);
148    }
149    function setOwner()
150    {
151      Main.openPopup('index.jsp?ID=<%=ID%>&cmd=SetOwnerOfItem&item_id=<%=itemId%>', 'SetOwnerOfItem', 450, 150);
152    }
153    function runPlugin(cmd)
154    {
155      Main.openPopup('index.jsp?ID=<%=ID%>&cmd='+cmd+'&item_id=<%=itemId%>', 'RunPlugin'+cmd, 740, 540);
156    }
157    function viewEvents()
158    {
159      location.href = '../events/index.jsp?ID=<%=ID%>&cmd=List&biomaterial_id=<%=itemId%>&biomaterial_type=<%=itemType.name()%>';
160    }
161    function switchTab(tabControlId, tabId)
162    {
163      if (TabControl.isActive(tabControlId, tabId)) return;
164      if (tabId == 'overview' && tabId != '<%=tab%>')
165      {
166        location.href = 'index.jsp?ID=<%=ID%>&cmd=ViewItem&item_id=<%=itemId%>&tab='+tabId;
167      }
168      else if (tabId == 'events')
169      {
170        viewEvents();
171      }
172      else
173      {
174        TabControl.setActiveTab(tabControlId, tabId);
175      }
176    }
177    function newHybridization()
178    {
179      Main.viewOrEditItem('<%=ID%>', 'HYBRIDIZATION', 0, true, '&labeledextract_id='+<%=itemId%>);
180    }
181    </script>
182  </base:head>
183  <base:body>
184    <p>
185    <p:path>
186      <p:pathelement title="Labeled extracts" href="<%="index.jsp?ID="+ID%>" />
187      <p:pathelement title="<%=HTML.encodeTags(extract.getName())%>" />
188    </p:path>
189   
190    <t:tabcontrol id="main" active="<%=tab%>" switch="switchTab" remember="false">
191    <t:tab id="properties" title="Properties">
192
193    <tbl:toolbar
194      >
195      <tbl:button 
196        disabled="<%=writePermission ? false : true%>" 
197        image="<%=writePermission ? "edit.gif" : "edit_disabled.gif"%>" 
198        onclick="editItem()" 
199        title="Edit&hellip;" 
200        tooltip="<%=writePermission ? "Edit this labeled extract" : "You do not have permission to edit this labeled extract"%>" 
201      />
202      <tbl:button 
203        disabled="<%=deletePermission ? false : true%>" 
204        image="<%=deletePermission ? "delete.gif" : "delete_disabled.gif"%>" 
205        onclick="deleteItem()" 
206        title="Delete"
207        visible="<%=!extract.isRemoved()%>"
208        tooltip="<%=deletePermission ? "Delete this labeled extract" : "You do not have permission to delete this labeled extract"%>" 
209      />
210      <tbl:button 
211        disabled="<%=writePermission ? false : true%>" 
212        image="<%=writePermission ? "restore.gif" : "restore_disabled.gif"%>" 
213        onclick="restoreItem()" 
214        title="Restore"
215        visible="<%=extract.isRemoved()%>"
216        tooltip="<%=writePermission ? "Restore this labeled extract" : "You do not have permission to restore this labeled extract"%>" 
217      />
218      <tbl:button 
219        disabled="<%=sharePermission ? false : true%>"
220        image="<%=sharePermission ? "share.gif" : "share_disabled.gif"%>"
221        onclick="shareItem()" 
222        title="Share&hellip;" 
223        tooltip="<%=sharePermission ? "Share this labeled extract to other user, groups and projects" : "You do not have permission to share this labeled extract"%>"
224      />
225      <tbl:button 
226        disabled="<%=setOwnerPermission ? false : true%>"
227        image="<%=setOwnerPermission ? "take_ownership.png" : "take_ownership_disabled.png"%>"
228        onclick="setOwner()" 
229        title="Set owner&hellip;"
230        tooltip="<%=setOwnerPermission ? "Change owner of this item" : "You do not have permission to change ownership of this item"%>"
231      />
232      <tbl:button
233        image="add.png"
234        onclick="newHybridization()"
235        title="New hybridization&hellip;"
236        tooltip="Create a new hybridization from this labeled extract"
237        visible="<%=sc.hasPermission(Permission.CREATE, Item.HYBRIDIZATION) && usePermission%>"
238      />
239      <tbl:button 
240        image="import.gif" 
241        onclick="runPlugin('ImportItem')" 
242        title="Import&hellip;" 
243        tooltip="Import data" 
244        visible="<%=pluginCount.containsKey(Plugin.MainType.IMPORT)%>"
245      />
246      <tbl:button 
247        image="export.gif" 
248        onclick="runPlugin('ExportItem')" 
249        title="Export&hellip;" 
250        tooltip="Export data" 
251        visible="<%=pluginCount.containsKey(Plugin.MainType.EXPORT)%>"
252      />
253      <tbl:button 
254        image="runplugin.gif" 
255        onclick="runPlugin('RunPlugin')" 
256        title="Run plugin&hellip;" 
257        tooltip="Run a plugin" 
258        visible="<%=pluginCount.containsKey(Plugin.MainType.OTHER)%>"
259      />
260      <ext:render extensions="<%=invoker%>" context="<%=jspContext%>" 
261        wrapper="<%=new PrefixSuffixRenderer(jspContext, "<td>", "</td>") %>"/>
262      <tbl:button
263        image="help.gif"
264        onclick="<%="Main.openHelp('" + ID +"', 'labeledextract.view.properties')"%>"
265        title="Help&hellip;"
266        tooltip="Get help about this page"
267      /> 
268      </tbl:toolbar>
269    <div class="boxedbottom">
270      <div class="itemstatus">Permissions on this item: <i><%=PermissionUtil.getFullPermissionNames(extract)%></i></div>
271      <%
272      if (extract.isRemoved() || extract.isShared())
273      {
274        %>
275        <div class="itemstatus">
276          <base:icon 
277            image="<%=deletePermanentlyPermission ? "deleted.gif" : "deleted_disabled.gif"%>"
278            onclick="<%=deletePermanentlyPermission ? "deleteItemPermanently()" : null%>"
279            tooltip="<%=deletePermanentlyPermission ? "Permanently delete this item" : null%>"
280            visible="<%=isRemoved%>"> This item has been flagged for deletion<br></base:icon>
281          <base:icon image="used.gif" 
282            onclick="showUsingItems()"
283            tooltip="Show the items that are using this one"
284            visible="<%=isUsed%>"> This item is used by other items and can't be permanently deleted<br></base:icon>
285          <base:icon image="shared.gif" 
286            visible="<%=extract.isShared()%>"> This item is shared to other users, groups and/or projects</base:icon>
287        </div>
288        <%
289      }
290      %>
291      <table class="form" cellspacing=0>
292      <tr>
293        <td class="prompt">Name</td>
294        <td><%=HTML.encodeTags(extract.getName())%></td>
295      </tr>
296      <tr>
297        <td class="prompt">Label</td>
298        <td><base:propertyvalue item="<%=extract%>" property="label"/></td>
299      </tr>
300      <tr>
301        <td class="prompt">External ID</td>
302        <td><%=HTML.encodeTags(extract.getExternalId())%></td>
303      </tr>
304      <tr>
305        <td class="prompt">Created</td>
306        <td><%=dateFormatter.format(creationEvent.getEventDate())%></td>
307      </tr>
308      <tr>
309        <td class="prompt">Registered</td>
310        <td><%=dateFormatter.format(creationEvent.getEntryDate())%></td>
311      </tr>
312      <%
313      if (!extract.isPooled())
314      {       
315        %>
316        <tr>
317          <td class="prompt">Extract</td>
318          <td>
319            <base:propertyvalue item="<%=extract%>" property="parent"/>
320            <%
321            try
322            {
323            %>
324              <%=extract.getExtract() != null ? "(" + Values.formatNumber(creationEvent.getUsedQuantity(extract.getExtract()), 2, " µg") + ")": ""%>
325            <%
326            }
327            catch (PermissionDeniedException ex)
328            {}
329            %>
330          </td>
331        </tr>
332        <%
333      }
334      %>
335      <tr>
336        <td class="prompt">Protocol</td>
337        <td><base:propertyvalue item="<%=creationEvent%>" property="protocol"/></td>
338      </tr>
339      <tr>
340        <td class="prompt">Original quantity</td>
341        <td><%=Values.formatNumber(extract.getOriginalQuantity(), 2, " µg")%></td>
342      </tr>
343      <tr>
344        <td class="prompt">Remaining quantity</td>
345        <td><%=Values.formatNumber(extract.getRemainingQuantity(), 2, " µg")%></td>
346      </tr>
347      <tr>
348        <td class="prompt">Bioplate</td>
349        <td>
350          <base:propertyvalue item="<%=extract%>" property="bioWell.bioPlate" />
351          <%
352          try
353          {
354            if (extract.getBioWell() != null)
355            {
356              BioWell bw = extract.getBioWell();
357              %>
358              [<%=rowFormatter.format(bw.getRow())%>,<%=columnFormatter.format(bw.getColumn())%>]
359            <%
360            }
361          }
362          catch (PermissionDeniedException ex)
363          {}
364          %>
365        </td>
366      </tr>
367      <tr>
368        <td class="prompt">Owner</td>
369        <td><base:propertyvalue item="<%=extract%>" property="owner"/></td>
370      </tr>
371      <tr valign="baseline">
372        <td class="prompt">Description</td>
373        <td><%=HTML.niceFormat(extract.getDescription())%></td>
374      </tr>
375      </table>
376 
377      <%
378      if (extract.isPooled())
379      {
380        ItemQuery<LabeledExtract> extractsQuery = (ItemQuery<LabeledExtract>)creationEvent.getSources();
381        extractsQuery.include(Include.ALL);
382        extractsQuery.order(Orders.asc(Hql.property("name")));
383        ItemResultList<LabeledExtract> extracts = extractsQuery.list(dc);
384        String extractLink = "index.jsp?ID="+ID;
385        %>
386        <h4 class="docked">Pooled from labeled extracts</h4>
387        <tbl:table
388          id="pooled"
389          clazz="itemlist"
390          columns="all"
391          >
392        <tbl:columndef 
393          id="name"
394          title="Name"
395        />
396        <tbl:columndef 
397          id="quantity"
398          title="Used quantity (µg)"
399        />
400        <tbl:columndef 
401          id="description"
402          title="Description"
403        />
404        <tbl:data>
405          <tbl:columns>
406          </tbl:columns>
407          <tbl:rows>
408          <%
409          for (LabeledExtract item : extracts)
410          {
411            %>
412            <tbl:row>
413              <tbl:cell column="name"><base:icon 
414                  image="deleted.gif" 
415                  tooltip="This item has been scheduled for deletion" 
416                  visible="<%=item.isRemoved()%>"
417                /><%=Base.getLinkedName(ID, item, false, true)%></tbl:cell>
418              <tbl:cell column="quantity"><%=Values.formatNumber(creationEvent.getUsedQuantity(item), 2)%></tbl:cell>
419              <tbl:cell column="description"><%=HTML.encodeTags(item.getDescription())%></tbl:cell>
420            </tbl:row>
421            <%
422          }
423          %>
424          </tbl:rows>
425        </tbl:data>
426        </tbl:table>
427        <%
428      }
429     
430      // Pooled item this labeled extract is used in.     
431      ItemQuery<BioMaterialEvent> poolingQuery = extract.getPoolingEvents();
432      ItemResultList<BioMaterialEvent> poolingEvents = poolingQuery.list(dc);
433      if (poolingEvents.size() == 0)
434      {
435        %>
436        <h4>Pooled in labeled extracts</h4>
437        No labeled extracts have been pooled from this labeled extract
438        (or, you don't have permission to view them).
439        <%
440      }
441      else
442      {
443        %>
444        <h4 class="docked">Pooled in labeled extracts</h4>
445        <tbl:table 
446          id="poolChilds"
447          clazz="itemlist"
448          columns="all"
449          >
450          <tbl:columndef 
451            id="name"
452            title="Name"
453          />
454          <tbl:columndef 
455            id="quantity"
456            title="Original quantity (µg)"
457          />
458          <tbl:columndef 
459            id="parents"
460            title="Used labeled extracts [quantity]" 
461          />
462          <tbl:columndef 
463            id="description"
464            title="Description"
465          />
466          <tbl:data>
467            <tbl:columns></tbl:columns>
468            <tbl:rows>
469            <%
470            for (BioMaterialEvent poolEvt : poolingEvents)
471            {
472              LabeledExtract ch = (LabeledExtract)poolEvt.getBioMaterial();
473              ItemQuery<LabeledExtract> extractsQuery = (ItemQuery<LabeledExtract>)poolEvt.getSources();
474              extractsQuery.include(Include.ALL);
475              extractsQuery.order(Orders.asc(Hql.property("name")));
476              ItemResultList<LabeledExtract> parentExtracts = extractsQuery.list(dc);
477              %>
478              <tbl:row>
479                <tbl:cell column="name">
480                  <base:icon 
481                    image="deleted.gif" 
482                    tooltip="This item has been scheduled for deletion" 
483                    visible="<%=ch.isRemoved() %>"
484                  />
485                  <%=Base.getLinkedName(ID, ch, false, true)%>
486                </tbl:cell>
487                <tbl:cell column="quantity"><%=Values.formatNumber(ch.getOriginalQuantity(), 2)%></tbl:cell>
488                <tbl:cell column="parents">
489                <%
490                String separator = "";
491                for (LabeledExtract parent : parentExtracts)
492                {
493                  out.write(separator);
494                  if (parent.equals(extract))
495                      out.write(HTML.encodeTags(parent.getName()));
496                  else                   
497                    out.write(Base.getLinkedName(ID, parent, false, true));
498                  out.write("[" + Values.formatNumber(poolEvt.getUsedQuantity(parent), 2) + "µg]");
499                  separator = ", ";
500                }
501                %>
502                </tbl:cell>
503                <tbl:cell column="description"><%=HTML.encodeTags(ch.getDescription())%></tbl:cell>
504              </tbl:row>
505              <%
506            }
507            %>           
508            </tbl:rows>
509          </tbl:data>
510        </tbl:table>
511        <%
512      }
513     
514      ItemQuery<Hybridization> hybridizationQuery = extract.getHybridizations();
515      hybridizationQuery.include(Include.ALL);
516      hybridizationQuery.order(Orders.asc(Hql.property("name")));
517      ItemResultList<Hybridization>hybridizations = hybridizationQuery.list(dc);
518      if (hybridizations.size() == 0)
519      {
520        %>
521        <h4>Hybridizations</h4>
522        No hybridizations have been created from this labeled extract
523        (or you don't have the permission to view them)
524        <%
525      }
526      else
527      {
528        %>
529        <h4 class="docked">Hybridizations</h4>
530        <tbl:table
531          id="hybridizations"
532          clazz="itemlist"
533          columns="all"
534          >
535          <tbl:columndef
536            id="name"
537            title="Name"
538          />         
539          <tbl:columndef 
540            id="quantity"
541            title="Used quantity (µg)"
542          />
543          <tbl:columndef
544            id="description"
545            title="Description"
546          />
547          <tbl:data>
548            <tbl:columns></tbl:columns>
549            <tbl:rows>
550              <%
551              for (Hybridization hyb : hybridizations)
552              {
553                %>
554                <tbl:row>
555                  <tbl:cell column="name"><base:icon 
556                    image="deleted.gif" 
557                    tooltip="This item has been scheduled for deletion" 
558                    visible="<%=hyb.isRemoved()%>"
559                  /><%=Base.getLinkedName(ID, hyb, false, true)%></tbl:cell>
560                  <tbl:cell column="quantity"><%=Values.formatNumber(hyb.getCreationEvent().getUsedQuantity(extract), 2)%></tbl:cell>
561                  <tbl:cell column="description"><%=HTML.encodeTags(hyb.getDescription())%></tbl:cell>
562                </tbl:row>
563                <%
564              }
565              %>
566            </tbl:rows>
567          </tbl:data>
568        </tbl:table>
569        <%
570      }     
571     
572      // Tables with users/groups/projects that this item is shared to
573      MultiPermissions mp = new MultiPermissions(Collections.singleton(extract));
574      ItemResultIterator<User> users = mp.getUsers().iterate(dc);
575      ItemResultIterator<Group> groups = mp.getGroups().iterate(dc);
576      ItemResultIterator<Project> projects = mp.getProjects().iterate(dc);
577     
578      if (users.hasNext() || groups.hasNext() || projects.hasNext())
579      {
580        %>
581        <h4 class="docked">Shared to</h4>
582        <tbl:table 
583          id="itemsSharedTo"
584          clazz="itemlist"
585          columns="all"
586        >
587          <tbl:columndef 
588            id="itemType"
589            title="Item type"
590          />
591          <tbl:columndef 
592            id="name"
593            title="Name"
594          />
595          <tbl:columndef 
596            id="permissions"
597            title="Permissions"
598          />
599          <tbl:data>
600            <tbl:columns>
601            </tbl:columns>
602            <tbl:rows>
603            <%
604            while(projects.hasNext())
605            {
606              Project project = projects.next();
607              Set<Permission> permissions = mp.getPermissions(project).values().iterator().next();
608              %>     
609              <tbl:row>
610                <tbl:cell column="itemType"><%=project.getType()%></tbl:cell>
611                <tbl:cell column="name"><base:icon 
612                  image="deleted.gif" 
613                  tooltip="This item has been scheduled for deletion" 
614                  visible="<%=project.isRemoved()%>"
615                /><%=Base.getLinkedName(ID, project, false, true)%></tbl:cell>
616                <tbl:cell column="permissions">
617                  <%=PermissionUtil.translatePermissionsToString(permissions)%>
618                </tbl:cell>
619              </tbl:row>
620              <%
621            }
622            while(groups.hasNext())
623            {
624              Group group = groups.next();
625              Set<Permission> permissions = mp.getPermissions(group).values().iterator().next();
626              %>
627              <tbl:row>             
628                <tbl:cell column="itemType"><%=group.getType()%></tbl:cell>
629                <tbl:cell column="name"><base:icon 
630                  image="deleted.gif" 
631                  tooltip="This item has been scheduled for deletion" 
632                  visible="<%=group.isRemoved()%>"
633                /><%=Base.getLinkedName(ID, group, false, true)%></tbl:cell>
634                <tbl:cell column="permissions">
635                  <%=PermissionUtil.translatePermissionsToString(permissions)%>
636                </tbl:cell>
637              </tbl:row>
638              <% 
639            }
640            while (users.hasNext())
641            {
642              User user = users.next();
643              Set<Permission> permissions = mp.getPermissions(user).values().iterator().next();
644              %>
645              <tbl:row>             
646                <tbl:cell column="itemType"><%=user.getType()%></tbl:cell>
647                <tbl:cell column="name"><base:icon 
648                  image="deleted.gif" 
649                  tooltip="This item has been scheduled for deletion" 
650                  visible="<%=user.isRemoved()%>"
651                /><%=Base.getLinkedName(ID, user, false, true)%></tbl:cell>
652                <tbl:cell column="permissions">
653                  <%=PermissionUtil.translatePermissionsToString(permissions)%>
654                </tbl:cell>
655              </tbl:row>
656              <%
657            }
658            %>
659            </tbl:rows>
660          </tbl:data>
661        </tbl:table>
662        <%
663      }
664      else
665      {
666        %>
667        <h4>Shared to</h4>
668        This labeled extract is not shared
669        (or, you don't have permission to view the ones it is shared to).
670        <%
671      }
672      %>
673     
674    </div>
675      </t:tab>
676     
677      <t:tab id="annotations" title="Annotations &amp; parameters" 
678        tooltip="View annotation values and protocol parameters">
679        <div class="boxed">
680        <jsp:include page="../../common/annotations/list_annotations.jsp">
681          <jsp:param name="item_type" value="<%=itemType.name()%>" />
682          <jsp:param name="item_id" value="<%=itemId%>" />
683          <jsp:param name="ID" value="<%=ID%>" />
684        </jsp:include>
685        </div>
686      </t:tab>
687     
688      <t:tab id="events" title="Events" />
689      <t:tab id="overview" title="Overview" 
690        tooltip="Display a tree overview of related items">
691        <%
692        if ("overview".equals(tab))
693        {
694          %>
695          <jsp:include page="../../common/overview/overview.jsp">
696            <jsp:param name="item_type" value="<%=itemType.name()%>" />
697            <jsp:param name="item_id" value="<%=itemId%>" />
698            <jsp:param name="ID" value="<%=ID%>" />
699          </jsp:include>
700          <%
701        }
702        %>
703      </t:tab>
704      </t:tabcontrol>
705
706
707  </base:body>
708  </base:page>
709  <%
710}
711finally
712{
713  if (dc != null) dc.close();
714}
715
716%>
717
Note: See TracBrowser for help on using the repository browser.