www/common/anytoany/list_anytoany.jsp

Code
Comments
Other
Rev Date Author Line
2396 19 Jun 06 nicklas 1 <%-- $Id$
2396 19 Jun 06 nicklas 2   ------------------------------------------------------------------
3675 16 Aug 07 jari 3   Copyright (C) 2006 Nicklas Nordborg
2396 19 Jun 06 nicklas 4
2396 19 Jun 06 nicklas 5   This file is part of BASE - BioArray Software Environment.
2396 19 Jun 06 nicklas 6   Available at http://base.thep.lu.se/
2396 19 Jun 06 nicklas 7
2396 19 Jun 06 nicklas 8   BASE is free software; you can redistribute it and/or
2396 19 Jun 06 nicklas 9   modify it under the terms of the GNU General Public License
4476 05 Sep 08 jari 10   as published by the Free Software Foundation; either version 3
2396 19 Jun 06 nicklas 11   of the License, or (at your option) any later version.
2396 19 Jun 06 nicklas 12
2396 19 Jun 06 nicklas 13   BASE is distributed in the hope that it will be useful,
2396 19 Jun 06 nicklas 14   but WITHOUT ANY WARRANTY; without even the implied warranty of
2396 19 Jun 06 nicklas 15   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
2396 19 Jun 06 nicklas 16   GNU General Public License for more details.
2396 19 Jun 06 nicklas 17
2396 19 Jun 06 nicklas 18   You should have received a copy of the GNU General Public License
4510 11 Sep 08 jari 19   along with BASE. If not, see <http://www.gnu.org/licenses/>.
2396 19 Jun 06 nicklas 20   ------------------------------------------------------------------
2396 19 Jun 06 nicklas 21
2396 19 Jun 06 nicklas 22   @author Nicklas
2396 19 Jun 06 nicklas 23   @version 2.0
2396 19 Jun 06 nicklas 24 --%>
5426 24 Sep 10 nicklas 25 <%@ page pageEncoding="UTF-8" session="false"
2396 19 Jun 06 nicklas 26   import="net.sf.basedb.core.SessionControl"
2396 19 Jun 06 nicklas 27   import="net.sf.basedb.core.DbControl"
2396 19 Jun 06 nicklas 28   import="net.sf.basedb.core.Item"
2396 19 Jun 06 nicklas 29   import="net.sf.basedb.core.Permission"
2396 19 Jun 06 nicklas 30   import="net.sf.basedb.core.BasicItem"
2396 19 Jun 06 nicklas 31   import="net.sf.basedb.core.AnyToAny"
2396 19 Jun 06 nicklas 32   import="net.sf.basedb.core.Nameable"
6282 27 May 13 nicklas 33   import="net.sf.basedb.core.ItemSubtype"
6282 27 May 13 nicklas 34   import="net.sf.basedb.core.Subtypable"
7314 29 Mar 17 nicklas 35   import="net.sf.basedb.core.Removable"
2396 19 Jun 06 nicklas 36   import="net.sf.basedb.core.File"
2396 19 Jun 06 nicklas 37   import="net.sf.basedb.core.ItemQuery"
4942 20 May 09 nicklas 38   import="net.sf.basedb.core.ItemContext"
2396 19 Jun 06 nicklas 39   import="net.sf.basedb.core.ItemResultList"
2396 19 Jun 06 nicklas 40   import="net.sf.basedb.core.PermissionDeniedException"
3725 12 Sep 07 jari 41   import="net.sf.basedb.core.ItemNotFoundException"
2396 19 Jun 06 nicklas 42   import="net.sf.basedb.core.query.Orders"
2396 19 Jun 06 nicklas 43   import="net.sf.basedb.core.query.Hql"
7440 25 Jan 18 nicklas 44   import="net.sf.basedb.core.plugin.GuiContext"
7440 25 Jan 18 nicklas 45   import="net.sf.basedb.util.Values"
7440 25 Jan 18 nicklas 46   import="net.sf.basedb.util.extensions.ExtensionsInvoker"
2396 19 Jun 06 nicklas 47   import="net.sf.basedb.clients.web.Base"
2396 19 Jun 06 nicklas 48   import="net.sf.basedb.clients.web.util.HTML"
7440 25 Jan 18 nicklas 49   import="net.sf.basedb.clients.web.extensions.ExtensionsControl"
7440 25 Jan 18 nicklas 50   import="net.sf.basedb.clients.web.extensions.JspContext"
7604 25 Feb 19 nicklas 51   import="net.sf.basedb.clients.web.extensions.toolbar.ButtonAction" 
7440 25 Jan 18 nicklas 52   import="net.sf.basedb.clients.web.extensions.toolbar.ToolbarUtil"
7604 25 Feb 19 nicklas 53   import="net.sf.basedb.clients.web.extensions.list.ListColumnAction"
7440 25 Jan 18 nicklas 54   import="net.sf.basedb.clients.web.extensions.list.ListColumnUtil"
7761 27 Nov 19 nicklas 55   import="net.sf.basedb.clients.web.extensions.fileviewer.FileViewerContext"
7761 27 Nov 19 nicklas 56   import="net.sf.basedb.clients.web.extensions.fileviewer.FileViewerUtil"
7440 25 Jan 18 nicklas 57   import="net.sf.basedb.clients.web.extensions.renderer.PrefixSuffixRenderer"
2396 19 Jun 06 nicklas 58   import="java.util.List"
2396 19 Jun 06 nicklas 59 %>
2396 19 Jun 06 nicklas 60 <%@ taglib prefix="base" uri="/WEB-INF/base.tld" %>
2396 19 Jun 06 nicklas 61 <%@ taglib prefix="tbl" uri="/WEB-INF/table.tld" %>
7440 25 Jan 18 nicklas 62 <%@ taglib prefix="ext" uri="/WEB-INF/extensions.tld" %>
2396 19 Jun 06 nicklas 63 <%
2396 19 Jun 06 nicklas 64 String root = request.getContextPath() + "/";
2396 19 Jun 06 nicklas 65 final SessionControl sc = Base.getExistingSessionControl(pageContext, true);
2396 19 Jun 06 nicklas 66 final String ID = sc.getId();
2396 19 Jun 06 nicklas 67 final Item itemType = Item.valueOf(request.getParameter("item_type"));
2396 19 Jun 06 nicklas 68 final int itemId = Values.getInt(request.getParameter("item_id"));
2396 19 Jun 06 nicklas 69 final float scale = Base.getScale(sc);
7954 12 May 21 nicklas 70 final DbControl dc = sc.newDbControl(":List any-to-any links");
4942 20 May 09 nicklas 71 final ItemContext cc = sc.getCurrentContext(itemType);
4942 20 May 09 nicklas 72 String title = Values.getString(request.getParameter("title"), "Related items");
2396 19 Jun 06 nicklas 73
2396 19 Jun 06 nicklas 74 try
2396 19 Jun 06 nicklas 75 {
2396 19 Jun 06 nicklas 76   final BasicItem item = itemType.getById(dc, itemId);
6284 30 May 13 nicklas 77   final boolean createPermission = item.hasPermission(Permission.WRITE);
6284 30 May 13 nicklas 78   final boolean deletePermission = createPermission;
6284 30 May 13 nicklas 79   
2396 19 Jun 06 nicklas 80   ItemQuery<AnyToAny> query = AnyToAny.getLinksFrom(item);
2396 19 Jun 06 nicklas 81   query.order(Orders.asc(Hql.property("name")));
2396 19 Jun 06 nicklas 82   ItemResultList<AnyToAny> links = query.list(dc);
4942 20 May 09 nicklas 83   long count = links.getTotalCount();
7440 25 Jan 18 nicklas 84   
7440 25 Jan 18 nicklas 85   JspContext jspContext = ExtensionsControl.createContext(dc, pageContext, new GuiContext(Item.ANYTOANY, GuiContext.Type.LIST), item);
7604 25 Feb 19 nicklas 86   ExtensionsInvoker<ButtonAction> invoker = ToolbarUtil.useExtensions(jspContext);
7604 25 Feb 19 nicklas 87   ExtensionsInvoker<ListColumnAction<AnyToAny,?>> columnsInvoker = ListColumnUtil.useExtensions(jspContext);
7761 27 Nov 19 nicklas 88   FileViewerContext fileContext = FileViewerContext.anyToAny(item);
7855 19 Oct 20 nicklas 89   FileViewerUtil fileViewer = FileViewerUtil.getOrCreate(jspContext, fileContext);
2396 19 Jun 06 nicklas 90   %>
2396 19 Jun 06 nicklas 91   <base:page type="include">
6402 29 Jan 14 nicklas 92   <base:head scripts="/common/anytoany/list.js" />
2396 19 Jun 06 nicklas 93   <base:body>
7761 27 Nov 19 nicklas 94     <ext:scripts context="<%=jspContext%>" />
5935 26 Jan 12 nicklas 95     <base:section 
5935 26 Jan 12 nicklas 96       id="anytoany" 
5935 26 Jan 12 nicklas 97       title="<%=title + " (" + (count) +")"%>"
5935 26 Jan 12 nicklas 98       context="<%=cc%>">
6284 30 May 13 nicklas 99
6282 27 May 13 nicklas 100         <tbl:table
6282 27 May 13 nicklas 101           id="links"
6282 27 May 13 nicklas 102           columns="all"
6284 30 May 13 nicklas 103           sc="<%=sc%>"
6284 30 May 13 nicklas 104           action="<%=root + "common/anytoany/index.jsp"%>"
6282 27 May 13 nicklas 105           >
6282 27 May 13 nicklas 106           <tbl:columndef 
6282 27 May 13 nicklas 107             id="name"
6282 27 May 13 nicklas 108             title="Name"
6282 27 May 13 nicklas 109           />
6282 27 May 13 nicklas 110           <tbl:columndef 
6282 27 May 13 nicklas 111             id="item"
6282 27 May 13 nicklas 112             title="Item"
6282 27 May 13 nicklas 113           />
6282 27 May 13 nicklas 114           <tbl:columndef 
6282 27 May 13 nicklas 115             id="description"
6282 27 May 13 nicklas 116             title="Description"
6282 27 May 13 nicklas 117           />
7440 25 Jan 18 nicklas 118           <tbl:columndef 
7440 25 Jan 18 nicklas 119             id="xt-columns" 
7440 25 Jan 18 nicklas 120             extensions="<%=columnsInvoker%>" 
7440 25 Jan 18 nicklas 121             jspcontext="<%=jspContext%>" 
7440 25 Jan 18 nicklas 122           />
6284 30 May 13 nicklas 123           <tbl:toolbar
6604 18 Nov 14 nicklas 124             subclass="topborder leftborder rightborder bg-filled-50"
6284 30 May 13 nicklas 125             >
6284 30 May 13 nicklas 126             <tbl:button 
6284 30 May 13 nicklas 127               id="btnNewLink"
6284 30 May 13 nicklas 128               disabled="<%=!createPermission%>" 
6284 30 May 13 nicklas 129               image="add.png" 
6284 30 May 13 nicklas 130               title="Add link&hellip;" 
6284 30 May 13 nicklas 131               tooltip="<%=createPermission ? "Create new link" : "You do not have permission to create links"%>" 
6285 30 May 13 nicklas 132               data-item-type="ANYTOANY"
6285 30 May 13 nicklas 133               data-extra-url="<%="&from_type="+itemType.name() + "&from_id="+itemId %>"
6284 30 May 13 nicklas 134             />
6284 30 May 13 nicklas 135             <tbl:button 
6284 30 May 13 nicklas 136               id="btnUnlinkItems"
6284 30 May 13 nicklas 137               image="delete_permanently.png"
6284 30 May 13 nicklas 138               title="Unlink&hellip;" 
6284 30 May 13 nicklas 139               tooltip="Unlink the selected items"
6284 30 May 13 nicklas 140               visible="<%=count > 0 %>"
6284 30 May 13 nicklas 141               disabled="<%=!deletePermission%>"
6284 30 May 13 nicklas 142             />
7440 25 Jan 18 nicklas 143             <ext:render extensions="<%=invoker%>" context="<%=jspContext%>" 
7604 25 Feb 19 nicklas 144               wrapper="<%=new PrefixSuffixRenderer<ButtonAction>(jspContext, "<td>", "</td>") %>"/>
6284 30 May 13 nicklas 145           </tbl:toolbar>
6282 27 May 13 nicklas 146           <tbl:data>
6288 05 Jun 13 nicklas 147             <tbl:headers style="<%=links.size() == 0 ? "display: none;" : "" %>">
6282 27 May 13 nicklas 148               <tbl:headerrow>
6284 30 May 13 nicklas 149               <tbl:header subclass="index" />
6284 30 May 13 nicklas 150               <tbl:header 
6284 30 May 13 nicklas 151                 subclass="check"
6284 30 May 13 nicklas 152                 ><base:icon 
6834 08 Apr 15 nicklas 153                   subclass="link table-check"
6284 30 May 13 nicklas 154                   image="check_uncheck.png" 
6834 08 Apr 15 nicklas 155                   tooltip="Toggle all (use CTRL, ALT or SHIFT to check/uncheck)" 
6284 30 May 13 nicklas 156                 /></tbl:header>
6282 27 May 13 nicklas 157                 <tbl:columnheaders />
6282 27 May 13 nicklas 158               </tbl:headerrow>
7913 22 Feb 21 nicklas 159               <tbl:columnsubtitles />
6282 27 May 13 nicklas 160             </tbl:headers>
6282 27 May 13 nicklas 161             <tbl:rows>
6282 27 May 13 nicklas 162             <%
6284 30 May 13 nicklas 163             int index = 0;
6282 27 May 13 nicklas 164             for (AnyToAny ata : links)
2396 19 Jun 06 nicklas 165             {
6284 30 May 13 nicklas 166               index++;
6282 27 May 13 nicklas 167               String name = HTML.encodeTags(ata.getName());
6284 30 May 13 nicklas 168               int ataId = ata.getId();
6282 27 May 13 nicklas 169               BasicItem to = null;
6282 27 May 13 nicklas 170               String subtype = ata.getToType().toString();
6282 27 May 13 nicklas 171               boolean readTo = true;
6282 27 May 13 nicklas 172               boolean missingTo = false;
6282 27 May 13 nicklas 173               try
6282 27 May 13 nicklas 174               {
6282 27 May 13 nicklas 175                 to = ata.getTo();
6282 27 May 13 nicklas 176               }
6282 27 May 13 nicklas 177               catch (PermissionDeniedException ex)
6282 27 May 13 nicklas 178               {
6282 27 May 13 nicklas 179                 readTo = false;
6282 27 May 13 nicklas 180               }
6282 27 May 13 nicklas 181               catch (ItemNotFoundException ex)
6282 27 May 13 nicklas 182               {
6282 27 May 13 nicklas 183                 missingTo = true;
6282 27 May 13 nicklas 184               }
6282 27 May 13 nicklas 185               
6282 27 May 13 nicklas 186               String toLink = "";
7761 27 Nov 19 nicklas 187               if (to instanceof Nameable)
6282 27 May 13 nicklas 188               {
6282 27 May 13 nicklas 189                 Nameable nameable = (Nameable)to;
6282 27 May 13 nicklas 190                 toLink = Base.getLinkedName(ID, nameable, false, true);
6282 27 May 13 nicklas 191               }
6282 27 May 13 nicklas 192               else if (!readTo)
6282 27 May 13 nicklas 193               {
6282 27 May 13 nicklas 194                 toLink = "<i>- denied -</i>";
6282 27 May 13 nicklas 195               }
6282 27 May 13 nicklas 196               else if (missingTo)
6282 27 May 13 nicklas 197               {
6282 27 May 13 nicklas 198                 toLink = "<i>- missing -</i> (" + ata.getToType().toString() + "; id=" + ata.getToId() + ")";
6282 27 May 13 nicklas 199               }
6282 27 May 13 nicklas 200               else if (to == null)
6282 27 May 13 nicklas 201               {
6282 27 May 13 nicklas 202                 toLink = "<i>- none -</i>";
6282 27 May 13 nicklas 203               }
6282 27 May 13 nicklas 204               else
6282 27 May 13 nicklas 205               {
6282 27 May 13 nicklas 206                 toLink = Base.getLink(ID, to.toString(), to.getType(), to.getId(), true);
6282 27 May 13 nicklas 207               }
7761 27 Nov 19 nicklas 208               if (to instanceof File)
7761 27 Nov 19 nicklas 209               {
7761 27 Nov 19 nicklas 210                 File toFile = (File)to;
7761 27 Nov 19 nicklas 211                 fileContext.setCurrentAnyToAny(toFile, ata);
7761 27 Nov 19 nicklas 212                 toLink += " " + fileViewer.renderAsString();
7761 27 Nov 19 nicklas 213               }
6282 27 May 13 nicklas 214               if (to instanceof Subtypable)
6282 27 May 13 nicklas 215               {
6282 27 May 13 nicklas 216                 try
6282 27 May 13 nicklas 217                 {
6282 27 May 13 nicklas 218                   ItemSubtype st = ((Subtypable)to).getItemSubtype();
6282 27 May 13 nicklas 219                   if (st != null) subtype = st.getName();
6282 27 May 13 nicklas 220                 }
6282 27 May 13 nicklas 221                 catch (RuntimeException ex)
6282 27 May 13 nicklas 222                 {}
6282 27 May 13 nicklas 223               }
7314 29 Mar 17 nicklas 224               boolean isRemoved = false;
7314 29 Mar 17 nicklas 225               if (to instanceof Removable)
7314 29 Mar 17 nicklas 226               {
7314 29 Mar 17 nicklas 227                 isRemoved = ((Removable)to).isRemoved();
7314 29 Mar 17 nicklas 228               }
6282 27 May 13 nicklas 229               toLink += " <span class=\"itemsubtype\">("+HTML.encodeTags(subtype)+")</span>";
6282 27 May 13 nicklas 230               %>
6282 27 May 13 nicklas 231               <tbl:row>
6284 30 May 13 nicklas 232                 <tbl:header 
6284 30 May 13 nicklas 233                   clazz="index"
6284 30 May 13 nicklas 234                   ><%=index%></tbl:header>
6284 30 May 13 nicklas 235                 <tbl:header 
6284 30 May 13 nicklas 236                   clazz="check" 
6284 30 May 13 nicklas 237                   ><input 
6284 30 May 13 nicklas 238                     type="checkbox" 
6284 30 May 13 nicklas 239                     name="<%=ataId%>" 
6284 30 May 13 nicklas 240                     value="<%=ataId%>" 
6284 30 May 13 nicklas 241                     title="<%=name%>"
6284 30 May 13 nicklas 242                   ></tbl:header>
6282 27 May 13 nicklas 243                 <tbl:cell column="name"><%=Base.getLinkedName(ID, ata, false, true)%></tbl:cell>
7314 29 Mar 17 nicklas 244                 <tbl:cell column="item"><base:icon image="deleted.png"
7314 29 Mar 17 nicklas 245                   tooltip="This item has been scheduled for deletion"
7314 29 Mar 17 nicklas 246                   visible="<%=isRemoved%>" />
7314 29 Mar 17 nicklas 247                   <%=toLink%></tbl:cell>
6282 27 May 13 nicklas 248                 <tbl:cell column="description"><%=HTML.niceFormat(ata.getDescription())%></tbl:cell>
7440 25 Jan 18 nicklas 249                 <tbl:xt-cells dc="<%=dc%>" item="<%=ata%>">
7440 25 Jan 18 nicklas 250                   <tbl:cell column="xt-columns" />
7440 25 Jan 18 nicklas 251                 </tbl:xt-cells>
6282 27 May 13 nicklas 252               </tbl:row>
6282 27 May 13 nicklas 253               <%
2396 19 Jun 06 nicklas 254             }
6284 30 May 13 nicklas 255             if (count == 0)
6284 30 May 13 nicklas 256             {
6284 30 May 13 nicklas 257               %>
6604 18 Nov 14 nicklas 258               <tbl:panel>
6284 30 May 13 nicklas 259                 There are no other items related to this
6284 30 May 13 nicklas 260                 <%=itemType.toString().toLowerCase() %>.
6284 30 May 13 nicklas 261               </tbl:panel>
6284 30 May 13 nicklas 262               <%
6284 30 May 13 nicklas 263             }
2396 19 Jun 06 nicklas 264             %>
6282 27 May 13 nicklas 265             </tbl:rows>
6282 27 May 13 nicklas 266           </tbl:data>
6282 27 May 13 nicklas 267         </tbl:table>
5935 26 Jan 12 nicklas 268     </base:section>
2396 19 Jun 06 nicklas 269   </base:body>
2396 19 Jun 06 nicklas 270   </base:page>
2396 19 Jun 06 nicklas 271   <%
2396 19 Jun 06 nicklas 272 }
2396 19 Jun 06 nicklas 273 finally
2396 19 Jun 06 nicklas 274 {
2396 19 Jun 06 nicklas 275   if (dc != null) dc.close();
2396 19 Jun 06 nicklas 276 }
2396 19 Jun 06 nicklas 277
2396 19 Jun 06 nicklas 278 %>