www/common/history/list_history.jsp

Code
Comments
Other
Rev Date Author Line
5048 17 Aug 09 nicklas 1 <%-- $Id$
5048 17 Aug 09 nicklas 2   ------------------------------------------------------------------
5425 23 Sep 10 nicklas 3   Copyright (C) 2006 Jari Häkkinen, Nicklas Nordborg, Martin Svensson
5048 17 Aug 09 nicklas 4
5048 17 Aug 09 nicklas 5   This file is part of BASE - BioArray Software Environment.
5048 17 Aug 09 nicklas 6   Available at http://base.thep.lu.se/
5048 17 Aug 09 nicklas 7
5048 17 Aug 09 nicklas 8   BASE is free software; you can redistribute it and/or
5048 17 Aug 09 nicklas 9   modify it under the terms of the GNU General Public License
5048 17 Aug 09 nicklas 10   as published by the Free Software Foundation; either version 3
5048 17 Aug 09 nicklas 11   of the License, or (at your option) any later version.
5048 17 Aug 09 nicklas 12
5048 17 Aug 09 nicklas 13   BASE is distributed in the hope that it will be useful,
5048 17 Aug 09 nicklas 14   but WITHOUT ANY WARRANTY; without even the implied warranty of
5048 17 Aug 09 nicklas 15   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
5048 17 Aug 09 nicklas 16   GNU General Public License for more details.
5048 17 Aug 09 nicklas 17
5048 17 Aug 09 nicklas 18   You should have received a copy of the GNU General Public License
5048 17 Aug 09 nicklas 19   along with BASE. If not, see <http://www.gnu.org/licenses/>.
5048 17 Aug 09 nicklas 20   ------------------------------------------------------------------
5048 17 Aug 09 nicklas 21
5048 17 Aug 09 nicklas 22   @author Nicklas
5048 17 Aug 09 nicklas 23   @version 2.0
5048 17 Aug 09 nicklas 24 --%>
5426 24 Sep 10 nicklas 25 <%@ page pageEncoding="UTF-8" session="false"
5048 17 Aug 09 nicklas 26   import="net.sf.basedb.core.SessionControl"
5048 17 Aug 09 nicklas 27   import="net.sf.basedb.core.DbControl"
5048 17 Aug 09 nicklas 28   import="net.sf.basedb.core.Item"
5048 17 Aug 09 nicklas 29   import="net.sf.basedb.core.BasicItem"
7952 12 May 21 nicklas 30   import="net.sf.basedb.core.Session"
5048 17 Aug 09 nicklas 31   import="net.sf.basedb.core.ChangeHistory"
5048 17 Aug 09 nicklas 32   import="net.sf.basedb.core.Permission"
5048 17 Aug 09 nicklas 33   import="net.sf.basedb.core.Nameable"
7952 12 May 21 nicklas 34   import="net.sf.basedb.core.Metadata"
5048 17 Aug 09 nicklas 35   import="net.sf.basedb.core.ItemContext"
5048 17 Aug 09 nicklas 36   import="net.sf.basedb.core.ItemQuery"
5048 17 Aug 09 nicklas 37   import="net.sf.basedb.core.ItemResultIterator"
5048 17 Aug 09 nicklas 38   import="net.sf.basedb.core.PermissionDeniedException"
5048 17 Aug 09 nicklas 39   import="net.sf.basedb.core.PluginDefinition"
5048 17 Aug 09 nicklas 40   import="net.sf.basedb.core.query.Orders"
5048 17 Aug 09 nicklas 41   import="net.sf.basedb.core.query.Hql"
7952 12 May 21 nicklas 42   import="net.sf.basedb.core.query.Expressions"
7952 12 May 21 nicklas 43   import="net.sf.basedb.core.query.Restrictions"
5048 17 Aug 09 nicklas 44   import="net.sf.basedb.core.plugin.GuiContext"
5048 17 Aug 09 nicklas 45   import="net.sf.basedb.core.plugin.Plugin"
5048 17 Aug 09 nicklas 46   import="net.sf.basedb.core.log.ChangeType"
5048 17 Aug 09 nicklas 47   import="net.sf.basedb.util.Values"
5048 17 Aug 09 nicklas 48   import="net.sf.basedb.util.Enumeration"
5048 17 Aug 09 nicklas 49   import="net.sf.basedb.util.formatter.Formatter"
5048 17 Aug 09 nicklas 50   import="net.sf.basedb.clients.web.Base"
5048 17 Aug 09 nicklas 51   import="net.sf.basedb.clients.web.ModeInfo"
5048 17 Aug 09 nicklas 52   import="net.sf.basedb.clients.web.ChangeHistoryUtil"
5048 17 Aug 09 nicklas 53   import="net.sf.basedb.clients.web.util.HTML"
5048 17 Aug 09 nicklas 54   import="net.sf.basedb.clients.web.formatter.FormatterFactory"
5048 17 Aug 09 nicklas 55   import="net.sf.basedb.clients.web.extensions.ExtensionsControl"
5048 17 Aug 09 nicklas 56   import="net.sf.basedb.clients.web.extensions.JspContext"
5048 17 Aug 09 nicklas 57   import="net.sf.basedb.clients.web.extensions.renderer.PrefixSuffixRenderer"
7604 25 Feb 19 nicklas 58   import="net.sf.basedb.clients.web.extensions.toolbar.ButtonAction" 
5048 17 Aug 09 nicklas 59   import="net.sf.basedb.clients.web.extensions.toolbar.ToolbarUtil"
7604 25 Feb 19 nicklas 60   import="net.sf.basedb.clients.web.extensions.list.ListColumnAction"
6040 30 Mar 12 nicklas 61   import="net.sf.basedb.clients.web.extensions.list.ListColumnUtil"
5048 17 Aug 09 nicklas 62   import="net.sf.basedb.util.extensions.ExtensionsInvoker"
5048 17 Aug 09 nicklas 63   import="java.util.List"
5048 17 Aug 09 nicklas 64   import="java.util.Date"
5048 17 Aug 09 nicklas 65   import="java.util.Map"
7949 10 May 21 nicklas 66   import="java.util.HashMap"
5048 17 Aug 09 nicklas 67 %>
5048 17 Aug 09 nicklas 68 <%@ taglib prefix="base" uri="/WEB-INF/base.tld" %>
5048 17 Aug 09 nicklas 69 <%@ taglib prefix="tbl" uri="/WEB-INF/table.tld" %>
6139 19 Sep 12 nicklas 70 <%@ taglib prefix="ext" uri="/WEB-INF/extensions.tld" %>
5048 17 Aug 09 nicklas 71 <%!
5048 17 Aug 09 nicklas 72   private static final Item itemType = Item.CHANGEHISTORY;
5048 17 Aug 09 nicklas 73   private static final GuiContext guiContext = new GuiContext(itemType, GuiContext.Type.LIST);
7949 10 May 21 nicklas 74   private static String[] COLORS = {"#ffb700","#ffc547","#ffd270","#ffdf96","#ffebbc","#f6dcb9","#f2c094","#efa177","#eb8064","#e65a5a"};
7952 12 May 21 nicklas 75
7952 12 May 21 nicklas 76   private static final Enumeration<String, String> items = new Enumeration<String, String>();
7952 12 May 21 nicklas 77   static
7952 12 May 21 nicklas 78   {
7952 12 May 21 nicklas 79     for (Item item : Metadata.getRemovableItems())
7952 12 May 21 nicklas 80     {
7952 12 May 21 nicklas 81       items.add(Integer.toString(item.getValue()), item.toString());
7952 12 May 21 nicklas 82     }
7952 12 May 21 nicklas 83   }
5048 17 Aug 09 nicklas 84 %>
5048 17 Aug 09 nicklas 85 <%
7952 12 May 21 nicklas 86 final Item sourceType = Item.valueOf(request.getParameter("source_type"));
7952 12 May 21 nicklas 87 final int sourceId = Values.getInt(request.getParameter("source_id"));
7952 12 May 21 nicklas 88 final int transactId = Values.getInt(request.getParameter("transact_id"));
7952 12 May 21 nicklas 89 final boolean isSessionLog = sourceType == Item.SESSION;
7952 12 May 21 nicklas 90 final String subContext = isSessionLog?"session-log": "";
7952 12 May 21 nicklas 91
5048 17 Aug 09 nicklas 92 final SessionControl sc = Base.getExistingSessionControl(pageContext, true);
5048 17 Aug 09 nicklas 93 final String ID = sc.getId();
7952 12 May 21 nicklas 94 final ItemContext cc = Base.getAndSetCurrentContext(sc, itemType, subContext, null, null);
5048 17 Aug 09 nicklas 95
5048 17 Aug 09 nicklas 96 final float scale = Base.getScale(sc);
5048 17 Aug 09 nicklas 97 final ModeInfo mode = ModeInfo.get(request.getParameter("mode"));
5048 17 Aug 09 nicklas 98 final String callback = request.getParameter("callback");
5048 17 Aug 09 nicklas 99 final String title = mode.generateTitle("history entry", "history entries");
7954 12 May 21 nicklas 100 final DbControl dc = sc.newDbControl(":List change history");
5048 17 Aug 09 nicklas 101 ItemResultIterator<ChangeHistory> history = null;
5048 17 Aug 09 nicklas 102 try
5048 17 Aug 09 nicklas 103 {
5048 17 Aug 09 nicklas 104   final BasicItem source = sourceType.getById(dc, sourceId);  
5048 17 Aug 09 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);
5048 17 Aug 09 nicklas 107   try
5048 17 Aug 09 nicklas 108   {
5048 17 Aug 09 nicklas 109     final ItemQuery<ChangeHistory> query = 
7952 12 May 21 nicklas 110       Base.getConfiguredQuery(dc, cc, jspContext, true, isSessionLog ? ChangeHistory.getChangesIn((Session)source) : ChangeHistory.getHistoryOf(source), mode);
7952 12 May 21 nicklas 111     if (transactId > 0)
7952 12 May 21 nicklas 112     {
7952 12 May 21 nicklas 113       query.restrict(Restrictions.eq(Hql.property("hst", "id"), Expressions.integer(transactId)));
7952 12 May 21 nicklas 114     }
5061 19 Aug 09 nicklas 115     query.order(cc.getSortDirection().sortBy(Hql.property("id")));
5048 17 Aug 09 nicklas 116     history = query.iterate(dc);
5048 17 Aug 09 nicklas 117     //cc.setMessage(query.toString());
5048 17 Aug 09 nicklas 118   }
5048 17 Aug 09 nicklas 119   catch (Throwable t)
5048 17 Aug 09 nicklas 120   {
5048 17 Aug 09 nicklas 121     cc.setMessage(t.getMessage());
5048 17 Aug 09 nicklas 122     t.printStackTrace();
5048 17 Aug 09 nicklas 123   }
5048 17 Aug 09 nicklas 124   Formatter<Date> dateFormatter = FormatterFactory.getDateTimeFormatter(sc);
7604 25 Feb 19 nicklas 125   ExtensionsInvoker<ButtonAction> invoker = ToolbarUtil.useExtensions(jspContext);
7604 25 Feb 19 nicklas 126   ExtensionsInvoker<ListColumnAction<ChangeHistory,?>> columnsInvoker = ListColumnUtil.useExtensions(jspContext);
5048 17 Aug 09 nicklas 127   int numListed = 0;
7949 10 May 21 nicklas 128   StringBuilder transactStyles = new StringBuilder();
5048 17 Aug 09 nicklas 129   %>
6244 25 Feb 13 nicklas 130   <base:page type="iframe" id="list-history">
7130 21 Apr 16 nicklas 131   <base:head scripts="table.js,menu.js,~history.js" styles="table.css,toolbar.css,menu.css">
6244 25 Feb 13 nicklas 132     <ext:scripts context="<%=jspContext%>" />
6244 25 Feb 13 nicklas 133     <ext:stylesheets context="<%=jspContext%>" />
7949 10 May 21 nicklas 134     <style>
7949 10 May 21 nicklas 135     /* This works in the "icons" column due to position: sticky */
7949 10 May 21 nicklas 136     /* It creates a rectangle with some padding (colors are added later) */
7949 10 May 21 nicklas 137     .transact-box
7949 10 May 21 nicklas 138     {
7949 10 May 21 nicklas 139       position: absolute; 
7949 10 May 21 nicklas 140       right: 7px; 
7949 10 May 21 nicklas 141       top: 2px;
7949 10 May 21 nicklas 142       bottom: 1px;
7949 10 May 21 nicklas 143       width: 0.65em;
7949 10 May 21 nicklas 144       border-width: 1px;
7949 10 May 21 nicklas 145       border-color: #A0A0A0;
7949 10 May 21 nicklas 146     }
7949 10 May 21 nicklas 147     /* This box should touch with the previous row */
7949 10 May 21 nicklas 148     .transact-box.same-as-previous
7949 10 May 21 nicklas 149     {
7949 10 May 21 nicklas 150       top: -1px;
7949 10 May 21 nicklas 151       border-top-width: 0 !important;
7949 10 May 21 nicklas 152     }
7949 10 May 21 nicklas 153     /* This box should touch with the next row */
7949 10 May 21 nicklas 154     .transact-box.same-as-next
7949 10 May 21 nicklas 155     {
7949 10 May 21 nicklas 156       bottom: -1px;
7949 10 May 21 nicklas 157       border-bottom-width: 0 !important;
7949 10 May 21 nicklas 158     }
7949 10 May 21 nicklas 159     </style>
5048 17 Aug 09 nicklas 160   </base:head>
6244 25 Feb 13 nicklas 161   <base:body>
5048 17 Aug 09 nicklas 162     <tbl:table 
5951 09 Feb 12 nicklas 163       id="history"
5048 17 Aug 09 nicklas 164       columns="<%=cc.getSetting("columns")%>"
5048 17 Aug 09 nicklas 165       sortby="<%=cc.getSortProperty()%>" 
5048 17 Aug 09 nicklas 166       direction="<%=cc.getSortDirection()%>"
5048 17 Aug 09 nicklas 167       action="index.jsp"
5048 17 Aug 09 nicklas 168       sc="<%=sc%>"
5048 17 Aug 09 nicklas 169       item="<%=itemType%>"
6707 02 Feb 15 nicklas 170       filterrows="<%=cc.getFilterRows()%>"
5951 09 Feb 12 nicklas 171       subclass="fulltable"
7982 14 Jun 21 nicklas 172       stickyheaders="<%=cc.getSetting("columns.sticky", "time")%>"
7952 12 May 21 nicklas 173       subcontext="<%=subContext%>"
5048 17 Aug 09 nicklas 174       >
5048 17 Aug 09 nicklas 175       <tbl:hidden 
5048 17 Aug 09 nicklas 176         name="source_id"
5048 17 Aug 09 nicklas 177         value="<%=String.valueOf(sourceId)%>" 
5048 17 Aug 09 nicklas 178       />
5048 17 Aug 09 nicklas 179       <tbl:hidden 
5048 17 Aug 09 nicklas 180         name="source_type" 
5048 17 Aug 09 nicklas 181         value="<%=sourceType.name()%>" 
5048 17 Aug 09 nicklas 182       />
7952 12 May 21 nicklas 183       <tbl:hidden 
7952 12 May 21 nicklas 184         name="transact_id"
7952 12 May 21 nicklas 185         value="<%=String.valueOf(transactId)%>" 
7952 12 May 21 nicklas 186       />
5048 17 Aug 09 nicklas 187       <tbl:columndef 
7952 12 May 21 nicklas 188         id="id"
5048 17 Aug 09 nicklas 189         clazz="uniquecol"
7952 12 May 21 nicklas 190         property="id"
7952 12 May 21 nicklas 191         datatype="int"
7952 12 May 21 nicklas 192         title="ID"
7952 12 May 21 nicklas 193         sortable="true" 
7952 12 May 21 nicklas 194         filterable="true"
7952 12 May 21 nicklas 195         exportable="true"
5048 17 Aug 09 nicklas 196       />
5048 17 Aug 09 nicklas 197       <tbl:columndef 
5048 17 Aug 09 nicklas 198         id="time"
5048 17 Aug 09 nicklas 199         property="$hst.time"
5048 17 Aug 09 nicklas 200         exportproperty="changeHistory.time"
5424 23 Sep 10 nicklas 201         datatype="timestamp"
5048 17 Aug 09 nicklas 202         title="Time"
5048 17 Aug 09 nicklas 203         sortable="true" 
5048 17 Aug 09 nicklas 204         filterable="true"
5048 17 Aug 09 nicklas 205         exportable="true"
5048 17 Aug 09 nicklas 206         show="always" 
5048 17 Aug 09 nicklas 207       />
7948 10 May 21 nicklas 208       <tbl:columndef 
7948 10 May 21 nicklas 209         id="transaction"
7948 10 May 21 nicklas 210         property="$hst.name"
7948 10 May 21 nicklas 211         exportproperty="changeHistory.name"
7948 10 May 21 nicklas 212         datatype="string"
7948 10 May 21 nicklas 213         title="Transaction"
7948 10 May 21 nicklas 214         sortable="true" 
7948 10 May 21 nicklas 215         filterable="true"
7948 10 May 21 nicklas 216         exportable="true"
7948 10 May 21 nicklas 217       />
5048 17 Aug 09 nicklas 218       <%
5048 17 Aug 09 nicklas 219       Enumeration<String, String> types = new Enumeration<String, String>();
5048 17 Aug 09 nicklas 220       for (ChangeType ct : ChangeType.values())
5048 17 Aug 09 nicklas 221       {
5048 17 Aug 09 nicklas 222         types.add(Integer.toString(ct.getValue()), ct.toString());
5048 17 Aug 09 nicklas 223       }
5048 17 Aug 09 nicklas 224       %>
5048 17 Aug 09 nicklas 225       <tbl:columndef 
5048 17 Aug 09 nicklas 226         id="changeType"
5048 17 Aug 09 nicklas 227         property="changeType"
5048 17 Aug 09 nicklas 228         datatype="int"
5048 17 Aug 09 nicklas 229         title="Type"
5048 17 Aug 09 nicklas 230         sortable="true" 
5048 17 Aug 09 nicklas 231         filterable="true"
5048 17 Aug 09 nicklas 232         exportable="true"
5048 17 Aug 09 nicklas 233         enumeration="<%=types%>"
5048 17 Aug 09 nicklas 234       />
5048 17 Aug 09 nicklas 235       <tbl:columndef 
7952 12 May 21 nicklas 236         id="item"
7952 12 May 21 nicklas 237         title="Item"
7952 12 May 21 nicklas 238         exportable="true"
7952 12 May 21 nicklas 239         exportproperty="item"
7952 12 May 21 nicklas 240         show="<%=isSessionLog?"auto":"never"%>"
7952 12 May 21 nicklas 241       />
7952 12 May 21 nicklas 242       <tbl:columndef
7952 12 May 21 nicklas 243         id="itemType"
7952 12 May 21 nicklas 244         property="itemType"
7952 12 May 21 nicklas 245         datatype="int"
7952 12 May 21 nicklas 246         title="Item type"
7952 12 May 21 nicklas 247         enumeration="<%=items%>"
7952 12 May 21 nicklas 248         filterable="true"
7952 12 May 21 nicklas 249         exportable="true"
7952 12 May 21 nicklas 250         show="<%=isSessionLog?"auto":"never"%>"
7952 12 May 21 nicklas 251       />
7952 12 May 21 nicklas 252       <tbl:columndef 
5048 17 Aug 09 nicklas 253         id="user"
5048 17 Aug 09 nicklas 254         property="$hst.user.name"
5048 17 Aug 09 nicklas 255         exportproperty="changeHistory.user.name"
5048 17 Aug 09 nicklas 256         datatype="string"
5048 17 Aug 09 nicklas 257         title="User"
5048 17 Aug 09 nicklas 258         sortable="true" 
5048 17 Aug 09 nicklas 259         filterable="true"
5048 17 Aug 09 nicklas 260         exportable="true"
5048 17 Aug 09 nicklas 261       />
5048 17 Aug 09 nicklas 262       <tbl:columndef 
5048 17 Aug 09 nicklas 263         id="session"
5048 17 Aug 09 nicklas 264         property="$hst.session.loginTime"
5048 17 Aug 09 nicklas 265         exportproperty="changeHistory.session.loginTime"
5048 17 Aug 09 nicklas 266         datatype="date"
5048 17 Aug 09 nicklas 267         title="Session"
5048 17 Aug 09 nicklas 268         sortable="true" 
5048 17 Aug 09 nicklas 269         filterable="true"
5048 17 Aug 09 nicklas 270         exportable="true"
7952 12 May 21 nicklas 271         show="<%=isSessionLog?"never":"auto" %>"
5048 17 Aug 09 nicklas 272       />
5048 17 Aug 09 nicklas 273       <tbl:columndef 
5048 17 Aug 09 nicklas 274         id="client"
5048 17 Aug 09 nicklas 275         property="$hst.client.name"
5048 17 Aug 09 nicklas 276         exportproperty="changeHistory.client.name"
5048 17 Aug 09 nicklas 277         datatype="string"
5048 17 Aug 09 nicklas 278         title="Client"
5048 17 Aug 09 nicklas 279         sortable="true" 
5048 17 Aug 09 nicklas 280         filterable="true"
5048 17 Aug 09 nicklas 281         exportable="true"
5048 17 Aug 09 nicklas 282       />
5048 17 Aug 09 nicklas 283       <tbl:columndef 
5048 17 Aug 09 nicklas 284         id="project"
5048 17 Aug 09 nicklas 285         property="$hst.project.name"
5048 17 Aug 09 nicklas 286         exportproperty="changeHistory.project.name"
5048 17 Aug 09 nicklas 287         datatype="string"
5048 17 Aug 09 nicklas 288         title="Project"
5048 17 Aug 09 nicklas 289         sortable="true" 
5048 17 Aug 09 nicklas 290         filterable="true"
5048 17 Aug 09 nicklas 291         exportable="true"
5048 17 Aug 09 nicklas 292       />
5048 17 Aug 09 nicklas 293       <tbl:columndef 
5048 17 Aug 09 nicklas 294         id="plugin"
5048 17 Aug 09 nicklas 295         property="$hst.plugin.name"
5048 17 Aug 09 nicklas 296         exportproperty="changeHistory.plugin.name"
5048 17 Aug 09 nicklas 297         datatype="string"
5048 17 Aug 09 nicklas 298         title="Plugin"
5048 17 Aug 09 nicklas 299         sortable="true"
5048 17 Aug 09 nicklas 300         filterable="true"
5048 17 Aug 09 nicklas 301         exportable="true"
5048 17 Aug 09 nicklas 302       />
5048 17 Aug 09 nicklas 303       <tbl:columndef 
5048 17 Aug 09 nicklas 304         id="job"
5048 17 Aug 09 nicklas 305         property="$hst.job.name"
5048 17 Aug 09 nicklas 306         exportproperty="changeHistory.job.name"
5048 17 Aug 09 nicklas 307         datatype="string"
5048 17 Aug 09 nicklas 308         title="Job"
5048 17 Aug 09 nicklas 309         sortable="true" 
5048 17 Aug 09 nicklas 310         filterable="true"
5048 17 Aug 09 nicklas 311         exportable="true"
5048 17 Aug 09 nicklas 312       />
5048 17 Aug 09 nicklas 313       <tbl:columndef 
5048 17 Aug 09 nicklas 314         id="changeInfo"
5048 17 Aug 09 nicklas 315         property="changeInfo"
5048 17 Aug 09 nicklas 316         datatype="string"
7166 07 Jun 16 nicklas 317         title="Information" 
5048 17 Aug 09 nicklas 318         sortable="true" 
5048 17 Aug 09 nicklas 319         filterable="true" 
5048 17 Aug 09 nicklas 320         exportable="true"
5048 17 Aug 09 nicklas 321       />
6355 26 Nov 13 nicklas 322       <%
6355 26 Nov 13 nicklas 323       if (sc.hasPermission(Permission.READ, Item.CHANGEHISTORY_VALUES))
6355 26 Nov 13 nicklas 324       {
6355 26 Nov 13 nicklas 325         %>
6355 26 Nov 13 nicklas 326         <tbl:columndef
6355 26 Nov 13 nicklas 327           id="oldValue"
6355 26 Nov 13 nicklas 328           property="oldValue"
6355 26 Nov 13 nicklas 329           datatype="string"
6355 26 Nov 13 nicklas 330           title="Old value"
6355 26 Nov 13 nicklas 331           sortable="true" 
6355 26 Nov 13 nicklas 332           filterable="true"
6355 26 Nov 13 nicklas 333           exportable="true"
6355 26 Nov 13 nicklas 334         />
6355 26 Nov 13 nicklas 335         <tbl:columndef
6355 26 Nov 13 nicklas 336           id="newValue"
6355 26 Nov 13 nicklas 337           property="newValue"
6355 26 Nov 13 nicklas 338           datatype="string"
6355 26 Nov 13 nicklas 339           title="New value"
6355 26 Nov 13 nicklas 340           sortable="true" 
6355 26 Nov 13 nicklas 341           filterable="true" 
6355 26 Nov 13 nicklas 342           exportable="true"
6355 26 Nov 13 nicklas 343         />
6355 26 Nov 13 nicklas 344         <%
6355 26 Nov 13 nicklas 345       }
6355 26 Nov 13 nicklas 346       %>
6351 25 Nov 13 nicklas 347        <tbl:columndef 
6040 30 Mar 12 nicklas 348         id="xt-columns" 
6040 30 Mar 12 nicklas 349         extensions="<%=columnsInvoker%>" 
6040 30 Mar 12 nicklas 350         jspcontext="<%=jspContext%>" 
6040 30 Mar 12 nicklas 351       />
6604 18 Nov 14 nicklas 352       <div class="panelgroup bg-filled-50 bottomborder">
5951 09 Feb 12 nicklas 353         <tbl:toolbar
5951 09 Feb 12 nicklas 354           visible="<%=mode.hasToolbar()%>"
5951 09 Feb 12 nicklas 355           subclass="bottomborder"
5951 09 Feb 12 nicklas 356           >
5951 09 Feb 12 nicklas 357           <tbl:button 
6244 25 Feb 13 nicklas 358             id="btnColumns"
5951 09 Feb 12 nicklas 359             image="columns.png" 
5951 09 Feb 12 nicklas 360             title="Columns&hellip;" 
5951 09 Feb 12 nicklas 361             tooltip="Show, hide and re-order columns" 
5951 09 Feb 12 nicklas 362           />
5951 09 Feb 12 nicklas 363           <tbl:button 
6244 25 Feb 13 nicklas 364             id="btnExport"
6244 25 Feb 13 nicklas 365             data-plugin-type="EXPORT"
5951 09 Feb 12 nicklas 366             image="export.png" 
5951 09 Feb 12 nicklas 367             title="Export&hellip;" 
5951 09 Feb 12 nicklas 368             tooltip="Export data" 
5951 09 Feb 12 nicklas 369             visible="<%=pluginCount.containsKey(Plugin.MainType.EXPORT)%>"
5951 09 Feb 12 nicklas 370           />
5951 09 Feb 12 nicklas 371           <ext:render extensions="<%=invoker%>" context="<%=jspContext%>" 
7604 25 Feb 19 nicklas 372             wrapper="<%=new PrefixSuffixRenderer<ButtonAction>(jspContext, "<td>", "</td>") %>"/>
5951 09 Feb 12 nicklas 373         </tbl:toolbar>
5951 09 Feb 12 nicklas 374         <tbl:panel>
6182 23 Oct 12 nicklas 375           <tbl:presetselector />
5951 09 Feb 12 nicklas 376           <tbl:navigator
5951 09 Feb 12 nicklas 377             page="<%=cc.getPage()%>" 
5951 09 Feb 12 nicklas 378             rowsperpage="<%=cc.getRowsPerPage()%>" 
5951 09 Feb 12 nicklas 379             totalrows="<%=history == null ? 0 : history.getTotalCount()%>" 
5951 09 Feb 12 nicklas 380             visible="<%=mode.hasNavigator()%>"
5951 09 Feb 12 nicklas 381           />
5951 09 Feb 12 nicklas 382         </tbl:panel>
5951 09 Feb 12 nicklas 383       </div>
5048 17 Aug 09 nicklas 384       <tbl:data>
5948 08 Feb 12 nicklas 385         <tbl:headers>
5948 08 Feb 12 nicklas 386           <tbl:headerrow>
7943 04 May 21 nicklas 387             <tbl:header clazz="row-index bg-filled-100" />
5948 08 Feb 12 nicklas 388             <tbl:columnheaders />
5948 08 Feb 12 nicklas 389           </tbl:headerrow>
6707 02 Feb 15 nicklas 390           <%
6707 02 Feb 15 nicklas 391           int numFilters = cc.getNumPropertyFilters();
6707 02 Feb 15 nicklas 392           int numRows = cc.getFilterRows();
6707 02 Feb 15 nicklas 393           for (int filterNo = 0; filterNo < numRows; filterNo++)
6707 02 Feb 15 nicklas 394           {
6707 02 Feb 15 nicklas 395             boolean lastRow = filterNo == numRows-1;
6707 02 Feb 15 nicklas 396             %>
6707 02 Feb 15 nicklas 397             <tbl:headerrow>
7943 04 May 21 nicklas 398               <tbl:header subclass="row-index bg-filled-100">
7943 04 May 21 nicklas 399                 <div class="index-<%=mode.getName()%>">
7943 04 May 21 nicklas 400                   <div class="index"></div>
7943 04 May 21 nicklas 401                   <div class="check">
7943 04 May 21 nicklas 402                     <base:icon 
7943 04 May 21 nicklas 403                       subclass="link table-check"
7943 04 May 21 nicklas 404                       image="check_uncheck.png" 
7943 04 May 21 nicklas 405                       tooltip="Toggle all (use CTRL, ALT or SHIFT to check/uncheck)" 
7943 04 May 21 nicklas 406                       visible="<%=lastRow && mode.hasCheck()%>"
7943 04 May 21 nicklas 407                     />
7943 04 May 21 nicklas 408                   </div>
7943 04 May 21 nicklas 409                   <div class="icons">
7943 04 May 21 nicklas 410                     <base:icon
7943 04 May 21 nicklas 411                       subclass="link table-filter-row-action"
7943 04 May 21 nicklas 412                       image="add.png"
7943 04 May 21 nicklas 413                       tooltip="Add extra filter row"
7943 04 May 21 nicklas 414                       visible="<%=lastRow%>"
7943 04 May 21 nicklas 415                     /><base:icon
7943 04 May 21 nicklas 416                       subclass="link table-filter-row-action"
7943 04 May 21 nicklas 417                       image="remove.png"
7943 04 May 21 nicklas 418                       tooltip="Remove this filter row"
7943 04 May 21 nicklas 419                       visible="<%=numRows > 1 || numFilters > 0 %>"
7943 04 May 21 nicklas 420                       data-remove-row="<%=filterNo%>"
7943 04 May 21 nicklas 421                     />
7943 04 May 21 nicklas 422                   </div>
7943 04 May 21 nicklas 423                 </div>
6707 02 Feb 15 nicklas 424               </tbl:header>
6707 02 Feb 15 nicklas 425               <tbl:propertyfilter row="<%=filterNo%>" />
6707 02 Feb 15 nicklas 426             </tbl:headerrow>
6707 02 Feb 15 nicklas 427             <%
6707 02 Feb 15 nicklas 428           }
6707 02 Feb 15 nicklas 429           %>
7913 22 Feb 21 nicklas 430           <tbl:columnsubtitles />
5948 08 Feb 12 nicklas 431         </tbl:headers>
5948 08 Feb 12 nicklas 432         <tbl:rows>
5048 17 Aug 09 nicklas 433           <%
5951 09 Feb 12 nicklas 434           if (cc.getMessage() != null)
5951 09 Feb 12 nicklas 435           {
5951 09 Feb 12 nicklas 436             %>
6604 18 Nov 14 nicklas 437             <tbl:panel subclass="bg-filled-50">
5951 09 Feb 12 nicklas 438               <div class="messagecontainer error"><%=cc.getMessage()%></div>
5951 09 Feb 12 nicklas 439             </tbl:panel>
5951 09 Feb 12 nicklas 440             <%
5951 09 Feb 12 nicklas 441             cc.setMessage(null);
5951 09 Feb 12 nicklas 442           }
5048 17 Aug 09 nicklas 443           int index = cc.getPage()*cc.getRowsPerPage();
5048 17 Aug 09 nicklas 444           int selectedItemId = cc.getId();
5048 17 Aug 09 nicklas 445           if (history != null)
7949 10 May 21 nicklas 446           {
7949 10 May 21 nicklas 447             int colorNo = 0;
7949 10 May 21 nicklas 448             int prevTransactId = 0;
7952 12 May 21 nicklas 449             int thisTransactId = 0;
7949 10 May 21 nicklas 450             int nextTransactId = 0;
7949 10 May 21 nicklas 451             // TransactionID->Color is mapped on first entry with given TransactionID
7949 10 May 21 nicklas 452             Map<Integer, String> colors = new HashMap<>();
7949 10 May 21 nicklas 453             ChangeHistory nextItem = history.hasNext() ? history.next() : null;
7949 10 May 21 nicklas 454             while (nextItem != null)
5048 17 Aug 09 nicklas 455             {
7949 10 May 21 nicklas 456               // We need access to the next item after the current one
7949 10 May 21 nicklas 457               ChangeHistory item = nextItem;
7949 10 May 21 nicklas 458               nextItem = history.hasNext() ? history.next() : null;
7949 10 May 21 nicklas 459               
5048 17 Aug 09 nicklas 460               int itemId = item.getId();
7949 10 May 21 nicklas 461               String name = HTML.encodeTags(item.getName());
5048 17 Aug 09 nicklas 462               String tooltip = mode.isSelectionMode() ? 
5048 17 Aug 09 nicklas 463                   "Select this item" : "View this item";
5048 17 Aug 09 nicklas 464               index++;
5048 17 Aug 09 nicklas 465               numListed++;
7949 10 May 21 nicklas 466               
7952 12 May 21 nicklas 467               prevTransactId = thisTransactId;
7952 12 May 21 nicklas 468               thisTransactId = item.getTransactionId();
7949 10 May 21 nicklas 469               nextTransactId = nextItem != null ? nextItem.getTransactionId() : 0;              
7952 12 May 21 nicklas 470               String color = colors.get(thisTransactId);
7949 10 May 21 nicklas 471               if (color == null)
7949 10 May 21 nicklas 472               {
7949 10 May 21 nicklas 473                 color = COLORS[colorNo % COLORS.length];
7949 10 May 21 nicklas 474                 colorNo++;
7952 12 May 21 nicklas 475                 colors.put(thisTransactId, color);
7952 12 May 21 nicklas 476                 transactStyles.append(".transact-"+thisTransactId+" .transact-box.transact-"+thisTransactId+" { border-width: 2px; border-color: black; }\n");
7949 10 May 21 nicklas 477               }
5048 17 Aug 09 nicklas 478               %>
7952 12 May 21 nicklas 479               <tbl:row subclass="auto-init" data-auto-init="transact-box" data-transact-id="<%=thisTransactId%>">
7943 04 May 21 nicklas 480                 <tbl:header clazz="row-index bg-filled-100">
7943 04 May 21 nicklas 481                   <div class="index-<%=mode.getName()%>">
7943 04 May 21 nicklas 482                     <div class="index <%=index>999?"index-smaller":""%>"><%=index%></div>
7943 04 May 21 nicklas 483                     <div class="check">
7943 04 May 21 nicklas 484                       <base:input
7943 04 May 21 nicklas 485                         type="checkbox" 
7943 04 May 21 nicklas 486                         name="<%=itemId%>" 
7943 04 May 21 nicklas 487                         value="<%=itemId%>" 
7943 04 May 21 nicklas 488                         checked="<%=cc.getSelected().contains(itemId)%>"
7943 04 May 21 nicklas 489                         visible="<%=mode.hasCheck()%>"
7943 04 May 21 nicklas 490                       />
7943 04 May 21 nicklas 491                       <base:input 
7943 04 May 21 nicklas 492                         type="radio" 
7943 04 May 21 nicklas 493                         name="item_id" 
7943 04 May 21 nicklas 494                         value="<%=itemId%>" 
7943 04 May 21 nicklas 495                         checked="<%=selectedItemId == itemId%>"
7943 04 May 21 nicklas 496                         visible="<%=mode.hasRadio()%>"
7943 04 May 21 nicklas 497                       />
7943 04 May 21 nicklas 498                     </div>
7952 12 May 21 nicklas 499                     <div class="icons transact-box transact-<%=thisTransactId%><%=thisTransactId==prevTransactId?" same-as-previous":""%><%=thisTransactId==nextTransactId?" same-as-next":""%>" 
7952 12 May 21 nicklas 500                       data-transact-id="<%=thisTransactId%>" style="background-color: <%=color%>;"></div>
7943 04 May 21 nicklas 501                   </div>
7943 04 May 21 nicklas 502                 </tbl:header>
6244 25 Feb 13 nicklas 503                 <tbl:cell column="time"><div 
6244 25 Feb 13 nicklas 504                     class="link table-item"
6244 25 Feb 13 nicklas 505                     data-item-id="<%=itemId%>"
6244 25 Feb 13 nicklas 506                     data-no-edit="1" tabindex="0"
7943 04 May 21 nicklas 507                     title="<%=tooltip%>" style="white-space: nowrap;"><%=dateFormatter.format(item.getTime())%></div>
6244 25 Feb 13 nicklas 508                   </tbl:cell>
7952 12 May 21 nicklas 509                 <tbl:cell column="transaction"><span class="link auto-init" data-auto-init="transact-link" data-session-id="<%=item.getSessionId()%>" data-transact-id="<%=item.getTransactionId()%>" title="View changes in this transaction"><%=HTML.encodeTags(item.getName())%></span></tbl:cell>
5048 17 Aug 09 nicklas 510                 <tbl:cell column="id"><%=item.getId()%></tbl:cell>
5048 17 Aug 09 nicklas 511                 <tbl:cell column="changeType"><%=item.getChangeType()%></tbl:cell>
7952 12 May 21 nicklas 512                 <tbl:cell column="item"><%=ChangeHistoryUtil.getItem(dc, item, mode.hasPropertyLink(), mode.hasEditLink())%></tbl:cell>
7952 12 May 21 nicklas 513                 <tbl:cell column="itemType"><%=item.getItemType()%></tbl:cell>
5048 17 Aug 09 nicklas 514                 <tbl:cell column="changeInfo"><%=HTML.niceFormat(item.getChangeInfo())%></tbl:cell>
6351 25 Nov 13 nicklas 515                 <tbl:cell column="oldValue"><%=HTML.niceFormat(item.getOldValue())%></tbl:cell>
6351 25 Nov 13 nicklas 516                 <tbl:cell column="newValue"><%=HTML.niceFormat(item.getNewValue())%></tbl:cell>
5048 17 Aug 09 nicklas 517                 <tbl:cell column="user"><%=ChangeHistoryUtil.getUser(dc, item, mode.hasPropertyLink(), mode.hasEditLink())%></tbl:cell>
7952 12 May 21 nicklas 518                 <tbl:cell column="session"><%=ChangeHistoryUtil.getSession(dc, item, mode.hasPropertyLink(), false)%></tbl:cell>
5048 17 Aug 09 nicklas 519                 <tbl:cell column="client"><%=ChangeHistoryUtil.getClient(dc, item, mode.hasPropertyLink(), mode.hasEditLink())%></tbl:cell>
5048 17 Aug 09 nicklas 520                 <tbl:cell column="project"><%=ChangeHistoryUtil.getProject(dc, item, mode.hasPropertyLink(), mode.hasEditLink())%></tbl:cell>
5048 17 Aug 09 nicklas 521                 <tbl:cell column="plugin"><%=ChangeHistoryUtil.getPlugin(dc, item, mode.hasPropertyLink(), mode.hasEditLink())%></tbl:cell>
5048 17 Aug 09 nicklas 522                 <tbl:cell column="job"><%=ChangeHistoryUtil.getJob(dc, item, mode.hasPropertyLink(), mode.hasEditLink())%></tbl:cell>
6040 30 Mar 12 nicklas 523                 <tbl:xt-cells dc="<%=dc%>" item="<%=item%>">
6040 30 Mar 12 nicklas 524                   <tbl:cell column="xt-columns" />
6040 30 Mar 12 nicklas 525                 </tbl:xt-cells>
5048 17 Aug 09 nicklas 526               </tbl:row>
5048 17 Aug 09 nicklas 527               <%
5048 17 Aug 09 nicklas 528               }
5048 17 Aug 09 nicklas 529             }
5951 09 Feb 12 nicklas 530           if (numListed == 0)
5951 09 Feb 12 nicklas 531           {
5951 09 Feb 12 nicklas 532             %>
6604 18 Nov 14 nicklas 533             <tbl:panel subclass="bg-filled-50">
5951 09 Feb 12 nicklas 534               <div class="messagecontainer note">
5951 09 Feb 12 nicklas 535               <%=history == null || history.getTotalCount() == 0 ? "No history entries were found" : "No history entries on this page. Please select another page!" %>
5951 09 Feb 12 nicklas 536               </div>
5951 09 Feb 12 nicklas 537             </tbl:panel>
5951 09 Feb 12 nicklas 538             <%
5951 09 Feb 12 nicklas 539           }
5048 17 Aug 09 nicklas 540           %>
5951 09 Feb 12 nicklas 541         </tbl:rows>
5048 17 Aug 09 nicklas 542       </tbl:data>
5048 17 Aug 09 nicklas 543     </tbl:table>
7949 10 May 21 nicklas 544     
7949 10 May 21 nicklas 545     <style>
7949 10 May 21 nicklas 546     /* Add borders around currently active transaction */
7949 10 May 21 nicklas 547     <%=transactStyles.toString()%>
7949 10 May 21 nicklas 548     </style>  
5048 17 Aug 09 nicklas 549   </base:body>
5048 17 Aug 09 nicklas 550   </base:page>
5048 17 Aug 09 nicklas 551   <%
5048 17 Aug 09 nicklas 552 }
5048 17 Aug 09 nicklas 553 finally
5048 17 Aug 09 nicklas 554 {
5048 17 Aug 09 nicklas 555   if (dc != null) dc.close();
5048 17 Aug 09 nicklas 556 }
5048 17 Aug 09 nicklas 557
5048 17 Aug 09 nicklas 558 %>