www/biomaterials/kits/list_kits.jsp

Code
Comments
Other
Rev Date Author Line
6991 02 Nov 15 nicklas 1 <%-- $Id$
6991 02 Nov 15 nicklas 2   ------------------------------------------------------------------
6991 02 Nov 15 nicklas 3   Copyright (C) 2015 Nicklas Nordborg
6991 02 Nov 15 nicklas 4
6991 02 Nov 15 nicklas 5   This file is part of BASE - BioArray Software Environment.
6991 02 Nov 15 nicklas 6   Available at http://base.thep.lu.se/
6991 02 Nov 15 nicklas 7
6991 02 Nov 15 nicklas 8   BASE is free software; you can redistribute it and/or
6991 02 Nov 15 nicklas 9   modify it under the terms of the GNU General Public License
6991 02 Nov 15 nicklas 10   as published by the Free Software Foundation; either version 3
6991 02 Nov 15 nicklas 11   of the License, or (at your option) any later version.
6991 02 Nov 15 nicklas 12
6991 02 Nov 15 nicklas 13   BASE is distributed in the hope that it will be useful,
6991 02 Nov 15 nicklas 14   but WITHOUT ANY WARRANTY; without even the implied warranty of
6991 02 Nov 15 nicklas 15   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
6991 02 Nov 15 nicklas 16   GNU General Public License for more details.
6991 02 Nov 15 nicklas 17
6991 02 Nov 15 nicklas 18   You should have received a copy of the GNU General Public License
6991 02 Nov 15 nicklas 19   along with BASE. If not, see <http://www.gnu.org/licenses/>.
6991 02 Nov 15 nicklas 20   ------------------------------------------------------------------
6991 02 Nov 15 nicklas 21
6991 02 Nov 15 nicklas 22   @author Nicklas
6991 02 Nov 15 nicklas 23 --%>
6991 02 Nov 15 nicklas 24 <%@ page pageEncoding="UTF-8" session="false"
6991 02 Nov 15 nicklas 25   import="net.sf.basedb.core.SessionControl"
6991 02 Nov 15 nicklas 26   import="net.sf.basedb.core.DbControl"
6991 02 Nov 15 nicklas 27   import="net.sf.basedb.core.Item"
6991 02 Nov 15 nicklas 28   import="net.sf.basedb.core.Kit"
6991 02 Nov 15 nicklas 29   import="net.sf.basedb.core.ItemSubtype"
6991 02 Nov 15 nicklas 30   import="net.sf.basedb.core.Annotation"
6991 02 Nov 15 nicklas 31   import="net.sf.basedb.core.AnnotationType"
6991 02 Nov 15 nicklas 32   import="net.sf.basedb.core.AnnotationSet"
6991 02 Nov 15 nicklas 33   import="net.sf.basedb.core.ItemQuery"
6991 02 Nov 15 nicklas 34   import="net.sf.basedb.core.Include"
6991 02 Nov 15 nicklas 35   import="net.sf.basedb.core.ItemResultIterator"
6991 02 Nov 15 nicklas 36   import="net.sf.basedb.core.ItemResultList"
6991 02 Nov 15 nicklas 37   import="net.sf.basedb.core.ItemContext"
6991 02 Nov 15 nicklas 38   import="net.sf.basedb.core.Nameable"
6991 02 Nov 15 nicklas 39   import="net.sf.basedb.core.Permission"
6991 02 Nov 15 nicklas 40   import="net.sf.basedb.core.PluginDefinition"
6991 02 Nov 15 nicklas 41   import="net.sf.basedb.core.query.Orders"
6991 02 Nov 15 nicklas 42   import="net.sf.basedb.core.query.Hql"
6991 02 Nov 15 nicklas 43   import="net.sf.basedb.core.plugin.GuiContext"
6991 02 Nov 15 nicklas 44   import="net.sf.basedb.core.plugin.Plugin"
6991 02 Nov 15 nicklas 45   import="net.sf.basedb.core.snapshot.AnnotationLoaderUtil"
6991 02 Nov 15 nicklas 46   import="net.sf.basedb.core.snapshot.AnnotationTypeFilter"
6991 02 Nov 15 nicklas 47   import="net.sf.basedb.core.snapshot.AnnotationSnapshot"
6991 02 Nov 15 nicklas 48   import="net.sf.basedb.core.snapshot.AnnotationSetSnapshot"
6991 02 Nov 15 nicklas 49   import="net.sf.basedb.core.snapshot.SnapshotManager"
6991 02 Nov 15 nicklas 50   import="net.sf.basedb.util.Enumeration"
6991 02 Nov 15 nicklas 51   import="net.sf.basedb.util.ShareableUtil"
6991 02 Nov 15 nicklas 52   import="net.sf.basedb.clients.web.Base"
6991 02 Nov 15 nicklas 53   import="net.sf.basedb.clients.web.ModeInfo"
6991 02 Nov 15 nicklas 54   import="net.sf.basedb.clients.web.PermissionUtil"
6991 02 Nov 15 nicklas 55   import="net.sf.basedb.clients.web.util.HTML"
6991 02 Nov 15 nicklas 56   import="net.sf.basedb.util.Values"
6991 02 Nov 15 nicklas 57   import="net.sf.basedb.util.formatter.Formatter"
6991 02 Nov 15 nicklas 58   import="net.sf.basedb.clients.web.formatter.FormatterFactory"
6991 02 Nov 15 nicklas 59   import="net.sf.basedb.clients.web.extensions.ExtensionsControl"
6991 02 Nov 15 nicklas 60   import="net.sf.basedb.clients.web.extensions.JspContext"
6991 02 Nov 15 nicklas 61   import="net.sf.basedb.clients.web.extensions.renderer.PrefixSuffixRenderer"
7604 25 Feb 19 nicklas 62   import="net.sf.basedb.clients.web.extensions.toolbar.ButtonAction" 
6991 02 Nov 15 nicklas 63   import="net.sf.basedb.clients.web.extensions.toolbar.ToolbarUtil"
7604 25 Feb 19 nicklas 64   import="net.sf.basedb.clients.web.extensions.list.ListColumnAction"
6991 02 Nov 15 nicklas 65   import="net.sf.basedb.clients.web.extensions.list.ListColumnUtil"
7337 12 Apr 17 nicklas 66   import="net.sf.basedb.clients.web.util.ProjectSpecificInfoFilter"
6991 02 Nov 15 nicklas 67   import="net.sf.basedb.util.extensions.ExtensionsInvoker"
6991 02 Nov 15 nicklas 68   import="java.util.Date"
6991 02 Nov 15 nicklas 69   import="java.util.Iterator"
6991 02 Nov 15 nicklas 70   import="java.util.List"
6991 02 Nov 15 nicklas 71   import="java.util.Map"
6991 02 Nov 15 nicklas 72   import="java.util.ArrayList"
6991 02 Nov 15 nicklas 73 %>
6991 02 Nov 15 nicklas 74 <%@ taglib prefix="base" uri="/WEB-INF/base.tld" %>
6991 02 Nov 15 nicklas 75 <%@ taglib prefix="tbl" uri="/WEB-INF/table.tld" %>
6991 02 Nov 15 nicklas 76 <%@ taglib prefix="ext" uri="/WEB-INF/extensions.tld" %>
6991 02 Nov 15 nicklas 77 <%!
6991 02 Nov 15 nicklas 78   private static final Item itemType = Item.KIT;
6991 02 Nov 15 nicklas 79   private static final GuiContext guiContext = new GuiContext(itemType, GuiContext.Type.LIST);
6991 02 Nov 15 nicklas 80 %>
6991 02 Nov 15 nicklas 81 <%
6991 02 Nov 15 nicklas 82 final SessionControl sc = Base.getExistingSessionControl(pageContext, Permission.DENIED, itemType);
6991 02 Nov 15 nicklas 83 final String ID = sc.getId();
6991 02 Nov 15 nicklas 84 final boolean createPermission = sc.hasPermission(Permission.CREATE, itemType);
6991 02 Nov 15 nicklas 85 final ItemContext cc = Base.getAndSetCurrentContext(sc, itemType, null, null);
6991 02 Nov 15 nicklas 86
6991 02 Nov 15 nicklas 87 final ModeInfo mode = ModeInfo.get(request.getParameter("mode"));
6991 02 Nov 15 nicklas 88 final String callback = request.getParameter("callback");
6991 02 Nov 15 nicklas 89 final String title = mode.generateTitle("kit", "kits");
7954 12 May 21 nicklas 90 final DbControl dc = sc.newDbControl(":List "+itemType);
6991 02 Nov 15 nicklas 91 ItemResultIterator<Kit> kits = null;
6991 02 Nov 15 nicklas 92 List<AnnotationLoaderUtil> annotationLoaders = new ArrayList<AnnotationLoaderUtil>();
6991 02 Nov 15 nicklas 93 try
6991 02 Nov 15 nicklas 94 {
6991 02 Nov 15 nicklas 95   final ItemQuery<AnnotationType> annotationTypeQuery = Base.getAnnotationTypesQuery(itemType);
6991 02 Nov 15 nicklas 96   final ItemQuery<ItemSubtype> subtypesQuery = Base.getSubtypesQuery(itemType);
6991 02 Nov 15 nicklas 97   SnapshotManager manager = new SnapshotManager();
7337 12 Apr 17 nicklas 98   ProjectSpecificInfoFilter psInfo = new ProjectSpecificInfoFilter();
6991 02 Nov 15 nicklas 99   for (AnnotationType at : annotationTypeQuery.list(dc))
6991 02 Nov 15 nicklas 100   {
6991 02 Nov 15 nicklas 101     annotationLoaders.add(new AnnotationLoaderUtil(dc, manager, at));
6991 02 Nov 15 nicklas 102   }
6991 02 Nov 15 nicklas 103   
6991 02 Nov 15 nicklas 104   Formatter<Date> dateFormatter = FormatterFactory.getDateFormatter(sc);
6991 02 Nov 15 nicklas 105   Map<Plugin.MainType, Integer> pluginCount = PluginDefinition.countPlugins(dc, guiContext);
7914 23 Feb 21 nicklas 106   JspContext jspContext = ExtensionsControl.createContext(dc, pageContext, guiContext, null);
6991 02 Nov 15 nicklas 107   try
6991 02 Nov 15 nicklas 108   {
7914 23 Feb 21 nicklas 109     final ItemQuery<Kit> query = Base.getConfiguredQuery(dc, cc, jspContext, true, Kit.getQuery(), mode);
6991 02 Nov 15 nicklas 110     kits = query.iterate(dc);
6991 02 Nov 15 nicklas 111   }
6991 02 Nov 15 nicklas 112   catch (Throwable t)
6991 02 Nov 15 nicklas 113   {
6991 02 Nov 15 nicklas 114     cc.setMessage(t.getMessage());
6991 02 Nov 15 nicklas 115   }
6991 02 Nov 15 nicklas 116   int numListed = 0;
7604 25 Feb 19 nicklas 117   ExtensionsInvoker<ButtonAction> invoker = ToolbarUtil.useExtensions(jspContext);
7604 25 Feb 19 nicklas 118   ExtensionsInvoker<ListColumnAction<Kit,?>> columnsInvoker = ListColumnUtil.useExtensions(jspContext);
6991 02 Nov 15 nicklas 119   %>
6991 02 Nov 15 nicklas 120   <base:page title="<%=title==null ? "Kits" : title%>" type="<%=mode.getPageType()%>" id="list-page">
6991 02 Nov 15 nicklas 121   <base:head scripts="table.js,~kits.js" styles="table.css,toolbar.css">
6991 02 Nov 15 nicklas 122     <ext:scripts context="<%=jspContext%>" />
6991 02 Nov 15 nicklas 123     <ext:stylesheets context="<%=jspContext%>" />
6991 02 Nov 15 nicklas 124   </base:head>
6991 02 Nov 15 nicklas 125   
6991 02 Nov 15 nicklas 126   <base:body>
6991 02 Nov 15 nicklas 127     <h1><%=title==null ? "Kits" : title%></h1>
6991 02 Nov 15 nicklas 128     <div class="content">
6991 02 Nov 15 nicklas 129     <tbl:table 
6991 02 Nov 15 nicklas 130       id="kits" 
6991 02 Nov 15 nicklas 131       columns="<%=cc.getSetting("columns")%>"
6991 02 Nov 15 nicklas 132       sortby="<%=cc.getSortProperty()%>" 
6991 02 Nov 15 nicklas 133       direction="<%=cc.getSortDirection()%>"
6991 02 Nov 15 nicklas 134       action="index.jsp"
6991 02 Nov 15 nicklas 135       sc="<%=sc%>"
6991 02 Nov 15 nicklas 136       item="<%=itemType%>"
6991 02 Nov 15 nicklas 137       filterrows="<%=cc.getFilterRows()%>"
6991 02 Nov 15 nicklas 138       subclass="fulltable"
7982 14 Jun 21 nicklas 139       stickyheaders="<%=cc.getSetting("columns.sticky", "name")%>"
6991 02 Nov 15 nicklas 140       >
6991 02 Nov 15 nicklas 141       <tbl:hidden 
6991 02 Nov 15 nicklas 142         name="mode" 
6991 02 Nov 15 nicklas 143         value="<%=mode.getName()%>" 
6991 02 Nov 15 nicklas 144       />
6991 02 Nov 15 nicklas 145       <tbl:hidden 
6991 02 Nov 15 nicklas 146         name="callback" 
6991 02 Nov 15 nicklas 147         value="<%=callback%>" 
6991 02 Nov 15 nicklas 148         skip="<%=callback == null%>" 
6991 02 Nov 15 nicklas 149       />
6991 02 Nov 15 nicklas 150       <tbl:columndef 
6991 02 Nov 15 nicklas 151         id="name"
6991 02 Nov 15 nicklas 152         property="name"
6991 02 Nov 15 nicklas 153         datatype="string"
6991 02 Nov 15 nicklas 154         title="Name"
6991 02 Nov 15 nicklas 155         sortable="true" 
6991 02 Nov 15 nicklas 156         filterable="true"
6991 02 Nov 15 nicklas 157         exportable="true"
6991 02 Nov 15 nicklas 158         show="always" 
6991 02 Nov 15 nicklas 159       />
6991 02 Nov 15 nicklas 160       <tbl:columndef 
6991 02 Nov 15 nicklas 161         id="id"
6991 02 Nov 15 nicklas 162         clazz="uniquecol"
6991 02 Nov 15 nicklas 163         property="id"
6991 02 Nov 15 nicklas 164         datatype="int"
6991 02 Nov 15 nicklas 165         title="ID"
6991 02 Nov 15 nicklas 166         sortable="true"
6991 02 Nov 15 nicklas 167         filterable="true"
6991 02 Nov 15 nicklas 168         exportable="true"
6991 02 Nov 15 nicklas 169       />
6991 02 Nov 15 nicklas 170       <tbl:columndef 
6991 02 Nov 15 nicklas 171         id="entryDate"
6991 02 Nov 15 nicklas 172         property="entryDate"
6991 02 Nov 15 nicklas 173         datatype="date"
6991 02 Nov 15 nicklas 174         title="Registered"
6991 02 Nov 15 nicklas 175         sortable="true" 
6991 02 Nov 15 nicklas 176         filterable="true"
6991 02 Nov 15 nicklas 177         exportable="true"
6991 02 Nov 15 nicklas 178         formatter="<%=dateFormatter%>"
6991 02 Nov 15 nicklas 179       />
6991 02 Nov 15 nicklas 180       <tbl:columndef 
6991 02 Nov 15 nicklas 181         id="itemSubtype"
6991 02 Nov 15 nicklas 182         property="itemSubtype"
6991 02 Nov 15 nicklas 183         sortproperty="itemSubtype.name"
6991 02 Nov 15 nicklas 184         exportproperty="itemSubtype.name:string"
6991 02 Nov 15 nicklas 185         datatype="int"
6991 02 Nov 15 nicklas 186         enumeration="<%=Enumeration.fromItems(subtypesQuery.list(dc), "-none-")%>"
6991 02 Nov 15 nicklas 187         title="Type"
6991 02 Nov 15 nicklas 188         sortable="true" 
6991 02 Nov 15 nicklas 189         filterable="true"
6991 02 Nov 15 nicklas 190         exportable="true"
6991 02 Nov 15 nicklas 191       />
6991 02 Nov 15 nicklas 192       <tbl:columndef 
6991 02 Nov 15 nicklas 193         id="inactive"
6991 02 Nov 15 nicklas 194         property="inactive"
6991 02 Nov 15 nicklas 195         datatype="boolean"
6991 02 Nov 15 nicklas 196         title="Inactive"
6991 02 Nov 15 nicklas 197         sortable="true" 
6991 02 Nov 15 nicklas 198         filterable="true"
6991 02 Nov 15 nicklas 199         exportable="true"
6991 02 Nov 15 nicklas 200       />
6991 02 Nov 15 nicklas 201       <tbl:columndef 
6991 02 Nov 15 nicklas 202         id="expirationDate"
6991 02 Nov 15 nicklas 203         property="expirationDate"
6991 02 Nov 15 nicklas 204         datatype="date"
6991 02 Nov 15 nicklas 205         title="Expiration date"
6991 02 Nov 15 nicklas 206         sortable="true" 
6991 02 Nov 15 nicklas 207         filterable="true"
6991 02 Nov 15 nicklas 208         exportable="true"
6991 02 Nov 15 nicklas 209         formatter="<%=dateFormatter%>"
6991 02 Nov 15 nicklas 210       />
6991 02 Nov 15 nicklas 211       <tbl:columndef 
6991 02 Nov 15 nicklas 212         id="owner"
6991 02 Nov 15 nicklas 213         property="owner.name"
6991 02 Nov 15 nicklas 214         datatype="string"
6991 02 Nov 15 nicklas 215         title="Owner"
6991 02 Nov 15 nicklas 216         sortable="true" 
6991 02 Nov 15 nicklas 217         filterable="true"
6991 02 Nov 15 nicklas 218         exportable="true"
6991 02 Nov 15 nicklas 219       />
6991 02 Nov 15 nicklas 220       <tbl:columndef 
6991 02 Nov 15 nicklas 221         id="description"
6991 02 Nov 15 nicklas 222         property="description"
6991 02 Nov 15 nicklas 223         datatype="string"
6991 02 Nov 15 nicklas 224         title="Description" 
6991 02 Nov 15 nicklas 225         sortable="true" 
6991 02 Nov 15 nicklas 226         filterable="true" 
6991 02 Nov 15 nicklas 227         exportable="true"
6991 02 Nov 15 nicklas 228       />
6991 02 Nov 15 nicklas 229       <%
6991 02 Nov 15 nicklas 230       for (AnnotationLoaderUtil loader : annotationLoaders)
6991 02 Nov 15 nicklas 231       {
6991 02 Nov 15 nicklas 232         AnnotationType at = loader.getAnnotationType();
6991 02 Nov 15 nicklas 233         Enumeration<String, String> annotationEnum = null;
7605 26 Feb 19 nicklas 234         Formatter<Object> formatter = FormatterFactory.getTypeFormatter(sc, at.getValueType());
6991 02 Nov 15 nicklas 235         if (at.isEnumeration())
6991 02 Nov 15 nicklas 236         {
6991 02 Nov 15 nicklas 237           annotationEnum = new Enumeration<String, String>();
6991 02 Nov 15 nicklas 238           if (!at.getDisplayAsList()) annotationEnum.add("", "-none-");
6991 02 Nov 15 nicklas 239           List<?> values = at.getValues();
6991 02 Nov 15 nicklas 240           for (Object value : values)
6991 02 Nov 15 nicklas 241           {
6991 02 Nov 15 nicklas 242             String encoded = formatter.format(value);
6991 02 Nov 15 nicklas 243             annotationEnum.add(encoded, encoded);
6991 02 Nov 15 nicklas 244           }
6991 02 Nov 15 nicklas 245         }
6991 02 Nov 15 nicklas 246         %>
6991 02 Nov 15 nicklas 247         <tbl:columndef 
6991 02 Nov 15 nicklas 248           id="<%="at"+at.getId()%>"
6991 02 Nov 15 nicklas 249           title="<%=HTML.encodeTags(at.getName())+" [A]"%>" 
6991 02 Nov 15 nicklas 250           property="<%="#"+at.getId()%>"
6991 02 Nov 15 nicklas 251           annotation="true"
6991 02 Nov 15 nicklas 252           datatype="<%=at.getValueType().getStringValue()%>"
6991 02 Nov 15 nicklas 253           enumeration="<%=annotationEnum%>"
6991 02 Nov 15 nicklas 254           smartenum="<%=at.getDisplayAsList() %>"
6991 02 Nov 15 nicklas 255           sortable="<%=at.getMultiplicity() == 1%>" 
6991 02 Nov 15 nicklas 256           filterable="true" 
6991 02 Nov 15 nicklas 257           exportable="true"
6991 02 Nov 15 nicklas 258           formatter="<%=formatter%>"
6991 02 Nov 15 nicklas 259           unit="<%=at.getDefaultUnit()%>"
6991 02 Nov 15 nicklas 260         />
6991 02 Nov 15 nicklas 261         <%
6991 02 Nov 15 nicklas 262       }
6991 02 Nov 15 nicklas 263       %>  
6991 02 Nov 15 nicklas 264       <tbl:columndef
6991 02 Nov 15 nicklas 265         id="permission"
6991 02 Nov 15 nicklas 266         title="Permission"
6991 02 Nov 15 nicklas 267       />
6991 02 Nov 15 nicklas 268       <tbl:columndef
6991 02 Nov 15 nicklas 269         id="sharedTo"
6991 02 Nov 15 nicklas 270         title="Shared to"
6991 02 Nov 15 nicklas 271         filterable="true"
6991 02 Nov 15 nicklas 272         filterproperty="!sharedTo.name"
6991 02 Nov 15 nicklas 273         datatype="string"
6991 02 Nov 15 nicklas 274       />
6991 02 Nov 15 nicklas 275       <tbl:columndef 
6991 02 Nov 15 nicklas 276         id="xt-columns" 
6991 02 Nov 15 nicklas 277         extensions="<%=columnsInvoker%>" 
6991 02 Nov 15 nicklas 278         jspcontext="<%=jspContext%>" 
6991 02 Nov 15 nicklas 279       />
6991 02 Nov 15 nicklas 280       <div class="panelgroup bg-filled-50 bottomborder">
6991 02 Nov 15 nicklas 281         <tbl:toolbar
6991 02 Nov 15 nicklas 282           subclass="bottomborder"
6991 02 Nov 15 nicklas 283           visible="<%=mode.hasToolbar()%>"
6991 02 Nov 15 nicklas 284           >
6991 02 Nov 15 nicklas 285           <tbl:button 
6991 02 Nov 15 nicklas 286             id="btnNewItem"
6991 02 Nov 15 nicklas 287             disabled="<%=!createPermission%>" 
6991 02 Nov 15 nicklas 288             image="new.png" 
6991 02 Nov 15 nicklas 289             title="New&hellip;" 
6991 02 Nov 15 nicklas 290             tooltip="<%=createPermission ? "Create new kit" : "You do not have permission to create kits"%>" 
6991 02 Nov 15 nicklas 291           />
6991 02 Nov 15 nicklas 292           <tbl:button 
6991 02 Nov 15 nicklas 293             id="btnDeleteItems"
6991 02 Nov 15 nicklas 294             image="delete.png"
6991 02 Nov 15 nicklas 295             title="Delete" 
6991 02 Nov 15 nicklas 296             tooltip="Delete the selected items" 
6991 02 Nov 15 nicklas 297           />
6991 02 Nov 15 nicklas 298           <tbl:button 
6991 02 Nov 15 nicklas 299             id="btnRestoreItems"
6991 02 Nov 15 nicklas 300             image="restore.png"
6991 02 Nov 15 nicklas 301             title="Restore" 
6991 02 Nov 15 nicklas 302             tooltip="Restore the selected (deleted) items"
6991 02 Nov 15 nicklas 303           />
6991 02 Nov 15 nicklas 304           <tbl:button 
6991 02 Nov 15 nicklas 305             id="btnShareItems"
6991 02 Nov 15 nicklas 306             image="share.png"
6991 02 Nov 15 nicklas 307             title="Share&hellip;" 
6991 02 Nov 15 nicklas 308             tooltip="Share the selected items"
6991 02 Nov 15 nicklas 309           />
6991 02 Nov 15 nicklas 310           <tbl:button 
6991 02 Nov 15 nicklas 311             id="btnSetOwner"
6991 02 Nov 15 nicklas 312             image="take_ownership.png"
6991 02 Nov 15 nicklas 313             title="Set owner&hellip;"
6991 02 Nov 15 nicklas 314             tooltip="Change owner of the selected items"
6991 02 Nov 15 nicklas 315           />
6991 02 Nov 15 nicklas 316           <tbl:button 
6991 02 Nov 15 nicklas 317             id="btnColumns"
6991 02 Nov 15 nicklas 318             image="columns.png" 
6991 02 Nov 15 nicklas 319             title="Columns&hellip;" 
6991 02 Nov 15 nicklas 320             tooltip="Show, hide and re-order columns" 
6991 02 Nov 15 nicklas 321           />
6991 02 Nov 15 nicklas 322           <tbl:button 
6991 02 Nov 15 nicklas 323             id="btnImport"
6991 02 Nov 15 nicklas 324             data-plugin-type="IMPORT"
6991 02 Nov 15 nicklas 325             image="import.png" 
6991 02 Nov 15 nicklas 326             title="Import&hellip;" 
6991 02 Nov 15 nicklas 327             tooltip="Import data" 
6991 02 Nov 15 nicklas 328             visible="<%=pluginCount.containsKey(Plugin.MainType.IMPORT)%>"
6991 02 Nov 15 nicklas 329           />
6991 02 Nov 15 nicklas 330           <tbl:button 
6991 02 Nov 15 nicklas 331             id="btnExport"
6991 02 Nov 15 nicklas 332             data-plugin-type="EXPORT"
6991 02 Nov 15 nicklas 333             image="export.png" 
6991 02 Nov 15 nicklas 334             title="Export&hellip;" 
6991 02 Nov 15 nicklas 335             tooltip="Export data" 
6991 02 Nov 15 nicklas 336             visible="<%=pluginCount.containsKey(Plugin.MainType.EXPORT)%>"
6991 02 Nov 15 nicklas 337           />
6991 02 Nov 15 nicklas 338           <tbl:button 
6991 02 Nov 15 nicklas 339             id="btnRunPlugin"
6991 02 Nov 15 nicklas 340             data-plugin-type="OTHER"
6991 02 Nov 15 nicklas 341             image="runplugin.png" 
6991 02 Nov 15 nicklas 342             title="Run plugin&hellip;" 
6991 02 Nov 15 nicklas 343             tooltip="Run a plugin" 
6991 02 Nov 15 nicklas 344             visible="<%=pluginCount.containsKey(Plugin.MainType.OTHER)%>"
6991 02 Nov 15 nicklas 345           />
6991 02 Nov 15 nicklas 346           <ext:render extensions="<%=invoker%>" context="<%=jspContext%>" 
7604 25 Feb 19 nicklas 347             wrapper="<%=new PrefixSuffixRenderer<ButtonAction>(jspContext, "<td>", "</td>") %>"/>
6991 02 Nov 15 nicklas 348         </tbl:toolbar>
6991 02 Nov 15 nicklas 349         <tbl:panel>
6991 02 Nov 15 nicklas 350           <tbl:presetselector />
6991 02 Nov 15 nicklas 351           <tbl:navigator
6991 02 Nov 15 nicklas 352             page="<%=cc.getPage()%>" 
6991 02 Nov 15 nicklas 353             rowsperpage="<%=cc.getRowsPerPage()%>" 
6991 02 Nov 15 nicklas 354             totalrows="<%=kits == null ? 0 : kits.getTotalCount()%>" 
6991 02 Nov 15 nicklas 355             visible="<%=mode.hasNavigator()%>"
6991 02 Nov 15 nicklas 356           />
6991 02 Nov 15 nicklas 357         </tbl:panel>
6991 02 Nov 15 nicklas 358       </div>
6991 02 Nov 15 nicklas 359       <tbl:data>
6991 02 Nov 15 nicklas 360         <tbl:headers>
6991 02 Nov 15 nicklas 361           <tbl:headerrow>
7943 04 May 21 nicklas 362             <tbl:header clazz="row-index bg-filled-100" />
6991 02 Nov 15 nicklas 363             <tbl:columnheaders />
6991 02 Nov 15 nicklas 364           </tbl:headerrow>
6991 02 Nov 15 nicklas 365           <%
6991 02 Nov 15 nicklas 366           int numFilters = cc.getNumPropertyFilters();
6991 02 Nov 15 nicklas 367           int numRows = cc.getFilterRows();
6991 02 Nov 15 nicklas 368           for (int filterNo = 0; filterNo < numRows; filterNo++)
6991 02 Nov 15 nicklas 369           {
6991 02 Nov 15 nicklas 370             boolean lastRow = filterNo == numRows-1;
6991 02 Nov 15 nicklas 371             %>
6991 02 Nov 15 nicklas 372             <tbl:headerrow>
7943 04 May 21 nicklas 373               <tbl:header subclass="row-index bg-filled-100">
7943 04 May 21 nicklas 374                 <div class="index-<%=mode.getName()%>">
7943 04 May 21 nicklas 375                   <div class="index"></div>
7943 04 May 21 nicklas 376                   <div class="check">
7943 04 May 21 nicklas 377                     <base:icon 
7943 04 May 21 nicklas 378                       subclass="link table-check"
7943 04 May 21 nicklas 379                       image="check_uncheck.png" 
7943 04 May 21 nicklas 380                       tooltip="Toggle all (use CTRL, ALT or SHIFT to check/uncheck)" 
7943 04 May 21 nicklas 381                       visible="<%=lastRow && mode.hasCheck()%>"
7943 04 May 21 nicklas 382                     />
7943 04 May 21 nicklas 383                   </div>
7943 04 May 21 nicklas 384                   <div class="icons">
7943 04 May 21 nicklas 385                     <base:icon
7943 04 May 21 nicklas 386                       subclass="link table-filter-row-action"
7943 04 May 21 nicklas 387                       image="add.png"
7943 04 May 21 nicklas 388                       tooltip="Add extra filter row"
7943 04 May 21 nicklas 389                       visible="<%=lastRow%>"
7943 04 May 21 nicklas 390                     /><base:icon
7943 04 May 21 nicklas 391                       subclass="link table-filter-row-action"
7943 04 May 21 nicklas 392                       image="remove.png"
7943 04 May 21 nicklas 393                       tooltip="Remove this filter row"
7943 04 May 21 nicklas 394                       visible="<%=numRows > 1 || numFilters > 0 %>"
7943 04 May 21 nicklas 395                       data-remove-row="<%=filterNo%>"
7943 04 May 21 nicklas 396                     />
7943 04 May 21 nicklas 397                   </div>
7943 04 May 21 nicklas 398                 </div>
6991 02 Nov 15 nicklas 399               </tbl:header>
6991 02 Nov 15 nicklas 400               <tbl:propertyfilter row="<%=filterNo%>" />
6991 02 Nov 15 nicklas 401             </tbl:headerrow>
6991 02 Nov 15 nicklas 402             <%
6991 02 Nov 15 nicklas 403           }
6991 02 Nov 15 nicklas 404           %>
7913 22 Feb 21 nicklas 405           <tbl:columnsubtitles />
6991 02 Nov 15 nicklas 406         </tbl:headers>
6991 02 Nov 15 nicklas 407         <tbl:rows>
6991 02 Nov 15 nicklas 408           <%
6991 02 Nov 15 nicklas 409           if (cc.getMessage() != null)
6991 02 Nov 15 nicklas 410           {
6991 02 Nov 15 nicklas 411             %>
6991 02 Nov 15 nicklas 412             <tbl:panel subclass="bg-filled-50">
6991 02 Nov 15 nicklas 413               <div class="messagecontainer error"><%=cc.getMessage()%></div>
6991 02 Nov 15 nicklas 414             </tbl:panel>
6991 02 Nov 15 nicklas 415             <%
6991 02 Nov 15 nicklas 416             cc.setMessage(null);
6991 02 Nov 15 nicklas 417           }
6991 02 Nov 15 nicklas 418           int index = cc.getPage()*cc.getRowsPerPage();
6991 02 Nov 15 nicklas 419           int selectedItemId = Values.getInt(request.getParameter("item_id"));
6991 02 Nov 15 nicklas 420           if (kits != null)
6991 02 Nov 15 nicklas 421           {
6991 02 Nov 15 nicklas 422             while (kits.hasNext())
6991 02 Nov 15 nicklas 423             {
6991 02 Nov 15 nicklas 424               Kit item = kits.next();
6991 02 Nov 15 nicklas 425               int itemId = item.getId();
6991 02 Nov 15 nicklas 426               
6991 02 Nov 15 nicklas 427               boolean deletePermission = item.hasPermission(Permission.DELETE);
6991 02 Nov 15 nicklas 428               boolean sharePermission = item.hasPermission(Permission.SET_PERMISSION);
6991 02 Nov 15 nicklas 429               boolean writePermission = item.hasPermission(Permission.WRITE);
6991 02 Nov 15 nicklas 430               String name = HTML.encodeTags(item.getName());
6991 02 Nov 15 nicklas 431               String tooltip = mode.isSelectionMode() ? 
6991 02 Nov 15 nicklas 432                   "Select this item" : "View this item" + (writePermission ? " (use CTRL, ALT or SHIFT to edit)" : "");
6991 02 Nov 15 nicklas 433               index++;
6991 02 Nov 15 nicklas 434               numListed++;
6991 02 Nov 15 nicklas 435               %>
6991 02 Nov 15 nicklas 436               <tbl:row>
7943 04 May 21 nicklas 437                 <tbl:header clazz="row-index bg-filled-100">
7943 04 May 21 nicklas 438                   <div class="index-<%=mode.getName()%>">
7943 04 May 21 nicklas 439                     <div class="index <%=index>999?"index-smaller":""%>"><%=index%></div>
7943 04 May 21 nicklas 440                     <div class="check">
7943 04 May 21 nicklas 441                       <base:input
7943 04 May 21 nicklas 442                         type="checkbox" 
7943 04 May 21 nicklas 443                         name="<%=itemId%>" 
7943 04 May 21 nicklas 444                         value="<%=itemId%>" 
7943 04 May 21 nicklas 445                         title="<%=name%>" 
7943 04 May 21 nicklas 446                         checked="<%=cc.getSelected().contains(itemId)%>"
7943 04 May 21 nicklas 447                         visible="<%=mode.hasCheck()%>"
7943 04 May 21 nicklas 448                       />
7943 04 May 21 nicklas 449                       <base:input 
7943 04 May 21 nicklas 450                         type="radio" 
7943 04 May 21 nicklas 451                         name="item_id" 
7943 04 May 21 nicklas 452                         value="<%=itemId%>" 
7943 04 May 21 nicklas 453                         title="<%=name%>" 
7943 04 May 21 nicklas 454                         checked="<%=selectedItemId == itemId%>"
7943 04 May 21 nicklas 455                         visible="<%=mode.hasRadio()%>"
7943 04 May 21 nicklas 456                       />
7943 04 May 21 nicklas 457                     </div>
7943 04 May 21 nicklas 458                     <div class="icons">
7943 04 May 21 nicklas 459                       <base:icon 
7943 04 May 21 nicklas 460                         image="deleted.png"
7943 04 May 21 nicklas 461                         id="<%="delete."+itemId %>"
7943 04 May 21 nicklas 462                         subclass="<%=deletePermission ? "table-delete-item" : "disabled" %>"
7943 04 May 21 nicklas 463                         data-item-id="<%=itemId%>"
7943 04 May 21 nicklas 464                         tooltip="This item has been scheduled for deletion" 
7943 04 May 21 nicklas 465                         visible="<%=item.isRemoved()%>"
7943 04 May 21 nicklas 466                       /><base:icon 
7943 04 May 21 nicklas 467                         image="shared.png" 
7943 04 May 21 nicklas 468                         id="<%="share."+itemId %>"
7943 04 May 21 nicklas 469                         subclass="<%=sharePermission ? "table-share-item" : "disabled" %>"
7943 04 May 21 nicklas 470                         data-item-id="<%=itemId%>"
7943 04 May 21 nicklas 471                         tooltip="This item is shared to other users, groups and/or projects" 
7943 04 May 21 nicklas 472                         visible="<%=item.isShared()%>"
7943 04 May 21 nicklas 473                       />
7943 04 May 21 nicklas 474                     </div>
7943 04 May 21 nicklas 475                   </div>
7943 04 May 21 nicklas 476                 </tbl:header>
6991 02 Nov 15 nicklas 477                 <tbl:cell column="name"><div
6991 02 Nov 15 nicklas 478                   class="link table-item"
6991 02 Nov 15 nicklas 479                   data-item-id="<%=itemId%>"
6991 02 Nov 15 nicklas 480                   data-no-edit="<%=writePermission ? 0 : 1 %>" 
6991 02 Nov 15 nicklas 481                   tabindex="0"
6991 02 Nov 15 nicklas 482                   title="<%=tooltip%>"><%=name%></div></tbl:cell>
6991 02 Nov 15 nicklas 483                 <tbl:cell column="id"><%=item.getId()%></tbl:cell>
6991 02 Nov 15 nicklas 484                 <tbl:cell column="entryDate" value="<%=item.getEntryDate()%>" />
6991 02 Nov 15 nicklas 485                 <tbl:cell column="owner"
6991 02 Nov 15 nicklas 486                   ><base:propertyvalue 
6991 02 Nov 15 nicklas 487                     item="<%=item%>" 
6991 02 Nov 15 nicklas 488                     property="owner"
6991 02 Nov 15 nicklas 489                     enableEditLink="<%=mode.hasEditLink()%>" 
6991 02 Nov 15 nicklas 490                     enablePropertyLink="<%=mode.hasPropertyLink()%>"
6991 02 Nov 15 nicklas 491                   /></tbl:cell>
6991 02 Nov 15 nicklas 492                 <tbl:cell column="itemSubtype"
6991 02 Nov 15 nicklas 493                   ><base:propertyvalue 
6991 02 Nov 15 nicklas 494                     item="<%=item%>" 
6991 02 Nov 15 nicklas 495                     property="itemSubtype"
6991 02 Nov 15 nicklas 496                     enableEditLink="<%=mode.hasEditLink()%>" 
6991 02 Nov 15 nicklas 497                     enablePropertyLink="<%=mode.hasPropertyLink()%>"
6991 02 Nov 15 nicklas 498                   /></tbl:cell>              
6991 02 Nov 15 nicklas 499                 <tbl:cell column="expirationDate" value="<%=item.getExpirationDate()%>" />
6991 02 Nov 15 nicklas 500                 <tbl:cell column="inactive"><%=item.isInactive() ? "Yes" : "No" %></tbl:cell>
6991 02 Nov 15 nicklas 501                 <tbl:cell column="description"><%=HTML.encodeTags(item.getDescription())%></tbl:cell>
6991 02 Nov 15 nicklas 502                 <%
6991 02 Nov 15 nicklas 503                 if (item.isAnnotated())
6991 02 Nov 15 nicklas 504                 {
6991 02 Nov 15 nicklas 505                   AnnotationSetSnapshot snapshot = manager.getSnapshot(dc, item.getAnnotationSet().getId());
6991 02 Nov 15 nicklas 506                   for (AnnotationLoaderUtil loader : annotationLoaders)
6991 02 Nov 15 nicklas 507                   {
6991 02 Nov 15 nicklas 508                     %>
6991 02 Nov 15 nicklas 509                     <tbl:cell 
6991 02 Nov 15 nicklas 510                       column="<%="at"+loader.getId()%>"
6991 02 Nov 15 nicklas 511                       ><%
7337 12 Apr 17 nicklas 512                       if (loader.find(snapshot, psInfo.reset())) 
6991 02 Nov 15 nicklas 513                       {
6991 02 Nov 15 nicklas 514                         %><tbl:cellvalue 
6991 02 Nov 15 nicklas 515                           list="<%=loader.getValues()%>"
8160 07 Jun 23 nicklas 516                           bulletlist="<%=loader.useBulletList() %>"
6991 02 Nov 15 nicklas 517                           suffix="<%=loader.getUnitSymbol()%>"
8083 20 Oct 22 nicklas 518                           clazz="<%=psInfo.hasProjectSpecificAnnotation() ? "ps-annotation" : null%>"
6991 02 Nov 15 nicklas 519                         /><%
6991 02 Nov 15 nicklas 520                       }
6991 02 Nov 15 nicklas 521                       %></tbl:cell>
6991 02 Nov 15 nicklas 522                     <%
6991 02 Nov 15 nicklas 523                   }
6991 02 Nov 15 nicklas 524                 }
6991 02 Nov 15 nicklas 525                 %>
6991 02 Nov 15 nicklas 526                 <tbl:cell column="permission"><%=PermissionUtil.getShortPermissions(item)%></tbl:cell>
6991 02 Nov 15 nicklas 527                 <tbl:cell column="sharedTo">
6991 02 Nov 15 nicklas 528                   <%
6991 02 Nov 15 nicklas 529                   Iterator<Nameable> sharees = ShareableUtil.getSharedTo(dc, item).iterator();
6991 02 Nov 15 nicklas 530                   while(sharees.hasNext())
6991 02 Nov 15 nicklas 531                   {
6991 02 Nov 15 nicklas 532                     Nameable n = sharees.next();
6991 02 Nov 15 nicklas 533                     if (mode.hasPropertyLink())
6991 02 Nov 15 nicklas 534                     {
6991 02 Nov 15 nicklas 535                       out.write(Base.getLinkedName(ID, n, false, mode.hasEditLink()));
6991 02 Nov 15 nicklas 536                     }
6991 02 Nov 15 nicklas 537                     else
6991 02 Nov 15 nicklas 538                     {
6991 02 Nov 15 nicklas 539                       out.write(HTML.encodeTags(n.getName()));
6991 02 Nov 15 nicklas 540                     }
6991 02 Nov 15 nicklas 541                     out.write(sharees.hasNext() ? ", " : "");
6991 02 Nov 15 nicklas 542                   }
6991 02 Nov 15 nicklas 543                   %>
6991 02 Nov 15 nicklas 544                 </tbl:cell>
6991 02 Nov 15 nicklas 545                 <tbl:xt-cells dc="<%=dc%>" item="<%=item%>">
6991 02 Nov 15 nicklas 546                   <tbl:cell column="xt-columns" />
6991 02 Nov 15 nicklas 547                 </tbl:xt-cells>
6991 02 Nov 15 nicklas 548               </tbl:row>
6991 02 Nov 15 nicklas 549               <%
6991 02 Nov 15 nicklas 550               }
6991 02 Nov 15 nicklas 551             }
6991 02 Nov 15 nicklas 552           if (numListed == 0)
6991 02 Nov 15 nicklas 553           {
6991 02 Nov 15 nicklas 554             %>
6991 02 Nov 15 nicklas 555             <tbl:panel subclass="bg-filled-50">
6991 02 Nov 15 nicklas 556               <div class="messagecontainer note">
6991 02 Nov 15 nicklas 557               <%=kits == null || kits.getTotalCount() == 0 ? "No kits were found" : "No kits on this page. Please select another page!" %>
6991 02 Nov 15 nicklas 558               </div>
6991 02 Nov 15 nicklas 559             </tbl:panel>
6991 02 Nov 15 nicklas 560             <%
6991 02 Nov 15 nicklas 561           }
6991 02 Nov 15 nicklas 562           %>
6991 02 Nov 15 nicklas 563         </tbl:rows>
6991 02 Nov 15 nicklas 564       </tbl:data>
6991 02 Nov 15 nicklas 565     </tbl:table>
6991 02 Nov 15 nicklas 566     </div>
6991 02 Nov 15 nicklas 567     
6991 02 Nov 15 nicklas 568     <base:buttongroup subclass="dialogbuttons">
6991 02 Nov 15 nicklas 569       <base:button id="btnOk" title="Ok" visible="<%=mode.hasOkButton()%>" />
6991 02 Nov 15 nicklas 570       <base:button id="close" title="Cancel" visible="<%=mode.hasCancelButton()%>" />
6991 02 Nov 15 nicklas 571       <base:button id="close" title="Close" visible="<%=mode.hasCloseButton()%>" />
6991 02 Nov 15 nicklas 572     </base:buttongroup>
6991 02 Nov 15 nicklas 573     
6991 02 Nov 15 nicklas 574   </base:body>
6991 02 Nov 15 nicklas 575   </base:page>
6991 02 Nov 15 nicklas 576   <%
6991 02 Nov 15 nicklas 577 }
6991 02 Nov 15 nicklas 578 finally
6991 02 Nov 15 nicklas 579 {
6991 02 Nov 15 nicklas 580   if (kits != null) kits.close();
6991 02 Nov 15 nicklas 581   if (dc != null) dc.close();
6991 02 Nov 15 nicklas 582 }
6991 02 Nov 15 nicklas 583 %>