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