summaryrefslogtreecommitdiffstats
path: root/external/jfreereport/patches
diff options
context:
space:
mode:
authorDaniel Baumann <daniel.baumann@progress-linux.org>2024-04-15 05:54:39 +0000
committerDaniel Baumann <daniel.baumann@progress-linux.org>2024-04-15 05:54:39 +0000
commit267c6f2ac71f92999e969232431ba04678e7437e (patch)
tree358c9467650e1d0a1d7227a21dac2e3d08b622b2 /external/jfreereport/patches
parentInitial commit. (diff)
downloadlibreoffice-267c6f2ac71f92999e969232431ba04678e7437e.tar.xz
libreoffice-267c6f2ac71f92999e969232431ba04678e7437e.zip
Adding upstream version 4:24.2.0.upstream/4%24.2.0
Signed-off-by: Daniel Baumann <daniel.baumann@progress-linux.org>
Diffstat (limited to 'external/jfreereport/patches')
-rw-r--r--external/jfreereport/patches/common_build.patch119
-rw-r--r--external/jfreereport/patches/flow-engine.patch18
-rw-r--r--external/jfreereport/patches/flow-engine_date_is_datetime.patch.113
-rw-r--r--external/jfreereport/patches/libbase-1.1.3-remove-commons-logging.patch.1903
-rw-r--r--external/jfreereport/patches/libbase-1.1.6-deprecated.patch53
-rw-r--r--external/jfreereport/patches/libfonts-1.1.3-remove-commons-logging.patch.1506
-rw-r--r--external/jfreereport/patches/libfonts-1.1.6-deprecated.patch11
-rw-r--r--external/jfreereport/patches/libformula-1.1.3-remove-commons-logging.patch.1266
-rw-r--r--external/jfreereport/patches/libformula-datevalue_truncation.patch.129
-rw-r--r--external/jfreereport/patches/libformula-minutes_truncation.patch.114
-rw-r--r--external/jfreereport/patches/libformula-seconds_rounding.patch.137
-rw-r--r--external/jfreereport/patches/libformula-time-notz.patch22
-rw-r--r--external/jfreereport/patches/liblayout-0.2.10-remove-commons-logging.patch.1860
-rw-r--r--external/jfreereport/patches/liblayout.patch21
-rw-r--r--external/jfreereport/patches/libloader-1.1.3-remove-commons-logging.patch.1635
-rw-r--r--external/jfreereport/patches/libloader-1.1.6-deprecated.patch34
-rw-r--r--external/jfreereport/patches/librepository-1.1.3-remove-commons-logging.patch.1117
-rw-r--r--external/jfreereport/patches/librepository-1.1.6-deprecated.patch37
-rw-r--r--external/jfreereport/patches/libserializer-1.1.2-remove-commons-logging.patch.131
-rw-r--r--external/jfreereport/patches/libxml-1.1.3-remove-commons-logging.patch.1313
-rw-r--r--external/jfreereport/patches/pentaho-reporting-flow-engine-0.9.4-remove-commons-logging.patch.1101
-rw-r--r--external/jfreereport/patches/sac.patch73
22 files changed, 4213 insertions, 0 deletions
diff --git a/external/jfreereport/patches/common_build.patch b/external/jfreereport/patches/common_build.patch
new file mode 100644
index 0000000000..b197f494e1
--- /dev/null
+++ b/external/jfreereport/patches/common_build.patch
@@ -0,0 +1,119 @@
+--- misc/libloader-1.1.3/common_build.xml 2009-11-16 10:25:34.000000000 +0100
++++ misc/build/libloader-1.1.3/common_build.xml 2009-12-04 10:22:24.277647200 +0100
+@@ -136,8 +136,6 @@
+ <property name="javac.deprecation"
+ value="true"
+ description="Indicates whether source should be compiled with deprecation information" />
+- <property name="javac.source" value="1.5" description="Provide source compatibility with specified release" />
+- <property name="javac.target" value="1.5" description="Generate class files for specific VM version" />
+
+ <!-- Build Cache properties -->
+ <property name="build.cache.dir"
+@@ -261,7 +261,7 @@ TYPICAL TARGET SEQUENCE
+ <property name="project.revision" value="${Implementation-Version}" description="Sets the version number of the project based on the Implementation-Version found in the manifest file (if one is supplied and nothing is specified in the build.properties)" />
+ <fail message="A project revision number has not been determined!">
+ <condition>
+- <matches string="${project.revision}" pattern="\$\{.*\}" />
++ <contains string="${project.revision}" substring="\$\{" />
+ </condition>
+ </fail>
+
+@@ -270,7 +270,7 @@ TYPICAL TARGET SEQUENCE
+ <property name="impl.title" value="${Implementation-Title}" description="Sets the title of the project based on the Implementation-Title found in the manifest file (if one is supplied and nothing is specified in the build.properties)" />
+ <fail message="A project title has not been determined!">
+ <condition>
+- <matches string="${impl.title}" pattern="\$\{.*\}" />
++ <contains string="${impl.title}" substring="\$\{" />
+ </condition>
+ </fail>
+
+@@ -497,7 +497,7 @@
+ Sets a property build.id to the either "development" or the svn revision
+ if in release mode
+ ====================================================================-->
+- <target name="set-build.id" unless="build.id" depends="install-antcontrib">
++ <target name="set-build.id" unless="build.id" >
+ <if>
+ <istrue value="${release}" />
+ <then>
+@@ -1061,12 +1061,17 @@
+ Performs the actual compile
+ ====================================================================-->
+ <target name="compile.compile" depends="init">
++ <copy todir="${classes.dir}">
++ <fileset dir="source">
++ <include name="**/*.properties"/>
++ </fileset>
++ </copy>
+ <javac destdir="${classes.dir}"
+ debug="${javac.debug}"
+ deprecation="${javac.deprecation}"
+ fork="true"
+- source="${javac.source}"
+- target="${javac.target}">
++ source="${ant.build.javac.source}"
++ target="${ant.build.javac.target}">
+ <classpath>
+ <path refid="classpath" />
+ </classpath>
+@@ -1082,27 +1087,32 @@
+ duplicate copying of resources from src tree (handled by compile.src_copy
+ if jar.include.source is set.
+ ====================================================================-->
+- <target name="compile.res_copy" depends="install-antcontrib">
+- <if>
+- <available file="${res.dir}" />
+- <then>
+- <copy todir="${classes.dir}">
+- <fileset dir="${res.dir}" />
+- </copy>
+- </then>
+- </if>
++ <target name="compile.res_copy" >
++ <condition property="copy.res.available">
++ <available file="$(res.dir)" type="dir" />
++ </condition>
++ <antcall target="copy.res" />
+
+- <if>
+- <not>
+- <isset property="jar.include.source" />
+- </not>
+- <then>
+- <copy todir="${classes.dir}" flatten="false">
+- <fileset dir="${src.dir}" excludes="**/*.java" />
+- </copy>
+- </then>
+- </if>
+- </target>
++ <condition property="copy.res.class.available">
++ <not>
++ <isset property="jar.include.source" />
++ </not>
++ </condition>
++ <antcall target="copy.res.class" />
++ </target>
++
++ <target name="copy.res" if="copy.res.available" >
++ <copy todir="${classes.dir}">
++ <fileset dir="${res.dir}"/>
++ </copy>
++ </target>
++
++ <target name="copy.res.class" if="copy.res.class.available" >
++ <uptodate targetfile="${classes.dir}" property="s">
++ <srcfiles dir= "${src.dir}" excludes="**/*.java" />
++ <flattenmapper/>
++ </uptodate>
++ </target>
+
+
+ <!--=======================================================================
+@@ -1167,7 +1177,6 @@
+ <target name="generate.manifest" depends="init,set-build.id">
+ <delete file="${dist.manifest.file}" />
+ <touch file="${dist.manifest.file}" />
+- <copy file="${manifest.file}" tofile="${dist.manifest.file}" overwrite="true" failonerror="false" />
+
+ <manifest file="${dist.manifest.file}" mode="update">
+ <attribute name="Implementation-Title" value="${impl.title}" />
diff --git a/external/jfreereport/patches/flow-engine.patch b/external/jfreereport/patches/flow-engine.patch
new file mode 100644
index 0000000000..5cf8349942
--- /dev/null
+++ b/external/jfreereport/patches/flow-engine.patch
@@ -0,0 +1,18 @@
+--- misc/flow-engine-0.9.4/build.xml (Revision 6728)
++++ misc/build/flow-engine-0.9.4/build.xml (Arbeitskopie)
+@@ -24,9 +24,12 @@
+
+ <!-- Setup the compile classpath -->
+ <path id="classpath">
+- <fileset dir="lib">
+- <include name="*.jar" />
+- </fileset>
++ <pathelement path="${libbase.jar}"/>
++ <pathelement path="${libformula.jar}"/>
++ <pathelement path="${liblayout.jar}"/>
++ <pathelement path="${libloader.jar}"/>
++ <pathelement path="${libserializer.jar}"/>
++ <pathelement path="${libxml.jar}"/>
+ </path>
+
+ <!-- Kill all the created directories -->
diff --git a/external/jfreereport/patches/flow-engine_date_is_datetime.patch.1 b/external/jfreereport/patches/flow-engine_date_is_datetime.patch.1
new file mode 100644
index 0000000000..3ed23ee589
--- /dev/null
+++ b/external/jfreereport/patches/flow-engine_date_is_datetime.patch.1
@@ -0,0 +1,13 @@
+diff -ur jfreereport_flow_engine.org/source/org/jfree/report/expressions/ReportFormulaContext.java jfreereport_flow_engine/source/org/jfree/report/expressions/ReportFormulaContext.java
+--- jfreereport_flow_engine.org/source/org/jfree/report/expressions/ReportFormulaContext.java 2015-07-14 17:24:51.924156060 +0200
++++ jfreereport_flow_engine/source/org/jfree/report/expressions/ReportFormulaContext.java 2015-07-14 17:27:56.669270298 +0200
+@@ -120,7 +120,7 @@
+ {
+ if (flags.isDate())
+ {
+- return DateTimeType.DATE_TYPE;
++ return DateTimeType.DATETIME_TYPE;
+ }
+ if (flags.isNumeric())
+ {
+Only in jfreereport_flow_engine/source/org/jfree/report/expressions: ReportFormulaContext.java~
diff --git a/external/jfreereport/patches/libbase-1.1.3-remove-commons-logging.patch.1 b/external/jfreereport/patches/libbase-1.1.3-remove-commons-logging.patch.1
new file mode 100644
index 0000000000..8d0df70a96
--- /dev/null
+++ b/external/jfreereport/patches/libbase-1.1.3-remove-commons-logging.patch.1
@@ -0,0 +1,903 @@
+diff -ru libbase-1.1.3.orig/source/org/pentaho/reporting/libraries/base/boot/AbstractBoot.java libbase-1.1.3/source/org/pentaho/reporting/libraries/base/boot/AbstractBoot.java
+--- libbase-1.1.3.orig/source/org/pentaho/reporting/libraries/base/boot/AbstractBoot.java 2009-11-16 10:14:12.000000000 +0000
++++ libbase-1.1.3/source/org/pentaho/reporting/libraries/base/boot/AbstractBoot.java 2021-02-23 12:11:46.680967049 +0000
+@@ -24,8 +24,7 @@
+ import java.util.ArrayList;
+ import java.util.Enumeration;
+
+-import org.apache.commons.logging.Log;
+-import org.apache.commons.logging.LogFactory;
++import java.util.logging.Logger;
+ import org.pentaho.reporting.libraries.base.config.Configuration;
+ import org.pentaho.reporting.libraries.base.config.ExtendedConfiguration;
+ import org.pentaho.reporting.libraries.base.config.ExtendedConfigurationWrapper;
+@@ -52,7 +51,7 @@
+ /**
+ * The logger for this class.
+ */
+- private static final Log LOGGER = LogFactory.getLog(AbstractBoot.class);
++ private static final Logger LOGGER = Logger.getLogger(AbstractBoot.class.getName());
+
+ /**
+ * The configuration wrapper around the plain configuration.
+@@ -163,7 +162,7 @@
+ }
+ if (isBootFailed())
+ {
+- LOGGER.error(getClass() + " failed to boot: " + bootFailed.getMessage());
++ LOGGER.severe(getClass() + " failed to boot: " + bootFailed.getMessage());
+ }
+ while (isBootInProgress())
+ {
+@@ -206,7 +205,7 @@
+ }
+ catch (Exception e)
+ {
+- LOGGER.error(getClass() + " failed to boot: ", e);
++ LOGGER.severe(getClass() + " failed to boot: " + e);
+ this.bootFailed = e;
+ }
+ finally
+@@ -265,8 +264,8 @@
+ if (boot.isBootFailed())
+ {
+ this.bootFailed = boot.getBootFailureReason();
+- LOGGER.error("Dependent project failed to boot up: " +
+- projectInformation.getBootClass() + " failed to boot: ", this.bootFailed);
++ LOGGER.severe("Dependent project failed to boot up: " +
++ projectInformation.getBootClass() + " failed to boot: " + this.bootFailed);
+ return;
+ }
+ }
+@@ -419,7 +418,7 @@
+ }
+ catch (IOException ioe)
+ {
+- LOGGER.warn("Failed to load the user configuration at " + url, ioe);
++ LOGGER.warning("Failed to load the user configuration at " + url + " : " + ioe);
+ }
+ }
+
+@@ -431,7 +430,7 @@
+ }
+ catch (IOException e)
+ {
+- LOGGER.warn("Failed to lookup the user configurations.", e);
++ LOGGER.warning("Failed to lookup the user configurations: " + e);
+ }
+ }
+ if (addSysProps)
+@@ -455,4 +454,4 @@
+ }
+ return extWrapper;
+ }
+-}
+\ No newline at end of file
++}
+diff -ru libbase-1.1.3.orig/source/org/pentaho/reporting/libraries/base/boot/PackageManager.java libbase-1.1.3/source/org/pentaho/reporting/libraries/base/boot/PackageManager.java
+--- libbase-1.1.3.orig/source/org/pentaho/reporting/libraries/base/boot/PackageManager.java 2009-11-16 10:14:12.000000000 +0000
++++ libbase-1.1.3/source/org/pentaho/reporting/libraries/base/boot/PackageManager.java 2021-02-23 12:18:45.836952221 +0000
+@@ -23,8 +23,8 @@
+ import java.util.HashMap;
+ import java.util.Iterator;
+
+-import org.apache.commons.logging.Log;
+-import org.apache.commons.logging.LogFactory;
++import java.util.logging.Level;
++import java.util.logging.Logger;
+ import org.pentaho.reporting.libraries.base.config.Configuration;
+ import org.pentaho.reporting.libraries.base.config.PropertyFileConfiguration;
+ import org.pentaho.reporting.libraries.base.util.ObjectUtilities;
+@@ -63,7 +63,7 @@
+ }
+ }
+
+- private static final Log LOGGER = LogFactory.getLog(PackageManager.class);
++ private static final Logger LOGGER = Logger.getLogger(PackageManager.class.getName());
+
+ /**
+ * An internal constant declaring that the specified module was already loaded.
+@@ -201,7 +201,7 @@
+ }
+ }
+ }
+- LOGGER.debug("Loaded a total of " + count + " modules under prefix: " + modulePrefix);
++ LOGGER.config("Loaded a total of " + count + " modules under prefix: " + modulePrefix);
+ }
+
+ /**
+@@ -224,9 +224,9 @@
+
+ if (mod.configure(this.booter))
+ {
+- if (LOGGER.isDebugEnabled())
++ if (LOGGER.isLoggable(Level.CONFIG))
+ {
+- LOGGER.debug("Conf: " +
++ LOGGER.config("Conf: " +
+ new PadMessage(mod.getModule().getModuleClass(), 70) +
+ " [" + mod.getModule().getSubSystem() + ']');
+ }
+@@ -244,9 +244,9 @@
+
+ if (mod.initialize(this.booter))
+ {
+- if (LOGGER.isDebugEnabled())
++ if (LOGGER.isLoggable(Level.CONFIG))
+ {
+- LOGGER.debug("Init: " +
++ LOGGER.config("Init: " +
+ new PadMessage(mod.getModule().getModuleClass(), 70) +
+ " [" + mod.getModule().getSubSystem() + ']');
+ }
+@@ -271,12 +271,12 @@
+ final PackageState dependentState = (PackageState) modulesByClass.get(key);
+ if (dependentState == null)
+ {
+- LOGGER.warn("Required dependency '" + key + "' for module '" + state.getModule().getModuleClass() + " not found.");
++ LOGGER.warning("Required dependency '" + key + "' for module '" + state.getModule().getModuleClass() + " not found.");
+ return false;
+ }
+ if (dependentState.getState() != PackageState.STATE_CONFIGURED)
+ {
+- LOGGER.warn("Required dependency '" + key + "' for module '" + state.getModule().getModuleClass() + " not configured.");
++ LOGGER.warning("Required dependency '" + key + "' for module '" + state.getModule().getModuleClass() + " not configured.");
+ return false;
+ }
+ }
+@@ -300,12 +300,12 @@
+ final PackageState dependentState = (PackageState) modulesByClass.get(key);
+ if (dependentState == null)
+ {
+- LOGGER.warn("Required dependency '" + key + "' for module '" + state.getModule().getModuleClass() + " not found.");
++ LOGGER.warning("Required dependency '" + key + "' for module '" + state.getModule().getModuleClass() + " not found.");
+ return false;
+ }
+ if (dependentState.getState() != PackageState.STATE_INITIALIZED)
+ {
+- LOGGER.warn("Required dependency '" + key + "' for module '" + state.getModule().getModuleClass() + " not initializable.");
++ LOGGER.warning("Required dependency '" + key + "' for module '" + state.getModule().getModuleClass() + " not initializable.");
+ return false;
+ }
+ }
+@@ -418,15 +418,15 @@
+ {
+ if (fatal)
+ {
+- LOGGER.warn("Unresolved dependency for package: " + moduleInfo.getModuleClass());
++ LOGGER.warning("Unresolved dependency for package: " + moduleInfo.getModuleClass());
+ }
+- LOGGER.debug("Module class referenced, but not in classpath: " + moduleInfo.getModuleClass());
++ LOGGER.config("Module class referenced, but not in classpath: " + moduleInfo.getModuleClass());
+ }
+
+ if (acceptVersion(moduleInfo, module) == false)
+ {
+ // module conflict!
+- LOGGER.warn("Module " + module.getName() + ": required version: "
++ LOGGER.warning("Module " + module.getName() + ": required version: "
+ + moduleInfo + ", but found Version: \n" + module);
+ final PackageState state = new PackageState(module, PackageState.STATE_ERROR);
+ dropFailedModule(state);
+@@ -437,7 +437,7 @@
+ if (moduleContained == RETURN_MODULE_ERROR)
+ {
+ // the module caused harm before ...
+- LOGGER.debug("Indicated failure for module: " + module.getModuleClass());
++ LOGGER.config("Indicated failure for module: " + module.getModuleClass());
+ final PackageState state = new PackageState(module, PackageState.STATE_ERROR);
+ dropFailedModule(state);
+ return false;
+@@ -447,7 +447,7 @@
+ if (incompleteModules.contains(module))
+ {
+ // we assume that loading will continue ...
+- LOGGER.error
++ LOGGER.severe
+ ("Circular module reference: This module definition is invalid: " +
+ module.getClass());
+ final PackageState state = new PackageState(module, PackageState.STATE_ERROR);
+@@ -460,7 +460,7 @@
+ {
+ if (loadModule(required[i], incompleteModules, modules, true) == false)
+ {
+- LOGGER.debug("Indicated failure for module: " + module.getModuleClass());
++ LOGGER.config("Indicated failure for module: " + module.getModuleClass());
+ final PackageState state = new PackageState(module, PackageState.STATE_ERROR);
+ dropFailedModule(state);
+ return false;
+@@ -472,7 +472,7 @@
+ {
+ if (loadModule(optional[i], incompleteModules, modules, true) == false)
+ {
+- LOGGER.debug("Optional module: " + optional[i].getModuleClass() + " was not loaded.");
++ LOGGER.config("Optional module: " + optional[i].getModuleClass() + " was not loaded.");
+ }
+ }
+ // maybe a dependent module defined the same base module ...
+@@ -486,7 +486,7 @@
+ }
+ catch (Exception e)
+ {
+- LOGGER.warn("Exception while loading module: " + moduleInfo, e);
++ LOGGER.warning("Exception while loading module: " + moduleInfo + " : " + e);
+ return false;
+ }
+ }
+@@ -506,7 +506,7 @@
+ }
+ if (module.getMajorVersion() == null)
+ {
+- LOGGER.warn("Module " + module.getName() + " does not define a major version.");
++ LOGGER.warning("Module " + module.getName() + " does not define a major version.");
+ }
+ else
+ {
+@@ -528,7 +528,7 @@
+ }
+ if (module.getMinorVersion() == null)
+ {
+- LOGGER.warn("Module " + module.getName() + " does not define a minor version.");
++ LOGGER.warning("Module " + module.getName() + " does not define a minor version.");
+ }
+ else
+ {
+@@ -550,14 +550,14 @@
+ }
+ if (module.getPatchLevel() == null)
+ {
+- LOGGER.debug("Module " + module.getName() + " does not define a patch level.");
++ LOGGER.config("Module " + module.getName() + " does not define a patch level.");
+ }
+ else
+ {
+ if (acceptVersion(moduleRequirement.getPatchLevel(),
+ module.getPatchLevel()) > 0)
+ {
+- LOGGER.debug("Did not accept patchlevel: "
++ LOGGER.config("Did not accept patchlevel: "
+ + moduleRequirement.getPatchLevel() + " - "
+ + module.getPatchLevel());
+ return false;
+@@ -699,4 +699,4 @@
+ p.println(mod.getDescription());
+ }
+ }
+-}
+\ No newline at end of file
++}
+diff -ru libbase-1.1.3.orig/source/org/pentaho/reporting/libraries/base/boot/PackageSorter.java libbase-1.1.3/source/org/pentaho/reporting/libraries/base/boot/PackageSorter.java
+--- libbase-1.1.3.orig/source/org/pentaho/reporting/libraries/base/boot/PackageSorter.java 2009-11-16 10:14:12.000000000 +0000
++++ libbase-1.1.3/source/org/pentaho/reporting/libraries/base/boot/PackageSorter.java 2021-02-23 12:19:11.752198616 +0000
+@@ -23,8 +23,7 @@
+ import java.util.Iterator;
+ import java.util.List;
+
+-import org.apache.commons.logging.Log;
+-import org.apache.commons.logging.LogFactory;
++import java.util.logging.Logger;
+ import org.pentaho.reporting.libraries.base.util.ObjectUtilities;
+
+ /**
+@@ -180,7 +179,7 @@
+ }
+
+ /** A logger for debug-messages. */
+- private static final Log LOGGER = LogFactory.getLog(PackageSorter.class);
++ private static final Logger LOGGER = Logger.getLogger(PackageSorter.class.getName());
+
+ /**
+ * DefaultConstructor.
+@@ -313,7 +312,7 @@
+ final SortModule reqMod = (SortModule) moduleMap.get(moduleName);
+ if (reqMod == null)
+ {
+- LOGGER.warn("Invalid state: Required dependency of '" + moduleName + "' had an error.");
++ LOGGER.warning("Invalid state: Required dependency of '" + moduleName + "' had an error.");
+ continue;
+ }
+ if (reqMod.getPosition() >= position)
+@@ -415,7 +414,7 @@
+ moduleMap.get(requiredModules[i].getModuleClass());
+ if (dependentModule == null)
+ {
+- LOGGER.warn
++ LOGGER.warning
+ ("A dependent module was not found in the list of known modules." +
+ requiredModules[i].getModuleClass());
+ continue;
+@@ -431,11 +430,11 @@
+ moduleMap.get(optionalModules[i].getModuleClass());
+ if (dependentModule == null)
+ {
+- LOGGER.warn("A dependent module was not found in the list of known modules.");
++ LOGGER.warning("A dependent module was not found in the list of known modules.");
+ continue;
+ }
+ collector.add(dependentModule.getSubSystem());
+ }
+ return collector;
+ }
+-}
+\ No newline at end of file
++}
+diff -ru libbase-1.1.3.orig/source/org/pentaho/reporting/libraries/base/boot/PackageState.java libbase-1.1.3/source/org/pentaho/reporting/libraries/base/boot/PackageState.java
+--- libbase-1.1.3.orig/source/org/pentaho/reporting/libraries/base/boot/PackageState.java 2009-11-16 10:14:12.000000000 +0000
++++ libbase-1.1.3/source/org/pentaho/reporting/libraries/base/boot/PackageState.java 2021-02-23 12:22:15.204942814 +0000
+@@ -17,8 +17,8 @@
+
+ package org.pentaho.reporting.libraries.base.boot;
+
+-import org.apache.commons.logging.Log;
+-import org.apache.commons.logging.LogFactory;
++import java.util.logging.Level;
++import java.util.logging.Logger;
+
+ /**
+ * The package state class is used by the package manager to keep track of
+@@ -31,7 +31,7 @@
+ public class PackageState
+ {
+ /** A logger. */
+- private static final Log LOGGER = LogFactory.getLog(PackageState.class);
++ private static final Logger LOGGER = Logger.getLogger(PackageState.class.getName());
+
+ /**
+ * A constant defining that the package is new.
+@@ -119,20 +119,20 @@
+ }
+ catch (NoClassDefFoundError noClassDef)
+ {
+- LOGGER.warn("Unable to load module classes for " +
++ LOGGER.warning("Unable to load module classes for " +
+ this.module.getName() + ':' + noClassDef.getMessage());
+ this.state = STATE_ERROR;
+ }
+ catch (Exception e)
+ {
+- if (LOGGER.isDebugEnabled())
++ if (LOGGER.isLoggable(Level.CONFIG))
+ {
+ // its still worth a warning, but now we are more verbose ...
+- LOGGER.warn("Unable to configure the module " + this.module.getName(), e);
++ LOGGER.warning("Unable to configure the module " + this.module.getName() + " : " + e);
+ }
+- else if (LOGGER.isWarnEnabled())
++ else if (LOGGER.isLoggable(Level.WARNING))
+ {
+- LOGGER.warn("Unable to configure the module " + this.module.getName());
++ LOGGER.warning("Unable to configure the module " + this.module.getName());
+ }
+ this.state = STATE_ERROR;
+ }
+@@ -187,32 +187,32 @@
+ }
+ catch (NoClassDefFoundError noClassDef)
+ {
+- LOGGER.warn("Unable to load module classes for " + this.module.getName() + ':' + noClassDef.getMessage());
++ LOGGER.warning("Unable to load module classes for " + this.module.getName() + ':' + noClassDef.getMessage());
+ this.state = STATE_ERROR;
+ }
+ catch (ModuleInitializeException me)
+ {
+- if (LOGGER.isDebugEnabled())
++ if (LOGGER.isLoggable(Level.CONFIG))
+ {
+ // its still worth a warning, but now we are more verbose ...
+- LOGGER.warn("Unable to initialize the module " + this.module.getName(), me);
++ LOGGER.warning("Unable to initialize the module " + this.module.getName() + " : " + me);
+ }
+- else if (LOGGER.isWarnEnabled())
++ else if (LOGGER.isLoggable(Level.WARNING))
+ {
+- LOGGER.warn("Unable to initialize the module " + this.module.getName());
++ LOGGER.warning("Unable to initialize the module " + this.module.getName());
+ }
+ this.state = STATE_ERROR;
+ }
+ catch (Exception e)
+ {
+- if (LOGGER.isDebugEnabled())
++ if (LOGGER.isLoggable(Level.CONFIG))
+ {
+ // its still worth a warning, but now we are more verbose ...
+- LOGGER.warn("Unable to initialize the module " + this.module.getName(), e);
++ LOGGER.warning("Unable to initialize the module " + this.module.getName() + " : " + e);
+ }
+- else if (LOGGER.isWarnEnabled())
++ else if (LOGGER.isLoggable(Level.WARNING))
+ {
+- LOGGER.warn("Unable to initialize the module " + this.module.getName());
++ LOGGER.warning("Unable to initialize the module " + this.module.getName());
+ }
+ this.state = STATE_ERROR;
+ }
+@@ -267,4 +267,4 @@
+ {
+ this.state = STATE_ERROR;
+ }
+-}
+\ No newline at end of file
++}
+diff -ru libbase-1.1.3.orig/source/org/pentaho/reporting/libraries/base/config/PropertyFileConfiguration.java libbase-1.1.3/source/org/pentaho/reporting/libraries/base/config/PropertyFileConfiguration.java
+--- libbase-1.1.3.orig/source/org/pentaho/reporting/libraries/base/config/PropertyFileConfiguration.java 2009-11-16 10:14:12.000000000 +0000
++++ libbase-1.1.3/source/org/pentaho/reporting/libraries/base/config/PropertyFileConfiguration.java 2021-02-23 12:13:55.788194558 +0000
+@@ -22,8 +22,7 @@
+ import java.io.InputStream;
+ import java.util.Properties;
+
+-import org.apache.commons.logging.Log;
+-import org.apache.commons.logging.LogFactory;
++import java.util.logging.Logger;
+ import org.pentaho.reporting.libraries.base.util.ObjectUtilities;
+
+ /**
+@@ -34,7 +33,7 @@
+ public class PropertyFileConfiguration extends HierarchicalConfiguration
+ {
+ /** A logger for debug-messages. */
+- private static final Log LOGGER = LogFactory.getLog(PropertyFileConfiguration.class);
++ private static final Logger LOGGER = Logger.getLogger(PropertyFileConfiguration.class.getName());
+ /** A serialization related constant. */
+ private static final long serialVersionUID = 2423181637547944866L;
+
+@@ -89,7 +88,7 @@
+ }
+ else
+ {
+- LOGGER.debug("Configuration file not found in the classpath: " + resourceName);
++ LOGGER.config("Configuration file not found in the classpath: " + resourceName);
+ }
+
+ }
+@@ -118,9 +117,9 @@
+ }
+ catch (IOException ioe)
+ {
+- LOGGER.warn("Unable to read configuration", ioe);
++ LOGGER.warning("Unable to read configuration:" + ioe);
+ }
+
+ }
+
+-}
+\ No newline at end of file
++}
+diff -ru libbase-1.1.3.orig/source/org/pentaho/reporting/libraries/base/util/ClassQueryTool.java libbase-1.1.3/source/org/pentaho/reporting/libraries/base/util/ClassQueryTool.java
+--- libbase-1.1.3.orig/source/org/pentaho/reporting/libraries/base/util/ClassQueryTool.java 2009-11-16 10:14:12.000000000 +0000
++++ libbase-1.1.3/source/org/pentaho/reporting/libraries/base/util/ClassQueryTool.java 2021-02-23 12:24:05.460991092 +0000
+@@ -26,8 +26,7 @@
+ import java.util.zip.ZipEntry;
+ import java.util.zip.ZipInputStream;
+
+-import org.apache.commons.logging.Log;
+-import org.apache.commons.logging.LogFactory;
++import java.util.logging.Logger;
+
+ /**
+ * The class-query tool loads classes using a classloader and calls "processClass" for each class encountered. This is
+@@ -41,7 +40,7 @@
+ public abstract class ClassQueryTool
+ {
+ /** A logger. */
+- private static final Log logger = LogFactory.getLog(ClassQueryTool.class);
++ private static final Logger logger = Logger.getLogger(ClassQueryTool.class.getName());
+
+ /**
+ * The default constructor.
+@@ -89,7 +88,7 @@
+ catch (Throwable e)
+ {
+ // ignore ..
+- logger.debug("At class '" + className + "': " + e);
++ logger.config("At class '" + className + "': " + e);
+ }
+ }
+
+@@ -137,7 +136,7 @@
+ }
+ catch (final IOException e1)
+ {
+- logger.debug("Caught IO-Exception while processing file " + jarFile, e1);
++ logger.config("Caught IO-Exception while processing file " + jarFile + " : " + e1);
+ }
+ }
+
+@@ -225,7 +224,7 @@
+ for (int i = 0; i < allArray.length; i++)
+ {
+ final URL url = allArray[i];
+- logger.debug(url);
++ logger.config(url.toString());
+ }
+ for (int i = 0; i < urlsArray.length; i++)
+ {
+diff -ru libbase-1.1.3.orig/source/org/pentaho/reporting/libraries/base/util/DebugLog.java libbase-1.1.3/source/org/pentaho/reporting/libraries/base/util/DebugLog.java
+--- libbase-1.1.3.orig/source/org/pentaho/reporting/libraries/base/util/DebugLog.java 2009-11-16 10:14:12.000000000 +0000
++++ libbase-1.1.3/source/org/pentaho/reporting/libraries/base/util/DebugLog.java 2021-02-23 12:26:00.488084723 +0000
+@@ -17,8 +17,7 @@
+
+ package org.pentaho.reporting.libraries.base.util;
+
+-import org.apache.commons.logging.Log;
+-import org.apache.commons.logging.LogFactory;
++import java.util.logging.Logger;
+
+ /**
+ * This class provides static log messages for on-going bug-hunting efforts. This removes the need to create
+@@ -29,7 +28,7 @@
+ public final class DebugLog
+ {
+ /** A logger. */
+- private static final Log logger = LogFactory.getLog(DebugLog.class);
++ private static final Logger logger = Logger.getLogger(DebugLog.class.getName());
+
+ /**
+ * Logs a message using the debug-logger. By channeling all temporary log messages through this method,
+@@ -39,7 +38,7 @@
+ */
+ public static void log(final Object message)
+ {
+- logger.info(message);
++ logger.info(message.toString());
+ }
+
+ /**
+@@ -51,7 +50,7 @@
+ */
+ public static void log(final Object message, final Throwable t)
+ {
+- logger.info(message, t);
++ logger.info(message + " : " + t);
+ }
+
+ /**
+@@ -68,7 +67,7 @@
+ public static void logHereWE()
+ {
+ //noinspection ThrowableInstanceNeverThrown
+- logger.info("HERE: Debug point reached", new Exception("Debug-Point reached"));
++ logger.info("HERE: Debug point reached");
+ }
+
+ /**
+diff -ru libbase-1.1.3.orig/source/org/pentaho/reporting/libraries/base/util/ObjectUtilities.java libbase-1.1.3/source/org/pentaho/reporting/libraries/base/util/ObjectUtilities.java
+--- libbase-1.1.3.orig/source/org/pentaho/reporting/libraries/base/util/ObjectUtilities.java 2009-11-16 10:14:12.000000000 +0000
++++ libbase-1.1.3/source/org/pentaho/reporting/libraries/base/util/ObjectUtilities.java 2021-02-23 12:30:11.253468898 +0000
+@@ -29,8 +29,8 @@
+ import java.util.Arrays;
+ import java.util.StringTokenizer;
+
+-import org.apache.commons.logging.Log;
+-import org.apache.commons.logging.LogFactory;
++import java.util.logging.Level;
++import java.util.logging.Logger;
+
+ /**
+ * A collection of useful static utility methods for handling classes and object instantiation.
+@@ -39,7 +39,7 @@
+ */
+ public final class ObjectUtilities
+ {
+- private static final Log LOGGER = LogFactory.getLog(ObjectUtilities.class);
++ private static final Logger LOGGER = Logger.getLogger(ObjectUtilities.class.getName());
+
+ /**
+ * A constant for using the TheadContext as source for the classloader.
+@@ -180,15 +180,15 @@
+ }
+ catch (NoSuchMethodException e)
+ {
+- LOGGER.warn("Object without clone() method is impossible on class " + aClass, e);
++ LOGGER.warning("Object without clone() method is impossible on class " + aClass + " : " + e);
+ }
+ catch (IllegalAccessException e)
+ {
+- LOGGER.warn("Object.clone(): unable to call method 'clone()' on class " + aClass, e);
++ LOGGER.warning("Object.clone(): unable to call method 'clone()' on class " + aClass + " : " + e);
+ }
+ catch (InvocationTargetException e)
+ {
+- LOGGER.warn("Object without clone() method is impossible on class " + aClass, e);
++ LOGGER.warning("Object without clone() method is impossible on class " + aClass + " : " + e);
+ }
+ throw new CloneNotSupportedException
+ ("Failed to clone: Clone caused an Exception while cloning type " + aClass);
+@@ -424,32 +424,32 @@
+ if (type != null && type.isAssignableFrom(c) == false)
+ {
+ // this is unacceptable and means someone messed up the configuration
+- LOGGER.warn("Specified class " + className + " is not of expected type " + type);
++ LOGGER.warning("Specified class " + className + " is not of expected type " + type);
+ return null;
+ }
+ return c.newInstance();
+ }
+ catch (ClassNotFoundException e)
+ {
+- if (LOGGER.isDebugEnabled())
++ if (LOGGER.isLoggable(Level.CONFIG))
+ {
+- LOGGER.debug("Specified class " + className + " does not exist.");
++ LOGGER.config("Specified class " + className + " does not exist.");
+ }
+ // sometimes, this one is expected.
+ }
+ catch (NoClassDefFoundError e)
+ {
+- if (LOGGER.isDebugEnabled())
++ if (LOGGER.isLoggable(Level.CONFIG))
+ {
+- LOGGER.debug("Specified class " + className + " cannot be loaded [NOCLASSDEFERROR].");
++ LOGGER.config("Specified class " + className + " cannot be loaded [NOCLASSDEFERROR].");
+ }
+ }
+ catch (Throwable e)
+ {
+ // this is more severe than a class not being found at all
+- if (LOGGER.isDebugEnabled())
++ if (LOGGER.isLoggable(Level.CONFIG))
+ {
+- LOGGER.info("Specified class " + className + " failed to instantiate correctly.", e);
++ LOGGER.info("Specified class " + className + " failed to instantiate correctly." + " : " + e);
+ }
+ else
+ {
+@@ -615,4 +615,4 @@
+ }
+ return hashCode;
+ }
+-}
+\ No newline at end of file
++}
+diff -ru libbase-1.1.3.orig/source/org/pentaho/reporting/libraries/base/util/PngEncoder.java libbase-1.1.3/source/org/pentaho/reporting/libraries/base/util/PngEncoder.java
+--- libbase-1.1.3.orig/source/org/pentaho/reporting/libraries/base/util/PngEncoder.java 2009-11-16 10:14:12.000000000 +0000
++++ libbase-1.1.3/source/org/pentaho/reporting/libraries/base/util/PngEncoder.java 2021-02-23 12:27:15.484797751 +0000
+@@ -27,8 +27,7 @@
+ import java.util.zip.Deflater;
+ import java.util.zip.DeflaterOutputStream;
+
+-import org.apache.commons.logging.Log;
+-import org.apache.commons.logging.LogFactory;
++import java.util.logging.Logger;
+ import org.pentaho.reporting.libraries.base.encoder.ImageEncoder;
+ import org.pentaho.reporting.libraries.base.encoder.UnsupportedEncoderException;
+
+@@ -66,7 +65,7 @@
+ public class PngEncoder implements ImageEncoder
+ {
+ /** A logger for debug-messages. */
+- private static final Log logger = LogFactory.getLog(PngEncoder.class);
++ private static final Logger logger = Logger.getLogger(PngEncoder.class.getName());
+
+ /**
+ * Constant specifying that alpha channel should be encoded.
+@@ -622,12 +621,12 @@
+ }
+ catch (Exception e)
+ {
+- logger.error("interrupted waiting for pixels!", e);
++ logger.severe("interrupted waiting for pixels: " + e);
+ return false;
+ }
+ if ((pg.getStatus() & ImageObserver.ABORT) != 0)
+ {
+- logger.error("image fetch aborted or errored");
++ logger.severe("image fetch aborted or errored");
+ return false;
+ }
+
+@@ -709,7 +708,7 @@
+ }
+ catch (IOException e)
+ {
+- logger.error("Failed to write PNG Data", e);
++ logger.severe("Failed to write PNG Data:" + e);
+ return false;
+ }
+ }
+diff -ru libbase-1.1.3.orig/source/org/pentaho/reporting/libraries/base/util/ResourceBundleSupport.java libbase-1.1.3/source/org/pentaho/reporting/libraries/base/util/ResourceBundleSupport.java
+--- libbase-1.1.3.orig/source/org/pentaho/reporting/libraries/base/util/ResourceBundleSupport.java 2009-11-16 10:14:12.000000000 +0000
++++ libbase-1.1.3/source/org/pentaho/reporting/libraries/base/util/ResourceBundleSupport.java 2021-02-23 12:27:45.015078518 +0000
+@@ -36,8 +36,7 @@
+ import javax.swing.JMenu;
+ import javax.swing.KeyStroke;
+
+-import org.apache.commons.logging.Log;
+-import org.apache.commons.logging.LogFactory;
++import java.util.logging.Logger;
+
+ /**
+ * An utility class to ease up using property-file resource bundles.
+@@ -60,7 +59,7 @@
+ /**
+ * A logger for debug-messages.
+ */
+- private static final Log logger = LogFactory.getLog(ResourceBundleSupport.class);
++ private static final Logger logger = Logger.getLogger(ResourceBundleSupport.class.getName());
+
+ /**
+ * The resource bundle that will be used for local lookups.
+@@ -259,7 +258,7 @@
+ }
+ catch (Exception e)
+ {
+- logger.error("Error during global lookup", e);
++ logger.severe("Error during global lookup: " + e);
+ throw new MissingResourceException("Error during global lookup", getResourceBase(), key);
+ }
+ }
+@@ -643,7 +642,7 @@
+ final URL in = ObjectUtilities.getResource(name, ResourceBundleSupport.class);
+ if (in == null)
+ {
+- logger.warn("Unable to find file in the class path: " + name + "; key=" + key);
++ logger.warning("Unable to find file in the class path: " + name + "; key=" + key);
+ }
+ return in;
+ }
+@@ -668,13 +667,13 @@
+
+ if (in == null)
+ {
+- logger.warn("Unable to find file in the class path: " + resourceName);
++ logger.warning("Unable to find file in the class path: " + resourceName);
+ return new ImageIcon(createTransparentImage(1, 1));
+ }
+ final Image img = Toolkit.getDefaultToolkit().createImage(in);
+ if (img == null)
+ {
+- logger.warn("Unable to instantiate the image: " + resourceName);
++ logger.warning("Unable to instantiate the image: " + resourceName);
+ return new ImageIcon(createTransparentImage(1, 1));
+ }
+ if (scale)
+@@ -808,7 +808,7 @@
+ }
+ catch (MissingResourceException mre)
+ {
+- logger.warn ("ResourceBundleSupport#getString(,,)", mre);
++ logger.warning ("ResourceBundleSupport#getString(,,): " + mre);
+ return '!' + key + '!';
+ }
+ }
+@@ -821,7 +821,7 @@
+ }
+ catch (MissingResourceException mre)
+ {
+- logger.warn ("ResourceBundleSupport#getString(,,)", mre);
++ logger.warning ("ResourceBundleSupport#getString(,,): " + mre);
+ return '!' + key + '!';
+ }
+ }
+@@ -836,7 +836,7 @@
+ }
+ catch (MissingResourceException mre)
+ {
+- logger.warn ("ResourceBundleSupport#getString(,,)", mre);
++ logger.warning ("ResourceBundleSupport#getString(,,): " + mre);
+ return '!' + key + '!';
+ }
+ }
+@@ -852,7 +852,7 @@
+ }
+ catch (MissingResourceException mre)
+ {
+- logger.warn ("ResourceBundleSupport#getString(,,)", mre);
++ logger.warning ("ResourceBundleSupport#getString(,,): " + mre);
+ return '!' + key + '!';
+ }
+ }
+diff -ru libbase-1.1.3.orig/source/org/pentaho/reporting/libraries/base/util/WaitingImageObserver.java libbase-1.1.3/source/org/pentaho/reporting/libraries/base/util/WaitingImageObserver.java
+--- libbase-1.1.3.orig/source/org/pentaho/reporting/libraries/base/util/WaitingImageObserver.java 2009-11-16 10:14:12.000000000 +0000
++++ libbase-1.1.3/source/org/pentaho/reporting/libraries/base/util/WaitingImageObserver.java 2021-02-23 12:30:28.223630238 +0000
+@@ -22,8 +22,7 @@
+ import java.awt.image.BufferedImage;
+ import java.awt.image.ImageObserver;
+
+-import org.apache.commons.logging.Log;
+-import org.apache.commons.logging.LogFactory;
++import java.util.logging.Logger;
+
+ /**
+ * This image observer blocks until the image is completely loaded. AWT defers the loading of images until they are
+@@ -37,7 +36,7 @@
+ public class WaitingImageObserver implements ImageObserver
+ {
+ /** A logger. */
+- private static final Log LOGGER = LogFactory.getLog(WaitingImageObserver.class);
++ private static final Logger LOGGER = Logger.getLogger(WaitingImageObserver.class.getName());
+
+ /**
+ * For serialization.
+@@ -149,7 +148,7 @@
+ }
+ catch (InterruptedException e)
+ {
+- LOGGER.info("WaitingImageObserver.waitImageLoaded(): InterruptedException thrown", e);
++ LOGGER.info("WaitingImageObserver.waitImageLoaded(): InterruptedException thrown: " + e);
+ }
+
+ if (maxLoadTime > 0 && lastUpdate < (System.currentTimeMillis() - maxLoadTime))
+@@ -172,4 +171,4 @@
+ {
+ return this.error;
+ }
+-}
+\ No newline at end of file
++}
+--- a/source/org/pentaho/reporting/libraries/base/util/IOUtils.java
++++ b/source/org/pentaho/reporting/libraries/base/util/IOUtils.java
+@@ -34,8 +34,7 @@
+ import java.sql.Clob;
+ import java.sql.SQLException;
+
+-import org.apache.commons.logging.LogFactory;
+-import org.apache.commons.logging.Log;
++import java.util.logging.Logger;
+
+ /**
+ * The IOUtils provide some IO related helper methods.
+@@ -48,7 +47,7 @@
+ * the singleton instance of the utility package.
+ */
+ private static IOUtils instance;
+- private static final Log logger = LogFactory.getLog(IOUtils.class);
++ private static final Logger logger = Logger.getLogger(IOUtils.class.getName());
+ /**
+ * DefaultConstructor.
+ */
+@@ -855,7 +854,7 @@
+ final long length = clob.length();
+ if (length > Integer.MAX_VALUE)
+ {
+- logger.warn ("This CLOB contains more than 2^31 characters. We cannot handle that.");
++ logger.warning ("This CLOB contains more than 2^31 characters. We cannot handle that.");
+ return null;
+ }
+
+@@ -867,7 +866,7 @@
+ }
+ catch (IOException e)
+ {
+- logger.warn ("Copying the stream failed.", e);
++ logger.warning ("Copying the stream failed: " + e);
+ }
+ try
+ {
+@@ -875,7 +874,7 @@
+ }
+ catch (IOException e)
+ {
+- logger.warn ("Failed to close input stream. No worries, we will be alright anyway.", e);
++ logger.warning ("Failed to close input stream. No worries, we will be alright anyway: " + e);
+ }
+ return outStream.toString();
+ }
+@@ -898,7 +897,7 @@
+ final long length = clob.length();
+ if (length > Integer.MAX_VALUE)
+ {
+- logger.warn ("This CLOB contains more than 2^31 characters. We cannot handle that.");
++ logger.warning ("This CLOB contains more than 2^31 characters. We cannot handle that.");
+ return null;
+ }
+
+@@ -910,7 +909,7 @@
+ }
+ catch (IOException e)
+ {
+- logger.warn ("Copying the stream failed.", e);
++ logger.warning ("Copying the stream failed: " + e);
+ }
+ try
+ {
+@@ -918,7 +917,7 @@
+ }
+ catch (IOException e)
+ {
+- logger.warn ("Failed to close input stream. No worries, we will be alright anyway.", e);
++ logger.warning ("Failed to close input stream. No worries, we will be alright anyway: " + e);
+ }
+ return outStream.toByteArray();
+ }
diff --git a/external/jfreereport/patches/libbase-1.1.6-deprecated.patch b/external/jfreereport/patches/libbase-1.1.6-deprecated.patch
new file mode 100644
index 0000000000..e5cd38bd8a
--- /dev/null
+++ b/external/jfreereport/patches/libbase-1.1.6-deprecated.patch
@@ -0,0 +1,53 @@
+--- misc/libbase-1.1.6/source/org/pentaho/reporting/libraries/base/boot/ModuleInitializeException.java 2010-04-27 15:58:44.000000000 +0200
++++ misc/build/libbase-1.1.6/source/org/pentaho/reporting/libraries/base/boot/ModuleInitializeException.java 2011-06-13 01:28:14.000000000 +0200
+@@ -48,7 +48,7 @@
+ */
+ public ModuleInitializeException(final String s, final Exception e)
+ {
+- super(s, e);
++ super(s, (Throwable) e);
+ }
+
+ /**
+--- misc/libbase-1.1.6/source/org/pentaho/reporting/libraries/base/util/ClassQueryTool.java 2010-04-27 15:58:46.000000000 +0200
++++ misc/build/libbase-1.1.6/source/org/pentaho/reporting/libraries/base/util/ClassQueryTool.java 2014-07-22 17:53:13.000000000 +0200
+@@ -173,7 +173,7 @@
+ final File file = directoryOrJar.getAbsoluteFile();
+ if (file.isDirectory() && file.exists() && file.canRead())
+ {
+- allURLs.add(file.toURL());
++ allURLs.add(file.toURI().toURL());
+ directoryURLs.add(file);
+ continue;
+ }
+@@ -186,8 +186,8 @@
+ final String fileName = file.getName();
+ if (fileName.endsWith(".jar") || fileName.endsWith(".zip"))
+ {
+- allURLs.add(file.toURL());
+- jarURLs.add(file.toURL());
++ allURLs.add(file.toURI().toURL());
++ jarURLs.add(file.toURI().toURL());
+ }
+ }
+
+@@ -199,7 +199,7 @@
+ final File file = driverFiles[i];
+ if (file.isDirectory() && file.exists() && file.canRead())
+ {
+- allURLs.add(file.toURL());
++ allURLs.add(file.toURI().toURL());
+ directoryURLs.add(file);
+ continue;
+ }
+@@ -212,8 +212,8 @@
+ final String fileName = file.getName();
+ if (fileName.endsWith(".jar") || fileName.endsWith(".zip"))
+ {
+- allURLs.add(file.toURL());
+- jarURLs.add(file.toURL());
++ allURLs.add(file.toURI().toURL());
++ jarURLs.add(file.toURI().toURL());
+ }
+ }
+ }
diff --git a/external/jfreereport/patches/libfonts-1.1.3-remove-commons-logging.patch.1 b/external/jfreereport/patches/libfonts-1.1.3-remove-commons-logging.patch.1
new file mode 100644
index 0000000000..723a732a59
--- /dev/null
+++ b/external/jfreereport/patches/libfonts-1.1.3-remove-commons-logging.patch.1
@@ -0,0 +1,506 @@
+diff -ru libfonts-1.1.3.orig/source/org/pentaho/reporting/libraries/fonts/afm/AfmFontRegistry.java libfonts-1.1.3/source/org/pentaho/reporting/libraries/fonts/afm/AfmFontRegistry.java
+--- libfonts-1.1.3.orig/source/org/pentaho/reporting/libraries/fonts/afm/AfmFontRegistry.java 2021-03-12 10:15:06.215353433 +0000
++++ libfonts-1.1.3/source/org/pentaho/reporting/libraries/fonts/afm/AfmFontRegistry.java 2021-03-12 10:26:44.036236575 +0000
+@@ -37,8 +37,7 @@
+ import org.pentaho.reporting.libraries.resourceloader.ResourceData;
+ import org.pentaho.reporting.libraries.base.util.StringUtils;
+ import org.pentaho.reporting.libraries.base.util.ObjectUtilities;
+-import org.apache.commons.logging.Log;
+-import org.apache.commons.logging.LogFactory;
++import java.util.logging.Logger;
+
+ /**
+ * Creation-Date: 21.07.2007, 20:14:05
+@@ -47,7 +46,8 @@
+ */
+ public class AfmFontRegistry extends AbstractFontFileRegistry
+ {
+- private static final Log logger = LogFactory.getLog(AfmFontRegistry.class);
++ private static final Logger logger = Logger.getLogger(AfmFontRegistry.class.getName());
++
+ /**
+ * The font path filter is used to collect font files and directories during
+ * the font path registration.
+@@ -133,7 +133,7 @@
+ filePfb.isFile() == false ||
+ filePfb.canRead() == false)
+ {
+- logger.warn("Cannot embedd font: " + filePfb + " is missing for " + font);
++ logger.warning("Cannot embedd font: " + filePfb + " is missing for " + font);
+ embedded = false;
+ }
+
+@@ -264,11 +264,11 @@
+ catch (final ClassNotFoundException cnfe)
+ {
+ // ignore the exception.
+- logger.debug("Failed to restore the cache: Cache was created by a different version of LibFonts");
++ logger.config("Failed to restore the cache: Cache was created by a different version of LibFonts");
+ }
+ catch (Exception e)
+ {
+- logger.debug("Failed to restore the cache:", e);
++ logger.config("Failed to restore the cache: " + e);
+ }
+ }
+
+@@ -311,14 +311,14 @@
+ catch (IOException e)
+ {
+ // ignore ..
+- logger.debug("Failed to store cached font data", e);
++ logger.config("Failed to store cached font data: " + e);
+ }
+ }
+ }
+ catch (IOException e)
+ {
+ // should not happen
+- logger.debug("Failed to store cached font data", e);
++ logger.config("Failed to store cached font data: " + e);
+ }
+ }
+ }
+diff -ru libfonts-1.1.3.orig/source/org/pentaho/reporting/libraries/fonts/encoding/EncodingRegistry.java libfonts-1.1.3/source/org/pentaho/reporting/libraries/fonts/encoding/EncodingRegistry.java
+--- libfonts-1.1.3.orig/source/org/pentaho/reporting/libraries/fonts/encoding/EncodingRegistry.java 2021-03-12 10:15:06.228353587 +0000
++++ libfonts-1.1.3/source/org/pentaho/reporting/libraries/fonts/encoding/EncodingRegistry.java 2021-03-12 10:27:11.614524616 +0000
+@@ -31,8 +31,7 @@
+ import org.pentaho.reporting.libraries.resourceloader.factory.property.PropertiesResourceFactory;
+ import org.pentaho.reporting.libraries.base.config.Configuration;
+ import org.pentaho.reporting.libraries.base.util.ObjectUtilities;
+-import org.apache.commons.logging.Log;
+-import org.apache.commons.logging.LogFactory;
++import java.util.logging.Logger;
+
+ /**
+ * A global registry for all supported encodings. This offers the option to fall
+@@ -42,7 +41,7 @@
+ */
+ public final class EncodingRegistry
+ {
+- private static final Log logger = LogFactory.getLog(EncodingRegistry.class);
++ private static final Logger logger = Logger.getLogger(EncodingRegistry.class.getName());
+
+ /**
+ * Implementation doc: This class uses several sources to load the encodings.
+@@ -266,7 +265,7 @@
+ catch (Exception e)
+ {
+ // fall back ...
+- logger.warn("Failed to create external-encoding instance for key " + key, e);
++ logger.warning("Failed to create external-encoding instance for key " + key + " : " + e);
+ }
+ }
+ if (isEncodingSupportedJVM(name))
+diff -ru libfonts-1.1.3.orig/source/org/pentaho/reporting/libraries/fonts/encoding/generator/EncodingGenerator.java libfonts-1.1.3/source/org/pentaho/reporting/libraries/fonts/encoding/generator/EncodingGenerator.java
+--- libfonts-1.1.3.orig/source/org/pentaho/reporting/libraries/fonts/encoding/generator/EncodingGenerator.java 2021-03-12 10:15:06.218353469 +0000
++++ libfonts-1.1.3/source/org/pentaho/reporting/libraries/fonts/encoding/generator/EncodingGenerator.java 2021-03-12 10:27:47.015894357 +0000
+@@ -35,8 +35,7 @@
+ import org.pentaho.reporting.libraries.fonts.encoding.External8BitEncodingData;
+ import org.pentaho.reporting.libraries.base.config.DefaultConfiguration;
+ import org.pentaho.reporting.libraries.base.util.ObjectUtilities;
+-import org.apache.commons.logging.Log;
+-import org.apache.commons.logging.LogFactory;
++import java.util.logging.Logger;
+
+ /**
+ * A simple sourcecode generator.
+@@ -45,7 +44,7 @@
+ */
+ public class EncodingGenerator
+ {
+- private static final Log logger = LogFactory.getLog(EncodingGenerator.class);
++ private static final Logger logger = Logger.getLogger(EncodingGenerator.class.getName());
+
+ private File targetDirectory;
+ private DefaultConfiguration propertySet;
+@@ -200,7 +199,7 @@
+ }
+ catch(Exception e)
+ {
+- logger.warn ("Failed to generate Encoding " + key, e);
++ logger.warning("Failed to generate Encoding " + key + " : " + e);
+ }
+ }
+ }
+@@ -269,7 +268,7 @@
+ }
+ catch(Exception e)
+ {
+- logger.warn ("Failed to generate Encoding " + key, e);
++ logger.warning("Failed to generate Encoding " + key + " : " + e);
+ }
+ }
+
+diff -ru libfonts-1.1.3.orig/source/org/pentaho/reporting/libraries/fonts/pfm/PfmFontRegistry.java libfonts-1.1.3/source/org/pentaho/reporting/libraries/fonts/pfm/PfmFontRegistry.java
+--- libfonts-1.1.3.orig/source/org/pentaho/reporting/libraries/fonts/pfm/PfmFontRegistry.java 2021-03-12 10:15:06.217353457 +0000
++++ libfonts-1.1.3/source/org/pentaho/reporting/libraries/fonts/pfm/PfmFontRegistry.java 2021-03-12 10:28:33.904384084 +0000
+@@ -37,8 +37,7 @@
+ import org.pentaho.reporting.libraries.resourceloader.ResourceData;
+ import org.pentaho.reporting.libraries.base.util.StringUtils;
+ import org.pentaho.reporting.libraries.base.util.ObjectUtilities;
+-import org.apache.commons.logging.Log;
+-import org.apache.commons.logging.LogFactory;
++import java.util.logging.Logger;
+
+ /**
+ * Creation-Date: 21.07.2007, 16:58:06
+@@ -47,7 +46,7 @@
+ */
+ public class PfmFontRegistry extends AbstractFontFileRegistry
+ {
+- private static final Log logger = LogFactory.getLog(PfmFontRegistry.class);
++ private static final Logger logger = Logger.getLogger(PfmFontRegistry.class.getName());
+
+ /**
+ * The font path filter is used to collect font files and directories during
+@@ -146,7 +145,7 @@
+ filePfb.isFile() == false ||
+ filePfb.canRead() == false)
+ {
+- logger.warn("Cannot embedd font: " + filePfb + " is missing for " + font);
++ logger.warning("Cannot embedd font: " + filePfb + " is missing for " + font);
+ embedded = false;
+ }
+
+@@ -155,7 +154,7 @@
+ {
+ if (pfmFont.isItextCompatible() == false)
+ {
+- logger.warn("Cannot embedd font: pfb-file for " + font + " is not valid (according to iText).");
++ logger.warning("Cannot embedd font: pfb-file for " + font + " is not valid (according to iText).");
+ }
+ }
+ registerFont (pfmFont);
+@@ -283,7 +282,7 @@
+ }
+ catch (Exception e)
+ {
+- logger.debug("Failed to restore the cache:", e);
++ logger.config("Failed to restore the cache: " + e);
+ }
+ }
+
+@@ -326,14 +325,14 @@
+ catch (IOException e)
+ {
+ // ignore ..
+- logger.debug("Failed to store cached font data", e);
++ logger.config("Failed to store cached font data: " + e);
+ }
+ }
+ }
+ catch (IOException e)
+ {
+ // should not happen
+- logger.debug("Failed to store cached font data", e);
++ logger.config("Failed to store cached font data: " + e);
+ }
+ }
+ }
+diff -ru libfonts-1.1.3.orig/source/org/pentaho/reporting/libraries/fonts/registry/AbstractFontFileRegistry.java libfonts-1.1.3/source/org/pentaho/reporting/libraries/fonts/registry/AbstractFontFileRegistry.java
+--- libfonts-1.1.3.orig/source/org/pentaho/reporting/libraries/fonts/registry/AbstractFontFileRegistry.java 2021-03-12 10:15:06.229353599 +0000
++++ libfonts-1.1.3/source/org/pentaho/reporting/libraries/fonts/registry/AbstractFontFileRegistry.java 2021-03-12 10:25:43.831607771 +0000
+@@ -25,8 +25,7 @@
+ import java.util.Iterator;
+ import java.util.Map;
+
+-import org.apache.commons.logging.Log;
+-import org.apache.commons.logging.LogFactory;
++import java.util.logging.Logger;
+ import org.pentaho.reporting.libraries.fonts.LibFontBoot;
+ import org.pentaho.reporting.libraries.fonts.encoding.EncodingRegistry;
+ import org.pentaho.reporting.libraries.base.util.StringUtils;
+@@ -39,7 +38,7 @@
+ */
+ public abstract class AbstractFontFileRegistry implements FontRegistry
+ {
+- private static final Log logger = LogFactory.getLog(AbstractFontFileRegistry.class);
++ private static final Logger logger = Logger.getLogger(AbstractFontFileRegistry.class.getName());
+
+ private HashMap seenFiles;
+
+@@ -74,7 +73,7 @@
+ }
+ catch (Exception e)
+ {
+- logger.warn("Extra font path " + extraDir + " could not be fully registered.", e);
++ logger.warning("Extra font path " + extraDir + " could not be fully registered: " + e);
+ }
+ }
+ }
+@@ -98,13 +97,13 @@
+ final String jrepath = safeSystemGetProperty("java.home", ".");
+ final String fs = safeSystemGetProperty("file.separator", File.separator);
+
+- logger.debug("Running on operating system: " + osname);
+- logger.debug("Character encoding used as default: " + encoding);
++ logger.config("Running on operating system: " + osname);
++ logger.config("Character encoding used as default: " + encoding);
+
+ if (safeSystemGetProperty("mrj.version", null) != null)
+ {
+ final String userhome = safeSystemGetProperty("user.home", ".");
+- logger.debug("Detected MacOS (Property 'mrj.version' is present.");
++ logger.config("Detected MacOS (Property 'mrj.version' is present.");
+ registerFontPath(new File(userhome + "/Library/Fonts"), encoding);
+ registerFontPath(new File("/Library/Fonts"), encoding);
+ registerFontPath(new File("/Network/Library/Fonts"), encoding);
+@@ -116,7 +115,7 @@
+ }
+ else
+ {
+- logger.debug("Assuming unix like file structures");
++ logger.config("Assuming unix like file structures");
+ // Assume X11 is installed in the default location.
+ registerFontPath(new File("/usr/X11R6/lib/X11/fonts"), encoding);
+ registerFontPath(new File("/usr/share/fonts"), encoding);
+@@ -145,7 +144,7 @@
+ */
+ private void registerWindowsFontPath(final String encoding)
+ {
+- logger.debug("Found 'Windows' in the OS name, assuming DOS/Win32 structures");
++ logger.config("Found 'Windows' in the OS name, assuming DOS/Win32 structures");
+ // Assume windows
+ // If you are not using windows, ignore this. This just checks if a windows system
+ // directory exist and includes a font dir.
+@@ -182,7 +181,7 @@
+ }
+ }
+ }
+- logger.debug("Fonts located in \"" + fontPath + '\"');
++ logger.config("Fonts located in \"" + fontPath + '\"');
+ if (fontPath != null)
+ {
+ final File file = new File(fontPath);
+@@ -272,7 +271,7 @@
+ }
+ catch (Exception e)
+ {
+- logger.warn("Font " + file + " is invalid. Message:" + e.getMessage(), e);
++ logger.warning("Font " + file + " is invalid. Message: " + e);
+ }
+ }
+ }
+diff -ru libfonts-1.1.3.orig/source/org/pentaho/reporting/libraries/fonts/text/GraphemeClassifier.java libfonts-1.1.3/source/org/pentaho/reporting/libraries/fonts/text/GraphemeClassifier.java
+--- libfonts-1.1.3.orig/source/org/pentaho/reporting/libraries/fonts/text/GraphemeClassifier.java 2021-03-12 10:15:06.205353315 +0000
++++ libfonts-1.1.3/source/org/pentaho/reporting/libraries/fonts/text/GraphemeClassifier.java 2021-03-12 10:29:03.600694237 +0000
+@@ -22,8 +22,7 @@
+ import java.io.IOException;
+
+ import org.pentaho.reporting.libraries.fonts.tools.ByteTable;
+-import org.apache.commons.logging.Log;
+-import org.apache.commons.logging.LogFactory;
++import java.util.logging.Logger;
+
+ /**
+ * Creation-Date: 11.06.2006, 17:11:16
+@@ -32,7 +31,7 @@
+ */
+ public final class GraphemeClassifier
+ {
+- private static final Log logger = LogFactory.getLog(GraphemeClassifier.class);
++ private static final Logger logger = Logger.getLogger(GraphemeClassifier.class.getName());
+
+ public static final int OTHER = 0;
+
+@@ -70,7 +69,7 @@
+ }
+ catch(Exception e)
+ {
+- logger.warn ("Unable to load the pre-generated classification data.", e);
++ logger.warning("Unable to load the pre-generated classification data: " + e);
+ }
+ finally
+ {
+diff -ru libfonts-1.1.3.orig/source/org/pentaho/reporting/libraries/fonts/truetype/TrueTypeFont.java libfonts-1.1.3/source/org/pentaho/reporting/libraries/fonts/truetype/TrueTypeFont.java
+--- libfonts-1.1.3.orig/source/org/pentaho/reporting/libraries/fonts/truetype/TrueTypeFont.java 2021-03-12 10:15:06.214353421 +0000
++++ libfonts-1.1.3/source/org/pentaho/reporting/libraries/fonts/truetype/TrueTypeFont.java 2021-03-12 10:29:19.746862875 +0000
+@@ -24,8 +24,7 @@
+ import org.pentaho.reporting.libraries.fonts.ByteAccessUtilities;
+ import org.pentaho.reporting.libraries.fonts.io.FileFontDataInputSource;
+ import org.pentaho.reporting.libraries.fonts.io.FontDataInputSource;
+-import org.apache.commons.logging.Log;
+-import org.apache.commons.logging.LogFactory;
++import java.util.logging.Logger;
+
+ /**
+ * Creation-Date: 06.11.2005, 18:27:21
+@@ -34,7 +33,7 @@
+ */
+ public class TrueTypeFont
+ {
+- private static final Log logger = LogFactory.getLog(TrueTypeFont.class);
++ private static final Logger logger = Logger.getLogger(TrueTypeFont.class.getName());
+
+ private static class TrueTypeFontHeader
+ {
+@@ -327,7 +326,7 @@
+ (FontHeaderTable) getTable(FontHeaderTable.TABLE_ID);
+ if (header == null)
+ {
+- logger.warn("The font '" + filename + "' does not have a 'head' table. The font file is not valid.");
++ logger.warning("The font '" + filename + "' does not have a 'head' table. The font file is not valid.");
+ return null;
+ }
+ final byte[] buffer =
+diff -ru libfonts-1.1.3.orig/source/org/pentaho/reporting/libraries/fonts/truetype/TrueTypeFontMetricsFactory.java libfonts-1.1.3/source/org/pentaho/reporting/libraries/fonts/truetype/TrueTypeFontMetricsFactory.java
+--- libfonts-1.1.3.orig/source/org/pentaho/reporting/libraries/fonts/truetype/TrueTypeFontMetricsFactory.java 2021-03-12 10:15:06.213353409 +0000
++++ libfonts-1.1.3/source/org/pentaho/reporting/libraries/fonts/truetype/TrueTypeFontMetricsFactory.java 2021-03-12 10:29:38.442058137 +0000
+@@ -21,8 +21,7 @@
+ import java.io.IOException;
+ import java.util.HashMap;
+
+-import org.apache.commons.logging.Log;
+-import org.apache.commons.logging.LogFactory;
++import java.util.logging.Logger;
+ import org.pentaho.reporting.libraries.fonts.io.FileFontDataInputSource;
+ import org.pentaho.reporting.libraries.fonts.io.FontDataInputSource;
+ import org.pentaho.reporting.libraries.fonts.registry.FontContext;
+@@ -38,7 +37,7 @@
+ */
+ public class TrueTypeFontMetricsFactory implements FontMetricsFactory
+ {
+- private static final Log logger = LogFactory.getLog(TrueTypeFontMetricsFactory.class);
++ private static final Logger logger = Logger.getLogger(TrueTypeFontMetricsFactory.class.getName());
+ private HashMap fontRecords;
+
+ public TrueTypeFontMetricsFactory()
+@@ -77,7 +76,7 @@
+ }
+ catch (IOException e)
+ {
+- logger.warn("Unable to read the font.", e);
++ logger.warning("Unable to read the font: " + e);
+ // todo: We should throw a better exception instead, shouldnt we?
+ throw new IllegalStateException();
+ }
+diff -ru libfonts-1.1.3.orig/source/org/pentaho/reporting/libraries/fonts/truetype/TrueTypeFontRegistry.java libfonts-1.1.3/source/org/pentaho/reporting/libraries/fonts/truetype/TrueTypeFontRegistry.java
+--- libfonts-1.1.3.orig/source/org/pentaho/reporting/libraries/fonts/truetype/TrueTypeFontRegistry.java 2021-03-12 10:15:06.214353421 +0000
++++ libfonts-1.1.3/source/org/pentaho/reporting/libraries/fonts/truetype/TrueTypeFontRegistry.java 2021-03-12 10:31:15.504071887 +0000
+@@ -28,8 +28,7 @@
+ import java.io.Serializable;
+ import java.util.HashMap;
+
+-import org.apache.commons.logging.Log;
+-import org.apache.commons.logging.LogFactory;
++import java.util.logging.Logger;
+ import org.pentaho.reporting.libraries.fonts.FontException;
+ import org.pentaho.reporting.libraries.fonts.LibFontBoot;
+ import org.pentaho.reporting.libraries.fonts.cache.FontCache;
+@@ -61,7 +60,7 @@
+ return secondLevelCache;
+ }
+
+- private static final Log logger = LogFactory.getLog(TrueTypeFontRegistry.class);
++ private static final Logger logger = Logger.getLogger(TrueTypeFontRegistry.class.getName());
+
+ /**
+ * The font path filter is used to collect font files and directories during the font path registration.
+@@ -180,7 +179,7 @@
+ }
+ catch (Exception e)
+ {
+- logger.info("Unable to register font file " + file, e);
++ logger.info("Unable to register font file " + file + " : " + e);
+ // An error must not stop us on our holy mission to find and register
+ // all fonts :)
+ return false;
+@@ -206,7 +205,7 @@
+ }
+ catch (FontException e)
+ {
+- logger.info("The font '" + font.getFilename() + "' is invalid.", e);
++ logger.info("The font '" + font.getFilename() + "' is invalid: " + e);
+ return;
+ }
+
+@@ -347,11 +346,11 @@
+ catch (final ClassNotFoundException cnfe)
+ {
+ // ignore the exception.
+- logger.debug("Failed to restore the cache: Cache was created by a different version of LibFonts");
++ logger.config("Failed to restore the cache: Cache was created by a different version of LibFonts");
+ }
+ catch (Exception e)
+ {
+- logger.debug("Non-Fatal: Failed to restore the cache. The cache will be rebuilt.", e);
++ logger.config("Non-Fatal: Failed to restore the cache. The cache will be rebuilt: " + e);
+ }
+ }
+
+@@ -394,14 +393,14 @@
+ catch (IOException e)
+ {
+ // ignore ..
+- logger.debug("Failed to store cached font data", e);
++ logger.config("Failed to store cached font data: " + e);
+ }
+ }
+ }
+ catch (IOException e)
+ {
+ // should not happen
+- logger.debug("Failed to store cached font data", e);
++ logger.config("Failed to store cached font data: " + e);
+ }
+ }
+ }
+--- a/source/org/pentaho/reporting/libraries/fonts/itext/BaseFontSupport.java
++++ b/source/org/pentaho/reporting/libraries/fonts/itext/BaseFontSupport.java
+@@ -34,8 +34,8 @@
+ import org.pentaho.reporting.libraries.fonts.merge.CompoundFontRecord;
+ import org.pentaho.reporting.libraries.base.config.ExtendedConfiguration;
+ import org.pentaho.reporting.libraries.base.util.StringUtils;
+-import org.apache.commons.logging.Log;
+-import org.apache.commons.logging.LogFactory;
++import java.util.logging.Level;
++import java.util.logging.Logger;
+
+ /**
+ * iText font support.
+@@ -44,7 +44,7 @@
+ */
+ public class BaseFontSupport implements FontMapper
+ {
+- private static final Log logger = LogFactory.getLog(BaseFontSupport.class);
++ private static final Logger logger = Logger.getLogger(BaseFontSupport.class.getName());
+ /**
+ * Storage for BaseFont objects created.
+ */
+@@ -235,7 +235,7 @@
+ final FontSource source = (FontSource) registryFontRecord;
+ if (source.isEmbeddable() == false)
+ {
+- logger.warn("License of font forbids embedded usage for font: " + fontKey);
++ logger.warning("License of font forbids embedded usage for font: " + fontKey);
+ // strict mode here?
+ embeddedOverride = false;
+ }
+@@ -286,13 +286,13 @@
+ }
+ catch (Exception e)
+ {
+- if (logger.isDebugEnabled())
++ if (logger.isLoggable(Level.CONFIG))
+ {
+- logger.debug("BaseFont.createFont failed. Key = " + fontKey + ": " + e.getMessage(), e);
++ logger.config("BaseFont.createFont failed. Key = " + fontKey + ": " + e);
+ }
+- else if (logger.isWarnEnabled())
++ else if (logger.isLoggable(Level.WARNING))
+ {
+- logger.warn("BaseFont.createFont failed. Key = " + fontKey + ": " + e.getMessage());
++ logger.warning("BaseFont.createFont failed. Key = " + fontKey + ": " + e.getMessage());
+ }
+ }
+ // fallback .. use BaseFont.HELVETICA as default
+@@ -322,7 +322,7 @@
+ }
+ catch (Exception e)
+ {
+- logger.warn("BaseFont.createFont for FALLBACK failed.", e);
++ logger.warning("BaseFont.createFont for FALLBACK failed: " + e);
+ throw new BaseFontCreateException("Null font = " + fontKey);
+ }
+ throw new BaseFontCreateException("BaseFont creation failed, null font: " + fontKey);
diff --git a/external/jfreereport/patches/libfonts-1.1.6-deprecated.patch b/external/jfreereport/patches/libfonts-1.1.6-deprecated.patch
new file mode 100644
index 0000000000..eb2ab8c76c
--- /dev/null
+++ b/external/jfreereport/patches/libfonts-1.1.6-deprecated.patch
@@ -0,0 +1,11 @@
+--- misc/libfonts-1.1.6/source/org/pentaho/reporting/libraries/fonts/FontException.java 2010-04-27 16:09:00.000000000 +0200
++++ misc/build/libfonts-1.1.6/source/org/pentaho/reporting/libraries/fonts/FontException.java 2011-06-13 02:04:51.000000000 +0200
+@@ -39,7 +39,7 @@
+ */
+ public FontException(final String message, final Exception ex)
+ {
+- super(message, ex);
++ super(message, (Throwable) ex);
+ }
+
+ /**
diff --git a/external/jfreereport/patches/libformula-1.1.3-remove-commons-logging.patch.1 b/external/jfreereport/patches/libformula-1.1.3-remove-commons-logging.patch.1
new file mode 100644
index 0000000000..5a578cf56d
--- /dev/null
+++ b/external/jfreereport/patches/libformula-1.1.3-remove-commons-logging.patch.1
@@ -0,0 +1,266 @@
+diff -ru libformula-1.1.3.orig/source/org/pentaho/reporting/libraries/formula/Formula.java libformula-1.1.3/source/org/pentaho/reporting/libraries/formula/Formula.java
+--- libformula-1.1.3.orig/source/org/pentaho/reporting/libraries/formula/Formula.java 2021-02-23 14:41:06.962127389 +0000
++++ libformula-1.1.3/source/org/pentaho/reporting/libraries/formula/Formula.java 2021-02-23 14:48:18.016328356 +0000
+@@ -19,8 +19,7 @@
+
+ import java.io.Serializable;
+
+-import org.apache.commons.logging.Log;
+-import org.apache.commons.logging.LogFactory;
++import java.util.logging.Logger;
+ import org.pentaho.reporting.libraries.formula.lvalues.LValue;
+ import org.pentaho.reporting.libraries.formula.lvalues.TypeValuePair;
+ import org.pentaho.reporting.libraries.formula.parser.FormulaParseException;
+@@ -40,7 +39,7 @@
+ */
+ public class Formula implements Serializable, Cloneable
+ {
+- private static final Log logger = LogFactory.getLog(Formula.class);
++ private static final Logger logger = Logger.getLogger(Formula.class.getName());
+ private LValue rootReference;
+ private static final long serialVersionUID = -1176925812499923546L;
+
+@@ -105,7 +104,7 @@
+ final Type type = typeValuePair.getType();
+ if (type.isFlagSet(Type.ERROR_TYPE))
+ {
+- logger.debug("Error: " + typeValuePair.getValue());
++ logger.config("Error: " + typeValuePair.getValue());
+ }
+ else if (type.isFlagSet(Type.ARRAY_TYPE))
+ {
+@@ -131,7 +130,7 @@
+ }
+ catch (Exception e)
+ {
+- logger.warn("Evaluation failed unexpectedly: ", e);
++ logger.warning("Evaluation failed unexpectedly: " + e);
+ return new TypeValuePair(ErrorType.TYPE, LibFormulaErrorValue.ERROR_UNEXPECTED_VALUE);
+ }
+ }
+diff -ru libformula-1.1.3.orig/source/org/pentaho/reporting/libraries/formula/function/DefaultFunctionRegistry.java libformula-1.1.3/source/org/pentaho/reporting/libraries/formula/function/DefaultFunctionRegistry.java
+--- libformula-1.1.3.orig/source/org/pentaho/reporting/libraries/formula/function/DefaultFunctionRegistry.java 2021-02-23 14:41:06.980127564 +0000
++++ libformula-1.1.3/source/org/pentaho/reporting/libraries/formula/function/DefaultFunctionRegistry.java 2021-02-23 14:48:29.995445103 +0000
+@@ -25,9 +25,7 @@
+ import org.pentaho.reporting.libraries.base.util.HashNMap;
+ import org.pentaho.reporting.libraries.base.util.ObjectUtilities;
+ import org.pentaho.reporting.libraries.base.config.Configuration;
+-import org.apache.commons.logging.Log;
+-import org.apache.commons.logging.LogFactory;
+-
++import java.util.logging.Logger;
+
+ /**
+ * Creation-Date: 02.11.2006, 12:48:32
+@@ -36,7 +34,7 @@
+ */
+ public class DefaultFunctionRegistry implements FunctionRegistry
+ {
+- private static final Log logger = LogFactory.getLog(DefaultFunctionRegistry.class);
++ private static final Logger logger = Logger.getLogger(DefaultFunctionRegistry.class.getName());
+
+ private static final String FUNCTIONS_PREFIX = "org.pentaho.reporting.libraries.formula.functions.";
+ private static final String[] EMPTY_ARRAY = new String[0];
+@@ -72,7 +70,7 @@
+ final Function function = createFunction(aName);
+ if (function == null)
+ {
+- logger.debug ("There is no such function: " + aName);
++ logger.config ("There is no such function: " + aName);
+ }
+ else
+ {
+@@ -132,7 +130,7 @@
+ (functionClass, DefaultFunctionRegistry.class, Function.class);
+ if (function == null)
+ {
+- logger.debug ("There is no such function: " + name);
++ logger.config ("There is no such function: " + name);
+ }
+ else
+ {
+diff -ru libformula-1.1.3.orig/source/org/pentaho/reporting/libraries/formula/function/information/IsErrFunction.java libformula-1.1.3/source/org/pentaho/reporting/libraries/formula/function/information/IsErrFunction.java
+--- libformula-1.1.3.orig/source/org/pentaho/reporting/libraries/formula/function/information/IsErrFunction.java 2021-02-23 14:41:06.983127594 +0000
++++ libformula-1.1.3/source/org/pentaho/reporting/libraries/formula/function/information/IsErrFunction.java 2021-02-23 14:48:54.904687864 +0000
+@@ -27,8 +27,7 @@
+ import org.pentaho.reporting.libraries.formula.typing.Type;
+ import org.pentaho.reporting.libraries.formula.typing.coretypes.ErrorType;
+ import org.pentaho.reporting.libraries.formula.typing.coretypes.LogicalType;
+-import org.apache.commons.logging.Log;
+-import org.apache.commons.logging.LogFactory;
++import java.util.logging.Logger;
+
+ /**
+ * This function returns true if the parameter is of error and not of error type NA.
+@@ -37,7 +36,7 @@
+ */
+ public class IsErrFunction implements Function
+ {
+- private static final Log logger = LogFactory.getLog(IsErrFunction.class);
++ private static final Logger logger = Logger.getLogger(IsErrFunction.class.getName());
+ private static final TypeValuePair RETURN_TRUE = new TypeValuePair(LogicalType.TYPE, Boolean.TRUE);
+ private static final TypeValuePair RETURN_FALSE = new TypeValuePair(LogicalType.TYPE, Boolean.FALSE);
+ private static final long serialVersionUID = 6749192734608313367L;
+@@ -61,7 +60,7 @@
+
+ if (ErrorType.TYPE.equals(type) && value instanceof ErrorValue)
+ {
+- logger.warn ("Passing errors around is deprecated. Throw exceptions instead.");
++ logger.warning("Passing errors around is deprecated. Throw exceptions instead.");
+ final ErrorValue na = (ErrorValue) value;
+ if (na.getErrorCode() == LibFormulaErrorValue.ERROR_NA)
+ {
+diff -ru libformula-1.1.3.orig/source/org/pentaho/reporting/libraries/formula/function/information/IsNaFunction.java libformula-1.1.3/source/org/pentaho/reporting/libraries/formula/function/information/IsNaFunction.java
+--- libformula-1.1.3.orig/source/org/pentaho/reporting/libraries/formula/function/information/IsNaFunction.java 2021-02-23 14:41:06.984127603 +0000
++++ libformula-1.1.3/source/org/pentaho/reporting/libraries/formula/function/information/IsNaFunction.java 2021-02-23 14:49:05.917795194 +0000
+@@ -27,8 +27,7 @@
+ import org.pentaho.reporting.libraries.formula.typing.Type;
+ import org.pentaho.reporting.libraries.formula.typing.coretypes.ErrorType;
+ import org.pentaho.reporting.libraries.formula.typing.coretypes.LogicalType;
+-import org.apache.commons.logging.Log;
+-import org.apache.commons.logging.LogFactory;
++import java.util.logging.Logger;
+
+ /**
+ * This function returns true if the parameter is of error type NA.
+@@ -39,7 +38,7 @@
+ {
+ private static final TypeValuePair RETURN_FALSE = new TypeValuePair(LogicalType.TYPE, Boolean.FALSE);
+ private static final TypeValuePair RETURN_TRUE = new TypeValuePair(LogicalType.TYPE, Boolean.TRUE);
+- private static final Log logger = LogFactory.getLog(IsNaFunction.class);
++ private static final Logger logger = Logger.getLogger(IsNaFunction.class.getName());
+ private static final long serialVersionUID = 1205462839536368718L;
+
+ public IsNaFunction()
+@@ -61,7 +60,7 @@
+
+ if (ErrorType.TYPE.equals(type) && value instanceof ErrorValue)
+ {
+- logger.warn ("Passing errors around is deprecated. Throw exceptions instead.");
++ logger.warning("Passing errors around is deprecated. Throw exceptions instead.");
+ final ErrorValue na = (ErrorValue) value;
+ if (na.getErrorCode() == LibFormulaErrorValue.ERROR_NA)
+ {
+diff -ru libformula-1.1.3.orig/source/org/pentaho/reporting/libraries/formula/lvalues/FormulaFunction.java libformula-1.1.3/source/org/pentaho/reporting/libraries/formula/lvalues/FormulaFunction.java
+--- libformula-1.1.3.orig/source/org/pentaho/reporting/libraries/formula/lvalues/FormulaFunction.java 2021-02-23 14:41:06.988127642 +0000
++++ libformula-1.1.3/source/org/pentaho/reporting/libraries/formula/lvalues/FormulaFunction.java 2021-02-23 14:50:26.354579111 +0000
+@@ -17,8 +17,8 @@
+
+ package org.pentaho.reporting.libraries.formula.lvalues;
+
+-import org.apache.commons.logging.Log;
+-import org.apache.commons.logging.LogFactory;
++import java.util.logging.Level;
++import java.util.logging.Logger;
+ import org.pentaho.reporting.libraries.formula.EvaluationException;
+ import org.pentaho.reporting.libraries.formula.FormulaContext;
+ import org.pentaho.reporting.libraries.formula.LibFormulaErrorValue;
+@@ -44,7 +44,7 @@
+ */
+ public class FormulaFunction extends AbstractLValue
+ {
+- private static final Log logger = LogFactory.getLog(FormulaFunction.class);
++ private static final Logger logger = Logger.getLogger(FormulaFunction.class.getName());
+
+ private static class FormulaParameterCallback implements ParameterCallback
+ {
+@@ -74,9 +74,9 @@
+ final TypeValuePair converted = typeRegistry.convertTo(paramType, result);
+ if (converted == null)
+ {
+- if (logger.isDebugEnabled())
++ if (logger.isLoggable(Level.CONFIG))
+ {
+- logger.debug("Failed to evaluate parameter " + pos + " on function " + function);
++ logger.config("Failed to evaluate parameter " + pos + " on function " + function);
+ }
+ throw EvaluationException.getInstance(LibFormulaErrorValue.ERROR_INVALID_AUTO_ARGUMENT_VALUE);
+ }
+@@ -228,7 +228,7 @@
+ }
+ catch (Exception e)
+ {
+- logger.error("Unexpected exception while evaluating", e);
++ logger.severe("Unexpected exception while evaluating: " + e);
+ throw EvaluationException.getInstance(LibFormulaErrorValue.ERROR_UNEXPECTED_VALUE);
+ }
+ }
+diff -ru libformula-1.1.3.orig/source/org/pentaho/reporting/libraries/formula/typing/DefaultTypeRegistry.java libformula-1.1.3/source/org/pentaho/reporting/libraries/formula/typing/DefaultTypeRegistry.java
+--- libformula-1.1.3.orig/source/org/pentaho/reporting/libraries/formula/typing/DefaultTypeRegistry.java 2021-02-23 14:41:06.961127380 +0000
++++ libformula-1.1.3/source/org/pentaho/reporting/libraries/formula/typing/DefaultTypeRegistry.java 2021-02-23 14:47:11.376678905 +0000
+@@ -35,8 +35,7 @@
+ import java.util.List;
+ import java.util.Locale;
+
+-import org.apache.commons.logging.Log;
+-import org.apache.commons.logging.LogFactory;
++import java.util.logging.Logger;
+ import org.pentaho.reporting.libraries.base.config.Configuration;
+ import org.pentaho.reporting.libraries.base.util.IOUtils;
+ import org.pentaho.reporting.libraries.base.util.ObjectUtilities;
+@@ -66,7 +65,7 @@
+ */
+ public class DefaultTypeRegistry implements TypeRegistry
+ {
+- private static final Log logger = LogFactory.getLog(DefaultTypeRegistry.class);
++ private static final Logger logger = Logger.getLogger(DefaultTypeRegistry.class.getName());
+
+ private static class ArrayConverterCallback implements ArrayCallback
+ {
+@@ -599,7 +598,7 @@
+ }
+ else
+ {
+- logger.warn("Assertation failure: Type declared to be a sequence, but no sequence found inside.");
++ logger.warning("Assertation failure: Type declared to be a sequence, but no sequence found inside.");
+ throw TypeConversionException.getInstance();
+ }
+ }
+@@ -612,7 +611,7 @@
+ }
+ else
+ {
+- logger.warn("Assertation failure: Type declared to be array, but no array callback found inside.");
++ logger.warning("Assertation failure: Type declared to be array, but no array callback found inside.");
+ throw TypeConversionException.getInstance();
+ }
+ }
+@@ -651,7 +650,7 @@
+ }
+ else
+ {
+- logger.warn("Assertation failure: Type declared to be array, but no array callback found inside.");
++ logger.warning("Assertation failure: Type declared to be array, but no array callback found inside.");
+ throw TypeConversionException.getInstance();
+ }
+ }
+--- a/source/org/pentaho/reporting/libraries/formula/function/logical/IfNaFunction.java
++++ b/source/org/pentaho/reporting/libraries/formula/function/logical/IfNaFunction.java
+@@ -17,8 +17,7 @@
+
+ package org.pentaho.reporting.libraries.formula.function.logical;
+
+-import org.apache.commons.logging.Log;
+-import org.apache.commons.logging.LogFactory;
++import java.util.logging.Logger;
+ import org.pentaho.reporting.libraries.formula.ErrorValue;
+ import org.pentaho.reporting.libraries.formula.EvaluationException;
+ import org.pentaho.reporting.libraries.formula.FormulaContext;
+@@ -37,7 +36,7 @@
+ */
+ public class IfNaFunction implements Function
+ {
+- private static final Log logger = LogFactory.getLog(IfNaFunction.class);
++ private static final Logger logger = Logger.getLogger(IfNaFunction.class.getName());
+ private static final long serialVersionUID = -7517668261071087411L;
+
+ public IfNaFunction()
+@@ -67,7 +66,7 @@
+ value = parameters.getValue(0);
+ if (ErrorType.TYPE.equals(type) && value instanceof ErrorValue)
+ {
+- logger.warn("Passing errors around is deprecated. Throw exceptions instead.");
++ logger.warning("Passing errors around is deprecated. Throw exceptions instead.");
+ final ErrorValue na = (ErrorValue) value;
+ if (na.getErrorCode() == LibFormulaErrorValue.ERROR_NA)
+ {
diff --git a/external/jfreereport/patches/libformula-datevalue_truncation.patch.1 b/external/jfreereport/patches/libformula-datevalue_truncation.patch.1
new file mode 100644
index 0000000000..069c667c19
--- /dev/null
+++ b/external/jfreereport/patches/libformula-datevalue_truncation.patch.1
@@ -0,0 +1,29 @@
+diff -ur jfreereport_libformula.org/source/org/pentaho/reporting/libraries/formula/function/datetime/DateValueFunction.java jfreereport_libformula/source/org/pentaho/reporting/libraries/formula/function/datetime/DateValueFunction.java
+--- jfreereport_libformula.org/source/org/pentaho/reporting/libraries/formula/function/datetime/DateValueFunction.java 2010-06-01 17:15:50.000000000 +0200
++++ jfreereport_libformula/source/org/pentaho/reporting/libraries/formula/function/datetime/DateValueFunction.java 2015-07-14 17:24:42.503895240 +0200
+@@ -18,6 +18,7 @@
+ package org.pentaho.reporting.libraries.formula.function.datetime;
+
+ import java.util.Date;
++import java.util.Calendar;
+
+ import org.pentaho.reporting.libraries.formula.EvaluationException;
+ import org.pentaho.reporting.libraries.formula.FormulaContext;
+@@ -28,6 +29,7 @@
+ import org.pentaho.reporting.libraries.formula.typing.Type;
+ import org.pentaho.reporting.libraries.formula.typing.TypeRegistry;
+ import org.pentaho.reporting.libraries.formula.typing.coretypes.DateTimeType;
++import org.pentaho.reporting.libraries.formula.util.DateUtil;
+
+ /**
+ * This function returns
+@@ -61,7 +63,8 @@
+ final Object value = parameters.getValue(0);
+
+ final Date date1 = typeRegistry.convertToDate(type, value);
+- return new TypeValuePair(DateTimeType.DATE_TYPE, date1);
++ final Date date = DateUtil.normalizeDate(date1, DateTimeType.DATE_TYPE);
+
++ return new TypeValuePair(DateTimeType.DATE_TYPE, date);
+ }
+ }
diff --git a/external/jfreereport/patches/libformula-minutes_truncation.patch.1 b/external/jfreereport/patches/libformula-minutes_truncation.patch.1
new file mode 100644
index 0000000000..71f0be2c9b
--- /dev/null
+++ b/external/jfreereport/patches/libformula-minutes_truncation.patch.1
@@ -0,0 +1,14 @@
+diff -ur jfreereport_libformula.org/source/org/pentaho/reporting/libraries/formula/function/datetime/MinuteFunction.java jfreereport_libformula/source/org/pentaho/reporting/libraries/formula/function/datetime/MinuteFunction.java
+--- jfreereport_libformula.org/source/org/pentaho/reporting/libraries/formula/function/datetime/MinuteFunction.java 2015-07-13 15:55:31.752539618 +0200
++++ jfreereport_libformula/source/org/pentaho/reporting/libraries/formula/function/datetime/MinuteFunction.java 2015-07-13 15:56:27.084394065 +0200
+@@ -74,7 +74,7 @@
+
+ // Multiply the minutes with 60 to get the minutes as ints
+ final BigDecimal minutes = minutesFraction.multiply(MINUTES);
+- final BigDecimal minutesAsInt = minutes.setScale(0, BigDecimal.ROUND_HALF_UP);
++ final BigDecimal minutesAsInt = NumberUtil.performIntRounding(minutes);
+ return new TypeValuePair(NumberType.GENERIC_NUMBER, minutesAsInt);
+ }
+-}
+\ Pas de fin de ligne à la fin du fichier
++}
diff --git a/external/jfreereport/patches/libformula-seconds_rounding.patch.1 b/external/jfreereport/patches/libformula-seconds_rounding.patch.1
new file mode 100644
index 0000000000..369332d1a8
--- /dev/null
+++ b/external/jfreereport/patches/libformula-seconds_rounding.patch.1
@@ -0,0 +1,37 @@
+diff -ur jfreereport_libformula.org/source/org/pentaho/reporting/libraries/formula/function/datetime/SecondFunction.java jfreereport_libformula/source/org/pentaho/reporting/libraries/formula/function/datetime/SecondFunction.java
+--- jfreereport_libformula.org/source/org/pentaho/reporting/libraries/formula/function/datetime/SecondFunction.java 2016-03-05 09:43:06.121774691 +0100
++++ jfreereport_libformula/source/org/pentaho/reporting/libraries/formula/function/datetime/SecondFunction.java 2016-03-05 09:51:04.810488511 +0100
+@@ -29,7 +29,7 @@
+ import org.pentaho.reporting.libraries.formula.util.NumberUtil;
+
+ /**
+- * This function extracts the minute (0 through 59) from a time.
++ * This function extracts the seconds (0 through 59) from a time.
+ *
+ * @author Cedric Pronzato
+ */
+@@ -67,14 +67,15 @@
+
+ // time * 24 so that we get the full hours (which we remove later)
+ final BigDecimal bd = NumberUtil.getAsBigDecimal(n);
+- final BigDecimal hours = bd.multiply(MINUTES_PER_DAY);
+- final BigDecimal dayAndHoursAsInt = NumberUtil.performIntRounding(hours);
+- final BigDecimal minutesFraction = hours.subtract(dayAndHoursAsInt);
+-
+- // Multiply the minutes with 60 to get the minutes as ints
+- final BigDecimal seconds = minutesFraction.multiply(SECONDS);
+- final BigDecimal secondsAsInt = NumberUtil.performIntRounding(seconds);
++ final BigDecimal minutes = bd.multiply(MINUTES_PER_DAY);
++ final BigDecimal dayHoursAndMinutesAsInt = NumberUtil.performIntRounding(minutes);
++ final BigDecimal secondsFraction = minutes.subtract(dayHoursAndMinutesAsInt);
++
++ // Multiply the minutes with 60 to get the seconds as ints
++ final BigDecimal seconds = secondsFraction.multiply(SECONDS);
++ final BigDecimal nanoSeconds = seconds.setScale(9, BigDecimal.ROUND_HALF_UP);
++ final BigDecimal secondsAsInt = NumberUtil.performIntRounding(nanoSeconds);
+
+ return new TypeValuePair(NumberType.GENERIC_NUMBER, secondsAsInt);
+ }
+-}
+\ No newline at end of file
++}
diff --git a/external/jfreereport/patches/libformula-time-notz.patch b/external/jfreereport/patches/libformula-time-notz.patch
new file mode 100644
index 0000000000..fec65b17e1
--- /dev/null
+++ b/external/jfreereport/patches/libformula-time-notz.patch
@@ -0,0 +1,22 @@
+--- a/jfreereport_libformula/source/org/pentaho/reporting/libraries/formula/DefaultLocalizationContext.java 2010-06-01 17:15:52.000000000 +0200
++++ a/jfreereport_libformula.patched/source/org/pentaho/reporting/libraries/formula/DefaultLocalizationContext.java 2013-08-06 13:11:58.000000000 +0200
+@@ -162,11 +169,17 @@
+ final Locale activeLocale = getLocale();
+ datetimeFormats.add(DateFormat.getDateTimeInstance(DateFormat.FULL, DateFormat.FULL, activeLocale));
+ dateFormats.add(DateFormat.getDateInstance(DateFormat.FULL, activeLocale));
+- timeFormats.add(DateFormat.getTimeInstance(DateFormat.FULL, activeLocale));
++ // LEM: "FULL" does not really make sense for isolated times:
++ // in the absence of a date, it cannot know whether it is meant in the winter-timezone
++ // or in the summer (daylight saving time) timezone, and will always display the winter timezone.
++ // timeFormats.add(DateFormat.getTimeInstance(DateFormat.FULL, activeLocale));
+
+ datetimeFormats.add(DateFormat.getDateTimeInstance(DateFormat.LONG, DateFormat.LONG, activeLocale));
+ dateFormats.add(DateFormat.getDateInstance(DateFormat.LONG, activeLocale));
+- timeFormats.add(DateFormat.getTimeInstance(DateFormat.LONG, activeLocale));
++ // LEM: "LONG" does not really make sense for isolated times:
++ // in the absence of a date, it cannot know whether it is meant in the winter-timezone
++ // or in the summer (daylight saving time) timezone, and will always display the winter timezone.
++ // timeFormats.add(DateFormat.getTimeInstance(DateFormat.LONG, activeLocale));
+
+ datetimeFormats.add(DateFormat.getDateTimeInstance(DateFormat.MEDIUM, DateFormat.MEDIUM, activeLocale));
+ dateFormats.add(DateFormat.getDateInstance(DateFormat.MEDIUM, activeLocale));
diff --git a/external/jfreereport/patches/liblayout-0.2.10-remove-commons-logging.patch.1 b/external/jfreereport/patches/liblayout-0.2.10-remove-commons-logging.patch.1
new file mode 100644
index 0000000000..5c71a57d2d
--- /dev/null
+++ b/external/jfreereport/patches/liblayout-0.2.10-remove-commons-logging.patch.1
@@ -0,0 +1,860 @@
+diff -ru liblayout-0.2.10.orig/source/org/jfree/layouting/input/style/parser/CSSValueFactory.java liblayout-0.2.10/source/org/jfree/layouting/input/style/parser/CSSValueFactory.java
+--- liblayout-0.2.10.orig/source/org/jfree/layouting/input/style/parser/CSSValueFactory.java 2021-04-07 10:34:09.797045462 +0100
++++ liblayout-0.2.10/source/org/jfree/layouting/input/style/parser/CSSValueFactory.java 2021-04-07 10:41:20.015338056 +0100
+@@ -49,8 +49,7 @@
+ import org.jfree.layouting.input.style.values.CSSStringValue;
+ import org.jfree.layouting.input.style.values.CSSValue;
+ import org.w3c.css.sac.LexicalUnit;
+-import org.apache.commons.logging.LogFactory;
+-import org.apache.commons.logging.Log;
++import java.util.logging.Logger;
+ import org.pentaho.reporting.libraries.base.config.Configuration;
+ import org.pentaho.reporting.libraries.base.util.ObjectUtilities;
+
+@@ -61,7 +60,7 @@
+ */
+ public class CSSValueFactory
+ {
+- private static final Log logger = LogFactory.getLog(CSSValueFactory.class);
++ private static final Logger logger = Logger.getLogger(CSSValueFactory.class.getName());
+ public static final String SIMPLE_PREFIX = "org.jfree.layouting.parser.handlers.";
+ public static final String COMPOUND_PREFIX = "org.jfree.layouting.parser.compoundhandlers.";
+
+@@ -99,7 +98,7 @@
+ }
+ else
+ {
+- logger.warn("Invalid module implementation: " + c);
++ logger.warning("Invalid module implementation: " + c);
+ }
+ }
+
+@@ -300,7 +299,7 @@
+ (CSSCompoundValueReadHandler) compoundHandlers.get(name);
+ if (handler == null)
+ {
+- logger.warn("Got no key for inherited value: " + name);
++ logger.warning("Got no key for inherited value: " + name);
+ return;
+ }
+
+@@ -324,7 +323,7 @@
+ (CSSCompoundValueReadHandler) compoundHandlers.get(name);
+ if (handler == null)
+ {
+- logger.warn("Got no key for compound attr function: " + name);
++ logger.warning("Got no key for compound attr function: " + name);
+ return;
+ }
+
+@@ -373,7 +372,7 @@
+ {
+ if (key == null)
+ {
+- // Log.warn("Got no key for attribute-function " + normalizedName);
++ // Log.warning("Got no key for attribute-function " + normalizedName);
+ setCompundAttrValue(normalizedName, attrFn, rule, important);
+ return;
+ }
+@@ -387,7 +386,7 @@
+ // ATTR function (extended version).
+ if (key == null)
+ {
+- logger.warn("Got no key for attribute-function " + normalizedName);
++ logger.warning("Got no key for attribute-function " + normalizedName);
+ return;
+ }
+ final CSSAttrFunction attrFn = parseComplexAttrFn(value.getParameters());
+@@ -421,7 +420,7 @@
+ return;
+ }
+
+- logger.warn("Unparsable value: Got no valid result for " + normalizedName + " (" + value + ')');
++ logger.warning("Unparsable value: Got no valid result for " + normalizedName + " (" + value + ')');
+ return; // ignore this rule ..
+ }
+ final Map map = module.createValues(value);
+diff -ru liblayout-0.2.10.orig/source/org/jfree/layouting/input/style/parser/StyleSheetHandler.java liblayout-0.2.10/source/org/jfree/layouting/input/style/parser/StyleSheetHandler.java
+--- liblayout-0.2.10.orig/source/org/jfree/layouting/input/style/parser/StyleSheetHandler.java 2021-04-07 10:34:09.798045474 +0100
++++ liblayout-0.2.10/source/org/jfree/layouting/input/style/parser/StyleSheetHandler.java 2021-04-07 10:48:18.496489721 +0100
+@@ -60,8 +60,7 @@
+ import org.pentaho.reporting.libraries.resourceloader.Resource;
+ import org.pentaho.reporting.libraries.resourceloader.ResourceException;
+ import org.pentaho.reporting.libraries.base.util.FastStack;
+-import org.apache.commons.logging.LogFactory;
+-import org.apache.commons.logging.Log;
++import java.util.logging.Logger;
+
+ /**
+ * Creation-Date: 23.11.2005, 13:06:06
+@@ -70,7 +69,7 @@
+ */
+ public class StyleSheetHandler implements DocumentHandler, ErrorHandler
+ {
+- private static final Log logger = LogFactory.getLog(StyleSheetHandler.class);
++ private static final Logger logger = Logger.getLogger(StyleSheetHandler.class.getName());
+ private HashMap namespaces;
+ private StyleKeyRegistry registry;
+ private StyleSheet styleSheet;
+@@ -614,7 +613,7 @@
+ catch (Exception e)
+ {
+ // we catch everything.
+- logger.warn("Error parsing style key: " + name, e);
++ logger.warning("Error parsing style key: " + name + " : " + e);
+ }
+
+ }
+@@ -639,7 +638,7 @@
+ public void warning(final CSSParseException exception)
+ throws CSSException
+ {
+- logger.warn("Warning: " + exception.getMessage());
++ logger.warning("Warning: " + exception.getMessage());
+ }
+
+ /**
+@@ -665,7 +664,7 @@
+ public void error(final CSSParseException exception)
+ throws CSSException
+ {
+- logger.warn("Error: ", exception);
++ logger.warning("Error: " + exception);
+ }
+
+ /**
+@@ -690,6 +689,6 @@
+ public void fatalError(final CSSParseException exception)
+ throws CSSException
+ {
+- logger.warn("Fatal Error: ", exception);
++ logger.warning("Fatal Error: " + exception);
+ }
+ }
+diff -ru liblayout-0.2.10.orig/source/org/jfree/layouting/normalizer/generator/PrintContentGenerator.java liblayout-0.2.10/source/org/jfree/layouting/normalizer/generator/PrintContentGenerator.java
+--- liblayout-0.2.10.orig/source/org/jfree/layouting/normalizer/generator/PrintContentGenerator.java 2021-04-07 10:34:09.766045081 +0100
++++ liblayout-0.2.10/source/org/jfree/layouting/normalizer/generator/PrintContentGenerator.java 2021-04-07 10:47:20.093770766 +0100
+@@ -38,8 +38,7 @@
+ import org.jfree.layouting.layouter.context.PageContext;
+ import org.jfree.layouting.normalizer.content.NormalizationException;
+ import org.jfree.layouting.renderer.Renderer;
+-import org.apache.commons.logging.LogFactory;
+-import org.apache.commons.logging.Log;
++import java.util.logging.Logger;
+
+ /**
+ * Simply prints each incoming call.
+@@ -48,7 +47,7 @@
+ */
+ public class PrintContentGenerator implements ContentGenerator
+ {
+- private static final Log logger = LogFactory.getLog(PrintContentGenerator.class);
++ private static final Logger logger = Logger.getLogger(PrintContentGenerator.class.getName());
+
+
+ private static class PrintContentGeneratorState implements State
+@@ -96,56 +95,56 @@
+ */
+ public void startedDocument(final PageContext pageContext)
+ {
+- logger.debug("<document>");
++ logger.config("<document>");
+ renderer.startedDocument(pageContext);
+ }
+
+ public void startedFlow(final LayoutContext element)
+ throws NormalizationException
+ {
+- logger.debug("<flow tag='" + element.getTagName() + "'>");
++ logger.config("<flow tag='" + element.getTagName() + "'>");
+ renderer.startedFlow(element);
+ }
+
+ public void startedTable(final LayoutContext element)
+ throws NormalizationException
+ {
+- logger.debug("<table>");
++ logger.config("<table>");
+ renderer.startedTable(element);
+ }
+
+ public void startedTableColumnGroup(final LayoutContext element)
+ throws NormalizationException
+ {
+- logger.debug("<table-col-group>");
++ logger.config("<table-col-group>");
+ renderer.startedTableColumnGroup(element);
+ }
+
+ public void startedTableColumn(final LayoutContext element)
+ throws NormalizationException
+ {
+- logger.debug("<table-col>");
++ logger.config("<table-col>");
+ renderer.startedTableColumn(element);
+ }
+
+ public void startedTableSection(final LayoutContext element)
+ throws NormalizationException
+ {
+- logger.debug("<table-section>");
++ logger.config("<table-section>");
+ renderer.startedTableSection(element);
+ }
+
+ public void startedTableRow(final LayoutContext element)
+ throws NormalizationException
+ {
+- logger.debug("<table-row>");
++ logger.config("<table-row>");
+ renderer.startedTableRow(element);
+ }
+
+ public void startedTableCell(final LayoutContext element)
+ throws NormalizationException
+ {
+- logger.debug("<table-cell>");
++ logger.config("<table-cell>");
+ renderer.startedTableCell(element);
+ }
+
+@@ -153,7 +152,7 @@
+ throws NormalizationException
+ {
+ final String tagName = element.getTagName();
+- logger.debug("<block tag='" + tagName + "'>");
++ logger.config("<block tag='" + tagName + "'>");
+ renderer.startedBlock(element);
+ }
+
+@@ -161,14 +160,14 @@
+ throws NormalizationException
+ {
+ final String tagName = element.getTagName();
+- logger.debug("<paragraph tag='" + tagName + "'>");
++ logger.config("<paragraph tag='" + tagName + "'>");
+ renderer.startedRootInline(element);
+ }
+
+ public void startedMarker(final LayoutContext element)
+ throws NormalizationException
+ {
+- logger.debug("<marker>");
++ logger.config("<marker>");
+ renderer.startedMarker(element);
+ }
+
+@@ -176,80 +175,80 @@
+ throws NormalizationException
+ {
+ final String tagName = element.getTagName();
+- logger.debug("<inline tag='" + tagName + "'>");
++ logger.config("<inline tag='" + tagName + "'>");
+ renderer.startedInline(element);
+ }
+
+ public void addContent(final LayoutContext node, final ContentToken token)
+ throws NormalizationException
+ {
+- logger.debug("<content>" + token + "</content>");
++ logger.config("<content>" + token + "</content>");
+ renderer.addContent(node, token);
+ }
+
+ public void finishedInline() throws NormalizationException
+ {
+- logger.debug("</inline>");
++ logger.config("</inline>");
+ renderer.finishedInline();
+ }
+
+ public void finishedMarker() throws NormalizationException
+ {
+- logger.debug("</marker>");
++ logger.config("</marker>");
+ renderer.finishedMarker();
+ }
+
+ public void finishedRootInline() throws NormalizationException
+ {
+- logger.debug("</paragraph>");
++ logger.config("</paragraph>");
+ renderer.finishedRootInline();
+ }
+
+ public void finishedBlock() throws NormalizationException
+ {
+- logger.debug("</block>");
++ logger.config("</block>");
+ renderer.finishedBlock();
+ }
+
+ public void finishedTableCell() throws NormalizationException
+ {
+- logger.debug("</table-cell>");
++ logger.config("</table-cell>");
+ renderer.finishedTableCell();
+ }
+
+ public void finishedTableRow() throws NormalizationException
+ {
+- logger.debug("</table-row>");
++ logger.config("</table-row>");
+ renderer.finishedTableRow();
+ }
+
+ public void finishedTableSection() throws NormalizationException
+ {
+- logger.debug("</table-section>");
++ logger.config("</table-section>");
+ renderer.finishedTableSection();
+ }
+
+ public void finishedTableColumn() throws NormalizationException
+ {
+- logger.debug("</table-col>");
++ logger.config("</table-col>");
+ renderer.finishedTableColumn();
+ }
+
+ public void finishedTableColumnGroup() throws NormalizationException
+ {
+- logger.debug("</table-col-group>");
++ logger.config("</table-col-group>");
+ renderer.finishedTableColumnGroup();
+ }
+
+ public void finishedTable() throws NormalizationException
+ {
+- logger.debug("</table>");
++ logger.config("</table>");
+ renderer.finishedTable();
+ }
+
+ public void finishedFlow() throws NormalizationException
+ {
+- logger.debug("</flow>");
++ logger.config("</flow>");
+ renderer.finishedFlow();
+ }
+
+@@ -259,7 +258,7 @@
+ */
+ public void finishedDocument() throws NormalizationException
+ {
+- logger.debug("</document>");
++ logger.config("</document>");
+ renderer.finishedDocument();
+ }
+
+@@ -276,7 +275,7 @@
+ public void startedPassThrough(final LayoutContext element)
+ throws NormalizationException
+ {
+- logger.debug("<pass-through>");
++ logger.config("<pass-through>");
+ renderer.startedPassThrough(element);
+ }
+
+@@ -284,26 +283,26 @@
+ final ContentToken token)
+ throws NormalizationException
+ {
+- logger.debug("<pass-through-content>" + token + "</pass-through-content>");
++ logger.config("<pass-through-content>" + token + "</pass-through-content>");
+ renderer.addPassThroughContent(node, token);
+ }
+
+ public void finishedPassThrough() throws NormalizationException
+ {
+- logger.debug("</pass-through>");
++ logger.config("</pass-through>");
+ renderer.finishedPassThrough();
+ }
+
+ public void startedTableCaption(final LayoutContext context)
+ throws NormalizationException
+ {
+- logger.debug("<table-caption>");
++ logger.config("<table-caption>");
+ renderer.startedTableCaption(context);
+ }
+
+ public void finishedTableCaption() throws NormalizationException
+ {
+- logger.debug("</table-caption>");
++ logger.config("</table-caption>");
+ renderer.finishedTableCaption();
+ }
+
+diff -ru liblayout-0.2.10.orig/source/org/jfree/layouting/renderer/model/RenderBox.java liblayout-0.2.10/source/org/jfree/layouting/renderer/model/RenderBox.java
+--- liblayout-0.2.10.orig/source/org/jfree/layouting/renderer/model/RenderBox.java 2021-04-07 10:34:09.779045241 +0100
++++ liblayout-0.2.10/source/org/jfree/layouting/renderer/model/RenderBox.java 2021-04-07 10:49:14.499179135 +0100
+@@ -44,8 +44,7 @@
+ import org.jfree.layouting.renderer.text.ExtendedBaselineInfo;
+ import org.jfree.layouting.renderer.text.TextUtility;
+ import org.pentaho.reporting.libraries.fonts.registry.FontMetrics;
+-import org.apache.commons.logging.Log;
+-import org.apache.commons.logging.LogFactory;
++import java.util.logging.Logger;
+
+ /**
+ * A render-box corresponds to elements in a DOM tree.
+@@ -62,7 +61,7 @@
+ */
+ public abstract class RenderBox extends RenderNode
+ {
+- private static final Log logger = LogFactory.getLog(RenderBox.class);
++ private static final Logger logger = Logger.getLogger(RenderBox.class.getName());
+ public static final boolean LOG_PRUNE = false;
+
+ private RenderNode firstChild;
+@@ -930,7 +929,7 @@
+ {
+ if (LOG_PRUNE)
+ {
+- logger.debug("Pruning: " + this);
++ logger.config("Pruning: " + this);
+ }
+ getParent().remove(this);
+ }
+@@ -944,7 +943,7 @@
+ {
+ if (LOG_PRUNE)
+ {
+- logger.debug("Pruning: " + lastChild);
++ logger.config("Pruning: " + lastChild);
+ }
+ remove(lastChild);
+ lastChild = getLastChild();
+diff -ru liblayout-0.2.10.orig/source/org/jfree/layouting/renderer/ModelPrinter.java liblayout-0.2.10/source/org/jfree/layouting/renderer/ModelPrinter.java
+--- liblayout-0.2.10.orig/source/org/jfree/layouting/renderer/ModelPrinter.java 2021-04-07 10:34:09.786045327 +0100
++++ liblayout-0.2.10/source/org/jfree/layouting/renderer/ModelPrinter.java 2021-04-07 10:46:12.757941838 +0100
+@@ -41,8 +41,7 @@
+ import org.jfree.layouting.renderer.model.table.cells.TableCell;
+ import org.jfree.layouting.renderer.model.table.cols.TableColumn;
+ import org.jfree.layouting.renderer.model.table.cols.TableColumnModel;
+-import org.apache.commons.logging.Log;
+-import org.apache.commons.logging.LogFactory;
++import java.util.logging.Logger;
+
+ /**
+ * Creation-Date: Jan 9, 2007, 2:22:59 PM
+@@ -51,7 +50,7 @@
+ */
+ public class ModelPrinter
+ {
+- private static final Log logger = LogFactory.getLog (ModelPrinter.class);
++ private static final Logger logger = Logger.getLogger(ModelPrinter.class.getName());
+
+ private ModelPrinter()
+ {
+@@ -66,7 +65,7 @@
+ b.append('[');
+ b.append(Integer.toHexString(System.identityHashCode(node)));
+ b.append(']');
+- logger.debug (b);
++ logger.config(b.toString());
+ node = node.getParent();
+ }
+ }
+@@ -96,7 +95,7 @@
+ b.append(", height=");
+ b.append(box.getHeight());
+ b.append('}');
+- logger.debug(b.toString());
++ logger.config(b.toString());
+
+ b = new StringBuffer();
+ for (int i = 0; i < level; i++)
+@@ -105,7 +104,7 @@
+ }
+ b.append("- nodeLayoutProperties=");
+ b.append(box.getNodeLayoutProperties());
+- logger.debug(b.toString());
++ logger.config(b.toString());
+
+ b = new StringBuffer();
+ for (int i = 0; i < level; i++)
+@@ -114,7 +113,7 @@
+ }
+ b.append("- boxLayoutProperties=");
+ b.append(box.getBoxLayoutProperties());
+- logger.debug(b.toString());
++ logger.config(b.toString());
+
+ if (box instanceof TableRowRenderBox)
+ {
+@@ -124,7 +123,7 @@
+ for (int i = 0; i < rowInfoStructure.getCellCount(); i++)
+ {
+ final TableCell cell = rowInfoStructure.getCellAt(i);
+- logger.debug ("CELL: " + i + " = " + cell.getRowSpan() + ' ' + cell.getColSpan() + ' ' + cell);
++ logger.config("CELL: " + i + " = " + cell.getRowSpan() + ' ' + cell.getColSpan() + ' ' + cell);
+ }
+ }
+ else if (box instanceof TableRenderBox)
+@@ -134,7 +133,7 @@
+ for (int i = 0; i < columnModel.getColumnCount(); i++)
+ {
+ final TableColumn col = columnModel.getColumn(i);
+- logger.debug ("COLUMN: EffectiveSize: " + col.getEffectiveSize() + " Computed Max Width: " + col.getComputedMaximumWidth() + " Computed ChunkSize: " + col.getComputedMinChunkSize());
++ logger.config("COLUMN: EffectiveSize: " + col.getEffectiveSize() + " Computed Max Width: " + col.getComputedMaximumWidth() + " Computed ChunkSize: " + col.getComputedMinChunkSize());
+ // for (int cs = 1; cs < 3; cs++)
+ // {
+ // Log.debug ("* COLUMN: " + i + "(" + cs + ") " +
+@@ -149,14 +148,14 @@
+ else if (box instanceof TableCellRenderBox)
+ {
+ final TableCellRenderBox cellBox = (TableCellRenderBox) box;
+- logger.debug ("CELL: Position: " + cellBox.getColumnIndex());
++ logger.config("CELL: Position: " + cellBox.getColumnIndex());
+ }
+ else if (box instanceof ParagraphRenderBox)
+ {
+ final ParagraphRenderBox paraBox = (ParagraphRenderBox) box;
+- logger.debug ("-----------------------------------------------------");
++ logger.config("-----------------------------------------------------");
+ printBox(paraBox.getLineboxContainer(), level + 1);
+- logger.debug ("-----------------------------------------------------");
++ logger.config("-----------------------------------------------------");
+ }
+
+ printChilds(box, level);
+@@ -203,7 +202,7 @@
+ b.append(", height=");
+ b.append(node.getHeight());
+ b.append('}');
+- logger.debug(b.toString());
++ logger.config(b.toString());
+
+
+ b = new StringBuffer();
+@@ -213,7 +212,7 @@
+ }
+ b.append("- nodeLayoutProperties=");
+ b.append(node.getNodeLayoutProperties());
+- logger.debug(b.toString());
++ logger.config(b.toString());
+ }
+
+ private static void printText(final RenderableText text, final int level)
+@@ -238,7 +237,7 @@
+ b.append(", text='");
+ b.append(text.getRawText());
+ b.append("'}");
+- logger.debug(b.toString());
++ logger.config(b.toString());
+
+ b = new StringBuffer();
+ for (int i = 0; i < level; i++)
+@@ -247,7 +246,7 @@
+ }
+ b.append("- nodeLayoutProperties=");
+ b.append(text.getNodeLayoutProperties());
+- logger.debug(b.toString());
++ logger.config(b.toString());
+ }
+
+ }
+diff -ru liblayout-0.2.10.orig/source/org/jfree/layouting/renderer/PrintingRenderer.java liblayout-0.2.10/source/org/jfree/layouting/renderer/PrintingRenderer.java
+--- liblayout-0.2.10.orig/source/org/jfree/layouting/renderer/PrintingRenderer.java 2021-04-07 10:34:09.786045327 +0100
++++ liblayout-0.2.10/source/org/jfree/layouting/renderer/PrintingRenderer.java 2021-04-07 10:45:03.987095239 +0100
+@@ -37,8 +37,7 @@
+ import org.jfree.layouting.layouter.context.LayoutContext;
+ import org.jfree.layouting.layouter.context.PageContext;
+ import org.jfree.layouting.normalizer.content.NormalizationException;
+-import org.apache.commons.logging.LogFactory;
+-import org.apache.commons.logging.Log;
++import java.util.logging.Logger;
+
+ /**
+ * Creation-Date: 17.07.2006, 17:43:21
+@@ -47,7 +46,7 @@
+ */
+ public class PrintingRenderer implements Renderer
+ {
+- private static final Log logger = LogFactory.getLog(PrintingRenderer.class);
++ private static final Logger logger = Logger.getLogger(PrintingRenderer.class.getName());
+ private static class PrintingRendererState implements State
+ {
+ private State parentState;
+@@ -89,7 +88,7 @@
+ */
+ public void startedDocument(final PageContext pageContext)
+ {
+- logger.debug ("<document>");
++ logger.config("<document>");
+ parent.startedDocument(pageContext);
+ }
+
+@@ -102,7 +101,7 @@
+ public void startedFlow(final LayoutContext context)
+ throws NormalizationException
+ {
+- logger.debug ("<flow " +
++ logger.config("<flow " +
+ "tag='" + context.getTagName() + "' namespace='" + context.getNamespace() + "'>");
+ parent.startedFlow(context);
+ }
+@@ -110,7 +109,7 @@
+ public void startedTable(final LayoutContext context)
+ throws NormalizationException
+ {
+- logger.debug ("<table " +
++ logger.config("<table " +
+ "tag='" + context.getTagName() + "' namespace='" + context.getNamespace() + "'>");
+ parent.startedTable(context);
+ }
+@@ -118,7 +117,7 @@
+ public void startedTableSection(final LayoutContext layoutContext)
+ throws NormalizationException
+ {
+- logger.debug ("<table-section " +
++ logger.config("<table-section " +
+ "tag='" + layoutContext.getTagName() + "' namespace='" + layoutContext.getNamespace() + "'>");
+ parent.startedTableSection(layoutContext);
+ }
+@@ -126,7 +125,7 @@
+ public void startedTableRow(final LayoutContext layoutContext)
+ throws NormalizationException
+ {
+- logger.debug ("<table-row " +
++ logger.config("<table-row " +
+ "tag='" + layoutContext.getTagName() + "' namespace='" + layoutContext.getNamespace() + "'>");
+ parent.startedTableRow(layoutContext);
+ }
+@@ -134,7 +133,7 @@
+ public void startedTableCell(final LayoutContext layoutContext)
+ throws NormalizationException
+ {
+- logger.debug ("<table-cell " +
++ logger.config("<table-cell " +
+ "tag='" + layoutContext.getTagName() + "' namespace='" + layoutContext.getNamespace() + "'>");
+ parent.startedTableCell(layoutContext);
+ }
+@@ -142,7 +141,7 @@
+ public void startedBlock(final LayoutContext context)
+ throws NormalizationException
+ {
+- logger.debug ("<block " +
++ logger.config("<block " +
+ "tag='" + context.getTagName() + "' namespace='" + context.getNamespace() + "'>");
+ parent.startedBlock(context);
+ }
+@@ -150,7 +149,7 @@
+ public void startedMarker(final LayoutContext context)
+ throws NormalizationException
+ {
+- logger.debug ("<marker " +
++ logger.config("<marker " +
+ "tag='" + context.getTagName() + "' namespace='" + context.getNamespace() + "'>");
+ parent.startedMarker(context);
+ }
+@@ -158,7 +157,7 @@
+ public void startedRootInline(final LayoutContext context)
+ throws NormalizationException
+ {
+- logger.debug ("<paragraph " +
++ logger.config("<paragraph " +
+ "tag='" + context.getTagName() + "' namespace='" + context.getNamespace() + "'>");
+ parent.startedRootInline(context);
+ }
+@@ -166,7 +165,7 @@
+ public void startedInline(final LayoutContext context)
+ throws NormalizationException
+ {
+- logger.debug ("<inline " +
++ logger.config("<inline " +
+ "tag='" + context.getTagName() + "' namespace='" + context.getNamespace() + "'>");
+ parent.startedInline(context);
+ }
+@@ -175,93 +174,93 @@
+ final ContentToken content)
+ throws NormalizationException
+ {
+- logger.debug ("<content>" + content + "</content>");
++ logger.config("<content>" + content + "</content>");
+ parent.addContent(context, content);
+ }
+
+ public void finishedInline() throws NormalizationException
+ {
+- logger.debug ("</inline>");
++ logger.config("</inline>");
+ parent.finishedInline();
+ }
+
+ public void finishedRootInline() throws NormalizationException
+ {
+- logger.debug ("</paragraph>");
++ logger.config("</paragraph>");
+ parent.finishedRootInline();
+ }
+
+ public void finishedMarker() throws NormalizationException
+ {
+- logger.debug ("</marker>");
++ logger.config("</marker>");
+ parent.finishedMarker();
+ }
+
+ public void finishedBlock() throws NormalizationException
+ {
+- logger.debug ("</block>");
++ logger.config("</block>");
+ parent.finishedBlock();
+ }
+
+ public void finishedTableCell() throws NormalizationException
+ {
+- logger.debug ("</table-cell>");
++ logger.config("</table-cell>");
+ parent.finishedTableCell();
+ }
+
+ public void finishedTableRow() throws NormalizationException
+ {
+- logger.debug ("</table-row>");
++ logger.config("</table-row>");
+ parent.finishedTableRow();
+ }
+
+ public void finishedTableSection() throws NormalizationException
+ {
+- logger.debug ("</table-section>");
++ logger.config("</table-section>");
+ parent.finishedTableSection();
+ }
+
+ public void finishedTable() throws NormalizationException
+ {
+- logger.debug ("</table>");
++ logger.config("</table>");
+ parent.finishedTable();
+ }
+
+ public void finishedFlow() throws NormalizationException
+ {
+- logger.debug ("</flow>");
++ logger.config("</flow>");
+ parent.finishedFlow();
+ }
+
+ public void finishedDocument() throws NormalizationException
+ {
+- logger.debug ("</document>");
++ logger.config("</document>");
+ parent.finishedDocument();
+ }
+
+ public void startedTableColumnGroup(final LayoutContext context)
+ throws NormalizationException
+ {
+- logger.debug ("<table-column-group>");
++ logger.config("<table-column-group>");
+ parent.startedTableColumnGroup(context);
+ }
+
+ public void startedTableColumn(final LayoutContext context)
+ throws NormalizationException
+ {
+- logger.debug ("<table-column>");
++ logger.config("<table-column>");
+ parent.startedTableColumn(context);
+ }
+
+ public void finishedTableColumnGroup() throws NormalizationException
+ {
+- logger.debug ("</table-column-group>");
++ logger.config("</table-column-group>");
+ parent.finishedTableColumnGroup();
+ }
+
+ public void finishedTableColumn() throws NormalizationException
+ {
+- logger.debug ("</table-column>");
++ logger.config("</table-column>");
+ parent.finishedTableColumn();
+ }
+
+@@ -274,14 +273,14 @@
+ */
+ public void handlePageBreak(final PageContext pageContext)
+ {
+- logger.debug ("<!-- PAGEBREAK ENCOUNTERED -->");
++ logger.config("<!-- PAGEBREAK ENCOUNTERED -->");
+ parent.handlePageBreak(pageContext);
+ }
+
+ public void startedPassThrough(final LayoutContext context)
+ throws NormalizationException
+ {
+- logger.debug ("<pass-through>");
++ logger.config("<pass-through>");
+ parent.startedPassThrough(context);
+ }
+
+@@ -289,13 +288,13 @@
+ final ContentToken content)
+ throws NormalizationException
+ {
+- logger.debug ("<pass-through-content>" + content + "</pass-through-content>");
++ logger.config("<pass-through-content>" + content + "</pass-through-content>");
+ parent.addPassThroughContent(context, content);
+ }
+
+ public void finishedPassThrough() throws NormalizationException
+ {
+- logger.debug ("</pass-through>");
++ logger.config("</pass-through>");
+ parent.finishedPassThrough();
+ }
+
+@@ -307,13 +306,13 @@
+ public void startedTableCaption(final LayoutContext context)
+ throws NormalizationException
+ {
+- logger.debug ("<table-caption>");
++ logger.config("<table-caption>");
+ parent.startedTableCaption(context);
+ }
+
+ public void finishedTableCaption() throws NormalizationException
+ {
+- logger.debug ("</table-caption>");
++ logger.config("</table-caption>");
+ parent.finishedTableCaption();
+ }
+ }
+diff -ru liblayout-0.2.10.orig/source/org/jfree/layouting/util/AttributeMap.java liblayout-0.2.10/source/org/jfree/layouting/util/AttributeMap.java
+--- liblayout-0.2.10.orig/source/org/jfree/layouting/util/AttributeMap.java 2021-04-07 10:34:09.787045339 +0100
++++ liblayout-0.2.10/source/org/jfree/layouting/util/AttributeMap.java 2021-04-07 10:48:57.444969193 +0100
+@@ -35,8 +35,7 @@
+ import java.util.Iterator;
+ import java.util.Map;
+
+-import org.apache.commons.logging.Log;
+-import org.apache.commons.logging.LogFactory;
++import java.util.logging.Logger;
+ import org.pentaho.reporting.libraries.base.util.ObjectUtilities;
+
+ /**
+@@ -46,7 +45,7 @@
+ */
+ public class AttributeMap implements Serializable, Cloneable
+ {
+- private static final Log logger = LogFactory.getLog(AttributeMap.class);
++ private static final Logger logger = Logger.getLogger(AttributeMap.class.getName());
+
+ private static final long serialVersionUID = -7442871030874215436L;
+ private static final String[] EMPTY_NAMESPACES = new String[0];
+@@ -102,7 +101,7 @@
+ }
+ catch (Exception e)
+ {
+- logger.error("Clone failed for ReportAttributeMap.createUnmodifiableMap", e);
++ logger.severe("Clone failed for ReportAttributeMap.createUnmodifiableMap:" + e);
+ throw new IllegalStateException("Clone failed for ReportAttributeMap.createUnmodifiableMap");
+ }
+ }
diff --git a/external/jfreereport/patches/liblayout.patch b/external/jfreereport/patches/liblayout.patch
new file mode 100644
index 0000000000..9e68986a86
--- /dev/null
+++ b/external/jfreereport/patches/liblayout.patch
@@ -0,0 +1,21 @@
+--- misc/liblayout-0.2.10/build.xml (Revision 6728)
++++ misc/build/liblayout-0.2.10/build.xml (Arbeitskopie)
+@@ -24,9 +24,15 @@
+
+ <!-- Setup the compile classpath -->
+ <path id="classpath">
+- <fileset dir="lib">
+- <include name="*.jar" />
+- </fileset>
++ <pathelement path="${flute.jar}"/>
++ <pathelement path="${libbase.jar}"/>
++ <pathelement path="${libformula.jar}"/>
++ <pathelement path="${libfonts.jar}"/>
++ <pathelement path="${libloader.jar}"/>
++ <pathelement path="${librepository.jar}"/>
++ <pathelement path="${libserializer.jar}"/>
++ <pathelement path="${libxml.jar}"/>
++ <pathelement path="${sac.jar}"/>
+ </path>
+
+ <!-- Kill all the created directories -->
diff --git a/external/jfreereport/patches/libloader-1.1.3-remove-commons-logging.patch.1 b/external/jfreereport/patches/libloader-1.1.3-remove-commons-logging.patch.1
new file mode 100644
index 0000000000..fad07d59de
--- /dev/null
+++ b/external/jfreereport/patches/libloader-1.1.3-remove-commons-logging.patch.1
@@ -0,0 +1,635 @@
+diff -ru libloader-1.1.3.orig/source/org/pentaho/reporting/libraries/resourceloader/DefaultResourceManagerBackend.java libloader-1.1.3/source/org/pentaho/reporting/libraries/resourceloader/DefaultResourceManagerBackend.java
+--- libloader-1.1.3.orig/source/org/pentaho/reporting/libraries/resourceloader/DefaultResourceManagerBackend.java 2021-04-07 10:55:58.343147414 +0100
++++ libloader-1.1.3/source/org/pentaho/reporting/libraries/resourceloader/DefaultResourceManagerBackend.java 2021-04-07 11:08:48.389599751 +0100
+@@ -22,8 +22,8 @@
+ import java.util.Iterator;
+ import java.util.Map;
+
+-import org.apache.commons.logging.Log;
+-import org.apache.commons.logging.LogFactory;
++import java.util.logging.Level;
++import java.util.logging.Logger;
+ import org.pentaho.reporting.libraries.base.config.Configuration;
+ import org.pentaho.reporting.libraries.base.util.ObjectUtilities;
+
+@@ -34,7 +34,7 @@
+ */
+ public class DefaultResourceManagerBackend implements ResourceManagerBackend
+ {
+- private static final Log logger = LogFactory.getLog(DefaultResourceManagerBackend.class);
++ private static final Logger logger = Logger.getLogger(DefaultResourceManagerBackend.class.getName());
+
+ private ArrayList resourceLoaders;
+ private ArrayList resourceBundleLoaders;
+@@ -280,9 +280,9 @@
+ {
+ // ignore it, try the next factory ...
+ exception = rex;
+- if (logger.isDebugEnabled())
++ if (logger.isLoggable(Level.CONFIG))
+ {
+- logger.debug("Failed at " + fact.getClass() + ": ", rex);
++ logger.config("Failed at " + fact.getClass() + ": " + rex);
+ }
+ }
+ }
+@@ -413,7 +413,7 @@
+ {
+ throw new UnrecognizedLoaderException("Invalid key: No resource-loader registered for schema: " + key.getSchema());
+ }
+- logger.debug("Loaded " + key);
++ logger.config("Loaded " + key);
+ return loader.load(key);
+ }
+
+@@ -451,7 +451,7 @@
+ ResourceLoader.class);
+ if (loader != null)
+ {
+- //Log.debug("Registering loader for " + loader.getSchema());
++ //Log.config("Registering loader for " + loader.getSchema());
+ registerLoader(loader);
+ }
+ }
+@@ -465,7 +465,7 @@
+ ResourceManager.class, ResourceBundleLoader.class);
+ if (loader != null)
+ {
+- //Log.debug("Registering loader for " + loader.getSchema());
++ //Log.config("Registering loader for " + loader.getSchema());
+ registerBundleLoader(loader);
+ }
+ }
+diff -ru libloader-1.1.3.orig/source/org/pentaho/reporting/libraries/resourceloader/factory/drawable/DrawableWrapper.java libloader-1.1.3/source/org/pentaho/reporting/libraries/resourceloader/factory/drawable/DrawableWrapper.java
+--- libloader-1.1.3.orig/source/org/pentaho/reporting/libraries/resourceloader/factory/drawable/DrawableWrapper.java 2021-04-07 10:55:58.342147402 +0100
++++ libloader-1.1.3/source/org/pentaho/reporting/libraries/resourceloader/factory/drawable/DrawableWrapper.java 2021-04-07 11:05:40.206289803 +0100
+@@ -27,8 +27,8 @@
+ import java.util.Collections;
+ import java.util.Map;
+
+-import org.apache.commons.logging.Log;
+-import org.apache.commons.logging.LogFactory;
++import java.util.logging.Level;
++import java.util.logging.Logger;
+
+ /**
+ * Creation-Date: 05.12.2007, 19:15:56
+@@ -37,7 +37,7 @@
+ */
+ public class DrawableWrapper
+ {
+- private static final Log logger = LogFactory.getLog(DrawableWrapper.class);
++ private static final Logger logger = Logger.getLogger(DrawableWrapper.class.getName());
+ private static final Map drawables = Collections.synchronizedMap(new HashMap());
+
+ private Object backend;
+@@ -67,9 +67,9 @@
+ Modifier.isAbstract(modifiers) ||
+ Modifier.isStatic(modifiers))
+ {
+- if (logger.isWarnEnabled())
++ if (logger.isLoggable(Level.WARNING))
+ {
+- logger.warn("DrawMethod is not valid: " + aClass + '#' + drawMethod);
++ logger.warning("DrawMethod is not valid: " + aClass + '#' + drawMethod);
+ }
+ drawMethod = null;
+ }
+@@ -77,9 +77,9 @@
+ catch (NoSuchMethodException e)
+ {
+ // ignore exception
+- if (logger.isWarnEnabled())
++ if (logger.isLoggable(Level.WARNING))
+ {
+- logger.warn("The object is not a drawable: " + aClass);
++ logger.warning("The object is not a drawable: " + aClass);
+ }
+ drawMethod = null;
+ }
+@@ -141,9 +141,9 @@
+ }
+ catch (Exception e)
+ {
+- if (logger.isDebugEnabled())
++ if (logger.isLoggable(Level.CONFIG))
+ {
+- logger.warn("Invoking draw failed:", e);
++ logger.warning("Invoking draw failed: " + e);
+ }
+ }
+ }
+@@ -167,9 +167,9 @@
+ }
+ catch (Exception e)
+ {
+- if (logger.isWarnEnabled())
++ if (logger.isLoggable(Level.WARNING))
+ {
+- logger.warn("Invoking getPreferredSize failed:", e);
++ logger.warning("Invoking getPreferredSize failed: " + e);
+ }
+ return null;
+ }
+@@ -193,9 +193,9 @@
+ }
+ catch (Exception e)
+ {
+- if (logger.isWarnEnabled())
++ if (logger.isLoggable(Level.WARNING))
+ {
+- logger.warn("Invoking isKeepAspectRatio failed:", e);
++ logger.warning("Invoking isKeepAspectRatio failed: " + e);
+ }
+ return false;
+ }
+diff -ru libloader-1.1.3.orig/source/org/pentaho/reporting/libraries/resourceloader/loader/file/FileResourceLoader.java libloader-1.1.3/source/org/pentaho/reporting/libraries/resourceloader/loader/file/FileResourceLoader.java
+--- libloader-1.1.3.orig/source/org/pentaho/reporting/libraries/resourceloader/loader/file/FileResourceLoader.java 2021-04-07 10:55:58.344147426 +0100
++++ libloader-1.1.3/source/org/pentaho/reporting/libraries/resourceloader/loader/file/FileResourceLoader.java 2021-04-07 11:03:22.711602044 +0100
+@@ -24,8 +24,7 @@
+ import java.util.HashMap;
+ import java.util.Map;
+
+-import org.apache.commons.logging.Log;
+-import org.apache.commons.logging.LogFactory;
++import java.util.logging.Logger;
+ import org.pentaho.reporting.libraries.resourceloader.ResourceData;
+ import org.pentaho.reporting.libraries.resourceloader.ResourceKey;
+ import org.pentaho.reporting.libraries.resourceloader.ResourceKeyCreationException;
+@@ -43,7 +42,7 @@
+ public class FileResourceLoader implements ResourceLoader
+ {
+ public static final String SCHEMA_NAME = FileResourceLoader.class.getName();
+- private static final Log logger = LogFactory.getLog(FileResourceLoader.class);
++ private static final Logger logger = Logger.getLogger(FileResourceLoader.class.getName());
+
+ public FileResourceLoader()
+ {
+@@ -210,7 +209,7 @@
+ }
+
+ // Log information
+- logger.debug("Serializing a File Resource Key...");
++ logger.config("Serializing a File Resource Key...");
+ if (key.getParent() != null)
+ {
+ throw new ResourceException
+@@ -224,7 +223,7 @@
+ final String strIdentifier = file.getCanonicalPath();
+ final String result = ResourceKeyUtils.createStringResourceKey
+ (key.getSchema().toString(), strIdentifier, key.getFactoryParameters());
+- logger.debug("Serialized File Resource Key: [" + result + "]");
++ logger.config("Serialized File Resource Key: [" + result + "]");
+ return result;
+ }
+ catch (IOException ioe)
+diff -ru libloader-1.1.3.orig/source/org/pentaho/reporting/libraries/resourceloader/loader/raw/RawResourceLoader.java libloader-1.1.3/source/org/pentaho/reporting/libraries/resourceloader/loader/raw/RawResourceLoader.java
+--- libloader-1.1.3.orig/source/org/pentaho/reporting/libraries/resourceloader/loader/raw/RawResourceLoader.java 2021-04-07 10:55:58.343147414 +0100
++++ libloader-1.1.3/source/org/pentaho/reporting/libraries/resourceloader/loader/raw/RawResourceLoader.java 2021-04-07 11:01:56.064538444 +0100
+@@ -21,8 +21,7 @@
+ import java.util.HashMap;
+ import java.util.Map;
+
+-import org.apache.commons.logging.Log;
+-import org.apache.commons.logging.LogFactory;
++import java.util.logging.Logger;
+ import org.pentaho.reporting.libraries.resourceloader.ResourceData;
+ import org.pentaho.reporting.libraries.resourceloader.ResourceException;
+ import org.pentaho.reporting.libraries.resourceloader.ResourceKey;
+diff -ru libloader-1.1.3.orig/source/org/pentaho/reporting/libraries/resourceloader/loader/resource/ClassloaderResourceLoader.java libloader-1.1.3/source/org/pentaho/reporting/libraries/resourceloader/loader/resource/ClassloaderResourceLoader.java
+--- libloader-1.1.3.orig/source/org/pentaho/reporting/libraries/resourceloader/loader/resource/ClassloaderResourceLoader.java 2021-04-07 10:55:58.343147414 +0100
++++ libloader-1.1.3/source/org/pentaho/reporting/libraries/resourceloader/loader/resource/ClassloaderResourceLoader.java 2021-04-07 11:03:14.370499656 +0100
+@@ -21,8 +21,7 @@
+ import java.util.Map;
+ import java.net.URL;
+
+-import org.apache.commons.logging.Log;
+-import org.apache.commons.logging.LogFactory;
++import java.util.logging.Logger;
+ import org.pentaho.reporting.libraries.resourceloader.ResourceData;
+ import org.pentaho.reporting.libraries.resourceloader.ResourceKey;
+ import org.pentaho.reporting.libraries.resourceloader.ResourceKeyCreationException;
+@@ -41,7 +40,7 @@
+ public class ClassloaderResourceLoader implements ResourceLoader
+ {
+ public static final String SCHEMA_NAME = ClassloaderResourceLoader.class.getName();
+- private static final Log logger = LogFactory.getLog(ClassloaderResourceLoader.class);
++ private static final Logger logger = Logger.getLogger(ClassloaderResourceLoader.class.getName());
+
+ public ClassloaderResourceLoader()
+ {
+@@ -197,7 +196,7 @@
+ }
+
+ // Log information
+- logger.debug("Serializing a Classloader Resource Key...");
++ logger.config("Serializing a Classloader Resource Key...");
+ if (key.getParent() != null)
+ {
+ throw new ResourceException
+@@ -207,7 +206,7 @@
+ // Serialize the key
+ final String result = ResourceKeyUtils.createStringResourceKey(key.getSchema().toString(),
+ (String) key.getIdentifier(), key.getFactoryParameters());
+- logger.debug("Serialized Classloader Resource Key: [" + result + "]");
++ logger.config("Serialized Classloader Resource Key: [" + result + "]");
+ return result;
+ }
+
+diff -ru libloader-1.1.3.orig/source/org/pentaho/reporting/libraries/resourceloader/loader/URLResourceLoader.java libloader-1.1.3/source/org/pentaho/reporting/libraries/resourceloader/loader/URLResourceLoader.java
+--- libloader-1.1.3.orig/source/org/pentaho/reporting/libraries/resourceloader/loader/URLResourceLoader.java 2021-04-07 10:55:58.344147426 +0100
++++ libloader-1.1.3/source/org/pentaho/reporting/libraries/resourceloader/loader/URLResourceLoader.java 2021-04-07 11:03:41.998838804 +0100
+@@ -22,8 +22,7 @@
+ import java.util.HashMap;
+ import java.util.Map;
+
+-import org.apache.commons.logging.Log;
+-import org.apache.commons.logging.LogFactory;
++import java.util.logging.Logger;
+ import org.pentaho.reporting.libraries.resourceloader.ResourceData;
+ import org.pentaho.reporting.libraries.resourceloader.ResourceKey;
+ import org.pentaho.reporting.libraries.resourceloader.ResourceKeyCreationException;
+@@ -40,7 +39,7 @@
+ public class URLResourceLoader implements ResourceLoader
+ {
+ public static final String SCHEMA_NAME = URLResourceLoader.class.getName();
+- private static final Log logger = LogFactory.getLog(URLResourceLoader.class);
++ private static final Logger logger = Logger.getLogger(URLResourceLoader.class.getName());
+
+ public URLResourceLoader()
+ {
+@@ -188,10 +187,10 @@
+ }
+
+ // Log information
+- logger.debug("Serializing a Classloader Resource Key...");
++ logger.config("Serializing a Classloader Resource Key...");
+ if (key.getParent() != null)
+ {
+- logger.warn("Serializing a Classloader Resource Key which contains a parent: key=[" + bundleKey + "] parent=["
++ logger.warning("Serializing a Classloader Resource Key which contains a parent: key=[" + bundleKey + "] parent=["
+ + key.getParent() + "]");
+ }
+
+@@ -199,7 +198,7 @@
+ final URL url = (URL) key.getIdentifier();
+ final String result = ResourceKeyUtils.createStringResourceKey
+ (key.getSchema().toString(), url.toExternalForm(), key.getFactoryParameters());
+- logger.debug("Serialized Classloader Resource Key: [" + result + "]");
++ logger.config("Serialized Classloader Resource Key: [" + result + "]");
+ return result;
+ }
+
+diff -ru libloader-1.1.3.orig/source/org/pentaho/reporting/libraries/resourceloader/loader/zip/ZipResourceLoader.java libloader-1.1.3/source/org/pentaho/reporting/libraries/resourceloader/loader/zip/ZipResourceLoader.java
+--- libloader-1.1.3.orig/source/org/pentaho/reporting/libraries/resourceloader/loader/zip/ZipResourceLoader.java 2021-04-07 10:55:58.344147426 +0100
++++ libloader-1.1.3/source/org/pentaho/reporting/libraries/resourceloader/loader/zip/ZipResourceLoader.java 2021-04-07 11:02:18.522814132 +0100
+@@ -21,8 +21,7 @@
+ import java.util.HashMap;
+ import java.util.Map;
+
+-import org.apache.commons.logging.Log;
+-import org.apache.commons.logging.LogFactory;
++import java.util.logging.Logger;
+ import org.pentaho.reporting.libraries.resourceloader.ResourceData;
+ import org.pentaho.reporting.libraries.resourceloader.ResourceException;
+ import org.pentaho.reporting.libraries.resourceloader.ResourceKey;
+@@ -40,7 +39,7 @@
+ public class ZipResourceLoader implements ResourceLoader
+ {
+ public static final String SCHEMA_NAME = ZipResourceLoader.class.getName();
+- private static final Log logger = LogFactory.getLog(ZipResourceLoader.class);
++ private static final Logger logger = Logger.getLogger(ZipResourceLoader.class.getName());
+
+ public ZipResourceLoader()
+ {
+diff -ru libloader-1.1.3.orig/source/org/pentaho/reporting/libraries/resourceloader/modules/cache/ehcache/EHCacheModule.java libloader-1.1.3/source/org/pentaho/reporting/libraries/resourceloader/modules/cache/ehcache/EHCacheModule.java
+--- libloader-1.1.3.orig/source/org/pentaho/reporting/libraries/resourceloader/modules/cache/ehcache/EHCacheModule.java 2021-04-07 10:55:58.345147438 +0100
++++ libloader-1.1.3/source/org/pentaho/reporting/libraries/resourceloader/modules/cache/ehcache/EHCacheModule.java 2021-04-07 10:58:52.758288370 +0100
+@@ -20,8 +20,7 @@
+ import org.pentaho.reporting.libraries.base.boot.AbstractModule;
+ import org.pentaho.reporting.libraries.base.boot.ModuleInitializeException;
+ import org.pentaho.reporting.libraries.base.boot.SubSystem;
+-import org.apache.commons.logging.Log;
+-import org.apache.commons.logging.LogFactory;
++import java.util.logging.Logger;
+
+ /**
+ * Creation-Date: 13.04.2006, 16:29:07
+@@ -30,7 +29,7 @@
+ */
+ public class EHCacheModule extends AbstractModule
+ {
+- public static final Log CACHE_MONITOR = LogFactory.getLog(EHCacheModule.class.getName() + "#CacheLog");
++ public static final Logger CACHE_MONITOR = Logger.getLogger(EHCacheModule.class.getName() + "#CacheLog");
+
+ public EHCacheModule() throws ModuleInitializeException
+ {
+diff -ru libloader-1.1.3.orig/source/org/pentaho/reporting/libraries/resourceloader/modules/cache/ehcache/EHResourceFactoryCache.java libloader-1.1.3/source/org/pentaho/reporting/libraries/resourceloader/modules/cache/ehcache/EHResourceFactoryCache.java
+--- libloader-1.1.3.orig/source/org/pentaho/reporting/libraries/resourceloader/modules/cache/ehcache/EHResourceFactoryCache.java 2021-04-07 10:55:58.345147438 +0100
++++ libloader-1.1.3/source/org/pentaho/reporting/libraries/resourceloader/modules/cache/ehcache/EHResourceFactoryCache.java 2021-04-07 10:59:17.251589016 +0100
+@@ -20,8 +20,8 @@
+ import net.sf.ehcache.Cache;
+ import net.sf.ehcache.CacheException;
+ import net.sf.ehcache.Element;
+-import org.apache.commons.logging.Log;
+-import org.apache.commons.logging.LogFactory;
++import java.util.logging.Level;
++import java.util.logging.Logger;
+ import org.pentaho.reporting.libraries.resourceloader.Resource;
+ import org.pentaho.reporting.libraries.resourceloader.ResourceKey;
+ import org.pentaho.reporting.libraries.resourceloader.cache.ResourceFactoryCache;
+@@ -110,7 +109,7 @@
+ }
+ }
+
+- private static final Log logger = LogFactory.getLog(EHResourceFactoryCache.class);
++ private static final Logger logger = Logger.getLogger(EHResourceFactoryCache.class.getName());
+ private Cache factoryCache;
+
+ public EHResourceFactoryCache(final Cache factoryCache)
+@@ -128,16 +128,16 @@
+ final Resource res = getInternal(key, target[i]);
+ if (res != null)
+ {
+- if (EHCacheModule.CACHE_MONITOR.isDebugEnabled())
++ if (EHCacheModule.CACHE_MONITOR.isLoggable(Level.CONFIG))
+ {
+- EHCacheModule.CACHE_MONITOR.debug("Res Cache Hit " + key);
++ EHCacheModule.CACHE_MONITOR.config("Res Cache Hit " + key);
+ }
+ return res;
+ }
+ }
+- if (EHCacheModule.CACHE_MONITOR.isDebugEnabled())
++ if (EHCacheModule.CACHE_MONITOR.isLoggable(Level.CONFIG))
+ {
+- EHCacheModule.CACHE_MONITOR.debug("Res Cache Miss " + key);
++ EHCacheModule.CACHE_MONITOR.config("Res Cache Miss " + key);
+ }
+ return null;
+ }
+@@ -168,9 +168,9 @@
+ }
+ catch (CacheException e)
+ {
+- if (logger.isDebugEnabled())
++ if (logger.isLoggable(Level.CONFIG))
+ {
+- logger.debug("Failed to retrieve resource for key " + key, e);
++ logger.config("Failed to retrieve resource for key " + key + ": " + e);
+ }
+ return null;
+ }
+@@ -185,9 +185,9 @@
+ }
+ catch (Exception e)
+ {
+- if (logger.isDebugEnabled())
++ if (logger.isLoggable(Level.CONFIG))
+ {
+- logger.debug("Failed to store resource for key " + source, e);
++ logger.config("Failed to store resource for key " + source + ": " + e);
+ }
+ // ignore ... the object is not serializable ..
+ }
+diff -ru libloader-1.1.3.orig/source/org/pentaho/reporting/libraries/resourceloader/ResourceKeyUtils.java libloader-1.1.3/source/org/pentaho/reporting/libraries/resourceloader/ResourceKeyUtils.java
+--- libloader-1.1.3.orig/source/org/pentaho/reporting/libraries/resourceloader/ResourceKeyUtils.java 2021-04-07 10:55:58.342147402 +0100
++++ libloader-1.1.3/source/org/pentaho/reporting/libraries/resourceloader/ResourceKeyUtils.java 2021-04-07 11:06:27.248867251 +0100
+@@ -27,8 +27,8 @@
+ import java.util.Iterator;
+ import java.util.Map;
+
+-import org.apache.commons.logging.Log;
+-import org.apache.commons.logging.LogFactory;
++import java.util.logging.Level;
++import java.util.logging.Logger;
+ import org.pentaho.reporting.libraries.base.util.CSVQuoter;
+ import org.pentaho.reporting.libraries.base.util.CSVTokenizer;
+ import org.pentaho.reporting.libraries.base.util.IOUtils;
+@@ -42,7 +42,7 @@
+ {
+ private static final String DELIMITER = ";";
+ private static final String SERIALIZATION_PREFIX = "resourcekey:";
+- private static final Log logger = LogFactory.getLog(ResourceManager.class);
++ private static final Logger logger = Logger.getLogger(ResourceManager.class.getName());
+
+ /**
+ * Returns a string representation of the ResourceKey based on the pieces that are passed as parameters
+@@ -169,7 +169,7 @@
+
+ sb.append(quoter.doQuoting(entrySb.toString()));
+ }
+- logger.debug("Converted ResourceKey's Factory Parameters to String: [" + sb.toString() + "]");
++ logger.config("Converted ResourceKey's Factory Parameters to String: [" + sb.toString() + "]");
+ return sb.toString();
+ }
+
+@@ -226,9 +226,9 @@
+ params.put(key, value);
+ }
+
+- if (logger.isDebugEnabled())
++ if (logger.isLoggable(Level.CONFIG))
+ {
+- logger.debug("Converted ResourceKey's Factory Parameter String to a Map: [" + factoryParameters
++ logger.config("Converted ResourceKey's Factory Parameter String to a Map: [" + factoryParameters
+ + "] -> map of size " + params.size());
+ }
+ return params;
+@@ -369,7 +369,7 @@
+ }
+ catch (IOException e)
+ {
+- logger.error("Error closing input stream", e);
++ logger.severe("Error closing input stream: " + e);
+ }
+ }
+ }
+diff -ru libloader-1.1.3.orig/source/org/pentaho/reporting/libraries/resourceloader/ResourceManager.java libloader-1.1.3/source/org/pentaho/reporting/libraries/resourceloader/ResourceManager.java
+--- libloader-1.1.3.orig/source/org/pentaho/reporting/libraries/resourceloader/ResourceManager.java 2021-04-07 10:55:58.344147426 +0100
++++ libloader-1.1.3/source/org/pentaho/reporting/libraries/resourceloader/ResourceManager.java 2021-04-07 11:07:50.557889876 +0100
+@@ -22,8 +22,8 @@
+ import java.util.Map;
+ import java.util.Set;
+
+-import org.apache.commons.logging.Log;
+-import org.apache.commons.logging.LogFactory;
++import java.util.logging.Level;
++import java.util.logging.Logger;
+ import org.pentaho.reporting.libraries.base.config.Configuration;
+ import org.pentaho.reporting.libraries.base.util.ObjectUtilities;
+ import org.pentaho.reporting.libraries.resourceloader.cache.BundleCacheResourceWrapper;
+@@ -57,7 +57,7 @@
+ */
+ public final class ResourceManager
+ {
+- private static final Log logger = LogFactory.getLog(ResourceManager.class);
++ private static final Logger logger = Logger.getLogger(ResourceManager.class.getName());
+ private ResourceManagerBackend backend;
+
+ public static final String BUNDLE_LOADER_PREFIX = "org.pentaho.reporting.libraries.resourceloader.bundle.loader.";
+@@ -273,7 +273,7 @@
+ final ResourceBundleData bundle = loadResourceBundle(key);
+ if (bundle != null)
+ {
+- logger.debug("Loaded bundle for key " + key);
++ logger.config("Loaded bundle for key " + key);
+ return bundle;
+ }
+ final ResourceKey parent = key.getParent();
+@@ -283,7 +283,7 @@
+ final ResourceBundleData parentData = loadResourceBundle(parent);
+ if (parentData != null)
+ {
+- logger.debug("Loaded bundle for key (derivate) " + key);
++ logger.config("Loaded bundle for key (derivate) " + key);
+ return parentData.deriveData(key);
+ }
+ }
+@@ -400,9 +400,9 @@
+ newResource = backend.create(derivedManager, resourceBundleData, context, target);
+ if (isResourceCacheable(newResource))
+ {
+- if (EHCacheModule.CACHE_MONITOR.isDebugEnabled())
++ if (EHCacheModule.CACHE_MONITOR.isLoggable(Level.CONFIG))
+ {
+- EHCacheModule.CACHE_MONITOR.debug("Storing created bundle-resource for key: " + key);
++ EHCacheModule.CACHE_MONITOR.config("Storing created bundle-resource for key: " + key);
+ }
+ factoryCache.put(newResource);
+ if (key != newResource.getSource())
+@@ -412,9 +412,9 @@
+ }
+ else
+ {
+- if (EHCacheModule.CACHE_MONITOR.isDebugEnabled())
++ if (EHCacheModule.CACHE_MONITOR.isLoggable(Level.CONFIG))
+ {
+- EHCacheModule.CACHE_MONITOR.debug("Created bundle-resource is not cacheable for " + key);
++ EHCacheModule.CACHE_MONITOR.config("Created bundle-resource is not cacheable for " + key);
+ }
+ }
+ }
+@@ -423,17 +423,17 @@
+ newResource = backend.create(this, loadedData, context, target);
+ if (isResourceCacheable(newResource))
+ {
+- if (EHCacheModule.CACHE_MONITOR.isDebugEnabled())
++ if (EHCacheModule.CACHE_MONITOR.isLoggable(Level.CONFIG))
+ {
+- EHCacheModule.CACHE_MONITOR.debug("Storing created resource for key: " + key);
++ EHCacheModule.CACHE_MONITOR.config("Storing created resource for key: " + key);
+ }
+ factoryCache.put(newResource);
+ }
+ else
+ {
+- if (EHCacheModule.CACHE_MONITOR.isDebugEnabled())
++ if (EHCacheModule.CACHE_MONITOR.isLoggable(Level.CONFIG))
+ {
+- EHCacheModule.CACHE_MONITOR.debug("Created resource is not cacheable for " + key);
++ EHCacheModule.CACHE_MONITOR.config("Created resource is not cacheable for " + key);
+ }
+ }
+ }
+@@ -556,7 +556,7 @@
+ {
+ if (failedModules.contains(dataCacheProviderClass) == false)
+ {
+- logger.warn("Failed to create data cache: " + e.getLocalizedMessage());
++ logger.warning("Failed to create data cache: " + e.getLocalizedMessage());
+ failedModules.add(dataCacheProviderClass);
+ }
+ }
+@@ -593,7 +593,7 @@
+ {
+ if (failedModules.contains(dataCacheProviderClass) == false)
+ {
+- logger.warn("Failed to create data cache: " + e.getLocalizedMessage());
++ logger.warning("Failed to create data cache: " + e.getLocalizedMessage());
+ failedModules.add(dataCacheProviderClass);
+ }
+ }
+@@ -630,7 +630,7 @@
+ {
+ if (failedModules.contains(cacheProviderClass) == false)
+ {
+- logger.warn("Failed to create factory cache: " + e.getLocalizedMessage());
++ logger.warning("Failed to create factory cache: " + e.getLocalizedMessage());
+ failedModules.add(cacheProviderClass);
+ }
+ }
+--- a/source/org/pentaho/reporting/libraries/resourceloader/modules/cache/ehcache/EHResourceBundleDataCache.java
++++ b/source/org/pentaho/reporting/libraries/resourceloader/modules/cache/ehcache/EHResourceBundleDataCache.java
+@@ -17,6 +17,7 @@
+
+ package org.pentaho.reporting.libraries.resourceloader.modules.cache.ehcache;
+
++import java.util.logging.Level;
+ import net.sf.ehcache.Cache;
+ import net.sf.ehcache.CacheException;
+ import net.sf.ehcache.Element;
+@@ -64,17 +65,17 @@
+ final Element element = dataCache.get((Object) key);
+ if (element != null)
+ {
+- if (EHCacheModule.CACHE_MONITOR.isDebugEnabled())
++ if (EHCacheModule.CACHE_MONITOR.isLoggable(Level.CONFIG))
+ {
+- EHCacheModule.CACHE_MONITOR.debug("Bund Cache Hit " + key);
++ EHCacheModule.CACHE_MONITOR.config("Bund Cache Hit " + key);
+ }
+ return (ResourceBundleDataCacheEntry) element.getObjectValue();
+ }
+ else
+ {
+- if (EHCacheModule.CACHE_MONITOR.isDebugEnabled())
++ if (EHCacheModule.CACHE_MONITOR.isLoggable(Level.CONFIG))
+ {
+- EHCacheModule.CACHE_MONITOR.debug("Bund Cache Miss " + key);
++ EHCacheModule.CACHE_MONITOR.config("Bund Cache Miss " + key);
+ }
+ return null;
+ }
+@@ -101,9 +102,9 @@
+ final Object keyObject = data.getBundleKey();
+ final Object valueObject = new DefaultResourceBundleDataCacheEntry(cdata, caller);
+ final Element element = new Element(keyObject, valueObject);
+- if (EHCacheModule.CACHE_MONITOR.isDebugEnabled())
++ if (EHCacheModule.CACHE_MONITOR.isLoggable(Level.CONFIG))
+ {
+- EHCacheModule.CACHE_MONITOR.debug("Storing Bundle " + keyObject);
++ EHCacheModule.CACHE_MONITOR.config("Storing Bundle " + keyObject);
+ }
+ dataCache.put(element);
+ return cdata;
+--- a/source/org/pentaho/reporting/libraries/resourceloader/modules/cache/ehcache/EHResourceDataCache.java
++++ b/source/org/pentaho/reporting/libraries/resourceloader/modules/cache/ehcache/EHResourceDataCache.java
+@@ -17,6 +17,7 @@
+
+ package org.pentaho.reporting.libraries.resourceloader.modules.cache.ehcache;
+
++import java.util.logging.Level;
+ import net.sf.ehcache.Cache;
+ import net.sf.ehcache.CacheException;
+ import net.sf.ehcache.Element;
+@@ -64,15 +65,15 @@
+ final Element element = dataCache.get((Object) key);
+ if (element != null)
+ {
+- if (EHCacheModule.CACHE_MONITOR.isDebugEnabled())
++ if (EHCacheModule.CACHE_MONITOR.isLoggable(Level.CONFIG))
+ {
+- EHCacheModule.CACHE_MONITOR.debug("Data Cache Hit " + key);
++ EHCacheModule.CACHE_MONITOR.config("Data Cache Hit " + key);
+ }
+ return (ResourceDataCacheEntry) element.getObjectValue();
+ }
+- if (EHCacheModule.CACHE_MONITOR.isDebugEnabled())
++ if (EHCacheModule.CACHE_MONITOR.isLoggable(Level.CONFIG))
+ {
+- EHCacheModule.CACHE_MONITOR.debug("Data Cache Miss " + key);
++ EHCacheModule.CACHE_MONITOR.config("Data Cache Miss " + key);
+ }
+ return null;
+ }
diff --git a/external/jfreereport/patches/libloader-1.1.6-deprecated.patch b/external/jfreereport/patches/libloader-1.1.6-deprecated.patch
new file mode 100644
index 0000000000..79fa046fd0
--- /dev/null
+++ b/external/jfreereport/patches/libloader-1.1.6-deprecated.patch
@@ -0,0 +1,34 @@
+--- misc/libloader-1.1.6/source/org/pentaho/reporting/libraries/resourceloader/ResourceException.java 2010-04-27 16:07:00.000000000 +0200
++++ misc/build/libloader-1.1.6/source/org/pentaho/reporting/libraries/resourceloader/ResourceException.java 2011-06-13 02:00:46.000000000 +0200
+@@ -42,7 +42,7 @@
+ */
+ public ResourceException(final String message, final Exception ex)
+ {
+- super(message, ex);
++ super(message, (Throwable) ex);
+ }
+
+ /**
+--- misc/libloader-1.1.6/source/org/pentaho/reporting/libraries/resourceloader/loader/file/FileResourceLoader.java 2010-04-27 16:07:00.000000000 +0200
++++ misc/build/libloader-1.1.6/source/org/pentaho/reporting/libraries/resourceloader/loader/file/FileResourceLoader.java 2014-07-24 15:11:26.000000000 +0200
+@@ -19,6 +19,7 @@
+
+ import java.io.File;
+ import java.io.IOException;
++import java.lang.SecurityException;
+ import java.net.MalformedURLException;
+ import java.net.URL;
+ import java.util.HashMap;
+@@ -170,7 +171,11 @@
+ final File file = (File) key.getIdentifier();
+ try
+ {
+- return file.toURL();
++ return file.toURI().toURL();
++ }
++ catch (SecurityException e)
++ {
++ return null;
+ }
+ catch (MalformedURLException e)
+ {
diff --git a/external/jfreereport/patches/librepository-1.1.3-remove-commons-logging.patch.1 b/external/jfreereport/patches/librepository-1.1.3-remove-commons-logging.patch.1
new file mode 100644
index 0000000000..29acd6043d
--- /dev/null
+++ b/external/jfreereport/patches/librepository-1.1.3-remove-commons-logging.patch.1
@@ -0,0 +1,117 @@
+diff -ru librepository-1.1.3.orig/source/org/pentaho/reporting/libraries/repository/zip/ZipContentLocation.java librepository-1.1.3/source/org/pentaho/reporting/libraries/repository/zip/ZipContentLocation.java
+--- librepository-1.1.3.orig/source/org/pentaho/reporting/libraries/repository/zip/ZipContentLocation.java 2021-04-07 11:16:05.369984495 +0100
++++ librepository-1.1.3/source/org/pentaho/reporting/libraries/repository/zip/ZipContentLocation.java 2021-04-07 11:17:30.417035353 +0100
+@@ -21,8 +21,7 @@
+ import java.util.HashMap;
+ import java.util.zip.ZipEntry;
+
+-import org.apache.commons.logging.Log;
+-import org.apache.commons.logging.LogFactory;
++import java.util.logging.Logger;
+ import org.pentaho.reporting.libraries.repository.ContentCreationException;
+ import org.pentaho.reporting.libraries.repository.ContentEntity;
+ import org.pentaho.reporting.libraries.repository.ContentIOException;
+@@ -35,7 +34,7 @@
+
+ public class ZipContentLocation implements ContentLocation
+ {
+- private static final Log logger = LogFactory.getLog(ZipContentLocation.class);
++ private static final Logger logger = Logger.getLogger(ZipContentLocation.class.getName());
+ private ZipRepository repository;
+ private ZipContentLocation parent;
+ private String comment;
+@@ -114,7 +113,7 @@
+ final Object entry = entries.get(path);
+ if (entry instanceof ContentItem)
+ {
+- logger.warn("Directory-Entry with the same name as a Content-Entry encountered: " + path);
++ logger.warning("Directory-Entry with the same name as a Content-Entry encountered: " + path);
+ return;
+ }
+ final ZipContentLocation location;
+@@ -164,7 +163,7 @@
+ {
+ if (entry instanceof ContentItem)
+ {
+- logger.warn("Directory-Entry with the same name as a Content-Entry encountered: " + path);
++ logger.warning("Directory-Entry with the same name as a Content-Entry encountered: " + path);
+ return;
+ }
+
+@@ -188,12 +187,12 @@
+ {
+ if (entry instanceof ContentItem)
+ {
+- logger.warn("Duplicate Content-Entry encountered: " + path);
++ logger.warning("Duplicate Content-Entry encountered: " + path);
+ return;
+ }
+ else if (entry != null)
+ {
+- logger.warn("Replacing Directory-Entry with the same name as a Content-Entry: " + path);
++ logger.warning("Replacing Directory-Entry with the same name as a Content-Entry: " + path);
+ }
+ final ZipContentItem contentItem = new ZipContentItem(repository, this, zipEntry, data);
+ entries.put(path, contentItem);
+@@ -352,4 +351,4 @@
+ {
+ return (entries.remove(entity.getName()) != null);
+ }
+-}
+\ No newline at end of file
++}
+diff -ru librepository-1.1.3.orig/source/org/pentaho/reporting/libraries/repository/zipreader/ZipReadContentLocation.java librepository-1.1.3/source/org/pentaho/reporting/libraries/repository/zipreader/ZipReadContentLocation.java
+--- librepository-1.1.3.orig/source/org/pentaho/reporting/libraries/repository/zipreader/ZipReadContentLocation.java 2021-04-07 11:16:05.365984446 +0100
++++ librepository-1.1.3/source/org/pentaho/reporting/libraries/repository/zipreader/ZipReadContentLocation.java 2021-04-07 11:17:22.342935587 +0100
+@@ -21,8 +21,7 @@
+ import java.util.HashMap;
+ import java.util.zip.ZipEntry;
+
+-import org.apache.commons.logging.Log;
+-import org.apache.commons.logging.LogFactory;
++import java.util.logging.Logger;
+ import org.pentaho.reporting.libraries.repository.ContentCreationException;
+ import org.pentaho.reporting.libraries.repository.ContentEntity;
+ import org.pentaho.reporting.libraries.repository.ContentIOException;
+@@ -39,7 +38,7 @@
+ */
+ public class ZipReadContentLocation implements ContentLocation
+ {
+- private static final Log logger = LogFactory.getLog(ZipReadContentLocation.class);
++ private static final Logger logger = Logger.getLogger(ZipReadContentLocation.class.getName());
+ private ZipReadRepository repository;
+ private ZipReadContentLocation parent;
+ private String comment;
+@@ -117,7 +116,7 @@
+ final Object entry = entries.get(path);
+ if (entry instanceof ContentItem)
+ {
+- logger.warn("Directory-Entry with the same name as a Content-Entry encountered: " + path);
++ logger.warning("Directory-Entry with the same name as a Content-Entry encountered: " + path);
+ return;
+ }
+ final ZipReadContentLocation location;
+@@ -164,7 +163,7 @@
+ {
+ if (entry instanceof ContentItem)
+ {
+- logger.warn("Directory-Entry with the same name as a Content-Entry encountered: " + path);
++ logger.warning("Directory-Entry with the same name as a Content-Entry encountered: " + path);
+ return;
+ }
+
+@@ -188,12 +187,12 @@
+ {
+ if (entry instanceof ContentItem)
+ {
+- logger.warn("Duplicate Content-Entry encountered: " + path);
++ logger.warning("Duplicate Content-Entry encountered: " + path);
+ return;
+ }
+ else if (entry != null)
+ {
+- logger.warn("Replacing Directory-Entry with the same name as a Content-Entry: " + path);
++ logger.warning("Replacing Directory-Entry with the same name as a Content-Entry: " + path);
+ }
+ final ZipReadContentItem contentItem = new ZipReadContentItem(repository, this, zipEntry, data);
+ entries.put(path, contentItem);
diff --git a/external/jfreereport/patches/librepository-1.1.6-deprecated.patch b/external/jfreereport/patches/librepository-1.1.6-deprecated.patch
new file mode 100644
index 0000000000..324a8f4160
--- /dev/null
+++ b/external/jfreereport/patches/librepository-1.1.6-deprecated.patch
@@ -0,0 +1,37 @@
+--- misc/librepository-1.1.6/source/org/pentaho/reporting/libraries/repository/ContentIOException.java 2010-04-27 16:04:50.000000000 +0200
++++ misc/build/librepository-1.1.6/source/org/pentaho/reporting/libraries/repository/ContentIOException.java 2011-06-13 01:44:35.000000000 +0200
+@@ -43,7 +43,7 @@
+ */
+ public ContentIOException(final String message, final Exception ex)
+ {
+- super(message, ex);
++ super(message, (Throwable) ex);
+ }
+
+ /**
+--- misc/librepository-1.1.6/source/org/pentaho/reporting/libraries/repository/file/FileRepository.java 2010-04-27 16:04:50.000000000 +0200
++++ misc/build/librepository-1.1.6/source/org/pentaho/reporting/libraries/repository/file/FileRepository.java 2014-07-25 11:21:51.000000000 +0200
+@@ -19,7 +19,9 @@
+
+ import java.io.File;
+ import java.io.Serializable;
++import java.lang.SecurityException;
+ import java.net.MalformedURLException;
++import java.net.URI;
+ import java.net.URL;
+
+ import org.pentaho.reporting.libraries.repository.ContentIOException;
+@@ -104,6 +106,11 @@
+ */
+ public URL getURL() throws MalformedURLException
+ {
+- return root.getBackend().toURL();
++ try {
++ URI uri = root.getBackend().toURI();
++ return uri.toURL();
++ } catch (SecurityException e) {
++ throw new MalformedURLException("impossible" + e);
++ }
+ }
+ }
+
diff --git a/external/jfreereport/patches/libserializer-1.1.2-remove-commons-logging.patch.1 b/external/jfreereport/patches/libserializer-1.1.2-remove-commons-logging.patch.1
new file mode 100644
index 0000000000..52ee76a774
--- /dev/null
+++ b/external/jfreereport/patches/libserializer-1.1.2-remove-commons-logging.patch.1
@@ -0,0 +1,31 @@
+diff -ru libserializer-1.1.2.orig/source/org/pentaho/reporting/libraries/serializer/SerializerHelper.java libserializer-1.1.2/source/org/pentaho/reporting/libraries/serializer/SerializerHelper.java
+--- libserializer-1.1.2.orig/source/org/pentaho/reporting/libraries/serializer/SerializerHelper.java 2021-04-07 11:22:05.509434457 +0100
++++ libserializer-1.1.2/source/org/pentaho/reporting/libraries/serializer/SerializerHelper.java 2021-04-07 11:23:19.102343782 +0100
+@@ -25,8 +25,7 @@
+ import java.util.HashMap;
+ import java.util.Iterator;
+
+-import org.apache.commons.logging.Log;
+-import org.apache.commons.logging.LogFactory;
++import java.util.logging.Logger;
+ import org.pentaho.reporting.libraries.base.config.Configuration;
+ import org.pentaho.reporting.libraries.base.util.ObjectUtilities;
+ import org.pentaho.reporting.libraries.base.util.DebugLog;
+@@ -41,7 +40,7 @@
+ */
+ public class SerializerHelper
+ {
+- private static final Log logger = LogFactory.getLog(SerializerHelper.class);
++ private static final Logger logger = Logger.getLogger(SerializerHelper.class.getName());
+ /**
+ * The singleton instance of the serialize helper.
+ */
+@@ -124,7 +123,7 @@
+ }
+ else
+ {
+- logger.warn("Invalid SerializeMethod implementation: " + c);
++ logger.warning("Invalid SerializeMethod implementation: " + c);
+ }
+ }
+ }
diff --git a/external/jfreereport/patches/libxml-1.1.3-remove-commons-logging.patch.1 b/external/jfreereport/patches/libxml-1.1.3-remove-commons-logging.patch.1
new file mode 100644
index 0000000000..ecec88c480
--- /dev/null
+++ b/external/jfreereport/patches/libxml-1.1.3-remove-commons-logging.patch.1
@@ -0,0 +1,313 @@
+diff -ru pentaho-libxml-1.1.3.orig/source/org/pentaho/reporting/libraries/xmlns/parser/AbstractXmlReadHandler.java pentaho-libxml-1.1.3/source/org/pentaho/reporting/libraries/xmlns/parser/AbstractXmlReadHandler.java
+--- pentaho-libxml-1.1.3.orig/source/org/pentaho/reporting/libraries/xmlns/parser/AbstractXmlReadHandler.java 2021-04-07 11:34:22.313653786 +0100
++++ pentaho-libxml-1.1.3/source/org/pentaho/reporting/libraries/xmlns/parser/AbstractXmlReadHandler.java 2021-04-07 11:48:16.381234640 +0100
+@@ -20,8 +20,8 @@
+ import java.util.HashMap;
+ import java.util.Map;
+
+-import org.apache.commons.logging.Log;
+-import org.apache.commons.logging.LogFactory;
++import java.util.logging.Level;
++import java.util.logging.Logger;
+ import org.pentaho.reporting.libraries.resourceloader.DependencyCollector;
+ import org.pentaho.reporting.libraries.resourceloader.FactoryParameterKey;
+ import org.pentaho.reporting.libraries.resourceloader.Resource;
+@@ -40,7 +40,7 @@
+ */
+ public abstract class AbstractXmlReadHandler implements XmlReadHandler
+ {
+- private static final Log logger = LogFactory.getLog(AbstractXmlReadHandler.class);
++ private static final Logger logger = Logger.getLogger(AbstractXmlReadHandler.class.getName());
+
+ /**
+ * The root handler.
+@@ -120,8 +120,8 @@
+ final XmlReadHandler childHandler = getHandlerForChild(uri, tagName, attrs);
+ if (childHandler == null)
+ {
+- logger.warn("Unknown tag <" + uri + ':' + tagName + ">: Start to ignore this element and all of its childs. " + getLocatorString());
+- logger.debug(this.getClass());
++ logger.warning("Unknown tag <" + uri + ':' + tagName + ">: Start to ignore this element and all of its childs. " + getLocatorString());
++ logger.config(this.getClass().getName());
+ final IgnoreAnyChildReadHandler ignoreAnyChildReadHandler =
+ new IgnoreAnyChildReadHandler();
+ ignoreAnyChildReadHandler.init(getRootHandler(), uri, tagName);
+diff -ru pentaho-libxml-1.1.3.orig/source/org/pentaho/reporting/libraries/xmlns/parser/AbstractXmlResourceFactory.java pentaho-libxml-1.1.3/source/org/pentaho/reporting/libraries/xmlns/parser/AbstractXmlResourceFactory.java
+--- pentaho-libxml-1.1.3.orig/source/org/pentaho/reporting/libraries/xmlns/parser/AbstractXmlResourceFactory.java 2021-04-07 11:34:22.313653786 +0100
++++ pentaho-libxml-1.1.3/source/org/pentaho/reporting/libraries/xmlns/parser/AbstractXmlResourceFactory.java 2021-04-07 11:44:15.729203631 +0100
+@@ -26,8 +26,7 @@
+ import javax.xml.parsers.SAXParser;
+ import javax.xml.parsers.SAXParserFactory;
+
+-import org.apache.commons.logging.Log;
+-import org.apache.commons.logging.LogFactory;
++import java.util.logging.Logger;
+ import org.pentaho.reporting.libraries.resourceloader.CompoundResource;
+ import org.pentaho.reporting.libraries.resourceloader.FactoryParameterKey;
+ import org.pentaho.reporting.libraries.resourceloader.Resource;
+@@ -56,7 +55,7 @@
+ */
+ public abstract class AbstractXmlResourceFactory implements ResourceFactory
+ {
+- private static final Log logger = LogFactory.getLog(AbstractXmlResourceFactory.class);
++ private static final Logger logger = Logger.getLogger(AbstractXmlResourceFactory.class.getName());
+
+ /**
+ * A key for the content base.
+@@ -115,7 +114,7 @@
+ }
+ catch (SAXException se)
+ {
+- logger.debug("Comments are not supported by this SAX implementation.");
++ logger.config("Comments are not supported by this SAX implementation.");
+ }
+
+ try
+@@ -133,7 +132,7 @@
+ }
+ catch (SAXException e)
+ {
+- logger.warn("No Namespace features will be available. (Yes, this is serious)");
++ logger.warning("No Namespace features will be available. (Yes, this is serious)");
+ }
+ }
+
+diff -ru pentaho-libxml-1.1.3.orig/source/org/pentaho/reporting/libraries/xmlns/parser/DomTreeResourceFactory.java pentaho-libxml-1.1.3/source/org/pentaho/reporting/libraries/xmlns/parser/DomTreeResourceFactory.java
+--- pentaho-libxml-1.1.3.orig/source/org/pentaho/reporting/libraries/xmlns/parser/DomTreeResourceFactory.java 2021-04-07 11:34:22.314653798 +0100
++++ pentaho-libxml-1.1.3/source/org/pentaho/reporting/libraries/xmlns/parser/DomTreeResourceFactory.java 2021-04-07 11:43:15.934442890 +0100
+@@ -22,8 +22,7 @@
+ import javax.xml.parsers.DocumentBuilderFactory;
+ import javax.xml.parsers.ParserConfigurationException;
+
+-import org.apache.commons.logging.Log;
+-import org.apache.commons.logging.LogFactory;
++import java.util.logging.Logger;
+ import org.pentaho.reporting.libraries.resourceloader.Resource;
+ import org.pentaho.reporting.libraries.resourceloader.ResourceCreationException;
+ import org.pentaho.reporting.libraries.resourceloader.ResourceData;
+@@ -61,7 +60,7 @@
+ }
+ }
+
+- private static final Log logger = LogFactory.getLog(DomTreeResourceFactory.class);
++ private static final Logger logger = Logger.getLogger(DomTreeResourceFactory.class.getName());
+
+ /**
+ * Creates a resource by interpreting the data given in the resource-data object. If additional datastreams need to
+diff -ru pentaho-libxml-1.1.3.orig/source/org/pentaho/reporting/libraries/xmlns/parser/LoggingErrorHandler.java pentaho-libxml-1.1.3/source/org/pentaho/reporting/libraries/xmlns/parser/LoggingErrorHandler.java
+--- pentaho-libxml-1.1.3.orig/source/org/pentaho/reporting/libraries/xmlns/parser/LoggingErrorHandler.java 2021-04-07 11:34:22.313653786 +0100
++++ pentaho-libxml-1.1.3/source/org/pentaho/reporting/libraries/xmlns/parser/LoggingErrorHandler.java 2021-04-07 11:49:49.117390246 +0100
+@@ -17,8 +17,8 @@
+
+ package org.pentaho.reporting.libraries.xmlns.parser;
+
+-import org.apache.commons.logging.Log;
+-import org.apache.commons.logging.LogFactory;
++import java.util.logging.Level;
++import java.util.logging.Logger;
+ import org.xml.sax.ErrorHandler;
+ import org.xml.sax.SAXException;
+ import org.xml.sax.SAXParseException;
+@@ -30,9 +30,9 @@
+ */
+ public class LoggingErrorHandler implements ErrorHandler
+ {
+- private static final Log defaultLogContext = LogFactory.getLog(LoggingErrorHandler.class);
++ private static final Logger defaultLogContext = Logger.getLogger(LoggingErrorHandler.class.getName());
+ /** @noinspection NonConstantLogger*/
+- private Log logContext;
++ private Logger logContext;
+
+ /**
+ * Default-Constructor. Logs to a logger configured with this class name as category.
+@@ -47,7 +47,7 @@
+ *
+ * @param logContext the logger that should receive the messages.
+ */
+- public LoggingErrorHandler(final Log logContext)
++ public LoggingErrorHandler(final Logger logContext)
+ {
+ if (logContext == null)
+ {
+@@ -78,7 +78,7 @@
+ */
+ public void warning(final SAXParseException exception) throws SAXException
+ {
+- if (logContext.isDebugEnabled())
++ if (logContext.isLoggable(Level.CONFIG))
+ {
+ if (exception.getMessage().startsWith("URI was not reported to parser for entity"))
+ {
+@@ -86,7 +86,7 @@
+ // the GNU thing complain about it ..
+ return;
+ }
+- logContext.debug("Parser-Warning", exception);
++ logContext.severe("Parser-Warning: " + exception.getMessage());
+ }
+ }
+
+@@ -115,15 +115,15 @@
+ */
+ public void error(final SAXParseException exception) throws SAXException
+ {
+- if (logContext.isWarnEnabled())
++ if (logContext.isLoggable(Level.WARNING))
+ {
+- if (logContext.isDebugEnabled())
++ if (logContext.isLoggable(Level.CONFIG))
+ {
+- logContext.warn("Recoverable Parser-Error", exception);
++ logContext.warning("Recoverable Parser-Error:" + exception.getMessage());
+ }
+ else
+ {
+- logContext.warn("Recoverable Parser-Error:" + exception.getMessage());
++ logContext.warning("Recoverable Parser-Error:" + exception.getMessage());
+ }
+ }
+ }
+@@ -156,15 +156,15 @@
+ */
+ public void fatalError(final SAXParseException exception) throws SAXException
+ {
+- if (logContext.isErrorEnabled())
++ if (logContext.isLoggable(Level.SEVERE))
+ {
+- if (logContext.isDebugEnabled())
++ if (logContext.isLoggable(Level.CONFIG))
+ {
+- logContext.error("Fatal Parser-Error", exception);
++ logContext.severe("Fatal Parser-Error:" + exception.getMessage());
+ }
+ else
+ {
+- logContext.error("Fatal Parser-Error:" + exception.getMessage());
++ logContext.severe("Fatal Parser-Error:" + exception.getMessage());
+ }
+ }
+ }
+diff -ru pentaho-libxml-1.1.3.orig/source/org/pentaho/reporting/libraries/xmlns/parser/ParserEntityResolver.java pentaho-libxml-1.1.3/source/org/pentaho/reporting/libraries/xmlns/parser/ParserEntityResolver.java
+--- pentaho-libxml-1.1.3.orig/source/org/pentaho/reporting/libraries/xmlns/parser/ParserEntityResolver.java 2021-04-07 11:34:22.314653798 +0100
++++ pentaho-libxml-1.1.3/source/org/pentaho/reporting/libraries/xmlns/parser/ParserEntityResolver.java 2021-04-07 11:43:45.602820344 +0100
+@@ -22,8 +22,7 @@
+ import java.net.URL;
+ import java.util.HashMap;
+
+-import org.apache.commons.logging.Log;
+-import org.apache.commons.logging.LogFactory;
++import java.util.logging.Logger;
+ import org.xml.sax.EntityResolver;
+ import org.xml.sax.InputSource;
+
+@@ -34,7 +33,7 @@
+ */
+ public final class ParserEntityResolver implements EntityResolver
+ {
+- private static final Log logger = LogFactory.getLog(ParserEntityResolver.class);
++ private static final Logger logger = Logger.getLogger(ParserEntityResolver.class.getName());
+
+ /**
+ * The hashtable for the known entities (deprecated DTDs).
+@@ -75,7 +74,7 @@
+ }
+ else
+ {
+- logger.warn("Validate location failed for " + publicID + " location: " + location);
++ logger.warning("Validate location failed for " + publicID + " location: " + location);
+ return false;
+ }
+ }
+@@ -101,7 +100,7 @@
+ }
+ else
+ {
+- logger.warn("Validate location failed for " + publicID + " location: " + location);
++ logger.warning("Validate location failed for " + publicID + " location: " + location);
+ return false;
+ }
+ }
+@@ -195,7 +194,7 @@
+ }
+ catch (IOException ioe)
+ {
+- logger.warn("Unable to open specified DTD", ioe);
++ logger.warning("Unable to open specified DTD: " + ioe);
+ }
+ return null;
+ }
+diff -ru pentaho-libxml-1.1.3.orig/source/org/pentaho/reporting/libraries/xmlns/parser/ResourceDataInputSource.java pentaho-libxml-1.1.3/source/org/pentaho/reporting/libraries/xmlns/parser/ResourceDataInputSource.java
+--- pentaho-libxml-1.1.3.orig/source/org/pentaho/reporting/libraries/xmlns/parser/ResourceDataInputSource.java 2021-04-07 11:34:22.312653773 +0100
++++ pentaho-libxml-1.1.3/source/org/pentaho/reporting/libraries/xmlns/parser/ResourceDataInputSource.java 2021-04-07 11:44:05.484073284 +0100
+@@ -20,8 +20,7 @@
+ import java.io.InputStream;
+ import java.net.URL;
+
+-import org.apache.commons.logging.Log;
+-import org.apache.commons.logging.LogFactory;
++import java.util.logging.Logger;
+ import org.pentaho.reporting.libraries.resourceloader.ResourceData;
+ import org.pentaho.reporting.libraries.resourceloader.ResourceLoadingException;
+ import org.pentaho.reporting.libraries.resourceloader.ResourceManager;
+@@ -34,7 +33,7 @@
+ */
+ public class ResourceDataInputSource extends InputSource
+ {
+- private static final Log logger = LogFactory.getLog(ResourceDataInputSource.class);
++ private static final Logger logger = Logger.getLogger(ResourceDataInputSource.class.getName());
+ private ResourceData data;
+ private long version;
+ private ResourceManager caller;
+@@ -103,7 +102,7 @@
+ }
+ catch (ResourceLoadingException e)
+ {
+- logger.error("Unable to create byte-stream: " + data.getKey());
++ logger.severe("Unable to create byte-stream: " + data.getKey());
+ return null;
+ }
+ }
+--- a/source/org/pentaho/reporting/libraries/xmlns/common/ParserUtil.java
++++ b/source/org/pentaho/reporting/libraries/xmlns/common/ParserUtil.java
+@@ -21,8 +21,7 @@
+ import org.pentaho.reporting.libraries.xmlns.LibXmlBoot;
+ import org.xml.sax.Locator;
+ import org.xml.sax.SAXException;
+-import org.apache.commons.logging.Log;
+-import org.apache.commons.logging.LogFactory;
++import java.util.logging.Logger;
+
+ /**
+ * Basic helper functions to ease up the process of parsing.
+@@ -31,7 +30,7 @@
+ */
+ public class ParserUtil
+ {
+- private static final Log logger = LogFactory.getLog(ParserUtil.class);
++ private static final Logger logger = Logger.getLogger(ParserUtil.class.getName());
+ private static boolean strictParsing;
+
+ static
+@@ -243,7 +242,7 @@
+ return false;
+ }
+
+- logger.warn("Invalid value encountered: Expected 'true' or 'false', but got '" + text + "'");
++ logger.warning("Invalid value encountered: Expected 'true' or 'false', but got '" + text + "'");
+ return "true".equalsIgnoreCase(text);
+ }
+ }
+@@ -281,11 +280,11 @@
+
+ if (locator == null)
+ {
+- logger.warn("Invalid value encountered for boolean attribute.");
++ logger.warning("Invalid value encountered for boolean attribute.");
+ }
+ else
+ {
+- logger.warn("Invalid value encountered for boolean attribute. [Line: " +
++ logger.warning("Invalid value encountered for boolean attribute. [Line: " +
+ locator.getLineNumber() + " Column: " + locator.getColumnNumber() + "]");
+ }
+ return Boolean.FALSE;
diff --git a/external/jfreereport/patches/pentaho-reporting-flow-engine-0.9.4-remove-commons-logging.patch.1 b/external/jfreereport/patches/pentaho-reporting-flow-engine-0.9.4-remove-commons-logging.patch.1
new file mode 100644
index 0000000000..80029e49fe
--- /dev/null
+++ b/external/jfreereport/patches/pentaho-reporting-flow-engine-0.9.4-remove-commons-logging.patch.1
@@ -0,0 +1,101 @@
+diff -ru pentaho-reporting-flow-engine-0.9.4.orig/source/org/jfree/report/JFreeReportBoot.java pentaho-reporting-flow-engine-0.9.4/source/org/jfree/report/JFreeReportBoot.java
+--- pentaho-reporting-flow-engine-0.9.4.orig/source/org/jfree/report/JFreeReportBoot.java 2021-04-07 12:09:46.917336778 +0100
++++ pentaho-reporting-flow-engine-0.9.4/source/org/jfree/report/JFreeReportBoot.java 2021-04-07 12:12:04.794062296 +0100
+@@ -42,8 +42,7 @@
+ import org.pentaho.reporting.libraries.base.boot.PackageManager;
+ import org.pentaho.reporting.libraries.base.versioning.ProjectInformation;
+ import org.pentaho.reporting.libraries.base.LibBaseBoot;
+-import org.apache.commons.logging.LogFactory;
+-import org.apache.commons.logging.Log;
++import java.util.logging.Logger;
+
+ /**
+ * An utility class to safely boot and initialize the JFreeReport library. This class
+@@ -66,7 +65,7 @@
+ */
+ public class JFreeReportBoot extends AbstractBoot
+ {
+- private static final Log logger = LogFactory.getLog(JFreeReportBoot.class);
++ private static final Logger logger = Logger.getLogger(JFreeReportBoot.class.getName());
+
+ /**
+ * A wrappper around the user supplied global configuration.
+@@ -292,12 +291,12 @@
+ // make sure logging is re-initialized after we injected our configuration.
+ if (isStrictFP() == false)
+ {
+- logger.warn("The used VM seems to use a non-strict floating point arithmetics");
+- logger.warn("Layouts computed with this Java Virtual Maschine may be invalid.");
+- logger.warn("JFreeReport and the library 'iText' depend on the strict floating point rules");
+- logger.warn("of Java1.1 as implemented by the Sun Virtual Maschines.");
+- logger.warn("If you are using the BEA JRockit VM, start the Java VM with the option");
+- logger.warn("'-Xstrictfp' to restore the default behaviour.");
++ logger.warning("The used VM seems to use a non-strict floating point arithmetics");
++ logger.warning("Layouts computed with this Java Virtual Maschine may be invalid.");
++ logger.warning("JFreeReport and the library 'iText' depend on the strict floating point rules");
++ logger.warning("of Java1.1 as implemented by the Sun Virtual Maschines.");
++ logger.warning("If you are using the BEA JRockit VM, start the Java VM with the option");
++ logger.warning("'-Xstrictfp' to restore the default behaviour.");
+ }
+
+ final PackageManager mgr = getPackageManager();
+@@ -338,8 +337,8 @@
+ }
+ catch (Exception se)
+ {
+- logger.error
+- ("An error occured while checking the system properties for extension modules.", se);
++ logger.severe
++ ("An error occured while checking the system properties for extension modules: " + se);
+ }
+ }
+
+diff -ru pentaho-reporting-flow-engine-0.9.4.orig/source/org/jfree/report/util/ComponentDrawable.java pentaho-reporting-flow-engine-0.9.4/source/org/jfree/report/util/ComponentDrawable.java
+--- pentaho-reporting-flow-engine-0.9.4.orig/source/org/jfree/report/util/ComponentDrawable.java 2021-04-07 12:09:46.916336765 +0100
++++ pentaho-reporting-flow-engine-0.9.4/source/org/jfree/report/util/ComponentDrawable.java 2021-04-07 12:11:25.530570919 +0100
+@@ -42,8 +42,7 @@
+ import javax.swing.RepaintManager;
+ import javax.swing.SwingUtilities;
+
+-import org.apache.commons.logging.Log;
+-import org.apache.commons.logging.LogFactory;
++import java.util.logging.Logger;
+
+ /**
+ * Creation-Date: 11.10.2005, 14:03:15
+@@ -52,7 +51,7 @@
+ */
+ public class ComponentDrawable
+ {
+- private static final Log logger = LogFactory.getLog (ComponentDrawable.class);
++ private static final Logger logger = Logger.getLogger(ComponentDrawable.class.getName());
+
+ /**
+ * A runnable that executes the drawing operation on the event-dispatcher thread.
+@@ -443,7 +442,7 @@
+ }
+ catch (Exception e)
+ {
+- ComponentDrawable.logger.warn("Failed to compute the preferred size.");
++ ComponentDrawable.logger.warning("Failed to compute the preferred size.");
+ }
+ return new Dimension(0, 0);
+ }
+@@ -475,7 +474,7 @@
+ }
+ catch (Exception e)
+ {
+- ComponentDrawable.logger.warn("Failed to compute the defined size.");
++ ComponentDrawable.logger.warning("Failed to compute the defined size.");
+ }
+ return new Dimension(0, 0);
+ }
+@@ -563,7 +562,7 @@
+ }
+ catch (Exception e)
+ {
+- ComponentDrawable.logger.warn("Failed to redraw the component.");
++ ComponentDrawable.logger.warning("Failed to redraw the component.");
+ }
+ }
+ }
diff --git a/external/jfreereport/patches/sac.patch b/external/jfreereport/patches/sac.patch
new file mode 100644
index 0000000000..77db8511ac
--- /dev/null
+++ b/external/jfreereport/patches/sac.patch
@@ -0,0 +1,73 @@
+*** misc/sac-1.3/build.xml Thu Oct 18 09:22:24 2007
+--- misc/build/sac-1.3/build.xml Thu Oct 18 08:53:59 2007
+***************
+*** 1 ****
+! dummy
+--- 1,66 ----
+! <!-- simple generic build file -->
+!
+! <project name="sac" default="all" basedir=".">
+!
+! <!-- Properties -->
+!
+! <property name="name" value="sac"/>
+! <property name="src" value="src"/>
+! <property name="build" value="build"/>
+! <property name="build.classes" value="${build}/classes"/>
+! <property name="build.doc" value="${build}/api"/>
+! <property name="build.lib" value="${build}/lib"/>
+! <property name="packagenames" value="org.w3c.css.sac.*"/>
+!
+! <!-- Targets -->
+!
+! <!-- Prepare build directories -->
+! <target name="prepare">
+! <mkdir dir="${src}"/>
+! <mkdir dir="${build}"/>
+! <mkdir dir="${build.classes}"/>
+! <mkdir dir="${build.lib}"/>
+! <mkdir dir="${build.doc}"/>
+! <copy todir="${src}/org">
+! <fileset dir="org"/>
+! </copy>
+! </target>
+!
+! <!-- Kill all the created directories -->
+! <target name="clean">
+! <delete dir="${build}"/>
+! <delete dir="${src}"/>
+! </target>
+!
+! <!-- Build classes -->
+! <target name="classes" depends="prepare">
+! <javac srcdir="${src}" destdir="${build.classes}" debug="off" optimize="on"/>
+! <copy todir="${build.classes}">
+! <fileset dir="${src}">
+! <include name="**/*.properties"/>
+! </fileset>
+! </copy>
+! </target>
+!
+! <!-- Build jar archives -->
+! <target name="jar" depends="classes">
+! <jar jarfile="${build.lib}/${name}.jar" basedir="${build.classes}"/>
+! </target>
+!
+! <!-- Build the full JavaDocs -->
+! <target name="javadoc" depends="prepare">
+! <javadoc sourcepath="${src}"
+! destdir="${build.doc}"
+! doctitle="${name} JavaDoc"
+! windowtitle="${name} JavaDoc"
+! package="true"
+! author="true"
+! version="true"
+! packagenames="${packagenames}"
+! />
+! </target>
+!
+! <!-- Build everything -->
+! <target name="all" depends="jar,javadoc"/>
+!
+! </project>
+\ No newline at end of file