source: trunk/www/views/trashcan/view_item.jsp @ 5938

Last change on this file since 5938 was 5938, checked in by Nicklas Nordborg, 10 years ago

References #1655: GUI improvements

  • Trashcan and file manager
  • Property svn:eol-style set to native
  • Property svn:keywords set to Date Id
File size: 14.4 KB
Line 
1<%-- $Id: view_item.jsp 5938 2012-01-27 14:17:51Z nicklas $
2  ------------------------------------------------------------------
3  Copyright (C) 2006 Nicklas Nordborg
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.BasicItem"
31  import="net.sf.basedb.core.Removable"
32  import="net.sf.basedb.core.Shareable"
33  import="net.sf.basedb.core.Nameable"
34  import="net.sf.basedb.core.File"
35  import="net.sf.basedb.core.Directory"
36  import="net.sf.basedb.core.Group"
37  import="net.sf.basedb.core.Item"
38  import="net.sf.basedb.core.ItemProxy"
39  import="net.sf.basedb.core.ItemContext"
40  import="net.sf.basedb.core.ItemResultIterator"
41  import="net.sf.basedb.core.MultiPermissions"
42  import="net.sf.basedb.core.Permission"
43  import="net.sf.basedb.core.Project"
44  import="net.sf.basedb.core.Session"
45  import="net.sf.basedb.core.User"
46  import="net.sf.basedb.core.Client"
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.SharedItem"
52  import="net.sf.basedb.clients.web.Base"
53  import="net.sf.basedb.clients.web.PermissionUtil"
54  import="net.sf.basedb.clients.web.util.HTML"
55  import="net.sf.basedb.util.Values"
56  import="net.sf.basedb.clients.web.extensions.ExtensionsControl"
57  import="net.sf.basedb.clients.web.extensions.JspContext"
58  import="net.sf.basedb.clients.web.extensions.renderer.PrefixSuffixRenderer"
59  import="net.sf.basedb.clients.web.extensions.toolbar.ToolbarUtil"
60  import="net.sf.basedb.util.extensions.ExtensionsInvoker"
61  import="java.util.Collections"
62  import="java.util.Date"
63  import="java.util.Map"
64  import="java.util.Set"
65  import="java.util.List"
66%>
67<%@ taglib prefix="base" uri="/WEB-INF/base.tld" %>
68<%@ taglib prefix="t" uri="/WEB-INF/tab.tld" %>
69<%@ taglib prefix="tbl" uri="/WEB-INF/table.tld" %>
70<%@ taglib prefix="p" uri="/WEB-INF/path.tld" %>
71<%@ taglib prefix="ext" uri="/WEB-INF/extensions.tld" %>
72<%
73final SessionControl sc = Base.getExistingSessionControl(pageContext, true);
74final String ID = sc.getId();
75final int itemId = Values.getInt(request.getParameter("item_id"));
76final Item itemType = Item.valueOf(request.getParameter("item_type"));
77final ItemContext cc = sc.getCurrentContext(Item.SYSTEM, "trashcan");
78final DbControl dc = sc.newDbControl();
79try
80{
81  BasicItem item = itemType.getById(dc, itemId);
82  Set<ItemProxy> usingItems = item.getUsingItems();
83  final boolean isUsed = usingItems != null && usingItems.size() > 0;
84  final boolean writePermission = item.hasPermission(Permission.WRITE);
85  final boolean deletePermission = item.hasPermission(Permission.DELETE);
86  final boolean sharePermission = item.hasPermission(Permission.SET_PERMISSION);
87  final Shareable shareable = item instanceof Shareable ? (Shareable)item : null;
88  final boolean isShared = shareable != null && shareable.isShared();
89  final Removable removable = item instanceof Removable ? (Removable)item : null;
90  final boolean isRemoved = removable != null && removable.isRemoved();
91  String name = "";
92  String description = "";
93  if (item instanceof File)
94  {
95    File file = (File)item;
96    name = file.getPath().toString();
97    description = file.getDescription();
98  }
99  else if (item instanceof Directory)
100  {
101    Directory dir = (Directory)item;
102    name = dir.getPath().toString();
103    description = dir.getDescription();
104  }
105  else if (item instanceof Nameable)
106  {
107    Nameable nameable = (Nameable)item;
108    name = nameable.getName();
109    description = nameable.getDescription();
110  }
111  else
112  {
113    name = item.toString();
114  }
115  String link = Base.getLink(ID, HTML.encodeTags(name), item.getType(), itemId, writePermission);
116  JspContext jspContext = ExtensionsControl.createContext(dc, pageContext, null, item);
117  ExtensionsInvoker invoker = ExtensionsControl.useExtensions(jspContext, 
118    "net.sf.basedb.clients.web.toolbar.item.all", 
119    "net.sf.basedb.clients.web.toolbar.item.trashcan");
120  %>
121  <base:page>
122  <base:head scripts="tabcontrol.js,table.js" styles="table.css,toolbar.css,headertabcontrol.css,path.css">
123    <ext:scripts context="<%=jspContext%>" />
124    <ext:stylesheets context="<%=jspContext%>" />
125    <script language="JavaScript">
126    var submitPage = 'index.jsp';
127    var formId = 'usingItems';
128    function editItem()
129    {
130      Main.viewOrEditItem('<%=ID%>', '<%=itemType.name()%>', <%=itemId%>, true);
131    }
132    function shareItem()
133    {
134      var controller = Main.getController('<%=itemType.name()%>');
135      var url = getRoot() + controller.url + '?ID=<%=ID%>&cmd=ShareItem&item_id=<%=itemId%>';
136      Main.openPopup(url, 'ShareItem', 600, 400);
137    }
138    function restoreItem()
139    {
140      var controller = Main.getController('<%=itemType.name()%>');
141      url = 'index.jsp?ID=<%=ID%>&cmd=RestoreItem&item_type=<%=itemType.name()%>&item_id=<%=itemId%>';     
142      url += '&itemsIndexPage=' + getRoot() + controller.url;
143      location.replace(url);
144    }
145    function deleteItem()
146    {
147      if (!confirm('You are about to PERMANENTLY DELETE this item.\n This can\'t be undone. Continue?'))
148      {
149        return;
150      }
151      var url = 'index.jsp?ID=<%=ID%>&cmd=DeleteItem&item_type=<%=itemType.name()%>&item_id=<%=itemId%>';
152      location.replace(url);
153    }
154    function deleteItems()
155    {
156      var frm = document.forms[formId];
157      var numChecked = Forms.numChecked(frm, /item:/);
158      if (numChecked == 0)
159      {
160        alert('Please select at least one item in the list');
161        return;
162      }
163      frm.action = submitPage;
164      frm.cmd.value = 'DeleteItems';
165      frm.submit();
166    }
167    function restoreItems()
168    {
169      var frm = document.forms[formId];
170      var numChecked = Forms.numChecked(frm, /item:/);
171      if (numChecked == 0)
172      {
173        alert('Please select at least one item in the list');
174        return;
175      }
176      frm.action = submitPage;
177      frm.cmd.value = 'RestoreItems';
178      frm.submit();
179    }
180    function showUsingItems(itemType, itemId)
181    {
182      var url = 'index.jsp?ID=<%=ID%>&cmd=ViewUsingItems&item_type='+itemType+'&item_id='+itemId;
183      location.href = url;
184    }
185   
186  </script>
187  </base:head>
188  <base:body>
189    <p:path><p:pathelement title="Trashcan" href="<%="index.jsp?ID="+ID%>" 
190      /><p:pathelement title="<%=itemType.toString() + ": " + HTML.encodeTags(name)%>"
191      /></p:path>
192
193    <t:tabcontrol id="main" subclass="content mastertabcontrol">
194    <t:tab id="properties" title="Properties">
195      <div>
196      <table class="fullform bottomborder">
197      <tr>
198        <th class="itemstatus">
199          <base:icon 
200            image="shared.gif" 
201            visible="<%=isShared%>"
202            tooltip="This item is shared to other users, groups and/or projects"
203          />
204          <base:icon 
205            image="deleted.gif"
206            tooltip="This item has been flagged for deletion."
207            visible="<%=isRemoved%>" 
208          />
209          <base:icon image="used.gif" 
210            tooltip="This item is used by other items and can't be permanently deleted. Show the items that are using this one"
211            visible="<%=isUsed%>" />
212        </th>
213        <td style="padding: 0px;">
214          <tbl:toolbar subclass="bottomborder">
215
216            <tbl:button 
217              disabled="<%=writePermission ? false : true%>" 
218              image="edit.gif" 
219              onclick="editItem()" 
220              title="Edit&hellip;" 
221              tooltip="<%=writePermission ? "Edit this item" : "You do not have permission to edit this item"%>" 
222            />
223            <tbl:button 
224              disabled="<%=deletePermission ? false : true%>" 
225              image="<%=deletePermission ? "delete_permanently.png" : "delete_permanently_disabled.png"%>" 
226              onclick="deleteItem()" 
227              title="Delete permanently&hellip;"
228              visible="<%=!isUsed%>"
229              tooltip="<%=deletePermission ? "Permanently delete this item" : "You do not have permission to delete this item"%>" 
230            />
231            <tbl:button 
232              disabled="<%=writePermission ? false : true%>" 
233              image="restore.gif" 
234              onclick="restoreItem()" 
235              title="Restore"
236              visible="<%=isRemoved%>"
237              tooltip="<%=writePermission ? "Restore this item" : "You do not have permission to restore this item"%>" 
238            />
239            <tbl:button 
240              disabled="<%=sharePermission ? false : true%>"
241              image="share.gif"
242              onclick="shareItem()" 
243              title="Share&hellip;" 
244              visible="<%=shareable != null%>"
245              tooltip="<%=sharePermission ? "Share this item to other user, groups and projects" : "You do not have permission to share this scan"%>"
246            />
247            <ext:render extensions="<%=invoker%>" context="<%=jspContext%>" 
248              wrapper="<%=new PrefixSuffixRenderer(jspContext, "<td>", "</td>") %>"/>
249            <tbl:button
250              image="help.png"
251              onclick="<%="Main.openHelp('" + ID +"', 'trash.view.properties')"%>"
252              title="Help&hellip;"
253              tooltip="Get help about this page"
254            />
255          </tbl:toolbar>
256        </td>
257      </tr>
258      <tr>
259        <th>Type</th>
260        <td><%=itemType.toString()%></td>
261      </tr>
262      <tr>
263        <th>Name</th>
264        <td><%=link%></td>
265      </tr>
266      <tr>
267        <th>Description</th>
268        <td><%=HTML.niceFormat(description)%></td>
269      </tr>
270      </table>
271      </div>
272
273      <%
274      if (isUsed)
275      {
276        %>
277        <base:section
278          id="useditems"
279          title="<%="Items using " + HTML.encodeTags(name) + " (" + usingItems.size() + ")"%>"
280          context="<%=cc %>"
281          >
282          <tbl:toolbar subclass="leftborder topborder rightborder">
283            <tbl:button 
284              image="delete.gif"
285              onclick="deleteItems()" 
286              title="Delete" 
287              tooltip="Mark the selected items for deletion" 
288            />
289            <tbl:button 
290              image="restore.gif"
291              onclick="restoreItems()" 
292              title="Restore" 
293              tooltip="Restore the selected item" 
294            />
295          </tbl:toolbar>
296          <tbl:table
297            id="usingItems"
298            columns="all"
299          >
300          <tbl:hidden 
301            name="item_type"
302            value="<%=itemType.name()%>"
303          />
304          <tbl:hidden 
305            name="item_id"
306            value="<%=String.valueOf(itemId)%>"
307          />
308          <tbl:columndef 
309            id="name"
310            title="Name/ID"
311          />
312          <tbl:columndef
313            id="type"
314            title="Type"
315          />
316          <tbl:columndef 
317            id="description"
318            title="Description"
319          />
320          <tbl:data>
321            <tbl:headers>
322              <tbl:headerrow>
323                <tbl:header 
324                  clazz="index"
325                  >&nbsp;</tbl:header>
326                <tbl:header 
327                  clazz="check" 
328                  ><base:icon 
329                    image="check_uncheck.gif" 
330                    tooltip="Check/uncheck all" 
331                    onclick="Forms.checkUncheck(document.forms['usingItems'], /item:/)" style="align: left;"
332                  /></tbl:header>
333                <tbl:header 
334                  clazz="icons" 
335                  >&nbsp;</tbl:header>
336                <tbl:columnheaders />
337              </tbl:headerrow>
338            </tbl:headers>
339            <tbl:rows>
340            <%
341            int index = 0;
342            for (ItemProxy proxy : usingItems)
343            {
344              index++;
345              boolean denied = false;
346              boolean writePermissionOnUsedBy = false;
347              boolean usedByIsRemoved = false;
348              boolean usedByRemovable = false;
349              boolean usedByIsUsed = false;
350              BasicItem usedBy = null;
351              String usedByName = String.valueOf(proxy.getId());
352              String usedByDescription = "";
353              try
354              {
355                usedBy = proxy.getItem(dc);
356                writePermissionOnUsedBy = usedBy.hasPermission(Permission.WRITE);
357                usedByIsUsed = usedBy.isUsed();
358                if (usedBy instanceof Removable)
359                {
360                  usedByRemovable = true;
361                  usedByIsRemoved = ((Removable)usedBy).isRemoved();
362                }
363                if (usedBy instanceof File)
364                {
365                  File file = (File)usedBy;
366                  usedByName = file.getPath().toString();
367                  usedByDescription = file.getDescription();
368                }
369                else if (usedBy instanceof Directory)
370                {
371                  Directory dir = (Directory)usedBy;
372                  usedByName = dir.getPath().toString();
373                  usedByDescription = dir.getDescription();
374                }
375                else if (usedBy instanceof Nameable)
376                {
377                  Nameable nameable = (Nameable)usedBy;
378                  usedByName = nameable.getName();
379                  usedByDescription = nameable.getDescription();
380                }
381                else
382                {
383                  usedByName = usedBy.toString();
384                }
385              }
386              catch (PermissionDeniedException ex)
387              {
388                denied = true;
389              }
390              %>
391              <tbl:row>
392                <tbl:header 
393                  clazz="index"
394                  ><%=index%></tbl:header>
395                <tbl:header 
396                  clazz="check"
397                  ><%
398                  if (usedByRemovable)
399                  {
400                    %><input 
401                      type="checkbox" 
402                      name="item:<%=proxy.getType().name()%>" 
403                      value="<%=proxy.getId()%>"
404                    ><%
405                  }
406                  %></tbl:header>
407                <tbl:header 
408                  clazz="icons" 
409                  ><base:icon 
410                    image="deleted.gif" 
411                    tooltip="This item has been scheduled for deletion" 
412                    visible="<%=usedByIsRemoved%>"
413                  />
414                  <base:icon 
415                    image="used.gif"
416                    tooltip="This item is used by other items"
417                    visible="<%=usedByIsRemoved &&  usedByIsUsed%>"
418                    onclick="<%="showUsingItems('" + usedBy.getType().name() + "', " +  usedBy.getId() + ")"%>"
419                  />&nbsp;</tbl:header>
420                <tbl:cell column="name"><%=Base.getLink(ID, HTML.encodeTags(usedByName), proxy.getType(), proxy.getId(), writePermissionOnUsedBy)%></tbl:cell>
421                <tbl:cell column="type"><%=proxy.getType().toString()%></tbl:cell>
422                <tbl:cell column="description"><%=HTML.niceFormat(usedByDescription)%></tbl:cell>
423              </tbl:row>
424              <%
425            }
426            %>
427            </tbl:rows>
428          </tbl:data>
429          </tbl:table>
430        </base:section>
431        <%
432      }
433      if (item instanceof SharedItem)
434      {
435        %>
436        <jsp:include page="../../common/share/list_share.jsp">
437          <jsp:param name="ID" value="<%=ID%>" />
438          <jsp:param name="item_type" value="<%=itemType.name()%>" />
439          <jsp:param name="item_id" value="<%=itemId%>" />
440          <jsp:param name="title" value="Shared to" />
441        </jsp:include>
442        <%
443      }
444      %>
445
446    </t:tab>
447    </t:tabcontrol>
448
449  </base:body>
450  </base:page>
451  <%
452}
453finally
454{
455  if (dc != null) dc.commit();
456}
457
458%>
Note: See TracBrowser for help on using the repository browser.