www/admin/extensions/details.jsp

Code
Comments
Other
Rev Date Author Line
4198 28 Mar 08 nicklas 1 <%-- $Id:details.jsp 4187 2008-03-20 11:15:25Z nicklas $
4168 04 Mar 08 nicklas 2   ------------------------------------------------------------------
4168 04 Mar 08 nicklas 3   Copyright (C) 2006 Nicklas Nordborg
4168 04 Mar 08 nicklas 4
4168 04 Mar 08 nicklas 5   This file is part of BASE - BioArray Software Environment.
4168 04 Mar 08 nicklas 6   Available at http://base.thep.lu.se/
4168 04 Mar 08 nicklas 7
4168 04 Mar 08 nicklas 8   BASE is free software; you can redistribute it and/or
4168 04 Mar 08 nicklas 9   modify it under the terms of the GNU General Public License
4476 05 Sep 08 jari 10   as published by the Free Software Foundation; either version 3
4168 04 Mar 08 nicklas 11   of the License, or (at your option) any later version.
4168 04 Mar 08 nicklas 12
4168 04 Mar 08 nicklas 13   BASE is distributed in the hope that it will be useful,
4168 04 Mar 08 nicklas 14   but WITHOUT ANY WARRANTY; without even the implied warranty of
4168 04 Mar 08 nicklas 15   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
4168 04 Mar 08 nicklas 16   GNU General Public License for more details.
4168 04 Mar 08 nicklas 17
4168 04 Mar 08 nicklas 18   You should have received a copy of the GNU General Public License
4510 11 Sep 08 jari 19   along with BASE. If not, see <http://www.gnu.org/licenses/>.
4168 04 Mar 08 nicklas 20   ------------------------------------------------------------------
4168 04 Mar 08 nicklas 21
4168 04 Mar 08 nicklas 22   @author Nicklas
4168 04 Mar 08 nicklas 23   @version 2.0
4168 04 Mar 08 nicklas 24 --%>
5426 24 Sep 10 nicklas 25 <%@ page pageEncoding="UTF-8" session="false"
4168 04 Mar 08 nicklas 26   import="net.sf.basedb.core.SessionControl"
4168 04 Mar 08 nicklas 27   import="net.sf.basedb.core.DbControl"
4168 04 Mar 08 nicklas 28   import="net.sf.basedb.core.Client"
6140 20 Sep 12 nicklas 29   import="net.sf.basedb.core.PluginDefinition"
4168 04 Mar 08 nicklas 30   import="net.sf.basedb.core.Item"
4168 04 Mar 08 nicklas 31   import="net.sf.basedb.core.Permission"
4168 04 Mar 08 nicklas 32   import="net.sf.basedb.clients.web.Base"
4168 04 Mar 08 nicklas 33   import="net.sf.basedb.clients.web.util.HTML"
4168 04 Mar 08 nicklas 34   import="net.sf.basedb.util.Values"
4168 04 Mar 08 nicklas 35    import="net.sf.basedb.core.ItemNotFoundException"
4618 30 Oct 08 nicklas 36    import="net.sf.basedb.util.error.ThrowableUtil"
4168 04 Mar 08 nicklas 37    import="net.sf.basedb.util.extensions.ExtensionPoint"
4168 04 Mar 08 nicklas 38   import="net.sf.basedb.util.extensions.Extension"
4198 28 Mar 08 nicklas 39   import="net.sf.basedb.util.extensions.ActionFactory"
4198 28 Mar 08 nicklas 40   import="net.sf.basedb.util.extensions.RendererFactory"
4198 28 Mar 08 nicklas 41   import="net.sf.basedb.util.extensions.AboutBean"
5601 01 Apr 11 nicklas 42   import="net.sf.basedb.util.extensions.manager.ExtensionsFile"
5602 07 Apr 11 nicklas 43   import="net.sf.basedb.util.extensions.manager.ExtensionPointKey"
5602 07 Apr 11 nicklas 44   import="net.sf.basedb.util.extensions.manager.ExtensionKey"
5615 19 Apr 11 nicklas 45   import="net.sf.basedb.util.extensions.manager.PluginInfoKey"
5602 07 Apr 11 nicklas 46   import="net.sf.basedb.util.extensions.manager.FactoryParametersKey"
5602 07 Apr 11 nicklas 47   import="net.sf.basedb.util.extensions.manager.ProcessResults"
5602 07 Apr 11 nicklas 48   import="net.sf.basedb.util.extensions.manager.ProcessResults.FileResults"
8144 21 Apr 23 nicklas 49   import="net.sf.basedb.util.extensions.logging.ExtensionsLog"
5615 19 Apr 11 nicklas 50   import="net.sf.basedb.util.extensions.xml.PluginInfo"
4181 18 Mar 08 nicklas 51   import="net.sf.basedb.clients.web.extensions.ExtensionsControl"
4198 28 Mar 08 nicklas 52   import="net.sf.basedb.clients.web.formatter.FormatterFactory"
4198 28 Mar 08 nicklas 53   import="net.sf.basedb.util.formatter.Formatter"
4168 04 Mar 08 nicklas 54   import="net.sf.basedb.core.plugin.About"
4168 04 Mar 08 nicklas 55   import="java.util.List"
4198 28 Mar 08 nicklas 56   import="java.util.Date"
4168 04 Mar 08 nicklas 57   import="java.util.Iterator"
4168 04 Mar 08 nicklas 58 %>
4168 04 Mar 08 nicklas 59 <%@ taglib prefix="base" uri="/WEB-INF/base.tld" %>
4168 04 Mar 08 nicklas 60 <%@ taglib prefix="tbl" uri="/WEB-INF/table.tld" %>
4198 28 Mar 08 nicklas 61 <%!
4198 28 Mar 08 nicklas 62 String displayFactory(ExtensionsFile file, Object factory)
4198 28 Mar 08 nicklas 63 {
4198 28 Mar 08 nicklas 64   if (factory == null)
4198 28 Mar 08 nicklas 65   {
4198 28 Mar 08 nicklas 66     return "<i>- none -</i>";
4198 28 Mar 08 nicklas 67   }
4198 28 Mar 08 nicklas 68   String text = factory.getClass().getName();
5602 07 Apr 11 nicklas 69   String parameters = file == null ? null : file.getMetadata(new FactoryParametersKey(factory));
4198 28 Mar 08 nicklas 70   if (parameters != null)
4198 28 Mar 08 nicklas 71   {
4198 28 Mar 08 nicklas 72     text += "<pre>" + HTML.encodeTags(parameters) + "</pre>";
4198 28 Mar 08 nicklas 73   }
4198 28 Mar 08 nicklas 74   return text;
4198 28 Mar 08 nicklas 75 }
4198 28 Mar 08 nicklas 76 %>
4168 04 Mar 08 nicklas 77 <%
4168 04 Mar 08 nicklas 78 final SessionControl sc = Base.getExistingSessionControl(pageContext, true);
4168 04 Mar 08 nicklas 79 final String ID = sc.getId();
4168 04 Mar 08 nicklas 80 final float scale = Base.getScale(sc);
4168 04 Mar 08 nicklas 81 String extensionId = request.getParameter("extensionId");
4168 04 Mar 08 nicklas 82 String extensionPointId = request.getParameter("extensionPointId");
5602 07 Apr 11 nicklas 83 String fileuri = request.getParameter("fileuri");
4168 04 Mar 08 nicklas 84
7954 12 May 21 nicklas 85 DbControl dc = sc.newDbControl(":View extension details");
4168 04 Mar 08 nicklas 86 try
4168 04 Mar 08 nicklas 87 {
4181 18 Mar 08 nicklas 88   final ExtensionsControl ec = ExtensionsControl.get(dc);
4181 18 Mar 08 nicklas 89   final boolean writePermission = ec.hasPermission(Permission.WRITE);
7604 25 Feb 19 nicklas 90   Formatter<Date> dateTimeFormatter = FormatterFactory.getDateTimeFormatter(sc);
4168 04 Mar 08 nicklas 91   
4168 04 Mar 08 nicklas 92   Extension<?> ext = null;
4168 04 Mar 08 nicklas 93   ExtensionPoint<?> ep = null;
4198 28 Mar 08 nicklas 94   ExtensionsFile file = null;
4202 01 Apr 08 nicklas 95   ExtensionsFile extFile = null;
4202 01 Apr 08 nicklas 96   ExtensionsFile epFile = null;
4202 01 Apr 08 nicklas 97
5602 07 Apr 11 nicklas 98   if (fileuri != null)
4198 28 Mar 08 nicklas 99   {
5602 07 Apr 11 nicklas 100     file = ec.getFile(fileuri);
4198 28 Mar 08 nicklas 101     if (file == null)
4198 28 Mar 08 nicklas 102     {
5602 07 Apr 11 nicklas 103       throw new ItemNotFoundException("ExtensionsFile[uri=" + fileuri + "]");
4198 28 Mar 08 nicklas 104     }
4198 28 Mar 08 nicklas 105   }
4168 04 Mar 08 nicklas 106   
4168 04 Mar 08 nicklas 107   if (extensionId != null)
4168 04 Mar 08 nicklas 108   {
4181 18 Mar 08 nicklas 109     ext = ec.getExtension(extensionId);
4168 04 Mar 08 nicklas 110     if (ext == null)
4168 04 Mar 08 nicklas 111     {
4168 04 Mar 08 nicklas 112       throw new ItemNotFoundException("Extension[id=" + extensionId + "]");
4168 04 Mar 08 nicklas 113     }
4168 04 Mar 08 nicklas 114     extensionPointId = ext.getExtends();
5602 07 Apr 11 nicklas 115     extFile = ec.getFileByObjectKey(new ExtensionKey(extensionId));
4168 04 Mar 08 nicklas 116   }
4168 04 Mar 08 nicklas 117   
4168 04 Mar 08 nicklas 118   if (extensionPointId != null)
4168 04 Mar 08 nicklas 119   {
4181 18 Mar 08 nicklas 120     ep = ec.getExtensionPoint(extensionPointId);
4168 04 Mar 08 nicklas 121     if (ep == null)
4168 04 Mar 08 nicklas 122     {
4168 04 Mar 08 nicklas 123       throw new ItemNotFoundException("ExtensionPoint[id=" + extensionPointId + "]");
4168 04 Mar 08 nicklas 124     }
5602 07 Apr 11 nicklas 125     epFile = ec.getFileByObjectKey(new ExtensionPointKey(extensionPointId));
4168 04 Mar 08 nicklas 126   }
4198 28 Mar 08 nicklas 127 %>
5951 09 Feb 12 nicklas 128 <base:page title="" type="iframe">
6386 18 Dec 13 nicklas 129   <base:head scripts="table.js,dragdrop.js,~details.js" styles="table.css,toolbar.css" />
6259 25 Mar 13 nicklas 130   <base:body>
4168 04 Mar 08 nicklas 131
6194 01 Nov 12 nicklas 132     <div class="absolutefull auto-init" data-auto-init="drag-support">
4168 04 Mar 08 nicklas 133
6605 18 Nov 14 nicklas 134     <tbl:toolbar subclass="bottomborder bg-filled-50">
6259 25 Mar 13 nicklas 135     <tbl:button
6259 25 Mar 13 nicklas 136       id="btnInstall"
6259 25 Mar 13 nicklas 137       title="Install/uninstall&hellip;"
6259 25 Mar 13 nicklas 138       image="new_wizard.png"
6259 25 Mar 13 nicklas 139       tooltip="Install and uninstall extensions and plug-ins"
6259 25 Mar 13 nicklas 140       disabled="<%=!writePermission%>"
6259 25 Mar 13 nicklas 141     />
4168 04 Mar 08 nicklas 142     <%
4168 04 Mar 08 nicklas 143     if (ext != null)
4168 04 Mar 08 nicklas 144     {
4181 18 Mar 08 nicklas 145       boolean isEnabled = ec.isEnabled(ext);
5602 07 Apr 11 nicklas 146       boolean hasRegistrationError = extFile != null && extFile.hasError();
4618 30 Oct 08 nicklas 147       boolean allow = writePermission && !hasRegistrationError;
8144 21 Apr 23 nicklas 148       
8144 21 Apr 23 nicklas 149       String logIcon = "service_log.png";
8144 21 Apr 23 nicklas 150       String logSummary = "This extension doesn't have any log";
8144 21 Apr 23 nicklas 151       int numEntries = 0;
8144 21 Apr 23 nicklas 152       ExtensionsLog log = ExtensionsLog.getLog(extensionId, false);
8144 21 Apr 23 nicklas 153       if (log != null)
8144 21 Apr 23 nicklas 154       {
8144 21 Apr 23 nicklas 155         numEntries = log.getNumEntries();
8144 21 Apr 23 nicklas 156         logSummary = "View the log for this extension; "+
8144 21 Apr 23 nicklas 157           numEntries +" entries; " + 
8144 21 Apr 23 nicklas 158           log.getNumErrors()+" errors; "+
8144 21 Apr 23 nicklas 159           log.getNumWarnings()+" warnings";
8144 21 Apr 23 nicklas 160         if (log.getNumErrors() > 0)
8144 21 Apr 23 nicklas 161         {
8144 21 Apr 23 nicklas 162           logIcon = "service_log_error.png";
8144 21 Apr 23 nicklas 163         }
8144 21 Apr 23 nicklas 164         else if (log.getNumWarnings() > 0)
8144 21 Apr 23 nicklas 165         {
8144 21 Apr 23 nicklas 166           logIcon = "service_log_warning.png";
8144 21 Apr 23 nicklas 167         }
8144 21 Apr 23 nicklas 168       }
4168 04 Mar 08 nicklas 169       %>
4168 04 Mar 08 nicklas 170       <tbl:button 
6259 25 Mar 13 nicklas 171         id="btnToggleExtension"
6259 25 Mar 13 nicklas 172         data-extension-id="<%=extensionId%>"
6259 25 Mar 13 nicklas 173         data-is-enabled="<%=isEnabled ? "1" : "0"%>"
4168 04 Mar 08 nicklas 174         title="<%=isEnabled ? "Disable" : "Enable" %>" 
6381 17 Dec 13 nicklas 175         image="extension.png"
6259 25 Mar 13 nicklas 176         tooltip="Disable/enable this extension"
4202 01 Apr 08 nicklas 177         disabled="<%=!allow%>"
4168 04 Mar 08 nicklas 178       />
4198 28 Mar 08 nicklas 179       <tbl:button
8144 21 Apr 23 nicklas 180         id="btnViewLog"
8144 21 Apr 23 nicklas 181         data-extension-id="<%=extensionId%>"
8144 21 Apr 23 nicklas 182         image="<%=logIcon%>" 
8144 21 Apr 23 nicklas 183         tooltip="<%=logSummary%>"
8144 21 Apr 23 nicklas 184         visible="<%=log != null%>"
8144 21 Apr 23 nicklas 185         title="<%="View log ("+numEntries+")&hellip;"%>"
8144 21 Apr 23 nicklas 186       />
8144 21 Apr 23 nicklas 187       <tbl:button
5901 08 Dec 11 nicklas 188         image="help.png"
6259 25 Mar 13 nicklas 189         subclass="auto-init"
6259 25 Mar 13 nicklas 190         data-auto-init="help"
6259 25 Mar 13 nicklas 191         data-help-id="extensions.details.extension"
4198 28 Mar 08 nicklas 192         title="Help&hellip;"
4198 28 Mar 08 nicklas 193         tooltip="Get help about this page"
4198 28 Mar 08 nicklas 194       />
4168 04 Mar 08 nicklas 195       <%
4168 04 Mar 08 nicklas 196     }
4168 04 Mar 08 nicklas 197     else if (ep != null)
4168 04 Mar 08 nicklas 198     {
4181 18 Mar 08 nicklas 199       boolean isEnabled = ec.isEnabled(ep);
5602 07 Apr 11 nicklas 200       boolean hasRegistrationError = epFile != null && epFile.hasError();
4618 30 Oct 08 nicklas 201       boolean allow = writePermission && !hasRegistrationError;
4168 04 Mar 08 nicklas 202       %>
4168 04 Mar 08 nicklas 203       <tbl:button 
6259 25 Mar 13 nicklas 204         id="btnToggleExtensionPoint"
6259 25 Mar 13 nicklas 205         data-extension-point-id="<%=extensionPointId%>"
6259 25 Mar 13 nicklas 206         data-is-enabled="<%=isEnabled ? "1" : "0"%>"
4168 04 Mar 08 nicklas 207         title="<%=isEnabled ? "Disable" : "Enable" %>" 
6381 17 Dec 13 nicklas 208         image="extensionpoint.png"
4168 04 Mar 08 nicklas 209         tooltip="Disable this extension point"
4202 01 Apr 08 nicklas 210         disabled="<%=!allow%>"
4168 04 Mar 08 nicklas 211       />
4198 28 Mar 08 nicklas 212       <tbl:button
5901 08 Dec 11 nicklas 213         image="help.png"
6259 25 Mar 13 nicklas 214         subclass="auto-init"
6259 25 Mar 13 nicklas 215         data-auto-init="help"
6259 25 Mar 13 nicklas 216         data-help-id="extensions.details.extensionspoint"
4198 28 Mar 08 nicklas 217         title="Help&hellip;"
4198 28 Mar 08 nicklas 218         tooltip="Get help about this page"
4198 28 Mar 08 nicklas 219       />
4168 04 Mar 08 nicklas 220       <%
4168 04 Mar 08 nicklas 221     }
4198 28 Mar 08 nicklas 222     else if (file != null)
4198 28 Mar 08 nicklas 223     {
5602 07 Apr 11 nicklas 224       boolean hasRegistrationError = file.hasError();
4618 30 Oct 08 nicklas 225       boolean allow = writePermission && !hasRegistrationError;
4198 28 Mar 08 nicklas 226       %>
6259 25 Mar 13 nicklas 227       <tbl:button
6259 25 Mar 13 nicklas 228         id="btnEnableFile" 
6259 25 Mar 13 nicklas 229         data-file-name="<%=HTML.encodeTags(file.getName())%>"
6259 25 Mar 13 nicklas 230         data-file-uri="<%=HTML.encodeTags(fileuri)%>"
6259 25 Mar 13 nicklas 231         data-enable="1"
4198 28 Mar 08 nicklas 232         title="Enable all" 
6381 17 Dec 13 nicklas 233         image="extension.png"
4198 28 Mar 08 nicklas 234         tooltip="Enable all extensions in this file"
4202 01 Apr 08 nicklas 235         disabled="<%=!allow%>"
4198 28 Mar 08 nicklas 236       />
4198 28 Mar 08 nicklas 237       <tbl:button 
6259 25 Mar 13 nicklas 238         id="btnDisableFile" 
6259 25 Mar 13 nicklas 239         data-file-name="<%=HTML.encodeTags(file.getName())%>"
6259 25 Mar 13 nicklas 240         data-file-uri="<%=HTML.encodeTags(fileuri)%>"
6259 25 Mar 13 nicklas 241         data-enable="0"
4198 28 Mar 08 nicklas 242         title="Disable all" 
6381 17 Dec 13 nicklas 243         image="extension.png"
4198 28 Mar 08 nicklas 244         tooltip="Disable all extensions in this file"
4202 01 Apr 08 nicklas 245         disabled="<%=!allow%>"
4198 28 Mar 08 nicklas 246       />
4198 28 Mar 08 nicklas 247       <%
4198 28 Mar 08 nicklas 248     }
4181 18 Mar 08 nicklas 249     else
4181 18 Mar 08 nicklas 250     {
4181 18 Mar 08 nicklas 251       %>
4181 18 Mar 08 nicklas 252       <tbl:button
5901 08 Dec 11 nicklas 253         image="help.png"
6259 25 Mar 13 nicklas 254         subclass="auto-init"
6259 25 Mar 13 nicklas 255         data-auto-init="help"
6259 25 Mar 13 nicklas 256         data-help-id="extensions.details.main"
4198 28 Mar 08 nicklas 257         title="Help&hellip;"
4198 28 Mar 08 nicklas 258         tooltip="Get help about this page"
4198 28 Mar 08 nicklas 259       />
4181 18 Mar 08 nicklas 260       <%
4181 18 Mar 08 nicklas 261     }
4168 04 Mar 08 nicklas 262     %>
4168 04 Mar 08 nicklas 263     </tbl:toolbar>
4168 04 Mar 08 nicklas 264
5918 21 Dec 11 nicklas 265     <div class="bottomborder">
5918 21 Dec 11 nicklas 266       <table class="fullform outlined">
5918 21 Dec 11 nicklas 267       <%
5918 21 Dec 11 nicklas 268       if (ext != null)
4618 30 Oct 08 nicklas 269       {
5918 21 Dec 11 nicklas 270         About about = ext.getAbout();
5918 21 Dec 11 nicklas 271         if (about == null) about = new AboutBean();
5918 21 Dec 11 nicklas 272         Throwable error = ec.getLastExtensionError(ext.getId());
6409 31 Jan 14 nicklas 273         boolean unsafe = ec.checkUnsafeScriptableUsage(ext);
6140 20 Sep 12 nicklas 274         %>
6140 20 Sep 12 nicklas 275         <tbody>
6140 20 Sep 12 nicklas 276         <%
5918 21 Dec 11 nicklas 277         if (error != null)
5918 21 Dec 11 nicklas 278         {
5918 21 Dec 11 nicklas 279           %>
5918 21 Dec 11 nicklas 280           <tr>
5918 21 Dec 11 nicklas 281             <th></th>
5918 21 Dec 11 nicklas 282             <td>
5918 21 Dec 11 nicklas 283             <div class="messagecontainer error">
6259 25 Mar 13 nicklas 284               <base:icon image="error.png"
6259 25 Mar 13 nicklas 285                 subclass="auto-init link"
6259 25 Mar 13 nicklas 286                 data-auto-init="toggle-stacktrace"
6259 25 Mar 13 nicklas 287                 data-stacktrace-id="<%="stacktrace." + ext.getId()%>"
6259 25 Mar 13 nicklas 288                 style="float: left; margin-right: 5px;"
5918 21 Dec 11 nicklas 289                 tooltip="Error - click to show full stack trace"
5918 21 Dec 11 nicklas 290               /><%=error.getMessage() %>
5918 21 Dec 11 nicklas 291               <div id="stacktrace.<%=ext.getId()%>"
5918 21 Dec 11 nicklas 292                 class="stacktrace"
5918 21 Dec 11 nicklas 293                 style="display: none;"
5918 21 Dec 11 nicklas 294                 ><%=ThrowableUtil.stackTraceToString(error)%></div>
5918 21 Dec 11 nicklas 295             </div>
5918 21 Dec 11 nicklas 296             </td>
5918 21 Dec 11 nicklas 297           </tr>
5918 21 Dec 11 nicklas 298           <%
5918 21 Dec 11 nicklas 299         }
6409 31 Jan 14 nicklas 300         if (unsafe)
6409 31 Jan 14 nicklas 301         {
6409 31 Jan 14 nicklas 302           %>
6409 31 Jan 14 nicklas 303           <tr>
6409 31 Jan 14 nicklas 304             <th></th>
6409 31 Jan 14 nicklas 305             <td>
6409 31 Jan 14 nicklas 306             <div class="messagecontainer note">
6409 31 Jan 14 nicklas 307               <base:icon image="warning.png" />
6409 31 Jan 14 nicklas 308               This extension may violate the <b>Content Security Policy</b> 
6409 31 Jan 14 nicklas 309               setting on this server. See BASE documentation for more information.
6409 31 Jan 14 nicklas 310             </div>
6409 31 Jan 14 nicklas 311             </td>
6409 31 Jan 14 nicklas 312           </tr>
6409 31 Jan 14 nicklas 313           <%
6409 31 Jan 14 nicklas 314         }
4618 30 Oct 08 nicklas 315         %>
4168 04 Mar 08 nicklas 316         <tr>
5918 21 Dec 11 nicklas 317           <th>ID</th>
4168 04 Mar 08 nicklas 318           <td><%=ext.getId()%></td>
4168 04 Mar 08 nicklas 319         </tr>
4168 04 Mar 08 nicklas 320         <tr>
5918 21 Dec 11 nicklas 321           <th>Name</th>
4198 28 Mar 08 nicklas 322           <td><%=HTML.encodeTags(about.getName())%></td>
4168 04 Mar 08 nicklas 323         </tr>
4168 04 Mar 08 nicklas 324         <tr>
5918 21 Dec 11 nicklas 325           <th>File</th>
4198 28 Mar 08 nicklas 326           <td>
6259 25 Mar 13 nicklas 327             <a class="auto-init" data-auto-init="show-file" data-file-uri="<%=HTML.encodeTags(extFile.getName()) %>"
4202 01 Apr 08 nicklas 328             ><%=extFile.getName()%></a> 
5603 08 Apr 11 nicklas 329             (<%=extFile.checkModified() ? "Modified" : "Up to date" %>;
5602 07 Apr 11 nicklas 330             <%=extFile.hasError() ? "Error" : "Ok" %>)
4198 28 Mar 08 nicklas 331           </td>
4198 28 Mar 08 nicklas 332         </tr>
4198 28 Mar 08 nicklas 333         <tr>
5918 21 Dec 11 nicklas 334           <th>Version</th>
4198 28 Mar 08 nicklas 335           <td><%=HTML.encodeTags(about.getVersion())%></td>
4168 04 Mar 08 nicklas 336         </tr>
5918 21 Dec 11 nicklas 337         <tr class="big">
5918 21 Dec 11 nicklas 338           <th>Description</th>
4198 28 Mar 08 nicklas 339           <td><%=HTML.niceFormat(about.getDescription())%></td>
4168 04 Mar 08 nicklas 340         </tr>
4168 04 Mar 08 nicklas 341         <tr>
5918 21 Dec 11 nicklas 342           <th>Copyright</th>
4198 28 Mar 08 nicklas 343           <td><%=HTML.encodeTags(about.getCopyright())%></td>
4168 04 Mar 08 nicklas 344         </tr>
4168 04 Mar 08 nicklas 345         <tr>
5918 21 Dec 11 nicklas 346           <th>Contact</th>
4198 28 Mar 08 nicklas 347           <td><%=HTML.encodeTags(about.getContact())%></td>
4168 04 Mar 08 nicklas 348         </tr>
4168 04 Mar 08 nicklas 349         <tr>
5918 21 Dec 11 nicklas 350           <th>Email</th>
6139 19 Sep 12 nicklas 351           <td><%=HTML.scanForLinks(about.getEmail(), HTML.LINK_EMAIL, "_blank")%></td>
4168 04 Mar 08 nicklas 352         </tr>
4198 28 Mar 08 nicklas 353         <tr>
5918 21 Dec 11 nicklas 354           <th>Url</th>
6139 19 Sep 12 nicklas 355           <td><%=HTML.scanForLinks(about.getUrl(), HTML.LINK_URL, "_blank")%></td>
4168 04 Mar 08 nicklas 356         </tr>
5918 21 Dec 11 nicklas 357         <tr class="big">
5918 21 Dec 11 nicklas 358           <th>Action factory</th>
4198 28 Mar 08 nicklas 359           <td><%=displayFactory(extFile, ext.getActionFactory())%></td>
4168 04 Mar 08 nicklas 360         </tr>
5918 21 Dec 11 nicklas 361         <tr class="big">
5918 21 Dec 11 nicklas 362           <th>Renderer factory</th>
4198 28 Mar 08 nicklas 363           <td><%=displayFactory(extFile, ext.getRendererFactory())%></td>
4168 04 Mar 08 nicklas 364         </tr>
5918 21 Dec 11 nicklas 365         </tbody>
4168 04 Mar 08 nicklas 366         <%
4168 04 Mar 08 nicklas 367       }
5918 21 Dec 11 nicklas 368       if (ep != null)
4618 30 Oct 08 nicklas 369       {
5918 21 Dec 11 nicklas 370         if (ext != null)
5918 21 Dec 11 nicklas 371         {
5918 21 Dec 11 nicklas 372           %>
5924 13 Jan 12 nicklas 373           <tbody class="sectionheader">
5918 21 Dec 11 nicklas 374             <tr>
5918 21 Dec 11 nicklas 375               <th colspan="2">Extension point</th>
5918 21 Dec 11 nicklas 376             </tr>
5918 21 Dec 11 nicklas 377           </tbody>
5918 21 Dec 11 nicklas 378           <%
5918 21 Dec 11 nicklas 379         }
4618 30 Oct 08 nicklas 380         %>
5918 21 Dec 11 nicklas 381         <tbody>
5918 21 Dec 11 nicklas 382         <%
5918 21 Dec 11 nicklas 383         Throwable error = ec.getLastExtensionPointError(ep.getId());
5918 21 Dec 11 nicklas 384         if (error != null)
5918 21 Dec 11 nicklas 385         {
5918 21 Dec 11 nicklas 386           %>
5918 21 Dec 11 nicklas 387           <tr>
5918 21 Dec 11 nicklas 388             <th></th>
5918 21 Dec 11 nicklas 389             <td>
5918 21 Dec 11 nicklas 390             <div class="messagecontainer error">
5918 21 Dec 11 nicklas 391               <base:icon image="error.png" 
6259 25 Mar 13 nicklas 392                 subclass="auto-init link"
6259 25 Mar 13 nicklas 393                 data-auto-init="toggle-stacktrace"
6259 25 Mar 13 nicklas 394                 data-stacktrace-id="<%="stacktrace." + ep.getId()%>"
6259 25 Mar 13 nicklas 395                 style="float: left; margin-right: 5px;"
5918 21 Dec 11 nicklas 396                 tooltip="Error - click to show full stack trace"
5918 21 Dec 11 nicklas 397               /><%=error.getMessage() %>
5918 21 Dec 11 nicklas 398               <div id="stacktrace.<%=ep.getId()%>"
5918 21 Dec 11 nicklas 399                 class="stacktrace"
5918 21 Dec 11 nicklas 400                 style="display: none;"
5918 21 Dec 11 nicklas 401                 ><%=ThrowableUtil.stackTraceToString(error)%></div>
5918 21 Dec 11 nicklas 402             </div>
5918 21 Dec 11 nicklas 403             </td>
5918 21 Dec 11 nicklas 404           </tr>
4618 30 Oct 08 nicklas 405           <%
5918 21 Dec 11 nicklas 406         }
5918 21 Dec 11 nicklas 407         %>
5918 21 Dec 11 nicklas 408         <tr>
5918 21 Dec 11 nicklas 409           <th>ID</th>
5918 21 Dec 11 nicklas 410           <td><%=ep.getId()%></td>
5918 21 Dec 11 nicklas 411         </tr>
5918 21 Dec 11 nicklas 412         <tr>
5918 21 Dec 11 nicklas 413           <th>Name</th>
5918 21 Dec 11 nicklas 414           <td><%=HTML.encodeTags(ep.getName())%></td>
5918 21 Dec 11 nicklas 415         </tr>
5918 21 Dec 11 nicklas 416         <tr>
5918 21 Dec 11 nicklas 417           <th>File</th>
5918 21 Dec 11 nicklas 418           <td>
5918 21 Dec 11 nicklas 419             <%
5918 21 Dec 11 nicklas 420             if (epFile != null)
5918 21 Dec 11 nicklas 421             {
5918 21 Dec 11 nicklas 422               %>
6259 25 Mar 13 nicklas 423               <a class="auto-init" data-auto-init="show-file" data-file-uri="<%=HTML.encodeTags(epFile.getName()) %>"
5918 21 Dec 11 nicklas 424               ><%=epFile.getName()%></a> 
5918 21 Dec 11 nicklas 425               (<%=epFile.checkModified() ? "Modified" : "Up to date" %>;
5918 21 Dec 11 nicklas 426               <%=epFile.hasError() ? "Error" : "Ok" %>)
5918 21 Dec 11 nicklas 427               <%
5918 21 Dec 11 nicklas 428             }
5918 21 Dec 11 nicklas 429             %>
5918 21 Dec 11 nicklas 430           </td>
5918 21 Dec 11 nicklas 431         </tr>
5918 21 Dec 11 nicklas 432         <tr class="big">
5918 21 Dec 11 nicklas 433           <th>Description</th>
5918 21 Dec 11 nicklas 434           <td><%=HTML.niceFormat(ep.getDescription())%></td>
5918 21 Dec 11 nicklas 435         </tr>
5918 21 Dec 11 nicklas 436         <tr>
5918 21 Dec 11 nicklas 437           <th>Action class</th>
5918 21 Dec 11 nicklas 438           <td><%=ep.getActionClass().getName()%></td>
5918 21 Dec 11 nicklas 439         </tr>
5918 21 Dec 11 nicklas 440         <tr class="big">
5918 21 Dec 11 nicklas 441           <th>Renderer factory</th>
5918 21 Dec 11 nicklas 442           <td><%=displayFactory(epFile, ep.getRendererFactory())%></td>
5918 21 Dec 11 nicklas 443         </tr>
5918 21 Dec 11 nicklas 444         <tr class="big">
5918 21 Dec 11 nicklas 445           <th>Error handler factory</th>
5918 21 Dec 11 nicklas 446           <td><%=displayFactory(epFile, ep.getErrorHandlerFactory() == null ? 
5918 21 Dec 11 nicklas 447               ec.getDefaultErrorHandlerFactory() : ep.getErrorHandlerFactory())%></td>
5918 21 Dec 11 nicklas 448         </tr>
5918 21 Dec 11 nicklas 449         </tbody>
5918 21 Dec 11 nicklas 450         <%
4618 30 Oct 08 nicklas 451       }
6140 20 Sep 12 nicklas 452       if (file != null)
6140 20 Sep 12 nicklas 453       {
6140 20 Sep 12 nicklas 454         About about = file.getAbout();
6140 20 Sep 12 nicklas 455         if (about == null) about = new AboutBean();
6372 06 Dec 13 nicklas 456         ProcessResults results = ec.getLastScanResults();
6372 06 Dec 13 nicklas 457         FileResults fileResults = results.getResults(file);
6986 19 Oct 15 nicklas 458         List<Extension<?>> unsafe = ec.checkUnsafeScriptableUsage(file);
6140 20 Sep 12 nicklas 459         %>
6140 20 Sep 12 nicklas 460         <tbody>
6140 20 Sep 12 nicklas 461         <tr>
6140 20 Sep 12 nicklas 462           <th>File</th>
6140 20 Sep 12 nicklas 463           <td><%=file.getName()%></td>
6140 20 Sep 12 nicklas 464         </tr>
6140 20 Sep 12 nicklas 465         <tr>
6140 20 Sep 12 nicklas 466           <th>Type</th>
6140 20 Sep 12 nicklas 467           <td><%=file.isJar() ? "JAR file" : "XML file"%></td>
6140 20 Sep 12 nicklas 468         </tr>
6140 20 Sep 12 nicklas 469         <tr>
6140 20 Sep 12 nicklas 470           <th>Up to date</th>
6140 20 Sep 12 nicklas 471           <td><%=file.checkModified() ? "No" : "Yes"%></td>
6140 20 Sep 12 nicklas 472         </tr>
6372 06 Dec 13 nicklas 473         <tr>
6372 06 Dec 13 nicklas 474           <th>Last installed</th>
6372 06 Dec 13 nicklas 475           <td><%=fileResults == null ? "unknown" : dateTimeFormatter.format(new Date(fileResults.getTime())) %></td>
6372 06 Dec 13 nicklas 476         </tr>
6140 20 Sep 12 nicklas 477         <tr class="big">
6409 31 Jan 14 nicklas 478           <th>Errors/warnings</th>
6140 20 Sep 12 nicklas 479           <td>
4202 01 Apr 08 nicklas 480             <%
6140 20 Sep 12 nicklas 481             if (file.hasError())
4202 01 Apr 08 nicklas 482             {
6372 06 Dec 13 nicklas 483               List<String> messages = fileResults == null ? null : fileResults.getMessages();
6140 20 Sep 12 nicklas 484               Throwable validationError = file.getValidationError();
5607 15 Apr 11 nicklas 485               %>
6140 20 Sep 12 nicklas 486               <div class="messagecontainer error">
6140 20 Sep 12 nicklas 487               <ul style="padding-left: 20px; margin: 0px; text-align: left;">
5607 15 Apr 11 nicklas 488               <%
6140 20 Sep 12 nicklas 489               if (validationError != null)
6140 20 Sep 12 nicklas 490               {
6140 20 Sep 12 nicklas 491                 %>
6140 20 Sep 12 nicklas 492                 <li><%=validationError.getClass().getSimpleName()%>: <%=HTML.niceFormat(validationError.getMessage())%>
6140 20 Sep 12 nicklas 493                 <%
6140 20 Sep 12 nicklas 494               }
6140 20 Sep 12 nicklas 495               for (String msg : messages)
6140 20 Sep 12 nicklas 496               {
6140 20 Sep 12 nicklas 497                 %>
6140 20 Sep 12 nicklas 498                 <li><%=HTML.niceFormat(msg)%>
6140 20 Sep 12 nicklas 499                 <%
6140 20 Sep 12 nicklas 500               }
6140 20 Sep 12 nicklas 501               %>
6140 20 Sep 12 nicklas 502               </ul>
6140 20 Sep 12 nicklas 503               </div>
6140 20 Sep 12 nicklas 504               <%
4202 01 Apr 08 nicklas 505             }
6409 31 Jan 14 nicklas 506             else if (unsafe.size() > 0)
4202 01 Apr 08 nicklas 507             {
4202 01 Apr 08 nicklas 508               %>
6409 31 Jan 14 nicklas 509               <div class="messagecontainer note">
6409 31 Jan 14 nicklas 510                 <base:icon image="warning.png" />
6409 31 Jan 14 nicklas 511                 This plug-in contain <%=unsafe.size()%> extension(s) that 
6409 31 Jan 14 nicklas 512                 may violate the <b>Content Security Policy</b> setting on this server.
6409 31 Jan 14 nicklas 513                 See BASE documentation for more information.
6409 31 Jan 14 nicklas 514               </div>
6409 31 Jan 14 nicklas 515               <%
6409 31 Jan 14 nicklas 516             }
6409 31 Jan 14 nicklas 517             else 
6409 31 Jan 14 nicklas 518             {
6409 31 Jan 14 nicklas 519               %>
6140 20 Sep 12 nicklas 520               No
4202 01 Apr 08 nicklas 521               <%
4202 01 Apr 08 nicklas 522             }
4202 01 Apr 08 nicklas 523             %>
6140 20 Sep 12 nicklas 524           </td>
6140 20 Sep 12 nicklas 525         </tr>
6140 20 Sep 12 nicklas 526         <tr>
6140 20 Sep 12 nicklas 527           <th>Name</th>
6140 20 Sep 12 nicklas 528           <td><%=HTML.encodeTags(about.getName())%></td>
6140 20 Sep 12 nicklas 529         </tr>
6140 20 Sep 12 nicklas 530         <tr>
6140 20 Sep 12 nicklas 531           <th>Version</th>
6140 20 Sep 12 nicklas 532           <td><%=HTML.encodeTags(about.getVersion())%></td>
6140 20 Sep 12 nicklas 533         </tr>
6140 20 Sep 12 nicklas 534         <tr class="big">
6140 20 Sep 12 nicklas 535           <th>Description</th>
6140 20 Sep 12 nicklas 536           <td><%=HTML.niceFormat(about.getDescription())%></td>
6140 20 Sep 12 nicklas 537         </tr>
6140 20 Sep 12 nicklas 538         <tr>
6140 20 Sep 12 nicklas 539           <th>Copyright</th>
6140 20 Sep 12 nicklas 540           <td><%=HTML.encodeTags(about.getCopyright())%></td>
6140 20 Sep 12 nicklas 541         </tr>
6140 20 Sep 12 nicklas 542         <tr>
6140 20 Sep 12 nicklas 543           <th>Contact</th>
6140 20 Sep 12 nicklas 544           <td><%=HTML.encodeTags(about.getContact())%></td>
6140 20 Sep 12 nicklas 545         </tr>
6140 20 Sep 12 nicklas 546         <tr>
6140 20 Sep 12 nicklas 547           <th>Email</th>
6140 20 Sep 12 nicklas 548           <td><%=HTML.scanForLinks(about.getEmail(), HTML.LINK_EMAIL, "_blank")%></td>
6140 20 Sep 12 nicklas 549         </tr>
6140 20 Sep 12 nicklas 550         <tr>
6140 20 Sep 12 nicklas 551           <th>Url</th>
6140 20 Sep 12 nicklas 552           <td><%=HTML.scanForLinks(about.getUrl(), HTML.LINK_URL, "_blank")%></td>
6140 20 Sep 12 nicklas 553         </tr>
6140 20 Sep 12 nicklas 554         </tbody>
6140 20 Sep 12 nicklas 555         <%
6140 20 Sep 12 nicklas 556       }
6140 20 Sep 12 nicklas 557       %>
5615 19 Apr 11 nicklas 558       <%
6140 20 Sep 12 nicklas 559       if (ext == null && ep == null && file == null)
6140 20 Sep 12 nicklas 560       {
6140 20 Sep 12 nicklas 561         ProcessResults results = ec.getLastScanResults();
6140 20 Sep 12 nicklas 562         %>
6140 20 Sep 12 nicklas 563         <tbody>
6140 20 Sep 12 nicklas 564         <tr>
6140 20 Sep 12 nicklas 565           <th>Last installation</th>
6140 20 Sep 12 nicklas 566           <td><%=results.hasError() ? "Failed": "Successful" %></td>
6140 20 Sep 12 nicklas 567         </tr>
6140 20 Sep 12 nicklas 568         <tr>
6140 20 Sep 12 nicklas 569           <th class="subprompt">- ended</th>
6140 20 Sep 12 nicklas 570           <td><%=dateTimeFormatter.format(new Date(results.getEndTime())) %></td>
6140 20 Sep 12 nicklas 571         </tr>
6140 20 Sep 12 nicklas 572         <tr class="big">
6140 20 Sep 12 nicklas 573           <th class="subprompt">- summary</th>
6140 20 Sep 12 nicklas 574           <td>
6140 20 Sep 12 nicklas 575           <%=HTML.niceFormat(results.getSummary())%></td>
6140 20 Sep 12 nicklas 576         </tr>
6140 20 Sep 12 nicklas 577         <tr>
6140 20 Sep 12 nicklas 578           <th class="subprompt"></th>
6140 20 Sep 12 nicklas 579           <td>
6140 20 Sep 12 nicklas 580             <table><tr><td>
6259 25 Mar 13 nicklas 581             <base:button 
6259 25 Mar 13 nicklas 582               id="btnScanResults"
6259 25 Mar 13 nicklas 583               image="bullet.png" 
6140 20 Sep 12 nicklas 584               title="More details&hellip;"
6140 20 Sep 12 nicklas 585               tooltip="Display detailed information about the last scan"
6140 20 Sep 12 nicklas 586             />
6140 20 Sep 12 nicklas 587             </td></tr></table>
6140 20 Sep 12 nicklas 588           </td>
6140 20 Sep 12 nicklas 589         </tr>
6140 20 Sep 12 nicklas 590         </tbody>
6140 20 Sep 12 nicklas 591         <%
6140 20 Sep 12 nicklas 592       }
4198 28 Mar 08 nicklas 593       %>
6140 20 Sep 12 nicklas 594     </table>
5615 19 Apr 11 nicklas 595     </div>
5918 21 Dec 11 nicklas 596     </div>
4168 04 Mar 08 nicklas 597     </base:body>
4168 04 Mar 08 nicklas 598   </base:page>
4168 04 Mar 08 nicklas 599   <%
4168 04 Mar 08 nicklas 600 }
4168 04 Mar 08 nicklas 601 finally
4168 04 Mar 08 nicklas 602 {
4168 04 Mar 08 nicklas 603   if (dc != null) dc.close();
4168 04 Mar 08 nicklas 604 }
4168 04 Mar 08 nicklas 605 %>