www/admin/hardware/list_hardware.jsp

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