source: trunk/www/biomaterials/tags/view_tag.jsp @ 5632

Last change on this file since 5632 was 5632, checked in by Nicklas Nordborg, 11 years ago

References #1153: Handling short read transcript sequence data

Replaced Label with Tag. It re-uses much of the old code including the database table.

The code compiles and most test programs pass. Not all gui pages in the web client work. Since LabeledExtract is going to be removed functionality that is related with this may not do what is expected.

  • Property svn:eol-style set to native
  • Property svn:keywords set to Date Id
File size: 13.9 KB
Line 
1<%-- $Id: view_tag.jsp 5632 2011-05-17 09:35:34Z nicklas $
2  ------------------------------------------------------------------
3  Copyright (C) 2006 Jari Häkkinen, 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 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.SystemItems"
30  import="net.sf.basedb.core.Group"
31  import="net.sf.basedb.core.Include"
32  import="net.sf.basedb.core.Item"
33  import="net.sf.basedb.core.ItemContext"
34  import="net.sf.basedb.core.ItemQuery"
35  import="net.sf.basedb.core.ItemResultList"
36  import="net.sf.basedb.core.Permission"
37  import="net.sf.basedb.core.Tag"
38  import="net.sf.basedb.core.MultiPermissions"
39  import="net.sf.basedb.core.User"
40  import="net.sf.basedb.core.PermissionDeniedException"
41  import="net.sf.basedb.core.PluginDefinition"
42  import="net.sf.basedb.core.plugin.GuiContext"
43  import="net.sf.basedb.core.plugin.Plugin"
44  import="net.sf.basedb.core.Project"
45  import="net.sf.basedb.core.query.Orders"
46  import="net.sf.basedb.core.query.Hql"
47  import="net.sf.basedb.clients.web.Base"
48  import="net.sf.basedb.clients.web.PermissionUtil"
49  import="net.sf.basedb.clients.web.util.HTML"
50  import="net.sf.basedb.util.Values"
51  import="net.sf.basedb.util.formatter.Formatter"
52  import="net.sf.basedb.clients.web.formatter.FormatterFactory"
53  import="net.sf.basedb.clients.web.extensions.ExtensionsControl"
54  import="net.sf.basedb.clients.web.extensions.JspContext"
55  import="net.sf.basedb.clients.web.extensions.renderer.PrefixSuffixRenderer"
56  import="net.sf.basedb.clients.web.extensions.toolbar.ToolbarUtil"
57  import="net.sf.basedb.util.extensions.ExtensionsInvoker"
58  import="java.util.Date"
59  import="java.util.Collections"
60  import="java.util.Map"
61  import="java.util.Set"
62%>
63<%@ taglib prefix="base" uri="/WEB-INF/base.tld" %>
64<%@ taglib prefix="tbl" uri="/WEB-INF/table.tld" %>
65<%@ taglib prefix="t" uri="/WEB-INF/tab.tld" %>
66<%@ taglib prefix="p" uri="/WEB-INF/path.tld" %>
67<%@ taglib prefix="ext" uri="/WEB-INF/extensions.tld" %>
68<%!
69  private static final Item itemType = Item.TAG;
70  private static final GuiContext guiContext = new GuiContext(itemType, GuiContext.Type.ITEM);
71%>
72<%
73final SessionControl sc = Base.getExistingSessionControl(pageContext, true);
74final String ID = sc.getId();
75final ItemContext cc = Base.getAndSetCurrentContext(sc, itemType, null, null);
76final int itemId = cc.getId();
77final float scale = Base.getScale(sc);
78final DbControl dc = sc.newDbControl();
79try
80{
81  Formatter<Date> dateFormatter = FormatterFactory.getDateFormatter(sc);
82  Map<Plugin.MainType, Integer> pluginCount = PluginDefinition.countPlugins(dc, guiContext);
83
84  String title = null;
85  Tag tag = Tag.getById(dc, itemId);
86 
87  final boolean writePermission = tag.hasPermission(Permission.WRITE);
88  final boolean deletePermission = tag.hasPermission(Permission.DELETE);
89  final boolean sharePermission = tag.hasPermission(Permission.SET_PERMISSION);
90  final boolean usePermission = tag.hasPermission(Permission.USE);
91  final boolean setOwnerPermission = tag.hasPermission(Permission.SET_OWNER);
92  final boolean isRemoved = tag.isRemoved();
93  final boolean isUsed = isRemoved && tag.isUsed();
94  final boolean deletePermanentlyPermission = deletePermission && !isUsed;
95  final boolean isOwner = tag.isOwner();
96  JspContext jspContext = ExtensionsControl.createContext(dc, pageContext, guiContext, tag);
97  ExtensionsInvoker invoker = ToolbarUtil.useExtensions(jspContext);
98  %>
99  <base:page title="<%=title%>">
100  <base:head scripts="table.js,tabcontrol.js" styles="table.css,toolbar.css,headertabcontrol.css,path.css">
101    <ext:scripts context="<%=jspContext%>" />
102    <ext:stylesheets context="<%=jspContext%>" />
103    <script language="JavaScript">
104    function editItem()
105    {
106      Main.viewOrEditItem('<%=ID%>', '<%=itemType.name()%>', <%=itemId%>, true);
107    }
108    function shareItem()
109    {
110      Main.openPopup('index.jsp?ID=<%=ID%>&cmd=ShareItem&item_id=<%=itemId%>', 'ShareTag', 600, 400);
111    }
112    function deleteItem()
113    {
114      location.replace('index.jsp?ID=<%=ID%>&cmd=DeleteItem&item_id=<%=itemId%>');
115    }
116    function restoreItem()
117    {
118      location.replace('index.jsp?ID=<%=ID%>&cmd=RestoreItem&item_id=<%=itemId%>');
119    }
120    function deleteItemPermanently()
121    {
122      Main.deleteItemPermanently('<%=ID%>', true, '<%=itemType.name()%>', <%=itemId%>, '&callback=itemDeleted');
123    }
124    function itemDeleted()
125    {
126      Main.listItems('<%=ID%>', '<%=itemType.name()%>');
127    }
128    function showUsingItems()
129    {
130      Main.showUsingItems('<%=ID%>', '<%=itemType.name()%>', <%=itemId%>);
131    }
132    function setOwner()
133    {
134      Main.openPopup('index.jsp?ID=<%=ID%>&cmd=SetOwnerOfItem&item_id=<%=itemId%>', 'SetOwnerOfItem', 450, 150);
135    }
136    function runPlugin(cmd)
137    {
138      Main.openPopup('index.jsp?ID=<%=ID%>&cmd='+cmd+'&item_id=<%=itemId%>', 'RunPlugin'+cmd, 740, 540);
139    }
140    function newLabeledExtract()
141    {
142      Main.viewOrEditItem('<%=ID%>', 'LABELEDEXTRACT', 0, true, '&label_id='+<%=itemId%>);
143    }
144    </script>
145  </base:head>
146  <base:body>
147    <p>
148    <p:path>
149      <p:pathelement title="Tags" href="<%="index.jsp?ID="+ID%>" />
150      <p:pathelement title="<%=HTML.encodeTags(tag.getName())%>" />
151    </p:path>
152   
153    <t:tabcontrol id="main" active="properties">
154    <t:tab id="properties" title="Properties">
155    <tbl:toolbar
156      >
157      <tbl:button 
158        disabled="<%=writePermission ? false : true%>" 
159        image="<%=writePermission ? "edit.gif" : "edit_disabled.gif"%>" 
160        onclick="editItem()" 
161        title="Edit&hellip;" 
162        tooltip="<%=writePermission ? "Edit this tag" : "You do not have permission to edit this tag"%>" 
163      />
164      <tbl:button 
165        disabled="<%=deletePermission ? false : true%>" 
166        image="<%=deletePermission ? "delete.gif" : "delete_disabled.gif"%>" 
167        onclick="deleteItem()" 
168        title="Delete"
169        visible="<%=!tag.isRemoved()%>"
170        tooltip="<%=deletePermission ? "Delete this tag" : "You do not have permission to delete this tag"%>" 
171      />
172      <tbl:button 
173        disabled="<%=writePermission ? false : true%>" 
174        image="<%=writePermission ? "restore.gif" : "restore_disabled.gif"%>" 
175        onclick="restoreItem()" 
176        title="Restore"
177        visible="<%=tag.isRemoved()%>"
178        tooltip="<%=writePermission ? "Restore this tag" : "You do not have permission to restore this tag"%>" 
179      />
180      <tbl:button 
181        disabled="<%=sharePermission ? false : true%>"
182        image="<%=sharePermission ? "share.gif" : "share_disabled.gif"%>"
183        onclick="shareItem()" 
184        title="Share&hellip;" 
185        tooltip="<%=sharePermission ? "Share this tag to other user, groups and projects" : "You do not have permission to share this tag"%>"
186      />
187      <tbl:button 
188        disabled="<%=setOwnerPermission ? false : true%>"
189        image="<%=setOwnerPermission ? "take_ownership.png" : "take_ownership_disabled.png"%>"
190        onclick="setOwner()" 
191        title="Set owner&hellip;"
192        tooltip="<%=setOwnerPermission ? "Change owner of this item" : "You do not have permission to change ownership of this item"%>"
193      />
194      <tbl:button
195        image="add.png"
196        onclick="newLabeledExtract()"
197        title="New labeled extract&hellip;"
198        tooltip="Create a new labeled extract with this label"
199        visible="<%=sc.hasPermission(Permission.CREATE, Item.LABELEDEXTRACT) && usePermission%>" 
200      />
201      <tbl:button 
202        image="import.gif" 
203        onclick="runPlugin('ImportItem')" 
204        title="Import&hellip;" 
205        tooltip="Import data" 
206        visible="<%=pluginCount.containsKey(Plugin.MainType.IMPORT)%>"
207      />
208      <tbl:button 
209        image="export.gif" 
210        onclick="runPlugin('ExportItem')" 
211        title="Export&hellip;" 
212        tooltip="Export data" 
213        visible="<%=pluginCount.containsKey(Plugin.MainType.EXPORT)%>"
214      />
215      <tbl:button 
216        image="runplugin.gif" 
217        onclick="runPlugin('RunPlugin')" 
218        title="Run plugin&hellip;" 
219        tooltip="Run a plugin" 
220        visible="<%=pluginCount.containsKey(Plugin.MainType.OTHER)%>"
221      />
222      <ext:render extensions="<%=invoker%>" context="<%=jspContext%>" 
223        wrapper="<%=new PrefixSuffixRenderer(jspContext, "<td>", "</td>") %>"/>
224      <tbl:button
225        image="help.gif"
226        onclick="<%="Main.openHelp('" + ID +"', 'tag.view.properties')"%>"
227        title="Help&hellip;"
228        tooltip="Get help about this page"
229      /> 
230      </tbl:toolbar>
231    <div class="boxedbottom">
232      <div class="itemstatus">Permissions on this item: <i><%=PermissionUtil.getFullPermissionNames(tag)%></i></div>
233      <%
234      if (tag.isRemoved() || tag.isShared())
235      {
236        %>
237        <div class="itemstatus">
238          <base:icon 
239            image="<%=deletePermanentlyPermission ? "deleted.gif" : "deleted_disabled.gif"%>"
240            onclick="<%=deletePermanentlyPermission ? "deleteItemPermanently()" : null%>"
241            tooltip="<%=deletePermanentlyPermission ? "Permanently delete this item" : null%>"
242            visible="<%=isRemoved%>"> This item has been flagged for deletion<br></base:icon>
243          <base:icon image="used.gif" 
244            onclick="showUsingItems()"
245            tooltip="Show the items that are using this one"
246            visible="<%=isUsed%>"> This item is used by other items and can't be permanently deleted<br></base:icon>
247          <base:icon image="shared.gif" 
248            visible="<%=tag.isShared()%>"> This item is shared to other users, groups and/or projects</base:icon>
249        </div>
250        <%
251      }
252      %>
253      <table class="form" cellspacing=0>
254      <tr>
255        <td class="prompt">Name</td>
256        <td><%=HTML.encodeTags(tag.getName())%></td>
257      </tr>
258      <tr>
259        <td class="prompt">Type</td>
260        <td><base:propertyvalue item="<%=tag%>" property="itemSubtype" /></td>
261      </tr>
262      <tr>
263        <td class="prompt">Registered</td>
264        <td><%=dateFormatter.format(tag.getEntryDate())%></td>
265      </tr>
266      <tr>
267        <td class="prompt">Owner</td>
268        <td><base:propertyvalue item="<%=tag%>" property="owner"/></td>
269      </tr>
270      <tr>
271        <td class="prompt">Description</td>
272        <td><%=HTML.niceFormat(tag.getDescription())%></td>
273      </tr>
274      </table>
275      <jsp:include page="../../common/anytoany/list_anytoany.jsp">
276        <jsp:param name="ID" value="<%=ID%>" />
277        <jsp:param name="item_type" value="<%=itemType.name()%>" />
278        <jsp:param name="item_id" value="<%=itemId%>" />
279        <jsp:param name="title" value="Other items related to this tag" />
280      </jsp:include>
281      <%
282      // Tables with users/groups/projects that this item is shared to
283      MultiPermissions mp = new MultiPermissions(Collections.singleton(tag));
284      ItemResultList<User> users = mp.getUsers().list(dc);
285      ItemResultList<Group> groups = mp.getGroups().list(dc);
286      ItemResultList<Project> projects = mp.getProjects().list(dc);
287      int totalShare = users.size() + groups.size() + projects.size();
288     
289      if (totalShare > 0)
290      {
291        %>
292        <base:section 
293          id="sharedTo" 
294          title="<%="Shared to (" + totalShare + ")"%>"
295          context="<%=cc%>"
296          >
297          <tbl:table 
298            id="itemsSharedTo"
299            clazz="itemlist"
300            columns="all"
301          >
302            <tbl:columndef 
303              id="itemType"
304              title="Item type"
305            />
306            <tbl:columndef 
307              id="name"
308              title="Name"
309            />
310            <tbl:columndef 
311              id="permissions"
312              title="Permissions"
313            />
314            <tbl:data>
315              <tbl:columns>
316              </tbl:columns>
317              <tbl:rows>
318              <%
319              for (Project project : projects)
320              {
321                Set<Permission> permissions = mp.getPermissions(project).values().iterator().next();
322                %>     
323                <tbl:row>
324                  <tbl:cell column="itemType"><%=project.getType()%></tbl:cell>
325                  <tbl:cell column="name"><base:icon 
326                    image="deleted.gif" 
327                    tooltip="This item has been scheduled for deletion" 
328                    visible="<%=project.isRemoved()%>"
329                  /><%=Base.getLinkedName(ID, project, false, true)%></tbl:cell>
330                  <tbl:cell column="permissions">
331                    <%=PermissionUtil.translatePermissionsToString(permissions)%>
332                  </tbl:cell>
333                </tbl:row>
334                <%
335              }
336              for (Group group : groups)
337              {
338                Set<Permission> permissions = mp.getPermissions(group).values().iterator().next();
339                %>
340                <tbl:row>             
341                  <tbl:cell column="itemType"><%=group.getType()%></tbl:cell>
342                  <tbl:cell column="name"><base:icon 
343                    image="deleted.gif" 
344                    tooltip="This item has been scheduled for deletion" 
345                    visible="<%=group.isRemoved()%>"
346                  /><%=Base.getLinkedName(ID, group, false, true)%></tbl:cell>
347                  <tbl:cell column="permissions">
348                    <%=PermissionUtil.translatePermissionsToString(permissions)%>
349                  </tbl:cell>
350                </tbl:row>
351                <% 
352              }
353              for (User user : users)
354              {
355                Set<Permission> permissions = mp.getPermissions(user).values().iterator().next();
356                %>
357                <tbl:row>             
358                  <tbl:cell column="itemType"><%=user.getType()%></tbl:cell>
359                  <tbl:cell column="name"><base:icon 
360                    image="deleted.gif" 
361                    tooltip="This item has been scheduled for deletion" 
362                    visible="<%=user.isRemoved()%>"
363                  /><%=Base.getLinkedName(ID, user, false, true)%></tbl:cell>
364                  <tbl:cell column="permissions">
365                    <%=PermissionUtil.translatePermissionsToString(permissions)%>
366                  </tbl:cell>
367                </tbl:row>
368                <%
369              }
370              %>
371              </tbl:rows>
372            </tbl:data>
373          </tbl:table>
374        </base:section>
375        <%
376      }
377      else
378      {
379        %>
380        <h4>Shared to</h4>
381        This tag is not shared
382        (or, you don't have permission to view the ones it is shared to).
383        <%
384      }     
385      %>
386
387    </div>
388    </t:tab>
389    </t:tabcontrol>
390
391  </base:body>
392  </base:page>
393  <%
394}
395finally
396{
397  if (dc != null) dc.close();
398}
399
400%>
Note: See TracBrowser for help on using the repository browser.