source: trunk/www/views/trashcan/list_trash.jsp @ 5951

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

References #1655: GUI improvements

  • Fixes rest of list pages in Biomaterial LIMS menu
  • Introduced an 'iframe' page type so that thos pages doesn't have to 'cannibalise' on the 'popup' page type (doesn't works well with absolutely positioned content).
  • Fixed subclass="dialogbuttons" on all list pages when used in popup form


  • Property svn:eol-style set to native
  • Property svn:keywords set to Date Id
File size: 10.7 KB
Line 
1<%-- $Id: list_trash.jsp 5951 2012-02-09 14:19:17Z nicklas $
2  ------------------------------------------------------------------
3  Copyright (C) 2006 Jari Häkkinen, Nicklas Nordborg, Martin Svensson
4  Copyright (C) 2007 Johan Enell, Nicklas Nordborg, Martin Svensson
5
6  This file is part of BASE - BioArray Software Environment.
7  Available at http://base.thep.lu.se/
8
9  BASE is free software; you can redistribute it and/or
10  modify it under the terms of the GNU General Public License
11  as published by the Free Software Foundation; either version 3
12  of the License, or (at your option) any later version.
13
14  BASE is distributed in the hope that it will be useful,
15  but WITHOUT ANY WARRANTY; without even the implied warranty of
16  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
17  GNU General Public License for more details.
18
19  You should have received a copy of the GNU General Public License
20  along with BASE. If not, see <http://www.gnu.org/licenses/>.
21  ------------------------------------------------------------------
22
23  @author Nicklas
24  @version 2.0
25--%>
26<%@ page pageEncoding="UTF-8" session="false"
27  import="net.sf.basedb.core.SessionControl"
28  import="net.sf.basedb.core.DbControl"
29  import="net.sf.basedb.core.Trashcan"
30  import="net.sf.basedb.core.Item"
31  import="net.sf.basedb.core.ItemContext"
32  import="net.sf.basedb.core.Permission"
33  import="net.sf.basedb.core.BasicItem"
34  import="net.sf.basedb.core.Removable"
35  import="net.sf.basedb.core.Nameable"
36  import="net.sf.basedb.core.File"
37  import="net.sf.basedb.core.Directory"
38  import="net.sf.basedb.core.Metadata"
39  import="net.sf.basedb.core.query.ResultList"
40  import="net.sf.basedb.util.Enumeration"
41  import="net.sf.basedb.clients.web.Base"
42  import="net.sf.basedb.clients.web.util.HTML"
43  import="net.sf.basedb.util.Values"
44  import="net.sf.basedb.clients.web.extensions.ExtensionsControl"
45  import="net.sf.basedb.clients.web.extensions.JspContext"
46  import="net.sf.basedb.clients.web.extensions.renderer.PrefixSuffixRenderer"
47  import="net.sf.basedb.clients.web.extensions.toolbar.ToolbarUtil"
48  import="net.sf.basedb.util.extensions.ExtensionsInvoker"
49  import="java.util.Set"
50  import="java.util.HashSet"
51%>
52<%@ taglib prefix="base" uri="/WEB-INF/base.tld" %>
53<%@ taglib prefix="tbl" uri="/WEB-INF/table.tld" %>
54<%@ taglib prefix="ext" uri="/WEB-INF/extensions.tld" %>
55<%!
56  private static final Item itemType = Item.SYSTEM;
57  private static final String subContext = "trashcan";
58
59  private static final Enumeration<String, String> items = new Enumeration<String, String>();
60  static
61  {
62    for (Item item : Metadata.getRemovableItems())
63    {
64      items.add(item.name(), item.toString());
65    }
66  }
67%>
68<%
69final SessionControl sc = Base.getExistingSessionControl(pageContext, true);
70final String ID = sc.getId();
71final ItemContext cc = Base.getAndSetCurrentContext(sc, itemType, subContext, null, null);
72
73final DbControl dc = sc.newDbControl();
74ResultList<Removable> trash = null;
75try
76{
77  long totalCount = 0;
78  try
79  {
80    String filterItem = cc.getPropertyValue("type");
81    Set<Item> itemTypes = null; 
82    if (filterItem != null)
83    {
84      itemTypes = new HashSet<Item>();
85      for (String name : filterItem.split("\\|"))
86      {
87        itemTypes.add(Item.valueOf(name));
88      }
89    }
90    trash = Trashcan.getItems(dc, itemTypes, cc.getPage() * cc.getRowsPerPage(), cc.getRowsPerPage());
91    totalCount = trash.getTotalCount();
92  }
93  catch (Throwable t)
94  {
95    cc.setMessage(t.getMessage());
96  }
97  int numListed = 0;
98  JspContext jspContext = ExtensionsControl.createContext(dc, pageContext);
99  ExtensionsInvoker invoker = ExtensionsControl.useExtensions(jspContext, 
100      "net.sf.basedb.clients.web.toolbar.list.all", 
101      "net.sf.basedb.clients.web.toolbar.list.trashcan");
102  %>
103  <base:page title="Trashcan">
104  <base:head scripts="menu.js,table.js" styles="menu.css,table.css,toolbar.css">
105    <ext:scripts context="<%=jspContext%>" />
106    <ext:stylesheets context="<%=jspContext%>" />
107    <script language="JavaScript">
108    var submitPage = 'index.jsp';
109    var formId = 'trashcan';
110    function viewItem(itemId)
111    {
112      Main.openPopup('index.jsp?ID=<%=ID%>&cmd=ViewItem&item_id='+itemId, 'ViewJob', 750, 500);
113    }
114    function itemOnClick(evt, itemId)
115    {
116      viewItem(itemId);
117    }
118    function deleteAllItems()
119    {
120      if (!confirm('You are about to PERMANENTLY DELETE all item.\n This can\'t be undone. Continue?'))
121      {
122        return;
123      }
124      Main.openPopup('../../common/progress_reporter.jsp?ID=<%=ID%>&progress=trashcan&title=Empty trashcan', 'Progress', 400, 200);
125      var frm = document.forms[formId];
126      frm.action = submitPage;
127      frm.cmd.value = 'DeleteAllPermanently';
128      frm.submit();
129    }
130    function deleteItems()
131    {
132      var frm = document.forms[formId];
133      var numChecked = Forms.numChecked(frm, /item:/);
134      if (numChecked == 0)
135      {
136        alert('Please select at least one item in the list');
137        return;
138      }
139      else
140      {
141        var items = numChecked == 1 ? 'item' : 'items';
142        if (!confirm('You are about to PERMANENTLY DELETE '+numChecked+' '+items+'.\n This can\'t be undone. Continue?'))
143        {
144          return;
145        }
146      }
147      Main.openPopup('../../common/progress_reporter.jsp?ID=<%=ID%>&progress=trashcan&title=Delete items', 'Progress', 400, 200);
148      frm.action = submitPage;
149      frm.cmd.value = 'DeleteItemsPermanently';
150      frm.submit();
151    }
152    function restoreItems()
153    {
154      var frm = document.forms[formId];
155      if (Forms.numChecked(frm, /item:/) == 0)
156      {
157        alert('Please select at least one item in the list');
158        return;
159      }
160      frm.action = submitPage;
161      frm.cmd.value = 'RestoreItems';
162      frm.submit();
163    }
164    function configureColumns()
165    {
166      Table.configureColumns('<%=ID%>', formId, '<%=itemType.name()%>', '<%=(String)cc.getObject("defaultColumns")%>', '<%=subContext%>');
167    }
168    function presetOnChange()
169    {
170      Table.presetOnChange('<%=ID%>', formId, '<%=itemType.name()%>', '<%=(String)cc.getObject("defaultColumns")%>', '<%=subContext%>');
171    }
172    function showUsingItems(itemType, itemId)
173    {
174      var url = 'index.jsp?ID=<%=ID%>&cmd=ViewUsingItems&item_type='+itemType+'&item_id='+itemId;
175      location.href = url;
176    }
177    </script>
178  </base:head>
179 
180  <base:body>
181    <%
182    if (cc.getMessage() != null)
183    {
184      %>
185      <div class="error"><%=cc.getMessage()%></div>
186      <%
187      cc.setMessage(null);
188    }
189    %>
190    <tbl:table 
191      id="trashcan" 
192       
193      columns="<%=cc.getSetting("columns")%>"
194      action="index.jsp"
195      sc="<%=sc%>"
196      item="<%=itemType%>"
197      subcontext="<%=subContext%>"
198      >
199      <tbl:columndef
200        id="type"
201        property="type"
202        datatype="string"
203        title="Item type"
204        enumeration="<%=items%>"
205        filterable="true"
206        show="always"
207      />
208      <tbl:columndef 
209        id="name"
210        title="Name"
211        show="always" 
212      />
213      <tbl:columndef
214        id="id"
215        property="id"
216        datatype="int"
217        title="ID"
218        exportable="true"
219      />
220      <tbl:columndef 
221        id="description"
222        title="Description"
223      />
224      <tbl:toolbar>
225        <tbl:button
226          image="deleteall.png"
227          onclick="deleteAllItems()"
228          title="Empty trash&hellip;"
229          tooltip="Delete all items from the trashcan"
230          disabled="<%=totalCount <= 0%>"
231        />
232        <tbl:button 
233          image="delete_permanently.png"
234          onclick="deleteItems()" 
235          title="Delete permanently&hellip;" 
236          tooltip="Delete the selected items permanently" 
237          disabled="<%=totalCount <= 0%>"
238        />
239        <tbl:button 
240          image="restore.png"
241          onclick="restoreItems()" 
242          title="Restore" 
243          tooltip="Restore the selected items"
244          disabled="<%=totalCount <= 0%>"
245        />
246        <tbl:button 
247          image="columns.png" 
248          onclick="configureColumns()" 
249          title="Columns&hellip;" 
250          tooltip="Show, hide and re-order columns" 
251        />
252        <ext:render extensions="<%=invoker%>" context="<%=jspContext%>" 
253          wrapper="<%=new PrefixSuffixRenderer(jspContext, "<td>", "</td>") %>"/>
254      </tbl:toolbar>
255      <tbl:navigator
256        page="<%=cc.getPage()%>" 
257        rowsperpage="<%=cc.getRowsPerPage()%>" 
258        totalrows="<%=trash == null ? 0 : trash.getTotalCount()%>"
259      />
260      <tbl:data>
261        <tbl:headers>
262          <tbl:headerrow>
263            <tbl:header colspan="3" />
264            <tbl:columnheaders />
265          </tbl:headerrow>
266          <tbl:headerrow>
267            <tbl:header subclass="index" />
268            <tbl:header 
269              subclass="check" 
270              ><base:icon 
271                image="check_uncheck.png" 
272                tooltip="Check/uncheck all" 
273                onclick="Forms.checkUncheck(document.forms[formId])" 
274              /></tbl:header>
275            <tbl:header 
276              subclass="icons" 
277              />
278            <tbl:propertyfilter />
279          </tbl:headerrow>
280        </tbl:headers>
281        <tbl:rows>
282          <%
283          int index = cc.getPage()*cc.getRowsPerPage();
284          if (trash != null)
285          {
286            for (Removable item : trash)
287            {
288              BasicItem basicItem = (BasicItem)item;
289              boolean isUsed = basicItem.isUsed();
290              int itemId = item.getId();
291              String name = "";
292              String description = "";
293              if (item instanceof File)
294              {
295                File file = (File)item;
296                name = file.getPath().toString();
297                description = file.getDescription();
298              }
299              else if (item instanceof Directory)
300              {
301                Directory dir = (Directory)item;
302                name = dir.getPath().toString();
303                description = dir.getDescription();
304              }
305              else if (item instanceof Nameable)
306              {
307                Nameable nameable = (Nameable)item;
308                name = nameable.getName();
309                description = nameable.getDescription();
310              }
311              else
312              {
313                name = item.toString();
314              }
315              String link = Base.getLink(ID, HTML.encodeTags(name), item.getType(), itemId, true);
316              index++;
317              numListed++;
318              %>
319              <tbl:row>
320                <tbl:header 
321                  clazz="index"
322                  ><%=index%></tbl:header>
323                <tbl:header 
324                  clazz="check" 
325                  ><input 
326                    type="checkbox" 
327                    name="item:<%=item.getType().name()%>" 
328                    value="<%=itemId%>"
329                  ></tbl:header>
330                <tbl:header 
331                  clazz="icons" 
332                  ><base:icon 
333                    image="used.png" 
334                    tooltip="This item is used by other items and cannot be deleted"
335                    visible="<%=isUsed%>"
336                    onclick="<%="showUsingItems('" + item.getType().name() + "', " +  itemId + ")"%>"
337                  />&nbsp;</tbl:header>
338                <tbl:cell column="type"><%=item.getType()%></tbl:cell>
339                <tbl:cell column="name"><%=link%></tbl:cell>
340                <tbl:cell column="id"><%=item.getId()%></tbl:cell>
341                <tbl:cell column="description"><%=HTML.encodeTags(description)%></tbl:cell>
342              </tbl:row>
343              <%
344              }
345            }
346          %>
347          </tbl:rows>
348      </tbl:data>
349      <%
350      if (numListed == 0)
351      {
352        %>
353        <tbl:panel><%=trash == null || trash.size() == 0 ? "No items were found" : "No items on this page. Please select another page!" %></tbl:panel>
354        <%
355      }
356      else
357      {
358        %>
359        <tbl:navigator
360          page="<%=cc.getPage()%>" 
361          rowsperpage="<%=cc.getRowsPerPage()%>" 
362          totalrows="<%=trash == null ? 0 : trash.getTotalCount()%>" 
363          locked="true"
364        />
365        <%
366      }
367      %>
368    </tbl:table>
369   
370  </base:body>
371  </base:page>
372  <%
373}
374finally
375{
376  if (dc != null) dc.close();
377}
378%>
Note: See TracBrowser for help on using the repository browser.