source: trunk/www/views/reporterlists/list_reporterlists.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: 16.2 KB
Line 
1<%-- $Id: list_reporterlists.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, 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.Item"
30  import="net.sf.basedb.core.ReporterList"
31  import="net.sf.basedb.core.ItemQuery"
32  import="net.sf.basedb.core.ItemResultIterator"
33  import="net.sf.basedb.core.ItemContext"
34  import="net.sf.basedb.core.Nameable"
35  import="net.sf.basedb.core.Permission"
36  import="net.sf.basedb.core.RawDataTypes"
37  import="net.sf.basedb.core.RawDataType"
38  import="net.sf.basedb.core.PluginDefinition"
39  import="net.sf.basedb.core.plugin.GuiContext"
40  import="net.sf.basedb.core.plugin.Plugin"
41  import="net.sf.basedb.util.Enumeration"
42  import="net.sf.basedb.util.ShareableUtil"
43  import="net.sf.basedb.clients.web.Base"
44  import="net.sf.basedb.clients.web.ModeInfo"
45  import="net.sf.basedb.clients.web.PermissionUtil"
46  import="net.sf.basedb.clients.web.util.HTML"
47  import="net.sf.basedb.util.Values"
48  import="net.sf.basedb.util.formatter.Formatter"
49  import="net.sf.basedb.clients.web.formatter.FormatterFactory"
50  import="net.sf.basedb.clients.web.extensions.ExtensionsControl"
51  import="net.sf.basedb.clients.web.extensions.JspContext"
52  import="net.sf.basedb.clients.web.extensions.renderer.PrefixSuffixRenderer"
53  import="net.sf.basedb.clients.web.extensions.toolbar.ToolbarUtil"
54  import="net.sf.basedb.util.extensions.ExtensionsInvoker"
55  import="java.util.Date"
56  import="java.util.Iterator"
57  import="java.util.List"
58  import="java.util.Map"
59%>
60<%@ taglib prefix="base" uri="/WEB-INF/base.tld" %>
61<%@ taglib prefix="tbl" uri="/WEB-INF/table.tld" %>
62<%@ taglib prefix="ext" uri="/WEB-INF/extensions.tld" %>
63<%!
64  private static final Item itemType = Item.REPORTERLIST;
65  private static final GuiContext guiContext = new GuiContext(itemType, GuiContext.Type.LIST);
66%>
67<%
68final SessionControl sc = Base.getExistingSessionControl(pageContext, Permission.DENIED, itemType);
69final String ID = sc.getId();
70final boolean createPermission = sc.hasPermission(Permission.CREATE, itemType);
71final ItemContext cc = Base.getAndSetCurrentContext(sc, itemType, null, null);
72
73final ModeInfo mode = ModeInfo.get(request.getParameter("mode"));
74final String callback = request.getParameter("callback");
75final String title = mode.generateTitle("reporter list", "reporter lists");
76final DbControl dc = sc.newDbControl();
77ItemResultIterator<ReporterList> reporterLists = null;
78try
79{
80  Formatter<Date> dateFormatter = FormatterFactory.getDateFormatter(sc);
81  Map<Plugin.MainType, Integer> pluginCount = PluginDefinition.countPlugins(dc, guiContext);
82  try
83  {
84    final ItemQuery<ReporterList> query = Base.getConfiguredQuery(dc, cc, true, ReporterList.getQuery(), mode);
85    reporterLists = query.iterate(dc);
86  }
87  catch (Throwable t)
88  {
89    cc.setMessage(t.getMessage());
90  }
91  int numListed = 0;
92  JspContext jspContext = ExtensionsControl.createContext(dc, pageContext, guiContext, null);
93  ExtensionsInvoker invoker = ToolbarUtil.useExtensions(jspContext);
94  %>
95  <base:page title="<%=title==null ? "Reporter lists" : title%>" type="<%=mode.getPageType()%>">
96  <base:head scripts="menu.js,table.js" styles="menu.css,table.css,toolbar.css">
97    <ext:scripts context="<%=jspContext%>" />
98    <ext:stylesheets context="<%=jspContext%>" />
99    <script language="JavaScript">
100    var submitPage = 'index.jsp';
101    var formId = 'reporterLists';
102    function newItem()
103    {
104      var controller = Main.getController('REPORTERLIST');
105      Table.submitToPopup(formId, 'NewItem', controller.width, controller.height);
106    }
107    function editItem(itemId)
108    {
109      Main.viewOrEditItem('<%=ID%>', '<%=itemType.name()%>', itemId, true);
110    }
111    function viewItem(itemId)
112    {
113      Main.viewOrEditItem('<%=ID%>', '<%=itemType.name()%>', itemId, false);
114    }
115    function itemOnClick(evt, itemId)
116    {
117      Table.itemOnClick(formId, evt, itemId, '<%=mode.getName()%>', viewItem, editItem, returnSelected);
118    }
119    function deleteItems()
120    {
121      var frm = document.forms[formId];
122      if (Forms.numChecked(frm) == 0)
123      {
124        alert('Please select at least one item in the list');
125        return;
126      }
127      frm.action = submitPage;
128      frm.cmd.value = 'DeleteItems';
129      frm.submit();
130    }
131    function restoreItems()
132    {
133      var frm = document.forms[formId];
134      if (Forms.numChecked(frm) == 0)
135      {
136        alert('Please select at least one item in the list');
137        return;
138      }
139      frm.action = submitPage;
140      frm.cmd.value = 'RestoreItems';
141      frm.submit();
142    }
143    function deleteItemPermanently(itemId)
144    {
145      Main.deleteItemPermanently('<%=ID%>', true, '<%=itemType.name()%>', itemId);
146    }
147    function setOwner()
148    {
149      Table.setOwnerOfItems(submitPage, '<%=ID%>', formId, '<%=itemType.name()%>', 'SetOwnerOfItems');
150    }
151    function shareItem(itemId)
152    {
153      Main.openPopup('index.jsp?ID=<%=ID%>&cmd=ShareItem&item_id='+itemId, 'ShareReporterLists', 600, 400);
154    }
155    function shareItems()
156    {
157      Table.shareItems(submitPage, '<%=ID%>', formId, '<%=itemType.name()%>', 'ShareItems');
158    }
159    function configureColumns()
160    {
161      Table.configureColumns('<%=ID%>', formId, '<%=itemType.name()%>', '<%=(String)cc.getObject("defaultColumns")%>');
162    }
163    function runPlugin(cmd)
164    {
165      Table.submitToPopup(formId, cmd, 750, 500);
166    }
167    function returnSelected()
168    {
169      Table.returnSelected(formId, <%=callback != null ? "window.opener."+callback : "null" %>);
170      window.close();
171    }
172    function presetOnChange()
173    {
174      Table.presetOnChange('<%=ID%>', formId, '<%=itemType.name()%>', '<%=(String)cc.getObject("defaultColumns")%>');
175    }
176    </script>
177  </base:head>
178 
179  <base:body>
180    <%
181    if (cc.getMessage() != null)
182    {
183      %>
184      <div class="error"><%=cc.getMessage()%></div>
185      <%
186      cc.setMessage(null);
187    }
188    %>
189    <tbl:table 
190      id="reporterLists" 
191       
192      columns="<%=cc.getSetting("columns")%>"
193      sortby="<%=cc.getSortProperty()%>" 
194      direction="<%=cc.getSortDirection()%>"
195      title="<%=title%>"
196      action="index.jsp"
197      sc="<%=sc%>"
198      item="<%=itemType%>"
199      >
200      <tbl:hidden 
201        name="mode" 
202        value="<%=mode.getName()%>" 
203      />
204      <tbl:hidden 
205        name="callback" 
206        value="<%=callback%>" 
207        skip="<%=callback == null%>" 
208      />
209      <tbl:columndef 
210        id="name"
211        property="name"
212        datatype="string"
213        title="Name"
214        sortable="true" 
215        filterable="true"
216        exportable="true"
217        show="always" 
218      />
219      <tbl:columndef 
220        id="id"
221        clazz="uniquecol"
222        property="id"
223        datatype="int"
224        title="ID"
225        sortable="true"
226        filterable="true"
227        exportable="true"
228      />
229      <tbl:columndef 
230        id="entryDate"
231        property="entryDate"
232        datatype="date"
233        title="Registered"
234        sortable="true" 
235        filterable="true"
236        exportable="true"
237        formatter="<%=dateFormatter%>"
238      />
239      <tbl:columndef 
240        id="externalId"
241        property="externalId"
242        datatype="string"
243        title="External ID"
244        sortable="true" 
245        filterable="true"
246        exportable="true"
247      />
248      <tbl:columndef 
249        id="numReporters"
250        property="size"
251        datatype="int"
252        title="Size"
253        sortable="true" 
254        filterable="true"
255        exportable="true"
256      />
257      <tbl:columndef 
258        id="owner"
259        property="owner.name"
260        datatype="string"
261        title="Owner"
262        sortable="true" 
263        filterable="true"
264        exportable="true"
265      />
266      <tbl:columndef 
267        id="experiment"
268        property="experiment"
269        datatype="string"
270        title="Experiment"
271        sortable="true" 
272        filterable="true"
273        exportable="true"
274      />
275      <tbl:columndef 
276        id="description"
277        property="description"
278        datatype="string"
279        title="Description" 
280        sortable="true" 
281        filterable="true" 
282        exportable="true"
283      />
284      <tbl:columndef
285        id="permission"
286        title="Permission"
287      />
288      <tbl:columndef
289        id="sharedTo"
290        title="Shared to"
291        filterable="true"
292        filterproperty="!sharedTo.name"
293        datatype="string"
294      />
295      <tbl:toolbar
296        visible="<%=mode.hasToolbar()%>"
297        >
298        <tbl:button 
299          disabled="<%=!createPermission%>" 
300          image="new.png" 
301          onclick="newItem()" 
302          title="New&hellip;" 
303          tooltip="<%=createPermission ? "Create new reporter list" : "You do not have permission to create reporter lists"%>" 
304        />
305        <tbl:button 
306          image="delete.png"
307          onclick="deleteItems()" 
308          title="Delete" 
309          tooltip="Delete the selected items" 
310        />
311        <tbl:button 
312          image="restore.png"
313          onclick="restoreItems()" 
314          title="Restore" 
315          tooltip="Restore the selected (deleted) items"
316        />
317        <tbl:button 
318          image="share.png"
319          onclick="shareItems()" 
320          title="Share&hellip;" 
321          tooltip="Share the selected items"
322        />
323        <tbl:button 
324          image="take_ownership.png"
325          onclick="setOwner()" 
326          title="Set owner&hellip;"
327          tooltip="Change owner of the selected items"
328        />
329        <tbl:button 
330          image="columns.png" 
331          onclick="configureColumns()" 
332          title="Columns&hellip;" 
333          tooltip="Show, hide and re-order columns" 
334        />
335        <tbl:button 
336          image="import.png" 
337          onclick="runPlugin('ImportItems')" 
338          title="Import&hellip;" 
339          tooltip="Import data" 
340          visible="<%=pluginCount.containsKey(Plugin.MainType.IMPORT)%>"
341        />
342        <tbl:button 
343          image="export.png" 
344          onclick="runPlugin('ExportItems')" 
345          title="Export&hellip;" 
346          tooltip="Export data" 
347          visible="<%=pluginCount.containsKey(Plugin.MainType.EXPORT)%>"
348        />
349        <tbl:button 
350          image="runplugin.png" 
351          onclick="runPlugin('RunListPlugin')" 
352          title="Run plugin&hellip;" 
353          tooltip="Run a plugin" 
354          visible="<%=pluginCount.containsKey(Plugin.MainType.OTHER)%>"
355        />
356        <ext:render extensions="<%=invoker%>" context="<%=jspContext%>" 
357          wrapper="<%=new PrefixSuffixRenderer(jspContext, "<td>", "</td>") %>"/>
358      </tbl:toolbar>
359      <tbl:navigator
360        page="<%=cc.getPage()%>" 
361        rowsperpage="<%=cc.getRowsPerPage()%>" 
362        totalrows="<%=reporterLists == null ? 0 : reporterLists.getTotalCount()%>" 
363        visible="<%=mode.hasNavigator()%>"
364      />
365      <tbl:data>
366        <tbl:headers>
367          <tbl:headerrow>
368            <tbl:header colspan="3" />
369            <tbl:columnheaders />
370          </tbl:headerrow>
371          <tbl:headerrow>
372            <tbl:header subclass="index" />
373            <tbl:header 
374              subclass="check" 
375              visible="<%=mode.hasCheck()%>"
376              ><base:icon 
377                image="check_uncheck.png" 
378                tooltip="Check/uncheck all" 
379                onclick="Forms.checkUncheck(document.forms[formId])" 
380              /></tbl:header>
381            <tbl:header 
382              subclass="check" 
383              visible="<%=mode.hasRadio()%>"
384              />
385            <tbl:header 
386              subclass="icons" 
387              visible="<%=mode.hasIcons()%>"
388              />
389            <tbl:propertyfilter />
390          </tbl:headerrow>
391        </tbl:headers>
392        <tbl:rows>
393          <%
394          int index = cc.getPage()*cc.getRowsPerPage();
395          int selectedItemId = cc.getId();
396          if (reporterLists != null)
397          {           
398            while (reporterLists.hasNext())
399            {
400              ReporterList item = reporterLists.next();
401              int itemId = item.getId();
402              String openSharePopup = "shareItem("+itemId+")";
403              String deletePermanently = "deleteItemPermanently("+itemId+")";
404              boolean deletePermission = item.hasPermission(Permission.DELETE);
405              boolean sharePermission = item.hasPermission(Permission.SET_PERMISSION);
406              boolean writePermission = item.hasPermission(Permission.WRITE);
407              String tooltip = mode.isSelectionMode() ?
408                  "Select this item" : "View this item" + (writePermission ? " (use CTRL, ALT or SHIFT to edit)" : "");
409              String name = HTML.encodeTags(item.getName());
410              index++;
411              numListed++;
412              %>
413              <tbl:row>
414                <tbl:header 
415                  clazz="index"
416                  ><%=index%></tbl:header>
417                <tbl:header 
418                  clazz="check" 
419                  visible="<%=mode.hasCheck()%>"
420                  ><input 
421                    type="checkbox" 
422                    name="<%=itemId%>" 
423                    value="<%=itemId%>" 
424                    title="<%=name%>" 
425                    <%=cc.getSelected().contains(itemId) ? "checked" : ""%> 
426                  ></tbl:header>
427                <tbl:header 
428                  clazz="check" 
429                  visible="<%=mode.hasRadio()%>"
430                  ><input 
431                    type="radio" 
432                    name="item_id" 
433                    value="<%=itemId%>" 
434                    title="<%=name%>" 
435                    <%=selectedItemId == itemId ? "checked" : ""%>
436                  ></tbl:header>
437                <tbl:header 
438                  clazz="icons" 
439                  visible="<%=mode.hasIcons()%>"
440                  ><base:icon 
441                    image="deleted.png"
442                    onclick="<%=deletePermission ? deletePermanently : null%>"
443                    tooltip="This item has been scheduled for deletion" 
444                    visible="<%=item.isRemoved()%>"
445                  /><base:icon 
446                    image="shared.png" 
447                    onclick="<%=sharePermission ? openSharePopup : null%>"
448                    tooltip="This item is shared to other users, groups and/or projects" 
449                    visible="<%=item.isShared()%>"
450                  />&nbsp;</tbl:header>
451                <tbl:cell column="name"><div class="link" 
452                  onclick="itemOnClick(<%=writePermission ? "event" : null%>, <%=itemId%>)" 
453                  title="<%=tooltip%>"><%=name%></div></tbl:cell>
454                <tbl:cell column="id"><%=item.getId()%></tbl:cell>
455                <tbl:cell column="entryDate" value="<%=item.getEntryDate()%>" />
456                <tbl:cell column="owner"
457                  ><base:propertyvalue 
458                    item="<%=item%>" 
459                    property="owner"
460                    enableEditLink="<%=mode.hasEditLink()%>" 
461                    enablePropertyLink="<%=mode.hasPropertyLink()%>"
462                  /></tbl:cell>
463                <tbl:cell column="experiment"
464                  ><base:propertyvalue 
465                    item="<%=item%>" 
466                    property="experiment"
467                    enableEditLink="<%=mode.hasEditLink()%>" 
468                    enablePropertyLink="<%=mode.hasPropertyLink()%>"
469                  /></tbl:cell>
470                <tbl:cell column="externalId"><%=HTML.encodeTags(item.getExternalId())%></tbl:cell>
471                <tbl:cell column="numReporters"><%=item.getSize()%></tbl:cell>
472                <tbl:cell column="description"><%=HTML.encodeTags(item.getDescription())%></tbl:cell>
473                <tbl:cell column="permission"><%=PermissionUtil.getShortPermissions(item)%></tbl:cell>
474                <tbl:cell column="sharedTo">
475                  <%
476                  Iterator<Nameable> sharees = ShareableUtil.getSharedTo(dc, item).iterator();
477                  while(sharees.hasNext())
478                  {
479                    Nameable n = sharees.next();
480                    if (mode.hasPropertyLink())
481                    {
482                      out.write(Base.getLinkedName(ID, n, false, mode.hasEditLink()));
483                    }
484                    else
485                    {
486                      out.write(HTML.encodeTags(n.getName()));
487                    }
488                    out.write(sharees.hasNext() ? ", " : "");
489                  }
490                  %>
491                </tbl:cell>
492              </tbl:row>
493              <%
494              }
495            }
496          %>
497          </tbl:rows>
498      </tbl:data>
499      <%
500      if (numListed == 0)
501      {
502        %>
503        <tbl:panel><%=reporterLists == null || reporterLists.getTotalCount() == 0 ? "No reporter lists were found" : "No reporter lists on this page. Please select another page!" %></tbl:panel>
504        <%
505      }
506      else
507      {
508        %>
509        <tbl:navigator
510          page="<%=cc.getPage()%>" 
511          rowsperpage="<%=cc.getRowsPerPage()%>" 
512          totalrows="<%=reporterLists == null ? 0 : reporterLists.getTotalCount()%>" 
513          visible="<%=mode.hasNavigator()%>"
514          locked="true"
515        />
516        <%
517      }
518      %>
519    </tbl:table>
520    <base:buttongroup subclass="dialogbuttons">
521      <base:button onclick="returnSelected();" title="Ok" visible="<%=mode.hasOkButton()%>" />
522      <base:button onclick="window.close();" title="Cancel" visible="<%=mode.hasCancelButton()%>" />
523      <base:button onclick="window.close();" title="Close" visible="<%=mode.hasCloseButton()%>" />
524    </base:buttongroup>
525   
526  </base:body>
527  </base:page>
528  <%
529}
530finally
531{
532  if (reporterLists != null) reporterLists.close();
533  if (dc != null) dc.close();
534}
535%>
Note: See TracBrowser for help on using the repository browser.