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