diff --git a/0.12-release/.gitignore b/0.12-release/.gitignore
deleted file mode 100644
index 1f487e0..0000000
--- a/0.12-release/.gitignore
+++ /dev/null
@@ -1,18 +0,0 @@
-*.ipr
-*.iws
-/target/*
-**/target/*
-.svn
-**/.svn
-.project
-*/.project
-.classpath
-*/.classpath
-.settings
-*/.settings
-*.iml
-*/*.iml
-*/*.ipr
-*/*.iws
-.idea/*
-*/.idea
diff --git a/0.12-release/BUILD.txt b/0.12-release/BUILD.txt
deleted file mode 100644
index 562bb7a..0000000
--- a/0.12-release/BUILD.txt
+++ /dev/null
@@ -1,18 +0,0 @@
-How to build RAT
-================
-
-There is a maven default goal configured that builds and installs a fresh artifact. Just launch maven without any goals in the project root directory.
-or
-Normal development:
-
-    mvn install
-
-Normal development without running tests:
-
-    mvn -Dmaven.test.skip=true install
-
-Build apache release
-
-    mvn clean install -Papache-release
-
-RAT uses the previos release version during the build to verify it complies its own rules.
diff --git a/0.12-release/LICENSE b/0.12-release/LICENSE
deleted file mode 100644
index d645695..0000000
--- a/0.12-release/LICENSE
+++ /dev/null
@@ -1,202 +0,0 @@
-
-                                 Apache License
-                           Version 2.0, January 2004
-                        http://www.apache.org/licenses/
-
-   TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
-
-   1. Definitions.
-
-      "License" shall mean the terms and conditions for use, reproduction,
-      and distribution as defined by Sections 1 through 9 of this document.
-
-      "Licensor" shall mean the copyright owner or entity authorized by
-      the copyright owner that is granting the License.
-
-      "Legal Entity" shall mean the union of the acting entity and all
-      other entities that control, are controlled by, or are under common
-      control with that entity. For the purposes of this definition,
-      "control" means (i) the power, direct or indirect, to cause the
-      direction or management of such entity, whether by contract or
-      otherwise, or (ii) ownership of fifty percent (50%) or more of the
-      outstanding shares, or (iii) beneficial ownership of such entity.
-
-      "You" (or "Your") shall mean an individual or Legal Entity
-      exercising permissions granted by this License.
-
-      "Source" form shall mean the preferred form for making modifications,
-      including but not limited to software source code, documentation
-      source, and configuration files.
-
-      "Object" form shall mean any form resulting from mechanical
-      transformation or translation of a Source form, including but
-      not limited to compiled object code, generated documentation,
-      and conversions to other media types.
-
-      "Work" shall mean the work of authorship, whether in Source or
-      Object form, made available under the License, as indicated by a
-      copyright notice that is included in or attached to the work
-      (an example is provided in the Appendix below).
-
-      "Derivative Works" shall mean any work, whether in Source or Object
-      form, that is based on (or derived from) the Work and for which the
-      editorial revisions, annotations, elaborations, or other modifications
-      represent, as a whole, an original work of authorship. For the purposes
-      of this License, Derivative Works shall not include works that remain
-      separable from, or merely link (or bind by name) to the interfaces of,
-      the Work and Derivative Works thereof.
-
-      "Contribution" shall mean any work of authorship, including
-      the original version of the Work and any modifications or additions
-      to that Work or Derivative Works thereof, that is intentionally
-      submitted to Licensor for inclusion in the Work by the copyright owner
-      or by an individual or Legal Entity authorized to submit on behalf of
-      the copyright owner. For the purposes of this definition, "submitted"
-      means any form of electronic, verbal, or written communication sent
-      to the Licensor or its representatives, including but not limited to
-      communication on electronic mailing lists, source code control systems,
-      and issue tracking systems that are managed by, or on behalf of, the
-      Licensor for the purpose of discussing and improving the Work, but
-      excluding communication that is conspicuously marked or otherwise
-      designated in writing by the copyright owner as "Not a Contribution."
-
-      "Contributor" shall mean Licensor and any individual or Legal Entity
-      on behalf of whom a Contribution has been received by Licensor and
-      subsequently incorporated within the Work.
-
-   2. Grant of Copyright License. Subject to the terms and conditions of
-      this License, each Contributor hereby grants to You a perpetual,
-      worldwide, non-exclusive, no-charge, royalty-free, irrevocable
-      copyright license to reproduce, prepare Derivative Works of,
-      publicly display, publicly perform, sublicense, and distribute the
-      Work and such Derivative Works in Source or Object form.
-
-   3. Grant of Patent License. Subject to the terms and conditions of
-      this License, each Contributor hereby grants to You a perpetual,
-      worldwide, non-exclusive, no-charge, royalty-free, irrevocable
-      (except as stated in this section) patent license to make, have made,
-      use, offer to sell, sell, import, and otherwise transfer the Work,
-      where such license applies only to those patent claims licensable
-      by such Contributor that are necessarily infringed by their
-      Contribution(s) alone or by combination of their Contribution(s)
-      with the Work to which such Contribution(s) was submitted. If You
-      institute patent litigation against any entity (including a
-      cross-claim or counterclaim in a lawsuit) alleging that the Work
-      or a Contribution incorporated within the Work constitutes direct
-      or contributory patent infringement, then any patent licenses
-      granted to You under this License for that Work shall terminate
-      as of the date such litigation is filed.
-
-   4. Redistribution. You may reproduce and distribute copies of the
-      Work or Derivative Works thereof in any medium, with or without
-      modifications, and in Source or Object form, provided that You
-      meet the following conditions:
-
-      (a) You must give any other recipients of the Work or
-          Derivative Works a copy of this License; and
-
-      (b) You must cause any modified files to carry prominent notices
-          stating that You changed the files; and
-
-      (c) You must retain, in the Source form of any Derivative Works
-          that You distribute, all copyright, patent, trademark, and
-          attribution notices from the Source form of the Work,
-          excluding those notices that do not pertain to any part of
-          the Derivative Works; and
-
-      (d) If the Work includes a "NOTICE" text file as part of its
-          distribution, then any Derivative Works that You distribute must
-          include a readable copy of the attribution notices contained
-          within such NOTICE file, excluding those notices that do not
-          pertain to any part of the Derivative Works, in at least one
-          of the following places: within a NOTICE text file distributed
-          as part of the Derivative Works; within the Source form or
-          documentation, if provided along with the Derivative Works; or,
-          within a display generated by the Derivative Works, if and
-          wherever such third-party notices normally appear. The contents
-          of the NOTICE file are for informational purposes only and
-          do not modify the License. You may add Your own attribution
-          notices within Derivative Works that You distribute, alongside
-          or as an addendum to the NOTICE text from the Work, provided
-          that such additional attribution notices cannot be construed
-          as modifying the License.
-
-      You may add Your own copyright statement to Your modifications and
-      may provide additional or different license terms and conditions
-      for use, reproduction, or distribution of Your modifications, or
-      for any such Derivative Works as a whole, provided Your use,
-      reproduction, and distribution of the Work otherwise complies with
-      the conditions stated in this License.
-
-   5. Submission of Contributions. Unless You explicitly state otherwise,
-      any Contribution intentionally submitted for inclusion in the Work
-      by You to the Licensor shall be under the terms and conditions of
-      this License, without any additional terms or conditions.
-      Notwithstanding the above, nothing herein shall supersede or modify
-      the terms of any separate license agreement you may have executed
-      with Licensor regarding such Contributions.
-
-   6. Trademarks. This License does not grant permission to use the trade
-      names, trademarks, service marks, or product names of the Licensor,
-      except as required for reasonable and customary use in describing the
-      origin of the Work and reproducing the content of the NOTICE file.
-
-   7. Disclaimer of Warranty. Unless required by applicable law or
-      agreed to in writing, Licensor provides the Work (and each
-      Contributor provides its Contributions) on an "AS IS" BASIS,
-      WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
-      implied, including, without limitation, any warranties or conditions
-      of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A
-      PARTICULAR PURPOSE. You are solely responsible for determining the
-      appropriateness of using or redistributing the Work and assume any
-      risks associated with Your exercise of permissions under this License.
-
-   8. Limitation of Liability. In no event and under no legal theory,
-      whether in tort (including negligence), contract, or otherwise,
-      unless required by applicable law (such as deliberate and grossly
-      negligent acts) or agreed to in writing, shall any Contributor be
-      liable to You for damages, including any direct, indirect, special,
-      incidental, or consequential damages of any character arising as a
-      result of this License or out of the use or inability to use the
-      Work (including but not limited to damages for loss of goodwill,
-      work stoppage, computer failure or malfunction, or any and all
-      other commercial damages or losses), even if such Contributor
-      has been advised of the possibility of such damages.
-
-   9. Accepting Warranty or Additional Liability. While redistributing
-      the Work or Derivative Works thereof, You may choose to offer,
-      and charge a fee for, acceptance of support, warranty, indemnity,
-      or other liability obligations and/or rights consistent with this
-      License. However, in accepting such obligations, You may act only
-      on Your own behalf and on Your sole responsibility, not on behalf
-      of any other Contributor, and only if You agree to indemnify,
-      defend, and hold each Contributor harmless for any liability
-      incurred by, or claims asserted against, such Contributor by reason
-      of your accepting any such warranty or additional liability.
-
-   END OF TERMS AND CONDITIONS
-
-   APPENDIX: How to apply the Apache License to your work.
-
-      To apply the Apache License to your work, attach the following
-      boilerplate notice, with the fields enclosed by brackets "[]"
-      replaced with your own identifying information. (Don't include
-      the brackets!)  The text should be enclosed in the appropriate
-      comment syntax for the file format. We also recommend that a
-      file or class name and description of purpose be included on the
-      same "printed page" as the copyright notice for easier
-      identification within third-party archives.
-
-   Copyright [yyyy] [name of copyright owner]
-
-   Licensed under the Apache License, Version 2.0 (the "License");
-   you may not use this file except in compliance with the License.
-   You may obtain a copy of the License at
-
-       http://www.apache.org/licenses/LICENSE-2.0
-
-   Unless required by applicable law or agreed to in writing, software
-   distributed under the License is distributed on an "AS IS" BASIS,
-   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-   See the License for the specific language governing permissions and
-   limitations under the License.
diff --git a/0.12-release/NOTICE b/0.12-release/NOTICE
deleted file mode 100644
index f56d56f..0000000
--- a/0.12-release/NOTICE
+++ /dev/null
@@ -1,5 +0,0 @@
-Apache Rat
-Copyright 2006-2016 The Apache Software Foundation
-
-This product includes software developed at
-The Apache Software Foundation (http://www.apache.org/).
diff --git a/0.12-release/README.txt b/0.12-release/README.txt
deleted file mode 100644
index 9a32668..0000000
--- a/0.12-release/README.txt
+++ /dev/null
@@ -1,53 +0,0 @@
-
-  Licensed to the Apache Software Foundation (ASF) under one or more
-  contributor license agreements.  See the NOTICE file distributed with
-  this work for additional information regarding copyright ownership.
-  The ASF licenses this file to You under the Apache License, Version 2.0
-  (the "License"); you may not use this file except in compliance with
-  the License.  You may obtain a copy of the License at
-
-      http://www.apache.org/licenses/LICENSE-2.0
-
-  Unless required by applicable law or agreed to in writing, software
-  distributed under the License is distributed on an "AS IS" BASIS,
-  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-  See the License for the specific language governing permissions and
-  limitations under the License.
-
-                            Apache Rat
-                            ==========
-
-Apache Rat is developed by the Apache Creadur project of the Apache Software
-Foundation. Join us at http://creadur.apache.org and read more about Apache Rat
-at http://creadur.apache.org/rat.
-
-Release Audit Tool (Rat) is a tool to improve accuracy and efficiency when checking
-releases. It is heuristic in nature: making guesses about possible problems. It
-will produce false positives and cannot find every possible issue with a release.
-It's reports require interpretation.
-
-Rat was developed in response to a need felt in the Apache Incubator to be able to
-review releases for the most common faults less labour intensively. It is therefore
-highly tuned to the Apache style of releases.
-
-Rat is intended to be self documenting: reports should include introductory material
-describing their function. Building Rat describes how to run Rat. Running Rat
-describes the options available. These release notes describe the current state of
-Rat.
-
-A good way to use Rat is to through the source. This allows the code base to be
-easily patched for example to add new generated file matchers. The main jar is
-runnable and self-documenting. This jar is available as a standard alone binary.
-
-Rat includes a task library for Ant 1.7. This allows Rat reports to be run against
-a wide variety of resources. See ant-task-examples.xml. To use the Ant tasks,
-Apache Ant 1.7 is required. See http://ant.apache.org/.
-
-For Maven builds, the plugin is recommended.
-
-In response to demands from project quality tool developers, Rat is available as a
-library (rat-lib jar) suitable for inclusion in tools. Note that binary compatibility
-is not guaranteed between 0.x releases. The XML output format is not yet in it's
-final form and so library users are recommended to either use the supplied
-stylesheets or keep in close touch with the code.
-
diff --git a/0.12-release/RELEASE-NOTES.txt b/0.12-release/RELEASE-NOTES.txt
deleted file mode 100644
index 953b801..0000000
--- a/0.12-release/RELEASE-NOTES.txt
+++ /dev/null
@@ -1,67 +0,0 @@
-              Apache Creadur Rat 0.12
-                  RELEASE NOTES
-
-The Apache Creadur Rat team is pleased to announce the release of Apache Creadur Rat 0.12
-
-Apache Rat is a release audit tool. It improves accuracy and efficiency when checking
-releases. It is heuristic in nature: making guesses about possible problems. It
-will produce false positives and cannot find every possible issue with a release.
-Its reports require interpretation.
-
-In response to demands from project quality tool developers, Rat is available as a
-library suitable for inclusion in tools. This POM describes that library.
-Note that binary compatibility is not guaranteed between 0.x releases.
-
-Apache Rat is developed by the Apache Creadur project, a language and build
-agnostic home for software distribution comprehension and audit tools.
-
-We now require Maven 3.0.5+ to build Rat, but as before we only require
-Maven 2.2.1+ if you want to use Rat in your own Maven projects.
-We've integrated Rat into the ASF Jenkins to ensure continuous builds with various JDK versions.
-
-Changes in this version include:
-
-New features:
-o RAT-196:  Minor refactoring in pom.xml. Thanks to Karl Heinz Marbais.
-o RAT-61:   List files with unapproved licenses in Maven output. Thanks to Jukka Zitting.
-o RAT-170:  RAT should use itself during build and site generation. Thanks to Philipp Ottlinger.
-o RAT-181:  BinaryGuesser should treat *.truststore as binary.
-o RAT-184:  Add DEPENDENCIES to the list of ignored files in NoteGuesser. Thanks to Karl Heinz Marbaise.
-o RAT-185:  .repository folder should be ignored. Thanks to Karl Heinz Marbaise.
-o RAT-186:  BinaryGuesser should recognize PSD files as images.
-o RAT-187:  Add 'SAR', 'HAR', 'WSR' as archives which should be ignored. Thanks to Karl Heinz Marbaise.
-o RAT-197:  Improve exclusion defaults when working with Maven 3.3.1 (exclude .mvn). Thanks to Karl Heinz Marbaise.
-o RAT-201:  BinaryGuesser should treat *.swf as binary.
-            Furthermore BinaryGuesser falls back to UTF-8 encoding in case the encoding given via system property
-            (-Dfile.encoding) was not found.
-o RAT-202:  Report layout differs between successful RAT checks and existence of unapproved files.
-o RAT-202:  Report layout differs between successful RAT checks and existence of unapproved files.
-o RAT-203:  Using 'license' in README, source code, javadoc, comments and site instead of 'licence';
-            improve terminology to not confuse RAT consumers.
-o RAT-204:  Unify resource handling in code and tests, make sure the resources are properly closed. Apply minor refactorings.
-
-Fixed Bugs:
-o RAT-163:  Removing the Gradle Plugin from the Rat Core project, so that building
-            with Java 5 works again.
-o RAT-158:  Fix SAX-Parser warning by explicitly excluding xerces in Doxia 1.2. Thanks to Hervé Boutemy.
-o RAT-173:  Allow complete skip of RAT plugin with rat.skip property. Thanks to Chris Burroughs.
-o RAT-174:  CDDL1License still very slow, replace Pattern matching with simple String comparison. Thanks to Chris Burroughs.
-o RAT-175:  SourceCodeManagementSystems.hasIgnoreFile() should return boolean.
-o RAT-177:  Final arrays should be private.
-o RAT-188:  Fix problems with AnimalSniffer-plugin when running in GUMP with Java 8.
-            Workaround for https://jira.codehaus.org/browse/MANIMALSNIFFER-45 Thanks to Mark Thomas.
-o RAT-160:  Ignore build.log created by maven-invoker-plugin. Thanks to Christopher Tubbs.
-o RAT-179:  Maven plugin and Ant task do not support adding extra approved licenses.
-o RAT-180:  Generify and beautify texts in RAT report.
-o RAT-194:  Upgrade to Doxia 1.6 if called directly, does not affect problems reported in RAT-158. Minor improvements. Thanks to Hervé Boutemy.
-o RAT-198:  Upgrade plexus-utils to 3.0.20. Thanks to Karl Heinz Marbaise.
-o RAT-172:  Exclude technical directories of source code management systems and their ignore files from RAT scans.
-o RAT-200:  Upgrade ASF parent POM to 17.
-
-
-Historical list of changes: http://creadur.apache.org/rat/changes-report.html
-
-For complete information on Apache Creadur Rat, including instructions on how to submit bug reports,
-patches, or suggestions for improvement, see the Apache Apache Creadur Rat website:
-
-http://creadur.apache.org/rat/
diff --git a/0.12-release/ant-task-examples.xml b/0.12-release/ant-task-examples.xml
deleted file mode 100644
index ea365e9..0000000
--- a/0.12-release/ant-task-examples.xml
+++ /dev/null
@@ -1,128 +0,0 @@
-<?xml version='1.0'?>
-<!--
-
-  Licensed to the Apache Software Foundation (ASF) under one or more
-  contributor license agreements.  See the NOTICE file distributed with
-  this work for additional information regarding copyright ownership.
-  The ASF licenses this file to You under the Apache License, Version 2.0
-  (the "License"); you may not use this file except in compliance with
-  the License.  You may obtain a copy of the License at
-
-      http://www.apache.org/licenses/LICENSE-2.0
-
-  Unless required by applicable law or agreed to in writing, software
-  distributed under the License is distributed on an "AS IS" BASIS,
-  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-  See the License for the specific language governing permissions and
-  limitations under the License.
-
--->
-
-<project default="javasources" name="Ant task examples">
-  <description>
-    A few examples of using the Ant task, for more examples see the
-    AntUnit tests
-  </description>
-
-  <property name="src-dir" location="apache-rat-core/src/main/java"/>
-  <property name="version" value="0.11"/>
-  <property name="src-jar"
-            location="apache-rat-core/target/apache-rat-core-${version}-sources.jar"/>
-
-  <target name="javasources" depends="-taskdef"
-    description="runs the tasks over Rat's source tree excluding the license directory">
-    <rat:report xmlns:rat="antlib:org.apache.rat.anttasks">
-      <fileset dir="${src-dir}">
-        <exclude name="rat/license/"/>
-      </fileset>
-    </rat:report>
-  </target>
-
-  <target name="jar" depends="-taskdef"
-    description="runs the task over Rat's source tree">
-    <rat:report xmlns:rat="antlib:org.apache.rat.anttasks">
-      <zipfileset src="${src-jar}"/>
-    </rat:report>
-  </target>
-
-  <target name="tarball" depends="-taskdef"
-    description="creates a tarball of Rat's source tree and runs the task over the tarball">
-    <tar destfile="ratsrc.tar.gz" compression="gzip">
-      <fileset dir="${src-dir}"/>
-    </tar>
-    <rat:report xmlns:rat="antlib:org.apache.rat.anttasks">
-      <tarfileset>
-        <gzipresource>
-          <file file="ratsrc.tar.gz"/>
-        </gzipresource>
-      </tarfileset>
-    </rat:report>
-    <delete file="ratsrc.tar.gz"/>
-  </target>
-
-  <target name="javasources-w3c" depends="-taskdef"
-    description="runs the tasks over Rat's source tree accepting only the W3C license">
-    <rat:report xmlns:rat="antlib:org.apache.rat.anttasks"
-      addDefaultLicenseMatchers="false">
-      <fileset dir="${src-dir}"/>
-
-      <rat:w3c/>
-
-    </rat:report>
-  </target>
-
-  <target name="url" depends="-taskdef"
-    description="runs the task on the ASF's homepage">
-    <rat:report xmlns:rat="antlib:org.apache.rat.anttasks">
-      <url url="http://www.apache.org/"/>
-    </rat:report>
-  </target>
-
-  <target name="run-on-rat" depends="-taskdef">
-    <rat:report xmlns:rat="antlib:org.apache.rat.anttasks">
-      <fileset dir="."/>
-    </rat:report>
-  </target>
-
-  <target name="run-on-rat-output-xml" depends="-taskdef"
-          description="Runs Rat on its own source tree and creates an XML report">
-    <rat:report xmlns:rat="antlib:org.apache.rat.anttasks"
-                format="xml" reportFile="rat-report.xml">
-      <fileset dir="."/>
-    </rat:report>
-  </target>
-
-  <target name="run-on-rat-output-styled" depends="-taskdef"
-          description="Runs Rat on its own source tree and creates a report using XSLT">
-    <rat:report xmlns:rat="antlib:org.apache.rat.anttasks"
-                format="styled" reportFile="rat-report.txt">
-      <stylesheet>
-        <file file="apache-rat-core/src/main/resources/org/apache/rat/plain-rat.xsl"/>
-      </stylesheet>
-      <fileset dir="."/>
-    </rat:report>
-  </target>
-
-  <target name="restrict" depends="-taskdef"
-          description="Run Rat on all files in this source tree that have been modified today">
-    <tstamp/>
-    <rat:report xmlns:rat="antlib:org.apache.rat.anttasks">
-      <restrict>
-        <fileset dir="."/>
-        <date when="after" datetime="${DSTAMP}" pattern="yyyyMMdd"/>
-      </restrict>
-    </rat:report>
-  </target>
-
-  <target name="-taskdef">
-    <typedef resource="org/apache/rat/anttasks/antlib.xml"
-             uri="antlib:org.apache.rat.anttasks">
-      <classpath>
-        <fileset dir=".">
-           <include name="**/apache-rat*.jar"/>
-           <include name="**/commons-*.jar"/>
-        </fileset>
-      </classpath>
-    </typedef>
-  </target>
-</project>
diff --git a/0.12-release/apache-rat-api/.gitignore b/0.12-release/apache-rat-api/.gitignore
deleted file mode 100644
index 22e1131..0000000
--- a/0.12-release/apache-rat-api/.gitignore
+++ /dev/null
@@ -1,19 +0,0 @@
-*.ipr
-*.iws
-/target/*
-**/target/*
-.svn
-**/.svn
-.project
-*/.project
-.classpath
-*/.classpath
-.settings
-*/.settings
-*.iml
-*/*.iml
-*/*.ipr
-*/*.iws
-.idea/*
-*/.idea
-/target/
diff --git a/0.12-release/apache-rat-api/pom.xml b/0.12-release/apache-rat-api/pom.xml
deleted file mode 100644
index fda8a61..0000000
--- a/0.12-release/apache-rat-api/pom.xml
+++ /dev/null
@@ -1,50 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!--
-  Licensed to the Apache Software Foundation (ASF) under one or more
-  contributor license agreements.  See the NOTICE file distributed with
-  this work for additional information regarding copyright ownership.
-  The ASF licenses this file to You under the Apache License, Version 2.0
-  (the "License"); you may not use this file except in compliance with
-  the License.  You may obtain a copy of the License at
-
-      http://www.apache.org/licenses/LICENSE-2.0
-
-  Unless required by applicable law or agreed to in writing, software
-  distributed under the License is distributed on an "AS IS" BASIS,
-  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-  See the License for the specific language governing permissions and
-  limitations under the License.
--->
-<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
-  <modelVersion>4.0.0</modelVersion>
-  <parent>
-    <groupId>org.apache.rat</groupId>
-    <artifactId>apache-rat-project</artifactId>
-    <version>0.12</version>
-  </parent>
-  <packaging>jar</packaging>
-
-  <artifactId>apache-rat-api</artifactId>
-
-  <name>Apache Creadur Rat::API</name>
-  <description>Shared beans and services.</description>
-
-  <dependencies>
-    <!-- Test Dependencies -->
-    <dependency>
-      <groupId>junit</groupId>
-      <artifactId>junit</artifactId>
-      <scope>test</scope>
-    </dependency>
-    <dependency>
-      <groupId>org.hamcrest</groupId>
-      <artifactId>hamcrest-library</artifactId>
-      <scope>test</scope>
-    </dependency>
-    <dependency>
-      <groupId>org.mockito</groupId>
-      <artifactId>mockito-core</artifactId>
-      <scope>test</scope>
-    </dependency>
-  </dependencies>
-</project>
diff --git a/0.12-release/apache-rat-api/src/main/java/org/apache/rat/api/domain/LicenseFamily.java b/0.12-release/apache-rat-api/src/main/java/org/apache/rat/api/domain/LicenseFamily.java
deleted file mode 100644
index 94592bc..0000000
--- a/0.12-release/apache-rat-api/src/main/java/org/apache/rat/api/domain/LicenseFamily.java
+++ /dev/null
@@ -1,99 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- *  to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- *  with the License.  You may obtain a copy of the License at
- *
- *   http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-package org.apache.rat.api.domain;
-
-/**
- * Licenses are grouped into families. Each family has similar legal semantics,
- * though some small details may differ.
- * <p>
- * For example, the <a href='http://opensource.org/licenses/BSD-3-Clause'>3
- * clause BSD license</a> is in a family where members differ by &lt;OWNER&gt;,
- * &lt;ORGANIZATION&gt; and &lt;YEAR&gt; parameters.
- * 
- */
-public final class LicenseFamily {
-
-    /**
-     * Further information associated with the license family. Human readable.
-     * Possibly null.
-     */
-    private final String notes;
-    /**
-     * Names of the category containing this license family. Choosing a suitable
-     * URI is recommended. Possibly null;
-     */
-    private final String category;
-    /**
-     * Uniquely identifies this family. Choosing a suitable URI is recommended.
-     * Not null.
-     */
-    private final String name;
-
-    /**
-     * Constructs an immutable license family.
-     * 
-     * @param name
-     *            the name uniquely identifying this family. Recommended that
-     *            this be an URI. Not null.
-     * @param category
-     *            the name of the category containing this license family.
-     *            Recommended that this be an URI. Possibly null.
-     * @param notes
-     *            further information associated with the license family. Human
-     *            readable. Possibly null.
-     */
-    public LicenseFamily(final String name, final String category,
-            final String notes) {
-        super();
-        this.notes = notes;
-        this.category = category;
-        this.name = name;
-    }
-
-    /**
-     * Gets further information associated with the license family. Human
-     * readable.
-     * 
-     * @return possibly null
-     */
-    public String getNotes() {
-        return this.notes;
-    }
-
-    /**
-     * Gets the name of the category containing this license family. Recommended
-     * that this be an URI.
-     * 
-     * @return possibly null
-     */
-    public String getCategory() {
-        return this.category;
-    }
-
-    /**
-     * Gets the name uniquely identifying this family. Recommended that this be
-     * an URI.
-     * 
-     * @return not null
-     */
-    public String getName() {
-        return this.name;
-    }
-
-}
diff --git a/0.12-release/apache-rat-api/src/main/java/org/apache/rat/api/domain/LicenseFamilyBuilder.java b/0.12-release/apache-rat-api/src/main/java/org/apache/rat/api/domain/LicenseFamilyBuilder.java
deleted file mode 100644
index 9d58a96..0000000
--- a/0.12-release/apache-rat-api/src/main/java/org/apache/rat/api/domain/LicenseFamilyBuilder.java
+++ /dev/null
@@ -1,96 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- *  to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- *  with the License.  You may obtain a copy of the License at
- *
- *   http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-package org.apache.rat.api.domain;
-
-/**
- * Builds {@link LicenseFamily} instances.
- */
-public final class LicenseFamilyBuilder {
-
-    /**
-     * Begins to build a license family.
-     * 
-     * @return a builder for a license family, not null
-     */
-    public static LicenseFamilyBuilder aLicenseFamily() {
-        return new LicenseFamilyBuilder();
-    }
-
-    /** Further information associated with the license family. Human readable. */
-    private String notes;
-    /**
-     * Names of the category containing this license family. Recommended that
-     * this be an URI.
-     */
-    private String category;
-    /** Uniquely identifies this family. Choosing a suitable URI is recommended */
-    private String name;
-
-    /** Use {@link #aLicenseFamily()  */
-    private LicenseFamilyBuilder() {
-    }
-
-    /**
-     * Builds a family.
-     * 
-     * @return not null
-     */
-    public LicenseFamily build() {
-        return new LicenseFamily(this.name, this.category, this.notes);
-    }
-
-    /**
-     * Builds family with further information associated with the license
-     * family. Human readable.
-     * 
-     * @param notes
-     *            possibly null
-     * @return this instance, not null
-     */
-    public LicenseFamilyBuilder withNotes(final String notes) {
-        this.notes = notes;
-        return this;
-    }
-
-    /**
-     * Builds family with category containing this license family. Choosing a
-     * suitable URI is recommended
-     * 
-     * @param category
-     *            possible null
-     * @return this instance, not null
-     */
-    public LicenseFamilyBuilder withCategory(final String category) {
-        this.category = category;
-        return this;
-    }
-
-    /**
-     * 
-     * Uniquely identifies this family. Choosing a suitable URI is recommended.
-     * 
-     * @param name
-     *            not null
-     * @return this instance, not null
-     */
-    public LicenseFamilyBuilder withName(final String name) {
-        this.name = name;
-        return this;
-    }
-}
diff --git a/0.12-release/apache-rat-api/src/main/java/org/apache/rat/api/domain/RatLicenseFamily.java b/0.12-release/apache-rat-api/src/main/java/org/apache/rat/api/domain/RatLicenseFamily.java
deleted file mode 100644
index 1a186bc..0000000
--- a/0.12-release/apache-rat-api/src/main/java/org/apache/rat/api/domain/RatLicenseFamily.java
+++ /dev/null
@@ -1,137 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- *  to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- *  with the License.  You may obtain a copy of the License at
- *
- *   http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-package org.apache.rat.api.domain;
-
-import static org.apache.rat.api.domain.LicenseFamilyBuilder.aLicenseFamily;
-
-/**
- * Enumerates standard license families known to Rat.
- */
-public enum RatLicenseFamily {
-
-	APACHE(
-			"Apache License Version 2.0",
-			"AL   ",
-			"Note that APACHE requires a NOTICE. All modifications require notes. See http://www.apache.org/licenses/LICENSE-2.0."),
-	GPL1(
-			"GNU General Public License, version 1",
-			"GPL1 ",
-			"Note that GPL1 requires a NOTICE. All modifications require notes. See http://www.gnu.org/licenses/gpl-1.0.html."),
-	GPL2(
-			"GNU General Public License, version 2",
-			"GPL2 ",
-			"Note that GPL2 requires a NOTICE. All modifications require notes. See http://www.gnu.org/licenses/gpl-2.0.html."),
-	GPL3(
-			"GNU General Public License, version 3",
-			"GPL3 ",
-			"Note that GPL3 requires a NOTICE. All modifications require notes. See http://www.gnu.org/licenses/gpl-3.0.html."),
-	MIT(
-			"The MIT License",
-			"MIT  ",
-			"Note that MIT requires a NOTICE. All modifications require notes. See http://opensource.org/licenses/MIT."),
-	CDDL1(
-			"COMMON DEVELOPMENT AND DISTRIBUTION LICENSE Version 1.0",
-			"CDDL1",
-			"Note that CDDL1 requires a NOTICE. All modifications require notes. See https://oss.oracle.com/licenses/CDDL."),
-	OASIS(
-			"OASIS Open License",
-			"OASIS",
-			"Note that OASIS requires a NOTICE. All modifications require notes. See https://www.oasis-open.org/policies-guidelines/ipr."),
-	TMF854(
-			"Modified BSD License",
-			"TMF  ",
-			"Note that TMF854 requires a NOTICE. All modifications require notes. See http://opensource.org/licenses/BSD-3-Clause."),
-	 DOJO(
-			"Modified BSD License",
-			"DOJO ",
-			"Note that DOJO requires a NOTICE. All modifications require notes. See http://dojotoolkit.org/community/licensing.shtml."),
-    W3C(
-            "W3C Software Copyright",
-            "W3C  ",
-            "Note that W3C requires a NOTICE. All modifications require notes. See http://www.w3.org/Consortium/Legal/2002/copyright-software-20021231."),
-
-    W3C_DOCUMENTATION(
-            "W3C Document Copyright",
-            "W3CD ",
-            "Note that W3CD does not allow modifications. See http://www.w3.org/Consortium/Legal/2002/copyright-documents-20021231.");
-
-    /** @see LicenseFamily#getName() */
-    private final String name;
-    /** @see LicenseFamily#getCategory() */
-    private final String category;
-    /** @see LicenseFamily#getNotes() */
-    private final String notes;
-    /** Constructed from other data */
-    private final LicenseFamily licenseFamily;
-
-    /**
-     * Constructs an instance.
-     * 
-     * @param name
-     *            not null
-     * @param category
-     *            not null
-     * @param notes
-     *            not null
-     */
-    private RatLicenseFamily(final String name, final String category,
-            final String notes) {
-        this.name = name;
-        this.category = category;
-        this.notes = notes;
-        this.licenseFamily = aLicenseFamily().withCategory(getCategory())
-                .withName(getName()).withNotes(getNotes()).build();
-    }
-
-    /**
-     * @see LicenseFamily#getName()
-     * 
-     * @return not null
-     */
-    public String getName() {
-        return this.name;
-    }
-
-    /**
-     * @see LicenseFamily#getCategory()
-     * 
-     * @return possibly null
-     */
-    public String getCategory() {
-        return this.category;
-    }
-
-    /**
-     * @see LicenseFamily#getNotes()
-     * 
-     * @return possibly null
-     */
-    public String getNotes() {
-        return this.notes;
-    }
-
-    /**
-     * Gets a {@link LicenseFamily} representing this data.
-     * 
-     * @return not null
-     */
-    public LicenseFamily licenseFamily() {
-        return this.licenseFamily;
-    }
-}
diff --git a/0.12-release/apache-rat-api/src/test/java/org/apache/rat/api/domain/LicenseFamilyBuilderTest.java b/0.12-release/apache-rat-api/src/test/java/org/apache/rat/api/domain/LicenseFamilyBuilderTest.java
deleted file mode 100644
index 739806c..0000000
--- a/0.12-release/apache-rat-api/src/test/java/org/apache/rat/api/domain/LicenseFamilyBuilderTest.java
+++ /dev/null
@@ -1,63 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- *  to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- *  with the License.  You may obtain a copy of the License at
- *
- *   http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-package org.apache.rat.api.domain;
-
-import static org.hamcrest.CoreMatchers.is;
-import static org.junit.Assert.assertNotNull;
-import static org.junit.Assert.assertThat;
-
-import org.junit.Test;
-
-public class LicenseFamilyBuilderTest {
-
-    @Test
-    public void testBuilderBuilds() {
-        final LicenseFamily family =
-                LicenseFamilyBuilder.aLicenseFamily().build();
-        assertNotNull("Builder should build", family);
-    }
-
-    @Test
-    public void testWithNotes() {
-        final String someNotes = "Some notes";
-        final LicenseFamily family =
-                LicenseFamilyBuilder.aLicenseFamily().withNotes(someNotes)
-                        .build();
-        assertThat(family.getNotes(), is(someNotes));
-    }
-
-    @Test
-    public void testWithCategory() {
-        final String someCategory = "Some license category";
-        final LicenseFamily family =
-                LicenseFamilyBuilder.aLicenseFamily()
-                        .withCategory(someCategory).build();
-        assertThat(family.getCategory(), is(someCategory));
-    }
-
-    @Test
-    public void testWithName() {
-        final String someName = "A name for a license";
-        final LicenseFamily family =
-                LicenseFamilyBuilder.aLicenseFamily().withName(someName)
-                        .build();
-        assertThat(family.getName(), is(someName));
-
-    }
-}
diff --git a/0.12-release/apache-rat-api/src/test/java/org/apache/rat/api/domain/RatLicenseFamilyTest.java b/0.12-release/apache-rat-api/src/test/java/org/apache/rat/api/domain/RatLicenseFamilyTest.java
deleted file mode 100644
index bf7c7bd..0000000
--- a/0.12-release/apache-rat-api/src/test/java/org/apache/rat/api/domain/RatLicenseFamilyTest.java
+++ /dev/null
@@ -1,226 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- *  to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- *  with the License.  You may obtain a copy of the License at
- *
- *   http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-package org.apache.rat.api.domain;
-
-import static org.apache.rat.api.domain.RatLicenseFamily.APACHE;
-import static org.apache.rat.api.domain.RatLicenseFamily.CDDL1;
-import static org.apache.rat.api.domain.RatLicenseFamily.DOJO;
-import static org.apache.rat.api.domain.RatLicenseFamily.GPL1;
-import static org.apache.rat.api.domain.RatLicenseFamily.GPL2;
-import static org.apache.rat.api.domain.RatLicenseFamily.GPL3;
-import static org.apache.rat.api.domain.RatLicenseFamily.MIT;
-import static org.apache.rat.api.domain.RatLicenseFamily.OASIS;
-import static org.apache.rat.api.domain.RatLicenseFamily.TMF854;
-import static org.apache.rat.api.domain.RatLicenseFamily.W3C;
-import static org.apache.rat.api.domain.RatLicenseFamily.W3C_DOCUMENTATION;
-import static org.hamcrest.CoreMatchers.is;
-import static org.junit.Assert.assertThat;
-
-import org.junit.Test;
-
-public class RatLicenseFamilyTest {
-
-    @Test
-    public void testW3CLicenseFamilyCategory() {
-        assertThat(W3C.getCategory(), is("W3C  "));
-    }
-
-    @Test
-    public void testW3CLicenseFamilyName() {
-        assertThat(W3C.getName(), is("W3C Software Copyright"));
-    }
-
-    @Test
-    public void testW3CLicenseFamilyNotes() {
-        assertThat(
-                W3C.getNotes(),
-                is("Note that W3C requires a NOTICE. All modifications require notes. See http://www.w3.org/Consortium/Legal/2002/copyright-software-20021231."));
-    }
-
-    @Test
-    public void testW3CDocLicenseFamilyCategory() {
-        assertThat(W3C_DOCUMENTATION.getCategory(), is("W3CD "));
-    }
-
-    @Test
-    public void testW3CDocLicenseFamilyName() {
-        assertThat(W3C_DOCUMENTATION.getName(), is("W3C Document Copyright"));
-    }
-
-    @Test
-    public void testW3CDocLicenseFamilyNotes() {
-        assertThat(
-                W3C_DOCUMENTATION.getNotes(),
-                is("Note that W3CD does not allow modifications. See http://www.w3.org/Consortium/Legal/2002/copyright-documents-20021231."));
-    }
-
-	@Test
-	public void testAPACHELicenseFamilyCategory() {
-		assertThat(APACHE.getCategory(), is("AL   "));
-	}
-
-	@Test
-	public void testAPACHELicenseFamilyName() {
-		assertThat(APACHE.getName(), is("Apache License Version 2.0"));
-	}
-
-	@Test
-	public void testAPACHELicenseFamilyNotes() {
-		assertThat(
-				APACHE.getNotes(),
-				is("Note that APACHE requires a NOTICE. All modifications require notes. See http://www.apache.org/licenses/LICENSE-2.0."));
-	}
-
-	@Test
-	public void testGPL1LicenseFamilyCategory() {
-		assertThat(GPL1.getCategory(), is("GPL1 "));
-	}
-
-	@Test
-	public void testGPL1LicenseFamilyName() {
-		assertThat(GPL1.getName(), is("GNU General Public License, version 1"));
-	}
-
-	@Test
-	public void testGPL1LicenseFamilyNotes() {
-		assertThat(
-				GPL1.getNotes(),
-				is("Note that GPL1 requires a NOTICE. All modifications require notes. See http://www.gnu.org/licenses/gpl-1.0.html."));
-	}
-
-	@Test
-	public void testGPL2LicenseFamilyCategory() {
-		assertThat(GPL2.getCategory(), is("GPL2 "));
-	}
-
-	@Test
-	public void testGPL2LicenseFamilyName() {
-		assertThat(GPL2.getName(), is("GNU General Public License, version 2"));
-	}
-
-	@Test
-	public void testGPL2LicenseFamilyNotes() {
-		assertThat(
-				GPL2.getNotes(),
-				is("Note that GPL2 requires a NOTICE. All modifications require notes. See http://www.gnu.org/licenses/gpl-2.0.html."));
-	}
-
-	@Test
-	public void testGPL3LicenseFamilyCategory() {
-		assertThat(GPL3.getCategory(), is("GPL3 "));
-	}
-
-	@Test
-	public void testGPL3LicenseFamilyName() {
-		assertThat(GPL3.getName(), is("GNU General Public License, version 3"));
-	}
-
-	@Test
-	public void testGPL3LicenseFamilyNotes() {
-		assertThat(
-				GPL3.getNotes(),
-				is("Note that GPL3 requires a NOTICE. All modifications require notes. See http://www.gnu.org/licenses/gpl-3.0.html."));
-	}
-
-	@Test
-	public void testMITLicenseFamilyCategory() {
-		assertThat(MIT.getCategory(), is("MIT  "));
-	}
-
-	@Test
-	public void testMITLicenseFamilyName() {
-		assertThat(MIT.getName(), is("The MIT License"));
-	}
-
-	@Test
-	public void testMITLicenseFamilyNotes() {
-		assertThat(
-				MIT.getNotes(),
-				is("Note that MIT requires a NOTICE. All modifications require notes. See http://opensource.org/licenses/MIT."));
-	}
-
-	@Test
-	public void testCDDL1LicenseFamilyCategory() {
-		assertThat(CDDL1.getCategory(), is("CDDL1"));
-	}
-
-	@Test
-	public void testCDDL1LicenseFamilyName() {
-		assertThat(CDDL1.getName(),
-				is("COMMON DEVELOPMENT AND DISTRIBUTION LICENSE Version 1.0"));
-	}
-
-	@Test
-	public void testCDDL1LicenseFamilyNotes() {
-		assertThat(
-				CDDL1.getNotes(),
-				is("Note that CDDL1 requires a NOTICE. All modifications require notes. See https://oss.oracle.com/licenses/CDDL."));
-	}
-
-	@Test
-	public void testOASISLicenseFamilyCategory() {
-		assertThat(OASIS.getCategory(), is("OASIS"));
-	}
-
-	@Test
-	public void testOASISLicenseFamilyName() {
-		assertThat(OASIS.getName(), is("OASIS Open License"));
-	}
-
-	@Test
-	public void testOASISLicenseFamilyNotes() {
-		assertThat(
-				OASIS.getNotes(),
-				is("Note that OASIS requires a NOTICE. All modifications require notes. See https://www.oasis-open.org/policies-guidelines/ipr."));
-	}
-	
-	@Test
-	public void testTMF854LicenseFamilyCategory() {
-		assertThat(TMF854.getCategory(), is("TMF  "));
-	}
-
-	@Test
-	public void testTMF854LicenseFamilyName() {
-		assertThat(TMF854.getName(), is("Modified BSD License"));
-	}
-
-	@Test
-	public void testTMF854LicenseFamilyNotes() {
-		assertThat(
-				TMF854.getNotes(),
-				is("Note that TMF854 requires a NOTICE. All modifications require notes. See http://opensource.org/licenses/BSD-3-Clause."));
-	}
-	
-	@Test
-	public void testDOJOLicenseFamilyCategory() {
-		assertThat(DOJO.getCategory(), is("DOJO "));
-	}
-
-	@Test
-	public void testDOJOLicenseFamilyName() {
-		assertThat(DOJO.getName(), is("Modified BSD License"));
-	}
-
-	@Test
-	public void testDOJOLicenseFamilyNotes() {
-		assertThat(
-				DOJO.getNotes(),
-				is("Note that DOJO requires a NOTICE. All modifications require notes. See http://dojotoolkit.org/community/licensing.shtml."));
-	}
-}
diff --git a/0.12-release/apache-rat-core/pom.xml b/0.12-release/apache-rat-core/pom.xml
deleted file mode 100644
index 301c7df..0000000
--- a/0.12-release/apache-rat-core/pom.xml
+++ /dev/null
@@ -1,115 +0,0 @@
-<?xml version='1.0'?>
-<!--
-  Licensed to the Apache Software Foundation (ASF) under one or more
-  contributor license agreements.  See the NOTICE file distributed with
-  this work for additional information regarding copyright ownership.
-  The ASF licenses this file to You under the Apache License, Version 2.0
-  (the "License"); you may not use this file except in compliance with
-  the License.  You may obtain a copy of the License at
-
-      http://www.apache.org/licenses/LICENSE-2.0
-
-  Unless required by applicable law or agreed to in writing, software
-  distributed under the License is distributed on an "AS IS" BASIS,
-  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-  See the License for the specific language governing permissions and
-  limitations under the License.
--->
-<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
-  <modelVersion>4.0.0</modelVersion>
-  <parent>
-    <groupId>org.apache.rat</groupId>
-    <artifactId>apache-rat-project</artifactId>
-    <version>0.12</version>
-  </parent>
-  <artifactId>apache-rat-core</artifactId>
-  <packaging>jar</packaging>
-  <name>Apache Creadur Rat::Core</name>
-  <description>The core functionality, shared by the Ant tasks
-    and the Maven plugin.</description>
-
-  <build>
-    <resources>
-      <resource>
-        <filtering>false</filtering>
-        <directory>src/main/resources</directory>
-      </resource>
-      <resource>
-        <filtering>true</filtering>
-        <directory>src/main/filtered-resources</directory>
-      </resource>
-      <resource>
-        <directory>..</directory>
-        <targetPath>META-INF</targetPath>
-        <includes>
-          <include>RELEASE_NOTES.txt</include>
-        </includes>
-      </resource>
-    </resources>
-
-    <pluginManagement>
-      <plugins>
-        <plugin>
-          <groupId>org.apache.rat</groupId>
-          <artifactId>apache-rat-plugin</artifactId>
-          <configuration>
-            <excludes>
-              <!-- These files have bad license headers because they are used to test bad license headers -->
-              <exclude>src/test/resources/appliedAL20/bad/*.*</exclude>
-              <exclude>src/test/resources/oasis/bad/*.*</exclude>
-              <!-- These files does not have license headers because they are used to test license headers -->
-              <exclude>src/test/resources/elements/Source.java</exclude>
-              <exclude>src/test/resources/elements/ILoggerFactory.java</exclude>
-              <exclude>src/test/resources/elements/sub/Empty.txt</exclude>
-              <exclude>src/test/resources/violations/bad.txt</exclude>
-              <exclude>src/test/resources/violations/FilterTest.cs</exclude>
-              <!-- used to test for binary files; does not work on UTF-8 (e.g. MacOSX) -->
-              <exclude>src/test/resources/binaries/Image-png.not</exclude>
-            </excludes>
-          </configuration>
-        </plugin>
-      </plugins>
-    </pluginManagement>
-  </build>
-
-
-  <dependencies>
-    <dependency>
-      <groupId>org.apache.rat</groupId>
-      <artifactId>apache-rat-api</artifactId>
-    </dependency>
-    <dependency>
-      <groupId>commons-collections</groupId>
-      <artifactId>commons-collections</artifactId>
-    </dependency>
-    <dependency>
-      <groupId>commons-lang</groupId>
-      <artifactId>commons-lang</artifactId>
-    </dependency>
-    <dependency>
-      <groupId>commons-io</groupId>
-      <artifactId>commons-io</artifactId>
-    </dependency>
-    <dependency>
-      <groupId>org.apache.commons</groupId>
-      <artifactId>commons-compress</artifactId>
-      <exclusions>
-        <!-- Not actually used (yet) so no point including it -->
-        <exclusion>
-          <groupId>org.tukaani</groupId>
-          <artifactId>xz</artifactId>
-        </exclusion>
-      </exclusions>
-    </dependency>
-    <dependency>
-      <groupId>junit</groupId>
-      <artifactId>junit</artifactId>
-      <scope>test</scope>
-    </dependency>
-
-    <dependency>
-      <groupId>commons-cli</groupId>
-      <artifactId>commons-cli</artifactId>
-    </dependency>
-  </dependencies>
-</project>
diff --git a/0.12-release/apache-rat-core/src/main/java/org/apache/rat/Defaults.java b/0.12-release/apache-rat-core/src/main/java/org/apache/rat/Defaults.java
deleted file mode 100644
index 68fb5ec..0000000
--- a/0.12-release/apache-rat-core/src/main/java/org/apache/rat/Defaults.java
+++ /dev/null
@@ -1,108 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one   *
- * or more contributor license agreements.  See the NOTICE file *
- * distributed with this work for additional information        *
- * regarding copyright ownership.  The ASF licenses this file   *
- * to you under the Apache License, Version 2.0 (the            *
- * "License"); you may not use this file except in compliance   *
- * with the License.  You may obtain a copy of the License at   *
- *                                                              *
- *   http://www.apache.org/licenses/LICENSE-2.0                 *
- *                                                              *
- * Unless required by applicable law or agreed to in writing,   *
- * software distributed under the License is distributed on an  *
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY       *
- * KIND, either express or implied.  See the License for the    *
- * specific language governing permissions and limitations      *
- * under the License.                                           *
- */
-package org.apache.rat;
-
-import org.apache.rat.analysis.IHeaderMatcher;
-import org.apache.rat.analysis.generation.GeneratedLicenseNotRequired;
-import org.apache.rat.analysis.generation.JavaDocLicenseNotRequired;
-import org.apache.rat.analysis.license.ApacheSoftwareLicense20;
-import org.apache.rat.analysis.license.CDDL1License;
-import org.apache.rat.analysis.license.DojoLicenseHeader;
-import org.apache.rat.analysis.license.GPL1License;
-import org.apache.rat.analysis.license.GPL2License;
-import org.apache.rat.analysis.license.GPL3License;
-import org.apache.rat.analysis.license.MITLicense;
-import org.apache.rat.analysis.license.OASISLicense;
-import org.apache.rat.analysis.license.TMF854LicenseHeader;
-import org.apache.rat.analysis.license.W3CDocLicense;
-import org.apache.rat.analysis.license.W3CLicense;
-import org.apache.rat.analysis.util.HeaderMatcherMultiplexer;
-import org.apache.rat.api.MetaData;
-
-import java.io.InputStream;
-import java.util.Arrays;
-import java.util.Collections;
-import java.util.List;
-
-
-/**
- * Utility class that holds constants shared by the CLI tool and the Ant tasks.
- */
-public class Defaults {
-    /**
-     * no instances
-     */
-    private Defaults() {
-    }
-
-    /**
-     * The standard list of licenses to include in the reports.
-     * Needs to match configuration in {@link org.apache.rat.policy.DefaultPolicy}.
-     */
-    public static final List<IHeaderMatcher> DEFAULT_MATCHERS = Collections.unmodifiableList(
-            Arrays.asList(new ApacheSoftwareLicense20(),
-                    new GPL1License(),
-                    new GPL2License(),
-                    new GPL3License(),
-                    new MITLicense(),
-                    new W3CLicense(),
-                    new W3CDocLicense(),
-                    new OASISLicense(),
-                    new JavaDocLicenseNotRequired(), // does not have a MetaData.RAT_LICENSE_FAMILY_NAME_VALUE_... entry
-                    new GeneratedLicenseNotRequired(), // does not have a MetaData.RAT_LICENSE_FAMILY_NAME_VALUE_... entry
-                    new DojoLicenseHeader(),
-                    new TMF854LicenseHeader(),
-                    new CDDL1License()));
-
-    // all classes in license package implementing ILicenseFamily
-    public static final List<String> DEFAULT_LICENSE_FAMILIES = Collections.unmodifiableList(
-            Arrays.asList(
-                    MetaData.RAT_LICENSE_FAMILY_NAME_VALUE_ACADEMIC_FREE_LICENSE_VERSION_2_1, //
-                    MetaData.RAT_LICENSE_FAMILY_NAME_VALUE_APACHE_LICENSE_VERSION_2_0, //
-                    MetaData.RAT_LICENSE_FAMILY_NAME_VALUE_CDDL1, //
-                    MetaData.RAT_LICENSE_FAMILY_NAME_VALUE_GPL_VERSION_1, //
-                    MetaData.RAT_LICENSE_FAMILY_NAME_VALUE_GPL_VERSION_2, //
-                    MetaData.RAT_LICENSE_FAMILY_NAME_VALUE_GPL_VERSION_3, //
-                    MetaData.RAT_LICENSE_FAMILY_NAME_VALUE_MIT, //
-                    MetaData.RAT_LICENSE_FAMILY_NAME_VALUE_MODIFIED_BSD_LICENSE, //
-                    MetaData.RAT_LICENSE_FAMILY_NAME_VALUE_OASIS_OPEN_LICENSE, //
-                    MetaData.RAT_LICENSE_FAMILY_NAME_VALUE_W3C_DOCUMENT_COPYRIGHT, //
-                    MetaData.RAT_LICENSE_FAMILY_NAME_VALUE_W3C_SOFTWARE_COPYRIGHT
-                    //
-            ));
-
-    public static final String PLAIN_STYLESHEET = "org/apache/rat/plain-rat.xsl";
-    public static final String UNAPPROVED_LICENSES_STYLESHEET = "org/apache/rat/unapproved-licenses.xsl";
-
-    public static InputStream getPlainStyleSheet() {
-        return Defaults.class.getClassLoader().getResourceAsStream(Defaults.PLAIN_STYLESHEET);
-    }
-
-    public static InputStream getUnapprovedLicensesStyleSheet() {
-        return Defaults.class.getClassLoader().getResourceAsStream(Defaults.UNAPPROVED_LICENSES_STYLESHEET);
-    }
-
-    public static InputStream getDefaultStyleSheet() {
-        return getPlainStyleSheet();
-    }
-
-    public static IHeaderMatcher createDefaultMatcher() {
-        return new HeaderMatcherMultiplexer(Defaults.DEFAULT_MATCHERS);
-    }
-}
diff --git a/0.12-release/apache-rat-core/src/main/java/org/apache/rat/Report.java b/0.12-release/apache-rat-core/src/main/java/org/apache/rat/Report.java
deleted file mode 100644
index 0cc09f1..0000000
--- a/0.12-release/apache-rat-core/src/main/java/org/apache/rat/Report.java
+++ /dev/null
@@ -1,428 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one   *
- * or more contributor license agreements.  See the NOTICE file *
- * distributed with this work for additional information        *
- * regarding copyright ownership.  The ASF licenses this file   *
- * to you under the Apache License, Version 2.0 (the            *
- * "License"); you may not use this file except in compliance   *
- * with the License.  You may obtain a copy of the License at   *
- *                                                              *
- *   http://www.apache.org/licenses/LICENSE-2.0                 *
- *                                                              *
- * Unless required by applicable law or agreed to in writing,   *
- * software distributed under the License is distributed on an  *
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY       *
- * KIND, either express or implied.  See the License for the    *
- * specific language governing permissions and limitations      *
- * under the License.                                           *
- */
-package org.apache.rat;
-
-import org.apache.commons.cli.CommandLine;
-import org.apache.commons.cli.HelpFormatter;
-import org.apache.commons.cli.Option;
-import org.apache.commons.cli.OptionBuilder;
-import org.apache.commons.cli.OptionGroup;
-import org.apache.commons.cli.Options;
-import org.apache.commons.cli.ParseException;
-import org.apache.commons.cli.PosixParser;
-import org.apache.commons.io.FileUtils;
-import org.apache.commons.io.filefilter.NotFileFilter;
-import org.apache.commons.io.filefilter.OrFileFilter;
-import org.apache.commons.io.filefilter.RegexFileFilter;
-import org.apache.commons.io.filefilter.WildcardFileFilter;
-import org.apache.rat.api.RatException;
-import org.apache.rat.report.IReportable;
-import org.apache.rat.report.RatReport;
-import org.apache.rat.report.claim.ClaimStatistic;
-import org.apache.rat.report.xml.XmlReportFactory;
-import org.apache.rat.report.xml.writer.IXmlWriter;
-import org.apache.rat.report.xml.writer.impl.base.XmlWriter;
-import org.apache.rat.walker.ArchiveWalker;
-import org.apache.rat.walker.DirectoryWalker;
-
-import javax.xml.transform.TransformerConfigurationException;
-import java.io.File;
-import java.io.FileInputStream;
-import java.io.FileNotFoundException;
-import java.io.FilenameFilter;
-import java.io.IOException;
-import java.io.InputStream;
-import java.io.OutputStreamWriter;
-import java.io.PipedReader;
-import java.io.PipedWriter;
-import java.io.PrintStream;
-import java.io.Writer;
-import java.util.List;
-
-
-public class Report {
-    private static final char EXCLUDE_CLI = 'e';
-    private static final char EXCLUDE_FILE_CLI = 'E';
-    private static final char STYLESHEET_CLI = 's';
-
-    //@SuppressWarnings("unchecked")
-    public static final void main(String args[]) throws Exception {
-        final ReportConfiguration configuration = new ReportConfiguration();
-        configuration.setHeaderMatcher(Defaults.createDefaultMatcher());
-        configuration.setApproveDefaultLicenses(true);
-        Options opts = buildOptions();
-
-        PosixParser parser = new PosixParser();
-        CommandLine cl = null;
-        try {
-            cl = parser.parse(opts, args);
-        } catch (ParseException e) {
-            System.err.println("Please use the \"--help\" option to see a list of valid commands and options");
-            System.exit(1);
-            return; // dummy return (won't be reached) to avoid Eclipse complaint about possible NPE for "cl"
-        }
-
-        if (cl.hasOption('h')) {
-            printUsage(opts);
-        }
-
-        args = cl.getArgs();
-        if (args == null || args.length != 1) {
-            printUsage(opts);
-        } else {
-            Report report = new Report(args[0]);
-
-            if (cl.hasOption('a') || cl.hasOption('A')) {
-                configuration.setAddingLicenses(true);
-                configuration.setAddingLicensesForced(cl.hasOption('f'));
-                configuration.setCopyrightMessage(cl.getOptionValue("c"));
-            }
-
-            if (cl.hasOption(EXCLUDE_CLI)) {
-                String[] excludes = cl.getOptionValues(EXCLUDE_CLI);
-                if (excludes != null) {
-                    final FilenameFilter filter = new NotFileFilter(new WildcardFileFilter(excludes));
-                    report.setInputFileFilter(filter);
-                }
-            } else if (cl.hasOption(EXCLUDE_FILE_CLI)) {
-                String excludeFileName = cl.getOptionValue(EXCLUDE_FILE_CLI);
-                if (excludeFileName != null) {
-                    List<String> excludes = FileUtils.readLines(new File(excludeFileName));
-                    final OrFileFilter orFilter = new OrFileFilter();
-                    for (String exclude : excludes) {
-                        orFilter.addFileFilter(new RegexFileFilter(exclude));
-                    }
-                    final FilenameFilter filter = new NotFileFilter(orFilter);
-                    report.setInputFileFilter(filter);
-                }
-            }
-            if (cl.hasOption('x')) {
-                report.report(System.out, configuration);
-            } else {
-                if (!cl.hasOption(STYLESHEET_CLI)) {
-                    report.styleReport(System.out, configuration);
-                } else {
-                    String[] style = cl.getOptionValues(STYLESHEET_CLI);
-                    if (style.length != 1) {
-                        System.err.println("please specify a single stylesheet");
-                        System.exit(1);
-                    }
-                    try {
-                        report(System.out,
-                                report.getDirectory(System.out),
-                                new FileInputStream(style[0]),
-                                configuration);
-                    } catch (FileNotFoundException fnfe) {
-                        System.err.println("stylesheet " + style[0]
-                                + " doesn't exist");
-                        System.exit(1);
-                    }
-                }
-            }
-        }
-    }
-
-    private static Options buildOptions() {
-        Options opts = new Options();
-
-        Option help = new Option("h", "help", false,
-                "Print help for the Rat command line interface and exit");
-        opts.addOption(help);
-
-        OptionGroup addLicenseGroup = new OptionGroup();
-        String addLicenseDesc = "Add the default license header to any file with an unknown license that is not in the exclusion list. " +
-                "By default new files will be created with the license header, " +
-                "to force the modification of existing files use the --force option.";
-
-        // RAT-85/RAT-203: Deprecated! added only for convenience and for backwards compatibility
-        Option addLicence = new Option(
-                "a",
-                "addLicence",
-                false,
-                addLicenseDesc);
-        addLicenseGroup.addOption(addLicence);
-        Option addLicense = new Option(
-                "A",
-                "addLicense",
-                false,
-                addLicenseDesc);
-        addLicenseGroup.addOption(addLicense);
-        opts.addOptionGroup(addLicenseGroup);
-
-        Option write = new Option(
-                "f",
-                "force",
-                false,
-                "Forces any changes in files to be written directly to the source files (i.e. new files are not created)");
-        opts.addOption(write);
-
-        Option copyright = new Option(
-                "c",
-                "copyright",
-                true,
-                "The copyright message to use in the license headers, usually in the form of \"Copyright 2008 Foo\"");
-        opts.addOption(copyright);
-
-        @SuppressWarnings("static-access") // ignore OptionBuilder design fault
-        final Option exclude = OptionBuilder
-                .withArgName("expression")
-                .withLongOpt("exclude")
-                .hasArgs()
-                .withDescription("Excludes files matching wildcard <expression>. " +
-                        "Note that --dir is required when using this parameter. " +
-                        "Allows multiple arguments.")
-                .create(EXCLUDE_CLI);
-        opts.addOption(exclude);
-
-        @SuppressWarnings("static-access") // ignore OptionBuilder design fault
-        final Option excludeFile = OptionBuilder
-                .withArgName("fileName")
-                .withLongOpt("exclude-file")
-                .hasArgs()
-                .withDescription("Excludes files matching regular expression in <file> " +
-                        "Note that --dir is required when using this parameter. ")
-                .create(EXCLUDE_FILE_CLI);
-        opts.addOption(excludeFile);
-
-        Option dir = new Option(
-                "d",
-                "dir",
-                false,
-                "Used to indicate source when using --exclude");
-        opts.addOption(dir);
-
-        OptionGroup outputType = new OptionGroup();
-
-        Option xml = new Option(
-                "x",
-                "xml",
-                false,
-                "Output the report in raw XML format.  Not compatible with -s");
-        outputType.addOption(xml);
-
-        Option xslt = new Option(String.valueOf(STYLESHEET_CLI),
-                "stylesheet",
-                true,
-                "XSLT stylesheet to use when creating the"
-                        + " report.  Not compatible with -x");
-        outputType.addOption(xslt);
-        opts.addOptionGroup(outputType);
-
-        return opts;
-    }
-
-    private static final void printUsage(Options opts) {
-        HelpFormatter f = new HelpFormatter();
-        String header = "Options";
-
-        StringBuilder footer = new StringBuilder("\nNOTE:\n");
-        footer.append("Rat is really little more than a grep ATM\n");
-        footer.append("Rat is also rather memory hungry ATM\n");
-        footer.append("Rat is very basic ATM\n");
-        footer.append("Rat highlights possible issues\n");
-        footer.append("Rat reports require interpretation\n");
-        footer.append("Rat often requires some tuning before it runs well against a project\n");
-        footer.append("Rat relies on heuristics: it may miss issues\n");
-
-        f.printHelp("java rat.report [options] [DIR|TARBALL]",
-                header, opts, footer.toString(), false);
-        System.exit(0);
-    }
-
-    private final String baseDirectory;
-
-    private FilenameFilter inputFileFilter = null;
-
-    private Report(String baseDirectory) {
-        this.baseDirectory = baseDirectory;
-    }
-
-    /**
-     * Gets the current filter used to select files.
-     *
-     * @return current file filter, or null when no filter has been set
-     */
-    public FilenameFilter getInputFileFilter() {
-        return inputFileFilter;
-    }
-
-    /**
-     * Sets the current filter used to select files.
-     *
-     * @param inputFileFilter filter, or null when no filter has been set
-     */
-    public void setInputFileFilter(FilenameFilter inputFileFilter) {
-        this.inputFileFilter = inputFileFilter;
-    }
-
-    /**
-     * @param out - the output stream to receive the styled report
-     * @return the currently collected numerical statistics.
-     * @throws Exception in case of errors.
-     * @deprecated use {@link #report(PrintStream, ReportConfiguration)} instead
-     */
-    @Deprecated
-    public ClaimStatistic report(PrintStream out) throws Exception {
-        final ReportConfiguration configuration = new ReportConfiguration();
-        configuration.setHeaderMatcher(Defaults.createDefaultMatcher());
-        configuration.setApproveDefaultLicenses(true);
-        return report(out, configuration);
-    }
-
-    /**
-     * @param out           - the output stream to receive the styled report
-     * @param configuration - current configuration options.
-     * @return the currently collected numerical statistics.
-     * @throws Exception in case of errors.
-     * @since Rat 0.8
-     */
-    public ClaimStatistic report(PrintStream out,
-                                 ReportConfiguration configuration)
-            throws Exception {
-        final IReportable base = getDirectory(out);
-        if (base != null) {
-            return report(base, new OutputStreamWriter(out), configuration);
-        }
-        return null;
-    }
-
-    private IReportable getDirectory(PrintStream out) {
-        File base = new File(baseDirectory);
-        if (!base.exists()) {
-            out.print("ERROR: ");
-            out.print(baseDirectory);
-            out.print(" does not exist.\n");
-            return null;
-        }
-
-        if (base.isDirectory()) {
-            return new DirectoryWalker(base, inputFileFilter);
-        }
-
-        try {
-            return new ArchiveWalker(base, inputFileFilter);
-        } catch (IOException ex) {
-            out.print("ERROR: ");
-            out.print(baseDirectory);
-            out.print(" is not valid gzip data.\n");
-            return null;
-        }
-    }
-
-    /**
-     * Output a report in the default style and default license
-     * header matcher.
-     *
-     * @param out - the output stream to receive the styled report
-     * @throws Exception in case of errors.
-     * @deprecated use {@link #styleReport(PrintStream, ReportConfiguration)} instead
-     */
-    @Deprecated
-    public void styleReport(PrintStream out) throws Exception {
-        final ReportConfiguration configuration = new ReportConfiguration();
-        configuration.setHeaderMatcher(Defaults.createDefaultMatcher());
-        configuration.setApproveDefaultLicenses(true);
-        styleReport(out, configuration);
-    }
-
-    /**
-     * Output a report in the default style and default license
-     * header matcher.
-     *
-     * @param out           - the output stream to receive the styled report
-     * @param configuration the configuration to use
-     * @throws Exception in case of errors.
-     * @since Rat 0.8
-     */
-    public void styleReport(PrintStream out,
-                            ReportConfiguration configuration)
-            throws Exception {
-        final IReportable base = getDirectory(out);
-        if (base != null) {
-            InputStream style = Defaults.getDefaultStyleSheet();
-            report(out, base, style, configuration);
-        }
-    }
-
-    /**
-     * Output a report that is styled using a defined stylesheet.
-     *
-     * @param out            the stream to write the report to
-     * @param base           the files or directories to report on
-     * @param style          an input stream representing the stylesheet to use for styling the report
-     * @param pConfiguration current report configuration.
-     * @throws IOException                       in case of I/O errors.
-     * @throws TransformerConfigurationException in case of XML errors.
-     * @throws InterruptedException              in case of threading errors.
-     * @throws RatException                      in case of internal errors.
-     */
-    public static void report(PrintStream out, IReportable base, final InputStream style,
-                              ReportConfiguration pConfiguration)
-            throws IOException, TransformerConfigurationException, InterruptedException, RatException {
-        report(new OutputStreamWriter(out), base, style, pConfiguration);
-    }
-
-    /**
-     * Output a report that is styled using a defined stylesheet.
-     *
-     * @param out            the writer to write the report to
-     * @param base           the files or directories to report on
-     * @param style          an input stream representing the stylesheet to use for styling the report
-     * @param pConfiguration current report configuration.
-     * @return the currently collected numerical statistics.
-     * @throws IOException                       in case of I/O errors.
-     * @throws TransformerConfigurationException in case of XML errors.
-     * @throws InterruptedException              in case of threading errors.
-     * @throws RatException                      in case of internal errors.
-     */
-    public static ClaimStatistic report(Writer out, IReportable base, final InputStream style,
-                                        ReportConfiguration pConfiguration)
-            throws IOException, TransformerConfigurationException, InterruptedException, RatException {
-        PipedReader reader = new PipedReader();
-        PipedWriter writer = new PipedWriter(reader);
-        ReportTransformer transformer = new ReportTransformer(out, style, reader);
-        Thread transformerThread = new Thread(transformer);
-        transformerThread.start();
-        final ClaimStatistic statistic = report(base, writer, pConfiguration);
-        writer.flush();
-        writer.close();
-        transformerThread.join();
-        return statistic;
-    }
-
-    /**
-     * @param container      the files or directories to report on
-     * @param out            the writer to write the report to
-     * @param pConfiguration current report configuration.
-     * @return the currently collected numerical statistics.
-     * @throws IOException  in case of I/O errors.
-     * @throws RatException in case of internal errors.
-     */
-    public static ClaimStatistic report(final IReportable container, final Writer out,
-                                        ReportConfiguration pConfiguration) throws IOException, RatException {
-        IXmlWriter writer = new XmlWriter(out);
-        final ClaimStatistic statistic = new ClaimStatistic();
-        RatReport report = XmlReportFactory.createStandardReport(writer, statistic, pConfiguration);
-        report.startReport();
-        container.run(report);
-        report.endReport();
-        writer.closeDocument();
-        return statistic;
-    }
-}
diff --git a/0.12-release/apache-rat-core/src/main/java/org/apache/rat/ReportConfiguration.java b/0.12-release/apache-rat-core/src/main/java/org/apache/rat/ReportConfiguration.java
deleted file mode 100644
index f4043c8..0000000
--- a/0.12-release/apache-rat-core/src/main/java/org/apache/rat/ReportConfiguration.java
+++ /dev/null
@@ -1,162 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one   *
- * or more contributor license agreements.  See the NOTICE file *
- * distributed with this work for additional information        *
- * regarding copyright ownership.  The ASF licenses this file   *
- * to you under the Apache License, Version 2.0 (the            *
- * "License"); you may not use this file except in compliance   *
- * with the License.  You may obtain a copy of the License at   *
- *                                                              *
- *   http://www.apache.org/licenses/LICENSE-2.0                 *
- *                                                              *
- * Unless required by applicable law or agreed to in writing,   *
- * software distributed under the License is distributed on an  *
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY       *
- * KIND, either express or implied.  See the License for the    *
- * specific language governing permissions and limitations      *
- * under the License.                                           *
- */
-package org.apache.rat;
-
-import org.apache.rat.analysis.IHeaderMatcher;
-import org.apache.rat.license.ILicenseFamily;
-
-import java.util.List;
-
-
-/**
- * A configuration object is used by the frontend to invoke the
- * {@link Report}. Basically, the sole purpose of the frontends is
- * to create the configuration and invoke the {@link Report}.
- */
-public class ReportConfiguration {
-    private IHeaderMatcher headerMatcher;
-    private ILicenseFamily[] approvedLicenseNames;
-    private boolean addingLicenses;
-    private boolean addingLicensesForced;
-    private String copyrightMessage;
-    private boolean approveDefaultLicenses = true;
-
-    /**
-     * @return whether default licenses shall be approved by default.
-     */
-    public boolean isApproveDefaultLicenses() {
-        return approveDefaultLicenses;
-    }
-
-    public void setApproveDefaultLicenses(boolean approveDefaultLicenses) {
-        this.approveDefaultLicenses = approveDefaultLicenses;
-    }
-
-    /**
-     * Returns the header matcher.
-     *
-     * @return the header matcher.
-     */
-    public IHeaderMatcher getHeaderMatcher() {
-        return headerMatcher;
-    }
-
-    /**
-     * Sets the header matcher.
-     *
-     * @param headerMatcher header matcher.
-     */
-    public void setHeaderMatcher(IHeaderMatcher headerMatcher) {
-        this.headerMatcher = headerMatcher;
-    }
-
-    /**
-     * Returns the set of approved license names.
-     *
-     * @return the set of approved license names.
-     */
-    public ILicenseFamily[] getApprovedLicenseNames() {
-        return approvedLicenseNames;
-    }
-
-    /**
-     * Sets the set of approved license names.
-     *
-     * @param approvedLicenseNames set of approved license names.
-     */
-    public void setApprovedLicenseNames(ILicenseFamily[] approvedLicenseNames) {
-        this.approvedLicenseNames = approvedLicenseNames;
-    }
-
-    /**
-     * Sets the set of approved license names (convenience).
-     *
-     * @param approvedLicenseNames set of approved license names.
-     */
-    public void setApprovedLicenseNames(List<ILicenseFamily> approvedLicenseNames) {
-        if (approvedLicenseNames != null && approvedLicenseNames.size() > 0) {
-            setApprovedLicenseNames(approvedLicenseNames.toArray(new ILicenseFamily[approvedLicenseNames.size()]));
-        }
-    }
-
-    /**
-     * @return If Rat is adding license headers: Returns the optional
-     * copyright message. This value is ignored, if no
-     * license headers are added.
-     * @see #isAddingLicenses()
-     */
-    public String getCopyrightMessage() {
-        return copyrightMessage;
-    }
-
-    /**
-     * If Rat is adding license headers: Sets the optional
-     * copyright message. This value is ignored, if no
-     * license headers are added.
-     *
-     * @param copyrightMessage message to set.
-     * @see #setAddingLicenses(boolean)
-     */
-    public void setCopyrightMessage(String copyrightMessage) {
-        this.copyrightMessage = copyrightMessage;
-    }
-
-    /**
-     * @return If Rat is adding license headers: Returns, whether adding
-     * license headers is enforced. This value is ignored, if no
-     * license headers are added.
-     * @see #isAddingLicenses()
-     */
-    public boolean isAddingLicensesForced() {
-        return addingLicensesForced;
-    }
-
-    /**
-     * If Rat is adding license headers: Sets, whether adding
-     * license headers is enforced. This value is ignored, if no
-     * license headers are added.
-     *
-     * @param addingLicensesForced enable/disable forcibly adding licenses.
-     * @see #isAddingLicenses()
-     */
-    public void setAddingLicensesForced(boolean addingLicensesForced) {
-        this.addingLicensesForced = addingLicensesForced;
-    }
-
-    /**
-     * @return Returns, whether Rat should add missing license headers.
-     * @see #isAddingLicensesForced()
-     * @see #getCopyrightMessage()
-     */
-    public boolean isAddingLicenses() {
-        return addingLicenses;
-    }
-
-    /**
-     * Returns, whether Rat should add missing license headers.
-     *
-     * @param addingLicenses enables/disables adding of licenses.
-     * @see #setAddingLicensesForced(boolean)
-     * @see #setCopyrightMessage(String)
-     */
-    public void setAddingLicenses(boolean addingLicenses) {
-        this.addingLicenses = addingLicenses;
-    }
-
-}
diff --git a/0.12-release/apache-rat-core/src/main/java/org/apache/rat/ReportFailedRuntimeException.java b/0.12-release/apache-rat-core/src/main/java/org/apache/rat/ReportFailedRuntimeException.java
deleted file mode 100644
index e778664..0000000
--- a/0.12-release/apache-rat-core/src/main/java/org/apache/rat/ReportFailedRuntimeException.java
+++ /dev/null
@@ -1,43 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one   *
- * or more contributor license agreements.  See the NOTICE file *
- * distributed with this work for additional information        *
- * regarding copyright ownership.  The ASF licenses this file   *
- * to you under the Apache License, Version 2.0 (the            *
- * "License"); you may not use this file except in compliance   *
- * with the License.  You may obtain a copy of the License at   *
- *                                                              *
- *   http://www.apache.org/licenses/LICENSE-2.0                 *
- *                                                              *
- * Unless required by applicable law or agreed to in writing,   *
- * software distributed under the License is distributed on an  *
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY       *
- * KIND, either express or implied.  See the License for the    *
- * specific language governing permissions and limitations      *
- * under the License.                                           *
- */ 
-package org.apache.rat;
-
-/**
- * Indicates that a report has failed in a fatal manner.
- */
-class ReportFailedRuntimeException extends RuntimeException {
-    
-    private static final long serialVersionUID = -7605175211996815712L;
-
-    public ReportFailedRuntimeException() {
-        super();
-    }
-
-    public ReportFailedRuntimeException(String message, Throwable t) {
-        super(message, t);
-    }
-
-    public ReportFailedRuntimeException(String message) {
-        super(message);
-    }
-
-    public ReportFailedRuntimeException(Throwable t) {
-        super(t);
-    }    
-}
diff --git a/0.12-release/apache-rat-core/src/main/java/org/apache/rat/ReportTransformer.java b/0.12-release/apache-rat-core/src/main/java/org/apache/rat/ReportTransformer.java
deleted file mode 100644
index 399226a..0000000
--- a/0.12-release/apache-rat-core/src/main/java/org/apache/rat/ReportTransformer.java
+++ /dev/null
@@ -1,67 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one   *
- * or more contributor license agreements.  See the NOTICE file *
- * distributed with this work for additional information        *
- * regarding copyright ownership.  The ASF licenses this file   *
- * to you under the Apache License, Version 2.0 (the            *
- * "License"); you may not use this file except in compliance   *
- * with the License.  You may obtain a copy of the License at   *
- *                                                              *
- *   http://www.apache.org/licenses/LICENSE-2.0                 *
- *                                                              *
- * Unless required by applicable law or agreed to in writing,   *
- * software distributed under the License is distributed on an  *
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY       *
- * KIND, either express or implied.  See the License for the    *
- * specific language governing permissions and limitations      *
- * under the License.                                           *
- */ 
-package org.apache.rat;
-
-import java.io.InputStream;
-import java.io.Reader;
-import java.io.Writer;
-
-import javax.xml.transform.Transformer;
-import javax.xml.transform.TransformerConfigurationException;
-import javax.xml.transform.TransformerException;
-import javax.xml.transform.TransformerFactory;
-import javax.xml.transform.stream.StreamResult;
-import javax.xml.transform.stream.StreamSource;
-
-
-class ReportTransformer implements Runnable {
-
-    private final Writer out;
-    private final Transformer transformer;
-    private final Reader in;
-    
-    public ReportTransformer(final Writer out, final Reader style, 
-            final Reader in) throws TransformerConfigurationException {
-        this.out = out;
-        transformer = TransformerFactory.newInstance().newTransformer(
-                new StreamSource(style));
-        this.in = in;
-    }
-    
-    public ReportTransformer(final Writer out, final InputStream style, 
-            final Reader in) throws TransformerConfigurationException {
-        this.out = out;
-        transformer = TransformerFactory.newInstance().newTransformer(
-                new StreamSource(style));
-        this.in = in;
-    }
-    
-    public void run() {
-        try {
-            transform();
-        } catch (TransformerException e) {
-            throw new ReportFailedRuntimeException(e.getMessage(), e);
-        }
-    }
-
-    public void transform() throws TransformerException {
-        transformer.transform(new StreamSource(in), new StreamResult(out));
-    }
-
-}
diff --git a/0.12-release/apache-rat-core/src/main/java/org/apache/rat/analysis/DefaultAnalyserFactory.java b/0.12-release/apache-rat-core/src/main/java/org/apache/rat/analysis/DefaultAnalyserFactory.java
deleted file mode 100644
index c8d39ff..0000000
--- a/0.12-release/apache-rat-core/src/main/java/org/apache/rat/analysis/DefaultAnalyserFactory.java
+++ /dev/null
@@ -1,65 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one   *
- * or more contributor license agreements.  See the NOTICE file *
- * distributed with this work for additional information        *
- * regarding copyright ownership.  The ASF licenses this file   *
- * to you under the Apache License, Version 2.0 (the            *
- * "License"); you may not use this file except in compliance   *
- * with the License.  You may obtain a copy of the License at   *
- *                                                              *
- *   http://www.apache.org/licenses/LICENSE-2.0                 *
- *                                                              *
- * Unless required by applicable law or agreed to in writing,   *
- * software distributed under the License is distributed on an  *
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY       *
- * KIND, either express or implied.  See the License for the    *
- * specific language governing permissions and limitations      *
- * under the License.                                           *
- */ 
-package org.apache.rat.analysis;
-
-import org.apache.rat.api.Document;
-import org.apache.rat.api.MetaData;
-import org.apache.rat.document.IDocumentAnalyser;
-import org.apache.rat.document.RatDocumentAnalysisException;
-import org.apache.rat.document.impl.guesser.ArchiveGuesser;
-import org.apache.rat.document.impl.guesser.BinaryGuesser;
-import org.apache.rat.document.impl.guesser.NoteGuesser;
-
-/**
- * Creates default analysers.
- *
- */
-public class DefaultAnalyserFactory {
-  
-    public static final IDocumentAnalyser createDefaultAnalyser(final IHeaderMatcher matcher) {
-        
-        return new DefaultAnalyser(matcher);
-    }
-    
-    private final static class DefaultAnalyser implements IDocumentAnalyser {
-
-        private final IHeaderMatcher matcher;
-        
-        public DefaultAnalyser(final IHeaderMatcher matcher) {
-            super();
-            this.matcher = matcher;
-        }
-
-        public void analyse(Document subject) throws RatDocumentAnalysisException {
-            final MetaData.Datum documentCategory;
-            if (NoteGuesser.isNote(subject)) {
-                documentCategory = MetaData.RAT_DOCUMENT_CATEGORY_DATUM_NOTICE;
-            } else if (ArchiveGuesser.isArchive(subject)) {
-                documentCategory = MetaData.RAT_DOCUMENT_CATEGORY_DATUM_ARCHIVE;
-            } else if (BinaryGuesser.isBinary(subject)) {
-                documentCategory = MetaData.RAT_DOCUMENT_CATEGORY_DATUM_BINARY;
-            } else {
-                documentCategory = MetaData.RAT_DOCUMENT_CATEGORY_DATUM_STANDARD;
-                final DocumentHeaderAnalyser headerAnalyser = new DocumentHeaderAnalyser(matcher);
-                headerAnalyser.analyse(subject);
-            }
-            subject.getMetaData().set(documentCategory);
-        }        
-    }
-}
diff --git a/0.12-release/apache-rat-core/src/main/java/org/apache/rat/analysis/DocumentHeaderAnalyser.java b/0.12-release/apache-rat-core/src/main/java/org/apache/rat/analysis/DocumentHeaderAnalyser.java
deleted file mode 100644
index e9f658c..0000000
--- a/0.12-release/apache-rat-core/src/main/java/org/apache/rat/analysis/DocumentHeaderAnalyser.java
+++ /dev/null
@@ -1,54 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one   *
- * or more contributor license agreements.  See the NOTICE file *
- * distributed with this work for additional information        *
- * regarding copyright ownership.  The ASF licenses this file   *
- * to you under the Apache License, Version 2.0 (the            *
- * "License"); you may not use this file except in compliance   *
- * with the License.  You may obtain a copy of the License at   *
- *                                                              *
- *   http://www.apache.org/licenses/LICENSE-2.0                 *
- *                                                              *
- * Unless required by applicable law or agreed to in writing,   *
- * software distributed under the License is distributed on an  *
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY       *
- * KIND, either express or implied.  See the License for the    *
- * specific language governing permissions and limitations      *
- * under the License.                                           *
- */ 
-package org.apache.rat.analysis;
-
-import org.apache.commons.io.IOUtils;
-import org.apache.rat.api.Document;
-import org.apache.rat.document.IDocumentAnalyser;
-import org.apache.rat.document.RatDocumentAnalysisException;
-
-import java.io.IOException;
-import java.io.Reader;
-
-public class DocumentHeaderAnalyser implements IDocumentAnalyser {
-
-    private final IHeaderMatcher matcher;
-    
-    public DocumentHeaderAnalyser(final IHeaderMatcher matcher) {
-        super();
-        this.matcher = matcher;
-    }
-
-    public void analyse(Document document) throws RatDocumentAnalysisException {
-        Reader reader = null;
-        try {
-            reader = document.reader();
-            // TODO: worker function should be moved into this class
-            HeaderCheckWorker worker = new HeaderCheckWorker(reader, matcher, document);
-            worker.read();
-        } catch (IOException e) {
-            throw new RatDocumentAnalysisException("Cannot read header", e);
-        } catch (RatHeaderAnalysisException e) {
-            throw new RatDocumentAnalysisException("Cannot analyse header", e);
-        } finally {
-            IOUtils.closeQuietly(reader);
-        }
-     }
-
-}
diff --git a/0.12-release/apache-rat-core/src/main/java/org/apache/rat/analysis/HeaderCheckWorker.java b/0.12-release/apache-rat-core/src/main/java/org/apache/rat/analysis/HeaderCheckWorker.java
deleted file mode 100644
index 2ae9edc..0000000
--- a/0.12-release/apache-rat-core/src/main/java/org/apache/rat/analysis/HeaderCheckWorker.java
+++ /dev/null
@@ -1,117 +0,0 @@
-package org.apache.rat.analysis;
-/*
- * Licensed to the Apache Software Foundation (ASF) under one   *
- * or more contributor license agreements.  See the NOTICE file *
- * distributed with this work for additional information        *
- * regarding copyright ownership.  The ASF licenses this file   *
- * to you under the Apache License, Version 2.0 (the            *
- * "License"); you may not use this file except in compliance   *
- * with the License.  You may obtain a copy of the License at   *
- *                                                              *
- *   http://www.apache.org/licenses/LICENSE-2.0                 *
- *                                                              *
- * Unless required by applicable law or agreed to in writing,   *
- * software distributed under the License is distributed on an  *
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY       *
- * KIND, either express or implied.  See the License for the    *
- * specific language governing permissions and limitations      *
- * under the License.                                           *
- */
-
-import org.apache.commons.io.IOUtils;
-import org.apache.rat.api.Document;
-import org.apache.rat.api.MetaData;
-
-import java.io.BufferedReader;
-import java.io.IOException;
-import java.io.Reader;
-
-/**
- * <p>Reads from a stream to check license.</p>
- * <p><strong>Note</strong> that this class is not thread safe.</p> 
- */
-class HeaderCheckWorker {
-
-    public static final int DEFAULT_NUMBER_OF_RETAINED_HEADER_LINES = 50;
-
-    private final int numberOfRetainedHeaderLines;
-    private final BufferedReader reader;
-    private final IHeaderMatcher matcher;
-    private final Document subject;
-    
-    private boolean match = false;
-
-    private int headerLinesToRead;
-    private boolean finished = false;
-
-    public HeaderCheckWorker(Reader reader, int numberOfRetainedHeaderLine,
-            final IHeaderMatcher matcher, final Document name) {
-        this(new BufferedReader(reader), numberOfRetainedHeaderLine, matcher, name);
-    }
-
-
-    /**
-     * Convenience constructor wraps given <code>Reader</code>
-     * in a <code>BufferedReader</code>.
-     * @param reader a <code>Reader</code> for the content, not null
-     * @param name the name of the checked content, possibly null
-     */
-    public HeaderCheckWorker(Reader reader, final IHeaderMatcher matcher, final Document name) {
-        this(new BufferedReader(reader), matcher, name);
-    }
-
-    public HeaderCheckWorker(BufferedReader reader, final IHeaderMatcher matcher,
-            final Document name) {
-        this(reader, DEFAULT_NUMBER_OF_RETAINED_HEADER_LINES, matcher, name);
-    }
-
-    public HeaderCheckWorker(BufferedReader reader, int numberOfRetainedHeaderLine, final IHeaderMatcher matcher,
-            final Document name) {
-        this.reader = reader;
-        this.numberOfRetainedHeaderLines = numberOfRetainedHeaderLine;
-        this.matcher = matcher;
-        this.subject = name;
-    }
-
-    public boolean isFinished() {
-        return finished;
-    }
-
-    public void read() throws RatHeaderAnalysisException {
-        if (!finished) {
-            final StringBuilder headers = new StringBuilder();
-            headerLinesToRead = numberOfRetainedHeaderLines;
-            try {
-                while(readLine(headers)) {
-                    // do nothing
-                }
-                if (!match) {
-                    final String notes = headers.toString();
-                    final MetaData metaData = subject.getMetaData();
-                    metaData.set(new MetaData.Datum(MetaData.RAT_URL_HEADER_SAMPLE, notes));
-                    metaData.set(new MetaData.Datum(MetaData.RAT_URL_HEADER_CATEGORY, MetaData.RAT_LICENSE_FAMILY_CATEGORY_VALUE_UNKNOWN));
-                    metaData.set(MetaData.RAT_LICENSE_FAMILY_NAME_DATUM_UNKNOWN);
-                }
-            } catch (IOException e) {
-                throw new RatHeaderAnalysisException("Cannot read header for " + subject, e);
-            }
-            IOUtils.closeQuietly(reader);
-            matcher.reset();
-        }
-        finished = true;
-    }
-
-    boolean readLine(StringBuilder headers) throws IOException, RatHeaderAnalysisException {
-        String line = reader.readLine();
-        boolean result = line != null;
-        if (result) {
-            if (headerLinesToRead-- > 0) {
-                headers.append(line);
-                headers.append('\n');
-            }
-            match = matcher.match(subject, line);
-            result = !match;
-        }
-        return result;
-    }
-}
diff --git a/0.12-release/apache-rat-core/src/main/java/org/apache/rat/analysis/IHeaderMatcher.java b/0.12-release/apache-rat-core/src/main/java/org/apache/rat/analysis/IHeaderMatcher.java
deleted file mode 100644
index 3ec499d..0000000
--- a/0.12-release/apache-rat-core/src/main/java/org/apache/rat/analysis/IHeaderMatcher.java
+++ /dev/null
@@ -1,45 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one   *
- * or more contributor license agreements.  See the NOTICE file *
- * distributed with this work for additional information        *
- * regarding copyright ownership.  The ASF licenses this file   *
- * to you under the Apache License, Version 2.0 (the            *
- * "License"); you may not use this file except in compliance   *
- * with the License.  You may obtain a copy of the License at   *
- *                                                              *
- *   http://www.apache.org/licenses/LICENSE-2.0                 *
- *                                                              *
- * Unless required by applicable law or agreed to in writing,   *
- * software distributed under the License is distributed on an  *
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY       *
- * KIND, either express or implied.  See the License for the    *
- * specific language governing permissions and limitations      *
- * under the License.                                           *
- */ 
-package org.apache.rat.analysis;
-
-import org.apache.rat.api.Document;
-
-/**
- * Matches text headers to known licenses.
- */
-public interface IHeaderMatcher {
-
-    /**
-     * Resets this matches.
-     * Subsequent calls to {@link #match} will accumulate new text.
-     */
-    void reset();
-
-    /**
-     * Matches the text accumulated to licenses.
-     * TODO probably a poor design choice - hope to fix later
-     * @param subject current document.
-     * @param line next line of text, not null
-     * 
-     * @return whether the current line matched in the document.
-     * 
-     * @throws RatHeaderAnalysisException in case of internal RAT errors.
-     */
-    boolean match(Document subject, String line) throws RatHeaderAnalysisException;
-}
diff --git a/0.12-release/apache-rat-core/src/main/java/org/apache/rat/analysis/RatHeaderAnalysisException.java b/0.12-release/apache-rat-core/src/main/java/org/apache/rat/analysis/RatHeaderAnalysisException.java
deleted file mode 100644
index 0e71391..0000000
--- a/0.12-release/apache-rat-core/src/main/java/org/apache/rat/analysis/RatHeaderAnalysisException.java
+++ /dev/null
@@ -1,44 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one   *
- * or more contributor license agreements.  See the NOTICE file *
- * distributed with this work for additional information        *
- * regarding copyright ownership.  The ASF licenses this file   *
- * to you under the Apache License, Version 2.0 (the            *
- * "License"); you may not use this file except in compliance   *
- * with the License.  You may obtain a copy of the License at   *
- *                                                              *
- *   http://www.apache.org/licenses/LICENSE-2.0                 *
- *                                                              *
- * Unless required by applicable law or agreed to in writing,   *
- * software distributed under the License is distributed on an  *
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY       *
- * KIND, either express or implied.  See the License for the    *
- * specific language governing permissions and limitations      *
- * under the License.                                           *
- */ 
-package org.apache.rat.analysis;
-
-/**
- * Indicates exceptional condition during header analysis.
- *
- */
-public class RatHeaderAnalysisException extends Exception {
-
-    private static final long serialVersionUID = 7613577476983281387L;
-
-    public RatHeaderAnalysisException() {
-        super();
-    }
-
-    public RatHeaderAnalysisException(String msg, Throwable cause) {
-        super(msg, cause);
-    }
-
-    public RatHeaderAnalysisException(String msg) {
-        super(msg);
-    }
-
-    public RatHeaderAnalysisException(Throwable cause) {
-        super(cause);
-    }
-}
diff --git a/0.12-release/apache-rat-core/src/main/java/org/apache/rat/analysis/RatReportAnalysisResultException.java b/0.12-release/apache-rat-core/src/main/java/org/apache/rat/analysis/RatReportAnalysisResultException.java
deleted file mode 100644
index 8ee9274..0000000
--- a/0.12-release/apache-rat-core/src/main/java/org/apache/rat/analysis/RatReportAnalysisResultException.java
+++ /dev/null
@@ -1,40 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one   *
- * or more contributor license agreements.  See the NOTICE file *
- * distributed with this work for additional information        *
- * regarding copyright ownership.  The ASF licenses this file   *
- * to you under the Apache License, Version 2.0 (the            *
- * "License"); you may not use this file except in compliance   *
- * with the License.  You may obtain a copy of the License at   *
- *                                                              *
- *   http://www.apache.org/licenses/LICENSE-2.0                 *
- *                                                              *
- * Unless required by applicable law or agreed to in writing,   *
- * software distributed under the License is distributed on an  *
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY       *
- * KIND, either express or implied.  See the License for the    *
- * specific language governing permissions and limitations      *
- * under the License.                                           *
- */ 
-package org.apache.rat.analysis;
-
-import org.apache.rat.api.RatException;
-import org.apache.rat.document.RatDocumentAnalysisException;
-
-public class RatReportAnalysisResultException extends RatDocumentAnalysisException {
-    
-    private static final long serialVersionUID = 4018716722707721989L;
-    private static final String MESSAGE = "Could not report results of analysis";
-    
-    public RatReportAnalysisResultException() {
-        super(MESSAGE);
-    }
-
-    public RatReportAnalysisResultException(RatException cause) {
-        super(MESSAGE, cause);
-    }
-
-    public RatReportAnalysisResultException(String msg, RatException cause) {
-        super(msg, cause);
-    }
-}
diff --git a/0.12-release/apache-rat-core/src/main/java/org/apache/rat/analysis/generation/GeneratedLicenseNotRequired.java b/0.12-release/apache-rat-core/src/main/java/org/apache/rat/analysis/generation/GeneratedLicenseNotRequired.java
deleted file mode 100644
index 9003fbd..0000000
--- a/0.12-release/apache-rat-core/src/main/java/org/apache/rat/analysis/generation/GeneratedLicenseNotRequired.java
+++ /dev/null
@@ -1,106 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one   *
- * or more contributor license agreements.  See the NOTICE file *
- * distributed with this work for additional information        *
- * regarding copyright ownership.  The ASF licenses this file   *
- * to you under the Apache License, Version 2.0 (the            *
- * "License"); you may not use this file except in compliance   *
- * with the License.  You may obtain a copy of the License at   *
- *                                                              *
- *   http://www.apache.org/licenses/LICENSE-2.0                 *
- *                                                              *
- * Unless required by applicable law or agreed to in writing,   *
- * software distributed under the License is distributed on an  *
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY       *
- * KIND, either express or implied.  See the License for the    *
- * specific language governing permissions and limitations      *
- * under the License.                                           *
- */ 
-package org.apache.rat.analysis.generation;
-
-import java.util.regex.Pattern;
-
-import org.apache.rat.analysis.IHeaderMatcher;
-import org.apache.rat.analysis.RatHeaderAnalysisException;
-import org.apache.rat.api.Document;
-import org.apache.rat.api.MetaData;
-
-public class GeneratedLicenseNotRequired implements IHeaderMatcher {
-
-    private static final String[] EMPTY_STRING_ARRAY = new String[0];
-
-    private static final Pattern[] EMPTY_PATTERN_ARRAY = new Pattern[0];
-
-    private static final String[] DEFAULT_PHRASES = {
-        "generated by Cayenne",
-        "Generated By:JJTree",
-        "Generated By:JavaCC",
-        "THIS FILE IS AUTOMATICALLY GENERATED",
-        "NOTE: this file is autogenerated by XBeans",
-        "This file was automatically generated by ",
-        "# WARNING: DO NOT EDIT OR DELETE THIS WORKSPACE FILE!",
-        "# Microsoft Developer Studio Generated NMAKE File",
-        "# Microsoft Developer Studio Generated Build File",
-        "Generated from configure.ac by autoheader",
-        "generated automatically by aclocal",
-        "build.xml generated by maven from project.xml",
-        "This file was generated by",
-        "This file has been automatically generated.",
-        "Automatically generated - do not modify!",
-        "Javadoc style sheet",
-        "SOURCE FILE GENERATATED",
-        "Generated by the Batik",
-        "this file is autogenerated",
-        "This class was autogenerated",
-        "Generated by Maven",
-        "Autogenerated by Thrift",
-        "DO NOT EDIT THIS FILE - it is machine generated",
-        "This class was generated by"};
-    
-    
-    // Uses either patterns or strings currently (not both)
-    private final Pattern[] linePatterns;
-    private final String[] phrases;
-    
-    public GeneratedLicenseNotRequired() {
-        this(DEFAULT_PHRASES);
-    }
-    
-    public GeneratedLicenseNotRequired(final Pattern[] linePatterns) {
-        this.linePatterns = linePatterns;
-        this.phrases = EMPTY_STRING_ARRAY;
-    }
-
-    public GeneratedLicenseNotRequired(final String[] lines) {
-        this.linePatterns = EMPTY_PATTERN_ARRAY;
-        this.phrases = lines;
-    }
-
-    public boolean match(Document subject, String line) throws RatHeaderAnalysisException {
-        boolean result = false;
-        for (Pattern pat : linePatterns) {
-            if (pat.matcher(line).matches()) {
-                result = true;
-                reportOnLicense(subject);
-                break;
-            }
-        }
-        for(String phrase : phrases) {
-            if (line.contains(phrase)) {
-                result = true;
-                reportOnLicense(subject);
-                break;
-            }                
-        }
-        return result;
-    }
-
-    private void reportOnLicense(Document subject) {
-        subject.getMetaData().set(MetaData.RAT_LICENSE_FAMILY_CATEGORY_DATUM_GEN);
-    }
-
-    public void reset() {
-        // stateless
-    }
-
-}
diff --git a/0.12-release/apache-rat-core/src/main/java/org/apache/rat/analysis/generation/JavaDocLicenseNotRequired.java b/0.12-release/apache-rat-core/src/main/java/org/apache/rat/analysis/generation/JavaDocLicenseNotRequired.java
deleted file mode 100644
index d165b8e..0000000
--- a/0.12-release/apache-rat-core/src/main/java/org/apache/rat/analysis/generation/JavaDocLicenseNotRequired.java
+++ /dev/null
@@ -1,49 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one   *
- * or more contributor license agreements.  See the NOTICE file *
- * distributed with this work for additional information        *
- * regarding copyright ownership.  The ASF licenses this file   *
- * to you under the Apache License, Version 2.0 (the            *
- * "License"); you may not use this file except in compliance   *
- * with the License.  You may obtain a copy of the License at   *
- *                                                              *
- *   http://www.apache.org/licenses/LICENSE-2.0                 *
- *                                                              *
- * Unless required by applicable law or agreed to in writing,   *
- * software distributed under the License is distributed on an  *
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY       *
- * KIND, either express or implied.  See the License for the    *
- * specific language governing permissions and limitations      *
- * under the License.                                           *
- */ 
-package org.apache.rat.analysis.generation;
-
-import org.apache.rat.analysis.IHeaderMatcher;
-import org.apache.rat.analysis.RatHeaderAnalysisException;
-import org.apache.rat.api.Document;
-import org.apache.rat.api.MetaData;
-
-/**
- * JavaDocs are generated and so no license is required.
- * It is useful to note these separately.
- */
-public class JavaDocLicenseNotRequired implements IHeaderMatcher {
-
-    private static final String JAVADOC_REGEX_DEFN = "Generated by javadoc";
-    
-    public boolean match(Document subject, String line) throws RatHeaderAnalysisException {
-        boolean result = line.contains(JAVADOC_REGEX_DEFN);
-        if (result) {
-            reportOnLicense(subject);
-        }
-        return result;
-    }
-
-    private void reportOnLicense(Document subject) {
-        subject.getMetaData().set(MetaData.RAT_LICENSE_FAMILY_CATEGORY_DATUM_GEN);
-    }
-    
-    public void reset() {
-        // stateless
-    }
-}
diff --git a/0.12-release/apache-rat-core/src/main/java/org/apache/rat/analysis/license/ApacheSoftwareLicense20.java b/0.12-release/apache-rat-core/src/main/java/org/apache/rat/analysis/license/ApacheSoftwareLicense20.java
deleted file mode 100644
index 9897a52..0000000
--- a/0.12-release/apache-rat-core/src/main/java/org/apache/rat/analysis/license/ApacheSoftwareLicense20.java
+++ /dev/null
@@ -1,35 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one   *
- * or more contributor license agreements.  See the NOTICE file *
- * distributed with this work for additional information        *
- * regarding copyright ownership.  The ASF licenses this file   *
- * to you under the Apache License, Version 2.0 (the            *
- * "License"); you may not use this file except in compliance   *
- * with the License.  You may obtain a copy of the License at   *
- *                                                              *
- *   http://www.apache.org/licenses/LICENSE-2.0                 *
- *                                                              *
- * Unless required by applicable law or agreed to in writing,   *
- * software distributed under the License is distributed on an  *
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY       *
- * KIND, either express or implied.  See the License for the    *
- * specific language governing permissions and limitations      *
- * under the License.                                           *
- */ 
-package org.apache.rat.analysis.license;
-
-import org.apache.rat.api.MetaData;
-
-/**
- * Matches Apache License, Version 2.0
- *
- */
-public final class ApacheSoftwareLicense20 extends SimplePatternBasedLicense {
-    public static final String FIRST_LICENSE_LINE = "Licensed under the Apache License, Version 2.0 (the \"License\")";
-    public static final String LICENSE_REFERENCE_LINE = "http://www.apache.org/licenses/LICENSE-2.0";
-
-    public ApacheSoftwareLicense20() {
-        super(MetaData.RAT_LICENSE_FAMILY_CATEGORY_DATUM_ASL, MetaData.RAT_LICENSE_FAMILY_NAME_DATUM_APACHE_LICENSE_VERSION_2_0,
-                "", new String[]{FIRST_LICENSE_LINE, LICENSE_REFERENCE_LINE});
-    }
-}
diff --git a/0.12-release/apache-rat-core/src/main/java/org/apache/rat/analysis/license/AppliedApacheSoftwareLicense20.java b/0.12-release/apache-rat-core/src/main/java/org/apache/rat/analysis/license/AppliedApacheSoftwareLicense20.java
deleted file mode 100644
index c2250d1..0000000
--- a/0.12-release/apache-rat-core/src/main/java/org/apache/rat/analysis/license/AppliedApacheSoftwareLicense20.java
+++ /dev/null
@@ -1,74 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one   *
- * or more contributor license agreements.  See the NOTICE file *
- * distributed with this work for additional information        *
- * regarding copyright ownership.  The ASF licenses this file   *
- * to you under the Apache License, Version 2.0 (the            *
- * "License"); you may not use this file except in compliance   *
- * with the License.  You may obtain a copy of the License at   *
- *                                                              *
- *   http://www.apache.org/licenses/LICENSE-2.0                 *
- *                                                              *
- * Unless required by applicable law or agreed to in writing,   *
- * software distributed under the License is distributed on an  *
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY       *
- * KIND, either express or implied.  See the License for the    *
- * specific language governing permissions and limitations      *
- * under the License.                                           *
- */
-package org.apache.rat.analysis.license;
-
-import org.apache.rat.analysis.RatHeaderAnalysisException;
-import org.apache.rat.api.Document;
-import org.apache.rat.api.MetaData;
-
-/**
- * Matches an applied AL 2.0 License header, including a <em>required</em>
- * initial copyright header line, conforming the <a href="http://apache.org/licenses/LICENSE-2.0.html#apply">template</a>
- * from the AL 2.0 license itself.
- *
- * @since Rat 0.9
- */
-public class AppliedApacheSoftwareLicense20 extends CopyrightHeader {
-
-    public static final String ASL20_LICENSE_DEFN
-            = "Licensed under the Apache License, Version 2.0 (the \"License\");\n"
-            + "you may not use this file except in compliance with the License.\n"
-            + "You may obtain a copy of the License at\n"
-            + "http://www.apache.org/licenses/LICENSE-2.0\n"
-            + "Unless required by applicable law or agreed to in writing, software\n"
-            + "distributed under the License is distributed on an \"AS IS\" BASIS,\n"
-            + "WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n"
-            + "See the License for the specific language governing permissions and\n"
-            + "limitations under the License.\n";
-
-    private final FullTextMatchingLicense textMatcher;
-
-    public AppliedApacheSoftwareLicense20() {
-        super(MetaData.RAT_LICENSE_FAMILY_CATEGORY_DATUM_ASL, MetaData.RAT_LICENSE_FAMILY_NAME_DATUM_APACHE_LICENSE_VERSION_2_0,"");
-        textMatcher = new FullTextMatchingLicense(MetaData.RAT_LICENSE_FAMILY_CATEGORY_DATUM_ASL, MetaData.RAT_LICENSE_FAMILY_NAME_DATUM_APACHE_LICENSE_VERSION_2_0,"",ASL20_LICENSE_DEFN);
-    }
-
-    public AppliedApacheSoftwareLicense20(String copyrightOwner) {
-        this();
-        setCopyrightOwner(copyrightOwner);
-    }
-
-    @Override
-    public boolean match(Document subject, String s) throws RatHeaderAnalysisException {
-        boolean result = false;
-        if (isCopyrightMatch()) {
-            return textMatcher.match(subject, s); // will report the match if it has occurred
-        }
-        else {
-            matchCopyright(s);
-        }
-        return result;
-    }
-
-    @Override
-    public void reset() {
-        super.reset();
-        textMatcher.reset();
-    }
-}
diff --git a/0.12-release/apache-rat-core/src/main/java/org/apache/rat/analysis/license/BaseLicense.java b/0.12-release/apache-rat-core/src/main/java/org/apache/rat/analysis/license/BaseLicense.java
deleted file mode 100644
index fe55b96..0000000
--- a/0.12-release/apache-rat-core/src/main/java/org/apache/rat/analysis/license/BaseLicense.java
+++ /dev/null
@@ -1,92 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one   *
- * or more contributor license agreements.  See the NOTICE file *
- * distributed with this work for additional information        *
- * regarding copyright ownership.  The ASF licenses this file   *
- * to you under the Apache License, Version 2.0 (the            *
- * "License"); you may not use this file except in compliance   *
- * with the License.  You may obtain a copy of the License at   *
- *                                                              *
- *   http://www.apache.org/licenses/LICENSE-2.0                 *
- *                                                              *
- * Unless required by applicable law or agreed to in writing,   *
- * software distributed under the License is distributed on an  *
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY       *
- * KIND, either express or implied.  See the License for the    *
- * specific language governing permissions and limitations      *
- * under the License.                                           *
- */ 
-package org.apache.rat.analysis.license;
-
-import org.apache.rat.api.Document;
-import org.apache.rat.api.MetaData;
-
-public class BaseLicense {
-    private String licenseFamilyCategory;
-    private String licenseFamilyName;
-    private String notes;
-
-    public BaseLicense() {
-    }
-
-    public BaseLicense(final MetaData.Datum licenseFamilyCategory, final MetaData.Datum licenseFamilyName, final String notes)
-    {
-        if (!MetaData.RAT_URL_LICENSE_FAMILY_CATEGORY.equals(licenseFamilyCategory.getName())) {
-            throw new IllegalStateException("Expected " + MetaData.RAT_URL_LICENSE_FAMILY_CATEGORY
-                    + ", got " + licenseFamilyCategory.getName());
-        }
-        setLicenseFamilyCategory(licenseFamilyCategory.getValue());
-        if (!MetaData.RAT_URL_LICENSE_FAMILY_NAME.equals(licenseFamilyName.getName())) {
-            throw new IllegalStateException("Expected " + MetaData.RAT_URL_LICENSE_FAMILY_NAME
-                    + ", got " + licenseFamilyName.getName());
-        }
-        setLicenseFamilyName(licenseFamilyName.getValue());
-        setNotes(notes);
-    }
-
-    public String getLicenseFamilyCategory() {
-        return licenseFamilyCategory;
-    }
-
-    public void setLicenseFamilyCategory(String pDocumentCategory) {
-        licenseFamilyCategory = pDocumentCategory;
-    }
-
-    public String getLicenseFamilyName() {
-        return licenseFamilyName;
-    }
-
-    public void setLicenseFamilyName(String pLicenseFamilyCategory) {
-        licenseFamilyName = pLicenseFamilyCategory;
-    }
-
-    public String getNotes() {
-        return notes;
-    }
-
-    public void setNotes(String pNotes) {
-        notes = pNotes;
-    }
-
-    public final void reportOnLicense(Document subject) {
-        final MetaData metaData = subject.getMetaData();
-        metaData.set(new MetaData.Datum(MetaData.RAT_URL_HEADER_SAMPLE, notes));
-        final String licFamilyCategory = getLicenseFamilyCategory();
-        metaData.set(new MetaData.Datum(MetaData.RAT_URL_HEADER_CATEGORY, licFamilyCategory));
-        metaData.set(new MetaData.Datum(MetaData.RAT_URL_LICENSE_FAMILY_CATEGORY, licFamilyCategory));
-        metaData.set(new MetaData.Datum(MetaData.RAT_URL_LICENSE_FAMILY_NAME, getLicenseFamilyName()));
-    }
-
-    protected static final String prune(String text) {
-        final int length = text.length();
-        final StringBuilder buffer = new StringBuilder(length);
-        for (int i = 0; i < length; i++) {
-            char at = text.charAt(i);
-            if (Character.isLetterOrDigit(at)) {
-                buffer.append(at);
-            }
-        }
-        return buffer.toString();
-    }
-
-}
diff --git a/0.12-release/apache-rat-core/src/main/java/org/apache/rat/analysis/license/CDDL1License.java b/0.12-release/apache-rat-core/src/main/java/org/apache/rat/analysis/license/CDDL1License.java
deleted file mode 100644
index d731ef5..0000000
--- a/0.12-release/apache-rat-core/src/main/java/org/apache/rat/analysis/license/CDDL1License.java
+++ /dev/null
@@ -1,67 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one   *
- * or more contributor license agreements.  See the NOTICE file *
- * distributed with this work for additional information        *
- * regarding copyright ownership.  The ASF licenses this file   *
- * to you under the Apache License, Version 2.0 (the            *
- * "License"); you may not use this file except in compliance   *
- * with the License.  You may obtain a copy of the License at   *
- *                                                              *
- *   http://www.apache.org/licenses/LICENSE-2.0                 *
- *                                                              *
- * Unless required by applicable law or agreed to in writing,   *
- * software distributed under the License is distributed on an  *
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY       *
- * KIND, either express or implied.  See the License for the    *
- * specific language governing permissions and limitations      *
- * under the License.                                           *
- */
-package org.apache.rat.analysis.license;
-
-import org.apache.rat.analysis.IHeaderMatcher;
-import org.apache.rat.analysis.RatHeaderAnalysisException;
-import org.apache.rat.api.Document;
-import org.apache.rat.api.MetaData;
-
-/**
- * Base CDDL 1.0 license.
- */
-public class CDDL1License extends BaseLicense implements IHeaderMatcher {
-
-    public static final String CDDL1_LICENSE_DEFN
-            = "The contents of this file are subject to the terms of the Common Development\n"
-            + "and Distribution License(\"CDDL\") (the \"License\"). You may not use this file\n"
-            + "except in compliance with the License.\n\n";
-
-    public static final String CDDL1_LICENSE_DEFN_ILLUMOS_STYLE
-            = "The contents of this file are subject to the terms of the\n"
-            + "Common Development and Distribution License (the \"License\")\n"
-            + "You may not use this file except in compliance with the License.\n";
-
-    private final FullTextMatchingLicense textMatcherBase;
-    private final FullTextMatchingLicense textMatcherIllumosStyle;
-
-
-    public CDDL1License() {
-        super(MetaData.RAT_LICENSE_FAMILY_CATEGORY_DATUM_CDLL1,
-                MetaData.RAT_LICENSE_FAMILY_NAME_DATUM_CDDL1,
-                "");
-        textMatcherBase = new FullTextMatchingLicense(MetaData.RAT_LICENSE_FAMILY_CATEGORY_DATUM_CDLL1,
-                MetaData.RAT_LICENSE_FAMILY_NAME_DATUM_CDDL1,
-                "", CDDL1_LICENSE_DEFN);
-        textMatcherIllumosStyle = new FullTextMatchingLicense(MetaData.RAT_LICENSE_FAMILY_CATEGORY_DATUM_CDLL1,
-                MetaData.RAT_LICENSE_FAMILY_NAME_DATUM_CDDL1,
-                "", CDDL1_LICENSE_DEFN_ILLUMOS_STYLE);
-    }
-
-    public boolean match(Document subject, String s) throws RatHeaderAnalysisException {
-        return textMatcherBase.match(subject, s) ||
-                textMatcherIllumosStyle.match(subject, s);
-    }
-
-    public void reset() {
-        textMatcherBase.reset();
-        textMatcherIllumosStyle.reset();
-    }
-
-}
diff --git a/0.12-release/apache-rat-core/src/main/java/org/apache/rat/analysis/license/CopyrightHeader.java b/0.12-release/apache-rat-core/src/main/java/org/apache/rat/analysis/license/CopyrightHeader.java
deleted file mode 100644
index 38ae7ee..0000000
--- a/0.12-release/apache-rat-core/src/main/java/org/apache/rat/analysis/license/CopyrightHeader.java
+++ /dev/null
@@ -1,102 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one   *
- * or more contributor license agreements.  See the NOTICE file *
- * distributed with this work for additional information        *
- * regarding copyright ownership.  The ASF licenses this file   *
- * to you under the Apache License, Version 2.0 (the            *
- * "License"); you may not use this file except in compliance   *
- * with the License.  You may obtain a copy of the License at   *
- *                                                              *
- *   http://www.apache.org/licenses/LICENSE-2.0                 *
- *                                                              *
- * Unless required by applicable law or agreed to in writing,   *
- * software distributed under the License is distributed on an  *
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY       *
- * KIND, either express or implied.  See the License for the    *
- * specific language governing permissions and limitations      *
- * under the License.                                           *
- */
-package org.apache.rat.analysis.license;
-
-import org.apache.rat.analysis.IHeaderMatcher;
-import org.apache.rat.analysis.RatHeaderAnalysisException;
-import org.apache.rat.api.Document;
-import org.apache.rat.api.MetaData.Datum;
-
-import java.util.regex.Pattern;
-
-/**
- * Matches a typical Copyright header line only based on a regex pattern
- * which allows for one (starting) year or year range, and a
- * configurable copyright owner.
- * <br>
- * <br>The matching is done case insensitive<br>
- * <br>
- * Example supported Copyright header lines, using copyright owner &quot;FooBar&quot;
- * <ul>
- * <li>* Copyright 2010 FooBar. *</li>
- * <li>* Copyright 2010-2012 FooBar. *</li>
- * <li>*copyright 2012 foobar*</li>
- * </ul>
- * <p>Note also that the copyright owner is appended to the regex pattern, so
- * can support additional regex but also requires escaping where needed,<p>
- * e.g. use &quot;FooBar \(www\.foobar\.com\)&quot; for matching &quot;FooBar (www.foobar.com)&quot;<p>
- *
- * @since Rat 0.9
- */
-public class CopyrightHeader extends BaseLicense implements IHeaderMatcher {
-
-    public static final String COPYRIGHT_PREFIX_PATTERN_DEFN = ".*Copyright [0-9]{4}(\\-[0-9]{4})? ";
-
-    private Pattern copyrightPattern;
-    private String copyrightOwner;
-    private boolean copyrightMatch = false;
-
-    public CopyrightHeader() {
-    }
-
-    protected CopyrightHeader(Datum licenseFamilyCategory, Datum licenseFamilyName, String notes) {
-        super(licenseFamilyCategory, licenseFamilyName, notes);
-    }
-
-    protected CopyrightHeader(Datum licenseFamilyCategory, Datum licenseFamilyName, String notes, String copyrightOwner) {
-        this(licenseFamilyCategory, licenseFamilyName, notes);
-        setCopyrightOwner(copyrightOwner);
-    }
-
-    // Called by ctor, so must not be overridden
-    public final void setCopyrightOwner(String copyrightOwner) {
-        this.copyrightOwner = copyrightOwner;
-        this.copyrightPattern = Pattern.compile(COPYRIGHT_PREFIX_PATTERN_DEFN + copyrightOwner + ".*", Pattern.CASE_INSENSITIVE);
-    }
-
-    public String getCopyRightOwner() {
-        return copyrightOwner;
-    }
-
-    public boolean hasCopyrightPattern() {
-        return copyrightPattern != null;
-    }
-
-    protected boolean isCopyrightMatch() {
-        return copyrightMatch;
-    }
-
-    protected boolean matchCopyright(String s) {
-        if (!copyrightMatch) {
-            copyrightMatch = copyrightPattern.matcher(s).matches();
-        }
-        return copyrightMatch;
-    }
-
-    public boolean match(Document subject, String s) throws RatHeaderAnalysisException {
-        if (!copyrightMatch && matchCopyright(s)) {
-            reportOnLicense(subject);
-        }
-        return copyrightMatch;
-    }
-
-    public void reset() {
-        copyrightMatch = false;
-    }
-}
diff --git a/0.12-release/apache-rat-core/src/main/java/org/apache/rat/analysis/license/DojoLicenseHeader.java b/0.12-release/apache-rat-core/src/main/java/org/apache/rat/analysis/license/DojoLicenseHeader.java
deleted file mode 100644
index a5c00d5..0000000
--- a/0.12-release/apache-rat-core/src/main/java/org/apache/rat/analysis/license/DojoLicenseHeader.java
+++ /dev/null
@@ -1,41 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one   *
- * or more contributor license agreements.  See the NOTICE file *
- * distributed with this work for additional information        *
- * regarding copyright ownership.  The ASF licenses this file   *
- * to you under the Apache License, Version 2.0 (the            *
- * "License"); you may not use this file except in compliance   *
- * with the License.  You may obtain a copy of the License at   *
- *                                                              *
- *   http://www.apache.org/licenses/LICENSE-2.0                 *
- *                                                              *
- * Unless required by applicable law or agreed to in writing,   *
- * software distributed under the License is distributed on an  *
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY       *
- * KIND, either express or implied.  See the License for the    *
- * specific language governing permissions and limitations      *
- * under the License.                                           *
- */ 
-package org.apache.rat.analysis.license;
-
-import org.apache.rat.api.MetaData;
-
-
-public class DojoLicenseHeader extends SimplePatternBasedLicense {
-    private static final String LICENSE_URL  = "http://dojotoolkit.org/community/licensing.shtml";
-    
-    //  Copyright (c) 2004-2006, The Dojo Foundation
-    // All Rights Reserved.
-    //
-    // Licensed under the Academic Free License version 2.1 or above OR the
-    // modified BSD license. For more information on Dojo licensing, see:
-    //
-    //    http://dojotoolkit.org/community/licensing.shtml
-
-    public DojoLicenseHeader() {
-        // TODO: support for dual licensing
-        // TODO: support for or higher clauses
-        super(MetaData.RAT_LICENSE_FAMILY_CATEGORY_DATUM_DOJO, MetaData.RAT_LICENSE_FAMILY_NAME_DATUM_MODIFIED_BSD_LICENSE, "Dual license AFL/BSD",
-                new String[]{LICENSE_URL});
-    }
-}
diff --git a/0.12-release/apache-rat-core/src/main/java/org/apache/rat/analysis/license/FullTextMatchingLicense.java b/0.12-release/apache-rat-core/src/main/java/org/apache/rat/analysis/license/FullTextMatchingLicense.java
deleted file mode 100644
index 2bc595d..0000000
--- a/0.12-release/apache-rat-core/src/main/java/org/apache/rat/analysis/license/FullTextMatchingLicense.java
+++ /dev/null
@@ -1,120 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one   *
- * or more contributor license agreements.  See the NOTICE file *
- * distributed with this work for additional information        *
- * regarding copyright ownership.  The ASF licenses this file   *
- * to you under the Apache License, Version 2.0 (the            *
- * "License"); you may not use this file except in compliance   *
- * with the License.  You may obtain a copy of the License at   *
- *                                                              *
- *   http://www.apache.org/licenses/LICENSE-2.0                 *
- *                                                              *
- * Unless required by applicable law or agreed to in writing,   *
- * software distributed under the License is distributed on an  *
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY       *
- * KIND, either express or implied.  See the License for the    *
- * specific language governing permissions and limitations      *
- * under the License.                                           *
- */ 
-package org.apache.rat.analysis.license;
-
-import java.util.Locale;
-
-import org.apache.rat.analysis.IHeaderMatcher;
-import org.apache.rat.analysis.RatHeaderAnalysisException;
-import org.apache.rat.api.Document;
-import org.apache.rat.api.MetaData.Datum;
-
-/**
- * Accumulates all letters and numbers contained inside the header and
- * compares it to the full text of a given license (after reducing it
- * to letters and numbers as well).
- *
- * <p>The text comparison is case insensitive but assumes only
- * characters in the US-ASCII charset are being matched.</p>
- *
- * @since Rat 0.9
- */
-public class FullTextMatchingLicense extends BaseLicense
-    implements IHeaderMatcher {
-
-    // Number of match characters assumed to be present on first line
-    private static final int DEFAULT_INITIAL_LINE_LENGTH = 20;
-
-    private String fullText;
-    
-    private String firstLine;
-
-    private boolean seenFirstLine = false;
-
-    private final StringBuilder buffer = new StringBuilder();
-
-    public FullTextMatchingLicense() {
-    }
-
-    protected FullTextMatchingLicense(Datum licenseFamilyCategory,
-                                      Datum licenseFamilyName,
-                                      String notes,
-                                      String fullText) {
-        super(licenseFamilyCategory, licenseFamilyName, notes);
-        setFullText(fullText);
-    }
-
-    public final void setFullText(String text) {
-        int offset = text.indexOf('\n');
-        if (offset == -1) {
-            offset = Math.min(DEFAULT_INITIAL_LINE_LENGTH, text.length());
-        }
-        firstLine = prune(text.substring(0, offset)).toLowerCase(Locale.ENGLISH);
-        fullText = prune(text).toLowerCase(Locale.ENGLISH);
-        init();
-    }
-
-    public final boolean hasFullText() {
-        return fullText != null;
-    }
-
-    public boolean match(Document subject, String line) throws RatHeaderAnalysisException {
-        final String inputToMatch = prune(line).toLowerCase(Locale.ENGLISH);
-        if (seenFirstLine) { // Accumulate more input
-            buffer.append(inputToMatch);
-        } else {
-            int offset = inputToMatch.indexOf(firstLine);
-            if (offset >= 0) {
-                // we have a match, save the text starting with the match
-                buffer.append(inputToMatch.substring(offset));
-                seenFirstLine = true;
-                // Drop out to check whether full text is matched
-            } else {
-                // we assume that the first line must appear in a single line
-                return false; // no more to do here
-            }
-        }
- 
-        if (buffer.length() >= fullText.length()) { // we have enough data to match
-            if (buffer.toString().contains(fullText)) {
-                reportOnLicense(subject);
-                return true; // we found a match
-            } else { // buffer contains first line but does not contain full text
-                // It's possible that the buffer contains the first line again
-                int offset = buffer.substring(1).toString().indexOf(firstLine);
-                if (offset >= 0) { // first line found again
-                    buffer.delete(0,offset); // reset buffer to the new start
-                } else { // buffer does not even contain first line, so cannot be used to match full text
-                    init();
-                }
-            }
-        }
-        return false;
-    }
-
-    public void reset() {
-        init();
-    }
-
-    // This is called indirectly from a ctor so must be final or private
-    private void init() {
-        buffer.setLength(0);
-        seenFirstLine = false;
-    }
-}
\ No newline at end of file
diff --git a/0.12-release/apache-rat-core/src/main/java/org/apache/rat/analysis/license/GPL1License.java b/0.12-release/apache-rat-core/src/main/java/org/apache/rat/analysis/license/GPL1License.java
deleted file mode 100644
index 5c94092..0000000
--- a/0.12-release/apache-rat-core/src/main/java/org/apache/rat/analysis/license/GPL1License.java
+++ /dev/null
@@ -1,37 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one   *
- * or more contributor license agreements.  See the NOTICE file *
- * distributed with this work for additional information        *
- * regarding copyright ownership.  The ASF licenses this file   *
- * to you under the Apache License, Version 2.0 (the            *
- * "License"); you may not use this file except in compliance   *
- * with the License.  You may obtain a copy of the License at   *
- *                                                              *
- *   http://www.apache.org/licenses/LICENSE-2.0                 *
- *                                                              *
- * Unless required by applicable law or agreed to in writing,   *
- * software distributed under the License is distributed on an  *
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY       *
- * KIND, either express or implied.  See the License for the    *
- * specific language governing permissions and limitations      *
- * under the License.                                           *
- */
-package org.apache.rat.analysis.license;
-
-import org.apache.rat.api.MetaData;
-
-/**
- * License matches GPL1 or later.
- */
-public class GPL1License extends FullTextMatchingLicense {
-    public static final String FIRST_LICENSE_LINE = "This program is free software; you can redistribute it and/or modify\n" +
-            " it under the terms of the GNU General Public License as published by\n" +
-            " the Free Software Foundation; either version 1, or (at your option)\n" +
-            " any later version.";
-
-    public GPL1License() {
-        super(MetaData.RAT_LICENSE_FAMILY_CATEGORY_DATUM_GPL1,
-                MetaData.RAT_LICENSE_FAMILY_NAME_DATUM_GPL_VERSION_1,
-                "", FIRST_LICENSE_LINE);
-    }
-}
\ No newline at end of file
diff --git a/0.12-release/apache-rat-core/src/main/java/org/apache/rat/analysis/license/GPL2License.java b/0.12-release/apache-rat-core/src/main/java/org/apache/rat/analysis/license/GPL2License.java
deleted file mode 100644
index ed92592..0000000
--- a/0.12-release/apache-rat-core/src/main/java/org/apache/rat/analysis/license/GPL2License.java
+++ /dev/null
@@ -1,37 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one   *
- * or more contributor license agreements.  See the NOTICE file *
- * distributed with this work for additional information        *
- * regarding copyright ownership.  The ASF licenses this file   *
- * to you under the Apache License, Version 2.0 (the            *
- * "License"); you may not use this file except in compliance   *
- * with the License.  You may obtain a copy of the License at   *
- *                                                              *
- *   http://www.apache.org/licenses/LICENSE-2.0                 *
- *                                                              *
- * Unless required by applicable law or agreed to in writing,   *
- * software distributed under the License is distributed on an  *
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY       *
- * KIND, either express or implied.  See the License for the    *
- * specific language governing permissions and limitations      *
- * under the License.                                           *
- */
-package org.apache.rat.analysis.license;
-
-import org.apache.rat.api.MetaData;
-
-/**
- * License matches GPL2 or later.
- */
-public class GPL2License extends FullTextMatchingLicense {
-    public static final String FIRST_LICENSE_LINE = "This program is free software; you can redistribute it and/or\n" +
-            " modify it under the terms of the GNU General Public License\n" +
-            " as published by the Free Software Foundation; either version 2\n" +
-            " of the License, or (at your option) any later version.";
-
-    public GPL2License() {
-        super(MetaData.RAT_LICENSE_FAMILY_CATEGORY_DATUM_GPL2,
-                MetaData.RAT_LICENSE_FAMILY_NAME_DATUM_GPL_VERSION_2,
-                "", FIRST_LICENSE_LINE);
-    }
-}
diff --git a/0.12-release/apache-rat-core/src/main/java/org/apache/rat/analysis/license/GPL3License.java b/0.12-release/apache-rat-core/src/main/java/org/apache/rat/analysis/license/GPL3License.java
deleted file mode 100644
index c9a84fd..0000000
--- a/0.12-release/apache-rat-core/src/main/java/org/apache/rat/analysis/license/GPL3License.java
+++ /dev/null
@@ -1,37 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one   *
- * or more contributor license agreements.  See the NOTICE file *
- * distributed with this work for additional information        *
- * regarding copyright ownership.  The ASF licenses this file   *
- * to you under the Apache License, Version 2.0 (the            *
- * "License"); you may not use this file except in compliance   *
- * with the License.  You may obtain a copy of the License at   *
- *                                                              *
- *   http://www.apache.org/licenses/LICENSE-2.0                 *
- *                                                              *
- * Unless required by applicable law or agreed to in writing,   *
- * software distributed under the License is distributed on an  *
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY       *
- * KIND, either express or implied.  See the License for the    *
- * specific language governing permissions and limitations      *
- * under the License.                                           *
- */
-package org.apache.rat.analysis.license;
-
-import org.apache.rat.api.MetaData;
-
-/**
- * License matches GPL3 or later.
- */
-public class GPL3License extends FullTextMatchingLicense {
-    public static final String FIRST_LICENSE_LINE = "This program is free software: you can redistribute it and/or modify\n" +
-            " it under the terms of the GNU General Public License as published by\n" +
-            " the Free Software Foundation, either version 3 of the License, or\n" +
-            " (at your option) any later version.";
-
-    public GPL3License() {
-        super(MetaData.RAT_LICENSE_FAMILY_CATEGORY_DATUM_GPL3,
-                MetaData.RAT_LICENSE_FAMILY_NAME_DATUM_GPL_VERSION_3,
-                "", FIRST_LICENSE_LINE);
-    }
-}
diff --git a/0.12-release/apache-rat-core/src/main/java/org/apache/rat/analysis/license/MITLicense.java b/0.12-release/apache-rat-core/src/main/java/org/apache/rat/analysis/license/MITLicense.java
deleted file mode 100644
index d622470..0000000
--- a/0.12-release/apache-rat-core/src/main/java/org/apache/rat/analysis/license/MITLicense.java
+++ /dev/null
@@ -1,36 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one   *
- * or more contributor license agreements.  See the NOTICE file *
- * distributed with this work for additional information        *
- * regarding copyright ownership.  The ASF licenses this file   *
- * to you under the Apache License, Version 2.0 (the            *
- * "License"); you may not use this file except in compliance   *
- * with the License.  You may obtain a copy of the License at   *
- *                                                              *
- *   http://www.apache.org/licenses/LICENSE-2.0                 *
- *                                                              *
- * Unless required by applicable law or agreed to in writing,   *
- * software distributed under the License is distributed on an  *
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY       *
- * KIND, either express or implied.  See the License for the    *
- * specific language governing permissions and limitations      *
- * under the License.                                           *
- */ 
-package org.apache.rat.analysis.license;
-
-import org.apache.rat.api.MetaData;
-
-/**
- * Base MIT license (all 3 parts).
- */
-public class MITLicense extends FullTextMatchingLicense {
-    public static final String FIRST_LICENSE_LINE = "Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the \"Software\"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:";
-    public static final String MIDDLE_LICENSE_LINE = "The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.";
-    public static final String AS_IS_LICENSE_LINE = "THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.";
-
-    public MITLicense() {
-        super(MetaData.RAT_LICENSE_FAMILY_CATEGORY_DATUM_MIT,
-                MetaData.RAT_LICENSE_FAMILY_NAME_DATUM_MIT,
-                "", FIRST_LICENSE_LINE + MIDDLE_LICENSE_LINE + AS_IS_LICENSE_LINE);
-    }
-}
diff --git a/0.12-release/apache-rat-core/src/main/java/org/apache/rat/analysis/license/OASISLicense.java b/0.12-release/apache-rat-core/src/main/java/org/apache/rat/analysis/license/OASISLicense.java
deleted file mode 100644
index 234dfef..0000000
--- a/0.12-release/apache-rat-core/src/main/java/org/apache/rat/analysis/license/OASISLicense.java
+++ /dev/null
@@ -1,66 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one   *
- * or more contributor license agreements.  See the NOTICE file *
- * distributed with this work for additional information        *
- * regarding copyright ownership.  The ASF licenses this file   *
- * to you under the Apache License, Version 2.0 (the            *
- * "License"); you may not use this file except in compliance   *
- * with the License.  You may obtain a copy of the License at   *
- *                                                              *
- *   http://www.apache.org/licenses/LICENSE-2.0                 *
- *                                                              *
- * Unless required by applicable law or agreed to in writing,   *
- * software distributed under the License is distributed on an  *
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY       *
- * KIND, either express or implied.  See the License for the    *
- * specific language governing permissions and limitations      *
- * under the License.                                           *
- */ 
-package org.apache.rat.analysis.license;
-
-import java.util.regex.Pattern;
-
-import org.apache.rat.analysis.RatHeaderAnalysisException;
-import org.apache.rat.api.Document;
-import org.apache.rat.api.MetaData;
-
-/**
- * Looks for documents contain the OASIS copyright claim plus derivative work clause.
- * Perhaps need to match more.
- */
-public class OASISLicense extends FullTextMatchingLicense {
-
-    private static final String COPYRIGHT_PATTERN_DEFN = ".*Copyright\\s.*OASIS Open.*";
-    private static final String CLAUSE_DEFN
-    = "This document and translations of it may be copied and furnished to others and derivative works" +
-            "that comment on or otherwise explain it or assist in its implementation may be prepared" +
-            "copied published and distributed";
-    
-    private static final Pattern COPYRIGHT_PATTERN = Pattern.compile(COPYRIGHT_PATTERN_DEFN);
-
-    boolean copyrightMatch = false;
-    
-    public OASISLicense() {
-        super(MetaData.RAT_LICENSE_FAMILY_CATEGORY_DATUM_OASIS,
-              MetaData.RAT_LICENSE_FAMILY_NAME_DATUM_OASIS_OPEN_LICENSE,
-              "No modifications allowed",
-              CLAUSE_DEFN);
-    }
-
-    @Override
-    public boolean match(Document subject, String line) throws RatHeaderAnalysisException {
-        boolean result = false;
-        if (copyrightMatch) {
-            result = super.match(subject, line);
-        } else {
-            copyrightMatch = COPYRIGHT_PATTERN.matcher(line).matches();
-        }
-        return result;
-    }
-
-    @Override
-    public void reset() {
-        copyrightMatch = false;
-        super.reset();
-    }
-}
diff --git a/0.12-release/apache-rat-core/src/main/java/org/apache/rat/analysis/license/SimplePatternBasedLicense.java b/0.12-release/apache-rat-core/src/main/java/org/apache/rat/analysis/license/SimplePatternBasedLicense.java
deleted file mode 100644
index c750eb0..0000000
--- a/0.12-release/apache-rat-core/src/main/java/org/apache/rat/analysis/license/SimplePatternBasedLicense.java
+++ /dev/null
@@ -1,75 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one   *
- * or more contributor license agreements.  See the NOTICE file *
- * distributed with this work for additional information        *
- * regarding copyright ownership.  The ASF licenses this file   *
- * to you under the Apache License, Version 2.0 (the            *
- * "License"); you may not use this file except in compliance   *
- * with the License.  You may obtain a copy of the License at   *
- *                                                              *
- *   http://www.apache.org/licenses/LICENSE-2.0                 *
- *                                                              *
- * Unless required by applicable law or agreed to in writing,   *
- * software distributed under the License is distributed on an  *
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY       *
- * KIND, either express or implied.  See the License for the    *
- * specific language governing permissions and limitations      *
- * under the License.                                           *
- */ 
-package org.apache.rat.analysis.license;
-
-import org.apache.rat.analysis.IHeaderMatcher;
-import org.apache.rat.analysis.RatHeaderAnalysisException;
-import org.apache.rat.api.Document;
-import org.apache.rat.api.MetaData.Datum;
-
-
-/**
- * @since Rat 0.8
- */
-public class SimplePatternBasedLicense extends BaseLicense implements IHeaderMatcher {
-    private String[] patterns;
-
-    public SimplePatternBasedLicense() {
-    }
-
-    protected SimplePatternBasedLicense(Datum pLicenseFamilyCategory, Datum pLicenseFamilyName,
-            String pNotes, String[] pPatterns) {
-        super(pLicenseFamilyCategory, pLicenseFamilyName, pNotes);
-        setPatterns(pPatterns);
-    }
-    
-    public String[] getPatterns() {
-        return patterns;
-    }
-
-    public void setPatterns(String[] pPatterns) {
-        patterns = pPatterns;
-    }
-
-    protected boolean matches(String pLine) {
-        if (pLine != null) {
-            final String[] pttrns = getPatterns();
-            if (pttrns != null) {
-                for (String pttrn : pttrns) {
-                    if (pLine.indexOf(pttrn, 0) >= 0) {
-                        return true;
-                    }
-                }
-            }
-        }
-        return false;
-    }
-    
-    public void reset() {
-        // Nothing to do
-    }
-
-    public boolean match(Document pSubject, String pLine) throws RatHeaderAnalysisException {
-        final boolean result = matches(pLine);
-        if (result) {
-            reportOnLicense(pSubject);
-        }
-        return result;
-    }
-}
diff --git a/0.12-release/apache-rat-core/src/main/java/org/apache/rat/analysis/license/TMF854LicenseHeader.java b/0.12-release/apache-rat-core/src/main/java/org/apache/rat/analysis/license/TMF854LicenseHeader.java
deleted file mode 100644
index 3b49595..0000000
--- a/0.12-release/apache-rat-core/src/main/java/org/apache/rat/analysis/license/TMF854LicenseHeader.java
+++ /dev/null
@@ -1,35 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one   *
- * or more contributor license agreements.  See the NOTICE file *
- * distributed with this work for additional information        *
- * regarding copyright ownership.  The ASF licenses this file   *
- * to you under the Apache License, Version 2.0 (the            *
- * "License"); you may not use this file except in compliance   *
- * with the License.  You may obtain a copy of the License at   *
- *                                                              *
- *   http://www.apache.org/licenses/LICENSE-2.0                 *
- *                                                              *
- * Unless required by applicable law or agreed to in writing,   *
- * software distributed under the License is distributed on an  *
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY       *
- * KIND, either express or implied.  See the License for the    *
- * specific language governing permissions and limitations      *
- * under the License.                                           *
- */ 
-package org.apache.rat.analysis.license;
-
-import org.apache.rat.api.MetaData;
-
-
-public class TMF854LicenseHeader extends SimplePatternBasedLicense {
-    
-    private static final String COPYRIGHT_HEADER = "TMF854 Version 1.0 - Copyright TeleManagement Forum";
-    
-    //  TMF854 Version 1.0 - Copyright TeleManagement Forum 
-
-    public TMF854LicenseHeader() {
-        super(MetaData.RAT_LICENSE_FAMILY_CATEGORY_DATUM_TMF, 
-                MetaData.RAT_LICENSE_FAMILY_NAME_DATUM_MODIFIED_BSD_LICENSE, "BSD",
-                new String[]{COPYRIGHT_HEADER});
-    }
-}
diff --git a/0.12-release/apache-rat-core/src/main/java/org/apache/rat/analysis/license/W3CDocLicense.java b/0.12-release/apache-rat-core/src/main/java/org/apache/rat/analysis/license/W3CDocLicense.java
deleted file mode 100644
index af51a03..0000000
--- a/0.12-release/apache-rat-core/src/main/java/org/apache/rat/analysis/license/W3CDocLicense.java
+++ /dev/null
@@ -1,35 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- *
- *   http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-package org.apache.rat.analysis.license;
-
-import org.apache.rat.api.MetaData;
-
-public class W3CDocLicense extends SimplePatternBasedLicense {
-
-    private static final String NOTES 
-        = "Note that W3CD does not allow modifications. See http://www.w3.org/Consortium/Legal/2002/copyright-documents-20021231.";
-    private static final String COPYRIGHT_URL 
-    = "http://www.w3.org/Consortium/Legal/2002/copyright-documents-20021231";
-    
-    public W3CDocLicense() {
-        super(MetaData.RAT_LICENSE_FAMILY_CATEGORY_DATUM_W3CD, 
-                MetaData.RAT_LICENSE_FAMILY_NAME_DATUM_W3C_DOCUMENT_COPYRIGHT,  NOTES,
-                new String[]{COPYRIGHT_URL});
-    }
-}
diff --git a/0.12-release/apache-rat-core/src/main/java/org/apache/rat/analysis/license/W3CLicense.java b/0.12-release/apache-rat-core/src/main/java/org/apache/rat/analysis/license/W3CLicense.java
deleted file mode 100644
index 4325397..0000000
--- a/0.12-release/apache-rat-core/src/main/java/org/apache/rat/analysis/license/W3CLicense.java
+++ /dev/null
@@ -1,36 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one   *
- * or more contributor license agreements.  See the NOTICE file *
- * distributed with this work for additional information        *
- * regarding copyright ownership.  The ASF licenses this file   *
- * to you under the Apache License, Version 2.0 (the            *
- * "License"); you may not use this file except in compliance   *
- * with the License.  You may obtain a copy of the License at   *
- *                                                              *
- *   http://www.apache.org/licenses/LICENSE-2.0                 *
- *                                                              *
- * Unless required by applicable law or agreed to in writing,   *
- * software distributed under the License is distributed on an  *
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY       *
- * KIND, either express or implied.  See the License for the    *
- * specific language governing permissions and limitations      *
- * under the License.                                           *
- */ 
-package org.apache.rat.analysis.license;
-
-import org.apache.rat.api.MetaData;
-
-public class W3CLicense extends SimplePatternBasedLicense {
-
-    private static final String NOTES 
-        = "Note that W3C requires a NOTICE. All modifications require notes. See http://www.w3.org/Consortium/Legal/2002/copyright-software-20021231.";
-    private static final String COPYRIGHT_URL 
-    = "http://www.w3.org/Consortium/Legal/2002/copyright-software-20021231";
-    
-    public W3CLicense() {
-        super(MetaData.RAT_LICENSE_FAMILY_CATEGORY_DATUM_W3C, 
-                MetaData.RAT_LICENSE_FAMILY_NAME_DATUM_W3C_SOFTWARE_COPYRIGHT,  NOTES,
-                new String[]{COPYRIGHT_URL});
-        
-    }
-}
diff --git a/0.12-release/apache-rat-core/src/main/java/org/apache/rat/analysis/util/HeaderMatcherMultiplexer.java b/0.12-release/apache-rat-core/src/main/java/org/apache/rat/analysis/util/HeaderMatcherMultiplexer.java
deleted file mode 100644
index ed3eb73..0000000
--- a/0.12-release/apache-rat-core/src/main/java/org/apache/rat/analysis/util/HeaderMatcherMultiplexer.java
+++ /dev/null
@@ -1,56 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one   *
- * or more contributor license agreements.  See the NOTICE file *
- * distributed with this work for additional information        *
- * regarding copyright ownership.  The ASF licenses this file   *
- * to you under the Apache License, Version 2.0 (the            *
- * "License"); you may not use this file except in compliance   *
- * with the License.  You may obtain a copy of the License at   *
- *                                                              *
- *   http://www.apache.org/licenses/LICENSE-2.0                 *
- *                                                              *
- * Unless required by applicable law or agreed to in writing,   *
- * software distributed under the License is distributed on an  *
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY       *
- * KIND, either express or implied.  See the License for the    *
- * specific language governing permissions and limitations      *
- * under the License.                                           *
- */ 
-package org.apache.rat.analysis.util;
-
-import org.apache.rat.analysis.IHeaderMatcher;
-import org.apache.rat.analysis.RatHeaderAnalysisException;
-import org.apache.rat.api.Document;
-
-import java.util.List;
-
-/**
- * Delegates to an ordered set of matchers.
- *
- */
-public final class HeaderMatcherMultiplexer implements IHeaderMatcher {
-
-    private final List<IHeaderMatcher> matchers;
-
-    public HeaderMatcherMultiplexer(final List<IHeaderMatcher> matchers) {
-        this.matchers = matchers;
-    }
-
-    public boolean match(Document subject, String line) throws RatHeaderAnalysisException {
-        boolean result = false;
-        for (IHeaderMatcher matcher : matchers) {
-            result = matcher.match(subject, line);
-            if (result) {
-                break;
-            }
-        }
-        return result;
-    }
-
-    public void reset() {
-        for (IHeaderMatcher matcher : matchers) {
-            matcher.reset();
-        }
-    }
-
-}
diff --git a/0.12-release/apache-rat-core/src/main/java/org/apache/rat/annotation/AbstractLicenseAppender.java b/0.12-release/apache-rat-core/src/main/java/org/apache/rat/annotation/AbstractLicenseAppender.java
deleted file mode 100644
index 65c9042..0000000
--- a/0.12-release/apache-rat-core/src/main/java/org/apache/rat/annotation/AbstractLicenseAppender.java
+++ /dev/null
@@ -1,620 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one   *
- * or more contributor license agreements.  See the NOTICE file *
- * distributed with this work for additional information        *
- * regarding copyright ownership.  The ASF licenses this file   *
- * to you under the Apache License, Version 2.0 (the            *
- * "License"); you may not use this file except in compliance   *
- * with the License.  You may obtain a copy of the License at   *
- *                                                              *
- *   http://www.apache.org/licenses/LICENSE-2.0                 *
- *                                                              *
- * Unless required by applicable law or agreed to in writing,   *
- * software distributed under the License is distributed on an  *
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY       *
- * KIND, either express or implied.  See the License for the    *
- * specific language governing permissions and limitations      *
- * under the License.                                           *
- */
-package org.apache.rat.annotation;
-
-import org.apache.commons.io.IOUtils;
-
-import java.io.BufferedReader;
-import java.io.File;
-import java.io.FileInputStream;
-import java.io.FileWriter;
-import java.io.FilterInputStream;
-import java.io.IOException;
-import java.io.InputStream;
-import java.io.InputStreamReader;
-import java.io.Writer;
-import java.util.Arrays;
-import java.util.HashMap;
-import java.util.Map;
-
-/**
- * Add a license header to a document. This appender does not check for the
- * existence of an existing license header, it is assumed that either a second
- * license header is intentional or that there is no license header present
- * already.
- */
-public abstract class AbstractLicenseAppender {
-    private static final String DOT = ".";
-    private static final int TYPE_UNKNOWN = 0;
-    private static final int TYPE_JAVA = 1;
-    private static final int TYPE_XML = 2;
-    private static final int TYPE_HTML = 3;
-    private static final int TYPE_CSS = 4;
-    private static final int TYPE_JAVASCRIPT = 5;
-    private static final int TYPE_APT = 6;
-    private static final int TYPE_PROPERTIES = 7;
-    private static final int TYPE_PYTHON = 8;
-    private static final int TYPE_C = 9;
-    private static final int TYPE_H = 10;
-    private static final int TYPE_SH = 11;
-    private static final int TYPE_BAT = 12;
-    private static final int TYPE_VM = 13;
-    private static final int TYPE_SCALA = 14;
-    private static final int TYPE_RUBY = 15;
-    private static final int TYPE_PERL = 16;
-    private static final int TYPE_TCL = 17;
-    private static final int TYPE_CPP = 18;
-    private static final int TYPE_CSHARP = 19;
-    private static final int TYPE_PHP = 20;
-    private static final int TYPE_GROOVY = 21;
-    private static final int TYPE_VISUAL_STUDIO_SOLUTION = 22;
-    private static final int TYPE_BEANSHELL = 23;
-    private static final int TYPE_JSP = 24;
-    private static final int TYPE_FML = 25;
-
-    /**
-     * the line separator for this OS
-     */
-    private static final String LINE_SEP = System.getProperty("line.separator");
-
-    private static final int[] FAMILY_C = new int[]{
-            TYPE_JAVA, TYPE_JAVASCRIPT, TYPE_C, TYPE_H, TYPE_SCALA,
-            TYPE_CSS, TYPE_CPP, TYPE_CSHARP, TYPE_PHP, TYPE_GROOVY,
-            TYPE_BEANSHELL,
-    };
-    private static final int[] FAMILY_SGML = new int[]{
-            TYPE_XML, TYPE_HTML, TYPE_JSP, TYPE_FML,
-    };
-    private static final int[] FAMILY_SH = new int[]{
-            TYPE_PROPERTIES, TYPE_PYTHON, TYPE_SH, TYPE_RUBY, TYPE_PERL,
-            TYPE_TCL, TYPE_VISUAL_STUDIO_SOLUTION,
-    };
-    private static final int[] FAMILY_BAT = new int[]{
-            TYPE_BAT,
-    };
-    private static final int[] FAMILY_APT = new int[]{
-            TYPE_APT,
-    };
-    private static final int[] FAMILY_VELOCITY = new int[]{
-            TYPE_VM,
-    };
-    private static final int[] EXPECTS_HASH_PLING = new int[]{
-            TYPE_PYTHON, TYPE_SH, TYPE_RUBY, TYPE_PERL, TYPE_TCL
-    };
-    private static final int[] EXPECTS_AT_ECHO = new int[]{
-            TYPE_BAT,
-    };
-    private static final int[] EXPECTS_PACKAGE = new int[]{
-            TYPE_JAVA,
-    };
-    private static final int[] EXPECTS_XML_DECL = new int[]{
-            TYPE_XML,
-    };
-    private static final int[] EXPECTS_PHP_PI = new int[]{
-            TYPE_PHP,
-    };
-    private static final int[] EXPECTS_MSVSSF_HEADER = new int[]{
-            TYPE_VISUAL_STUDIO_SOLUTION,
-    };
-
-    private static final Map<String, Integer> EXT2TYPE = new HashMap<String, Integer>();
-
-    static {
-        // these arrays are used in Arrays.binarySearch so they must
-        // be sorted
-        Arrays.sort(FAMILY_C);
-        Arrays.sort(FAMILY_SGML);
-        Arrays.sort(FAMILY_SH);
-        Arrays.sort(FAMILY_BAT);
-        Arrays.sort(FAMILY_APT);
-        Arrays.sort(FAMILY_VELOCITY);
-
-        Arrays.sort(EXPECTS_HASH_PLING);
-        Arrays.sort(EXPECTS_AT_ECHO);
-        Arrays.sort(EXPECTS_PACKAGE);
-        Arrays.sort(EXPECTS_XML_DECL);
-        Arrays.sort(EXPECTS_MSVSSF_HEADER);
-
-        EXT2TYPE.put("apt", Integer.valueOf(TYPE_APT));
-        EXT2TYPE.put("asax", Integer.valueOf(TYPE_HTML));
-        EXT2TYPE.put("ascx", Integer.valueOf(TYPE_HTML));
-        EXT2TYPE.put("aspx", Integer.valueOf(TYPE_HTML));
-        EXT2TYPE.put("bat", Integer.valueOf(TYPE_BAT));
-        EXT2TYPE.put("bsh", Integer.valueOf(TYPE_BEANSHELL));
-        EXT2TYPE.put("c", Integer.valueOf(TYPE_C));
-        EXT2TYPE.put("cc", Integer.valueOf(TYPE_CPP));
-        EXT2TYPE.put("cmd", Integer.valueOf(TYPE_BAT));
-        EXT2TYPE.put("config", Integer.valueOf(TYPE_XML));
-        EXT2TYPE.put("cpp", Integer.valueOf(TYPE_CPP));
-        EXT2TYPE.put("cs", Integer.valueOf(TYPE_CSHARP));
-        EXT2TYPE.put("csdproj", Integer.valueOf(TYPE_XML));
-        EXT2TYPE.put("csproj", Integer.valueOf(TYPE_XML));
-        EXT2TYPE.put("css", Integer.valueOf(TYPE_CSS));
-        EXT2TYPE.put("fxcop", Integer.valueOf(TYPE_XML));
-        EXT2TYPE.put("fml", Integer.valueOf(TYPE_FML));
-        EXT2TYPE.put("groovy", Integer.valueOf(TYPE_GROOVY));
-        EXT2TYPE.put("h", Integer.valueOf(TYPE_H));
-        EXT2TYPE.put("hh", Integer.valueOf(TYPE_H));
-        EXT2TYPE.put("hpp", Integer.valueOf(TYPE_H));
-        EXT2TYPE.put("htm", Integer.valueOf(TYPE_HTML));
-        EXT2TYPE.put("html", Integer.valueOf(TYPE_HTML));
-        EXT2TYPE.put("java", Integer.valueOf(TYPE_JAVA));
-        EXT2TYPE.put("js", Integer.valueOf(TYPE_JAVASCRIPT));
-        EXT2TYPE.put("jsp", Integer.valueOf(TYPE_JSP));
-        EXT2TYPE.put("ndoc", Integer.valueOf(TYPE_XML));
-        EXT2TYPE.put("nunit", Integer.valueOf(TYPE_XML));
-        EXT2TYPE.put("php", Integer.valueOf(TYPE_PHP));
-        EXT2TYPE.put("pl", Integer.valueOf(TYPE_PERL));
-        EXT2TYPE.put("properties", Integer.valueOf(TYPE_PROPERTIES));
-        EXT2TYPE.put("py", Integer.valueOf(TYPE_PYTHON));
-        EXT2TYPE.put("rb", Integer.valueOf(TYPE_RUBY));
-        EXT2TYPE.put("rdf", Integer.valueOf(TYPE_XML));
-        EXT2TYPE.put("resx", Integer.valueOf(TYPE_XML));
-        EXT2TYPE.put("scala", Integer.valueOf(TYPE_SCALA));
-        EXT2TYPE.put("sh", Integer.valueOf(TYPE_SH));
-        EXT2TYPE.put("shfbproj", Integer.valueOf(TYPE_XML));
-        EXT2TYPE.put("sln", Integer.valueOf(TYPE_VISUAL_STUDIO_SOLUTION));
-        EXT2TYPE.put("stylecop", Integer.valueOf(TYPE_XML));
-        EXT2TYPE.put("svg", Integer.valueOf(TYPE_XML));
-        EXT2TYPE.put("tcl", Integer.valueOf(TYPE_TCL));
-        EXT2TYPE.put("vbdproj", Integer.valueOf(TYPE_XML));
-        EXT2TYPE.put("vbproj", Integer.valueOf(TYPE_XML));
-        EXT2TYPE.put("vcproj", Integer.valueOf(TYPE_XML));
-        EXT2TYPE.put("vm", Integer.valueOf(TYPE_VM));
-        EXT2TYPE.put("vsdisco", Integer.valueOf(TYPE_XML));
-        EXT2TYPE.put("webinfo", Integer.valueOf(TYPE_XML));
-        EXT2TYPE.put("xml", Integer.valueOf(TYPE_XML));
-        EXT2TYPE.put("xsl", Integer.valueOf(TYPE_XML));
-    }
-
-    private boolean isForced;
-
-    public AbstractLicenseAppender() {
-        super();
-    }
-
-    /**
-     * Append the default license header to the supplied document.
-     *
-     * @param document document to append to.
-     * @throws IOException if there is a problem while reading or writing the file
-     */
-    public void append(File document) throws IOException {
-        int type = getType(document);
-        if (type == TYPE_UNKNOWN) {
-            return;
-        }
-
-        boolean expectsHashPling = expectsHashPling(type);
-        boolean expectsAtEcho = expectsAtEcho(type);
-        boolean expectsPackage = expectsPackage(type);
-        boolean expectsXMLDecl = expectsXMLDecl(type);
-        boolean expectsPhpPI = expectsPhpPI(type);
-        boolean expectsMSVSSF = expectsMSVisualStudioSolutionFileHeader(type);
-
-        File newDocument = new File(document.getAbsolutePath() + ".new");
-        FileWriter writer = new FileWriter(newDocument);
-        try {
-            if (!attachLicense(writer, document,
-                    expectsHashPling, expectsAtEcho, expectsPackage,
-                    expectsXMLDecl, expectsPhpPI, expectsMSVSSF)) {
-                // Java File without package, XML file without decl or PHP
-                // file without PI
-                // for Java just place the license at the front, for XML add
-                // an XML decl first - don't know how to handle PHP
-                if (expectsPackage || expectsXMLDecl) {
-                    writer = new FileWriter(newDocument);
-                    if (expectsXMLDecl) {
-                        writer.write("<?xml version='1.0'?>");
-                        writer.write(LINE_SEP);
-                    }
-                    attachLicense(writer, document,
-                            false, false, false, false, false, false);
-                }
-            }
-        } finally {
-            IOUtils.closeQuietly(writer);
-        }
-
-        if (isForced) {
-            boolean deleted = document.delete();
-            if (!deleted) {
-                System.err.println("Could not delete original file to prepare renaming.");
-            }
-            boolean renamed = newDocument.renameTo(document.getAbsoluteFile());
-            if (!renamed) {
-                System.err.println("Failed to rename new file, original file remains unchanged.");
-            }
-        }
-    }
-
-    /**
-     * Write document's content to writer attaching the license using
-     * the given flags as hints for where to put it.
-     *
-     * @return whether the license has actually been written
-     */
-    private boolean attachLicense(Writer writer, File document,
-                                  boolean expectsHashPling,
-                                  boolean expectsAtEcho,
-                                  boolean expectsPackage,
-                                  boolean expectsXMLDecl,
-                                  boolean expectsPhpPI,
-                                  boolean expectsMSVSSF)
-            throws IOException {
-        boolean written = false;
-        FileInputStream fis = null;
-        BufferedReader br = null;
-        try {
-            fis = new FileInputStream(document);
-            br = new BufferedReader(new InputStreamReader(new BOMInputStream(fis)));
-
-            if (!expectsHashPling
-                    && !expectsAtEcho
-                    && !expectsPackage
-                    && !expectsXMLDecl
-                    && !expectsPhpPI
-                    && !expectsMSVSSF) {
-                written = true;
-                writer.write(getLicenseHeader(document));
-                writer.write(LINE_SEP);
-            }
-
-            String line;
-            boolean first = true;
-            while ((line = br.readLine()) != null) {
-                if (first && expectsHashPling) {
-                    written = true;
-                    doFirstLine(document, writer, line, "#!");
-                } else if (first && expectsAtEcho) {
-                    written = true;
-                    doFirstLine(document, writer, line, "@echo");
-                } else if (first && expectsMSVSSF) {
-                    written = true;
-                    if ("".equals(line)) {
-                        line = passThroughReadNext(writer, line, br);
-                    }
-                    if (line.startsWith("Microsoft Visual Studio Solution"
-                            + " File")) {
-                        line = passThroughReadNext(writer, line, br);
-                    }
-                    doFirstLine(document, writer, line, "# Visual ");
-                } else {
-                    writer.write(line);
-                    writer.write(LINE_SEP);
-                }
-
-                if (expectsPackage && line.startsWith("package ")) {
-                    written = true;
-                    writer.write(LINE_SEP);
-                    writer.write(getLicenseHeader(document));
-                    writer.write(LINE_SEP);
-                } else if (expectsXMLDecl && line.startsWith("<?xml ")) {
-                    written = true;
-                    writer.write(LINE_SEP);
-                    writer.write(getLicenseHeader(document));
-                    writer.write(LINE_SEP);
-                } else if (expectsPhpPI && line.startsWith("<?php")) {
-                    written = true;
-                    writer.write(LINE_SEP);
-                    writer.write(getLicenseHeader(document));
-                    writer.write(LINE_SEP);
-                }
-                first = false;
-            }
-        } finally {
-            IOUtils.closeQuietly(br);
-            IOUtils.closeQuietly(fis);
-            IOUtils.closeQuietly(writer);
-        }
-        return written;
-    }
-
-    /**
-     * Check first line for specified text and process.
-     */
-    private void doFirstLine(File document, Writer writer, String line, String lookfor) throws IOException {
-        if (line.startsWith(lookfor)) {
-            writer.write(line);
-            writer.write(LINE_SEP);
-            writer.write(getLicenseHeader(document));
-        } else {
-            writer.write(getLicenseHeader(document));
-            writer.write(line);
-            writer.write(LINE_SEP);
-        }
-    }
-
-    /**
-     * Detect the type of document.
-     *
-     * @param document to retrieve type from.
-     * @return not null
-     * TODO use existing mechanism to detect the type of a file and record it in the report output, thus we will not need this duplication here.
-     */
-    protected int getType(File document) {
-        String path = document.getPath();
-        int lastDot = path.lastIndexOf(DOT);
-        if (lastDot >= 0 && lastDot < path.length() - 1) {
-            String ext = path.substring(lastDot + 1);
-            Integer type = EXT2TYPE.get(ext);
-            if (type != null) {
-                return type.intValue();
-            }
-        }
-        return TYPE_UNKNOWN;
-    }
-
-    /**
-     * Set the force flag on this appender. If this flag is set
-     * to true then files will be modified directly, otherwise
-     * new files will be created alongside the existing files.
-     *
-     * @param force force flag.
-     */
-    public void setForce(boolean force) {
-        isForced = force;
-    }
-
-    /**
-     * @param document document to extract from.
-     * @return Get the license header of a document.
-     */
-    public abstract String getLicenseHeader(File document);
-
-    /**
-     * Get the first line of the license header formatted
-     * for the given type of file.
-     *
-     * @param type the type of file, see the TYPE_* constants
-     * @return not null
-     */
-    protected String getFirstLine(int type) {
-        if (isFamilyC(type)) {
-            return "/*" + LINE_SEP;
-        } else if (isFamilySGML(type)) {
-            return "<!--" + LINE_SEP;
-        }
-        return "";
-    }
-
-
-    /**
-     * Get the last line of the license header formatted
-     * for the given type of file.
-     *
-     * @param type the type of file, see the TYPE_* constants
-     * @return not null
-     */
-    protected String getLastLine(int type) {
-        if (isFamilyC(type)) {
-            return " */" + LINE_SEP;
-        } else if (isFamilySGML(type)) {
-            return "-->" + LINE_SEP;
-        }
-        return "";
-    }
-
-
-    /**
-     * Get a line of the license header formatted
-     * for the given type of file.
-     *
-     * @param type    the type of file, see the TYPE_* constants
-     * @param content the content for this line
-     * @return not null
-     */
-    protected String getLine(int type, String content) {
-        if (isFamilyC(type)) {
-            return " * " + content + LINE_SEP;
-        } else if (isFamilySGML(type)) {
-            return content + LINE_SEP;
-        } else if (isFamilyAPT(type)) {
-            return "~~ " + content + LINE_SEP;
-        } else if (isFamilySH(type)) {
-            return "# " + content + LINE_SEP;
-        } else if (isFamilyBAT(type)) {
-            return "rem " + content + LINE_SEP;
-        } else if (isFamilyVelocity(type)) {
-            return "## " + content + LINE_SEP;
-        }
-        return "";
-    }
-
-    private static boolean isFamilyC(int type) {
-        return isIn(FAMILY_C, type);
-    }
-
-    private static boolean isFamilySGML(int type) {
-        return isIn(FAMILY_SGML, type);
-    }
-
-    private static boolean isFamilySH(int type) {
-        return isIn(FAMILY_SH, type);
-    }
-
-    private static boolean isFamilyAPT(int type) {
-        return isIn(FAMILY_APT, type);
-    }
-
-    private static boolean isFamilyBAT(int type) {
-        return isIn(FAMILY_BAT, type);
-    }
-
-    private static boolean isFamilyVelocity(int type) {
-        return isIn(FAMILY_VELOCITY, type);
-    }
-
-    private static boolean expectsHashPling(int type) {
-        return isIn(EXPECTS_HASH_PLING, type);
-    }
-
-    private static boolean expectsAtEcho(int type) {
-        return isIn(EXPECTS_AT_ECHO, type);
-    }
-
-    private static boolean expectsPackage(int type) {
-        return isIn(EXPECTS_PACKAGE, type);
-    }
-
-    private static boolean expectsXMLDecl(int type) {
-        return isIn(EXPECTS_XML_DECL, type);
-    }
-
-    private static boolean expectsPhpPI(int type) {
-        return isIn(EXPECTS_PHP_PI, type);
-    }
-
-    private static boolean expectsMSVisualStudioSolutionFileHeader(int type) {
-        return isIn(EXPECTS_MSVSSF_HEADER, type);
-    }
-
-    private static boolean isIn(int[] arr, int key) {
-        return Arrays.binarySearch(arr, key) >= 0;
-    }
-
-    private String passThroughReadNext(Writer writer, String line,
-                                       BufferedReader br) throws IOException {
-        writer.write(line);
-        writer.write(LINE_SEP);
-        String l = br.readLine();
-        return l == null ? "" : l;
-    }
-}
-
-/**
- * Stripped down version of Commons IO 2.0's BOMInputStream.
- */
-class BOMInputStream extends FilterInputStream {
-    private int[] firstBytes;
-    private int fbLength, fbIndex, markFbIndex;
-    private boolean markedAtStart;
-    private static final int[][] BOMS = {
-            new int[]{0xEF, 0xBB, 0xBF}, // UTF-8
-            new int[]{0xFE, 0xFF}, // UTF-16BE
-            new int[]{0xFF, 0xFE}, // UTF-16LE
-    };
-
-    BOMInputStream(InputStream s) {
-        super(s);
-    }
-
-    @Override
-    public int read() throws IOException {
-        int b = readFirstBytes();
-        return (b >= 0) ? b : in.read();
-    }
-
-    @Override
-    public int read(byte[] buf, int off, int len) throws IOException {
-        int firstCount = 0;
-        int b = 0;
-        while ((len > 0) && (b >= 0)) {
-            b = readFirstBytes();
-            if (b >= 0) {
-                buf[off++] = (byte) (b & 0xFF);
-                len--;
-                firstCount++;
-            }
-        }
-        int secondCount = in.read(buf, off, len);
-        return (secondCount < 0)
-                ? (firstCount > 0 ? firstCount : -1) : firstCount + secondCount;
-    }
-
-    @Override
-    public int read(byte[] buf) throws IOException {
-        return read(buf, 0, buf.length);
-    }
-
-    private int readFirstBytes() throws IOException {
-        getBOM();
-        return (fbIndex < fbLength) ? firstBytes[fbIndex++] : -1;
-    }
-
-    private void getBOM() throws IOException {
-        if (firstBytes == null) {
-            int max = 0;
-            for (int[] BOM : BOMS) {
-                max = Math.max(max, BOM.length);
-            }
-            firstBytes = new int[max];
-            for (int i = 0; i < firstBytes.length; i++) {
-                firstBytes[i] = in.read();
-                fbLength++;
-                if (firstBytes[i] < 0) {
-                    break;
-                }
-
-                boolean found = find();
-                if (found) {
-                    fbLength = 0;
-                    break;
-                }
-            }
-        }
-    }
-
-    @Override
-    public synchronized void mark(int readlimit) {
-        markFbIndex = fbIndex;
-        markedAtStart = (firstBytes == null);
-        in.mark(readlimit);
-    }
-
-    @Override
-    public synchronized void reset() throws IOException {
-        fbIndex = markFbIndex;
-        if (markedAtStart) {
-            firstBytes = null;
-        }
-
-        in.reset();
-    }
-
-    @Override
-    public long skip(long n) throws IOException {
-        while ((n > 0) && (readFirstBytes() >= 0)) {
-            n--;
-        }
-        return in.skip(n);
-    }
-
-    private boolean find() {
-        for (int[] BOM : BOMS) {
-            if (matches(BOM)) {
-                return true;
-            }
-        }
-        return false;
-    }
-
-    private boolean matches(int[] bom) {
-        if (bom.length != fbLength) {
-            return false;
-        }
-        for (int i = 0; i < bom.length; i++) {
-            if (bom[i] != firstBytes[i]) {
-                return false;
-            }
-        }
-        return true;
-    }
-
-}
diff --git a/0.12-release/apache-rat-core/src/main/java/org/apache/rat/annotation/ApacheV2LicenseAppender.java b/0.12-release/apache-rat-core/src/main/java/org/apache/rat/annotation/ApacheV2LicenseAppender.java
deleted file mode 100644
index 64509cc..0000000
--- a/0.12-release/apache-rat-core/src/main/java/org/apache/rat/annotation/ApacheV2LicenseAppender.java
+++ /dev/null
@@ -1,98 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one   *
- * or more contributor license agreements.  See the NOTICE file *
- * distributed with this work for additional information        *
- * regarding copyright ownership.  The ASF licenses this file   *
- * to you under the Apache License, Version 2.0 (the            *
- * "License"); you may not use this file except in compliance   *
- * with the License.  You may obtain a copy of the License at   *
- *                                                              *
- *   http://www.apache.org/licenses/LICENSE-2.0                 *
- *                                                              *
- * Unless required by applicable law or agreed to in writing,   *
- * software distributed under the License is distributed on an  *
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY       *
- * KIND, either express or implied.  See the License for the    *
- * specific language governing permissions and limitations      *
- * under the License.                                           *
- */
-package org.apache.rat.annotation;
-
-import java.io.File;
-
-
-/**
- * Add an Apache License V2 license header to a
- * document. This appender does not check for the
- * existence of an existing license header, it is assumed that either a second
- * license header is intentional or that there is no license header present
- * already.
- */
-public class ApacheV2LicenseAppender extends AbstractLicenseAppender {
-
-    private String copyright;
-
-    /**
-     * Create a license appender with the standard ASF license header.
-     */
-    public ApacheV2LicenseAppender() {
-        super();
-    }
-
-    /**
-     * Create a license appender with the given copyright line. This should be of
-     * the form &quot;Copyright 2008 Foo&quot;
-     *
-     * @param copyright copyright line.
-     */
-    public ApacheV2LicenseAppender(String copyright) {
-        super();
-        this.copyright = copyright;
-    }
-
-    @Override
-    public String getLicenseHeader(File document) {
-        int type = getType(document);
-        StringBuilder sb = new StringBuilder();
-        if (copyright == null) {
-            sb.append(getFirstLine(type));
-            sb.append(getLine(type, "Licensed to the Apache Software Foundation (ASF) under one"));
-            sb.append(getLine(type, "or more contributor license agreements.  See the NOTICE file"));
-            sb.append(getLine(type, "distributed with this work for additional information"));
-            sb.append(getLine(type, "regarding copyright ownership.  The ASF licenses this file"));
-            sb.append(getLine(type, "to you under the Apache License, Version 2.0 (the"));
-            sb.append(getLine(type, "\"License\"); you may not use this file except in compliance"));
-            sb.append(getLine(type, "with the License.  You may obtain a copy of the License at"));
-            sb.append(getLine(type, ""));
-            sb.append(getLine(type, "  http://www.apache.org/licenses/LICENSE-2.0"));
-            sb.append(getLine(type, ""));
-            sb.append(getLine(type, "Unless required by applicable law or agreed to in writing,"));
-            sb.append(getLine(type, "software distributed under the License is distributed on an"));
-            sb.append(getLine(type, "\"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY"));
-            sb.append(getLine(type, "KIND, either express or implied.  See the License for the"));
-            sb.append(getLine(type, "specific language governing permissions and limitations"));
-            sb.append(getLine(type, "under the License."));
-            sb.append(getLastLine(type));
-        } else {
-            sb.append(getFirstLine(type));
-            sb.append(getLine(type, copyright));
-            sb.append(getLine(type, ""));
-            sb.append(getLine(type, "Licensed under the Apache License, Version 2.0 (the \"License\");"));
-            sb.append(getLine(type, "you may not use this file except in compliance with the License."));
-            sb.append(getLine(type, "You may obtain a copy of the License at"));
-            sb.append(getLine(type, ""));
-            sb.append(getLine(type, "  http://www.apache.org/licenses/LICENSE-2.0"));
-            sb.append(getLine(type, ""));
-            sb.append(getLine(type, "Unless required by applicable law or agreed to in writing,"));
-            sb.append(getLine(type, "software distributed under the License is distributed on an"));
-            sb.append(getLine(type, "\"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY"));
-            sb.append(getLine(type, "KIND, either express or implied.  See the License for the"));
-            sb.append(getLine(type, "specific language governing permissions and limitations"));
-            sb.append(getLine(type, "under the License."));
-            sb.append(getLastLine(type));
-        }
-        return sb.toString();
-    }
-
-
-}
diff --git a/0.12-release/apache-rat-core/src/main/java/org/apache/rat/api/ContentType.java b/0.12-release/apache-rat-core/src/main/java/org/apache/rat/api/ContentType.java
deleted file mode 100644
index f179af0..0000000
--- a/0.12-release/apache-rat-core/src/main/java/org/apache/rat/api/ContentType.java
+++ /dev/null
@@ -1,77 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one   *
- * or more contributor license agreements.  See the NOTICE file *
- * distributed with this work for additional information        *
- * regarding copyright ownership.  The ASF licenses this file   *
- * to you under the Apache License, Version 2.0 (the            *
- * "License"); you may not use this file except in compliance   *
- * with the License.  You may obtain a copy of the License at   *
- *                                                              *
- *   http://www.apache.org/licenses/LICENSE-2.0                 *
- *                                                              *
- * Unless required by applicable law or agreed to in writing,   *
- * software distributed under the License is distributed on an  *
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY       *
- * KIND, either express or implied.  See the License for the    *
- * specific language governing permissions and limitations      *
- * under the License.                                           *
- */
-package org.apache.rat.api;
-
-import java.util.HashMap;
-import java.util.Locale;
-import java.util.Map;
-
-/**
- * Describe the MIME content type of a resource.
- */
-public class ContentType {
-    private final String mediaType;
-    private final String subType;
-    private final Map<String, String> parameters;
-
-    /**
-     * Constructs content types, 
-     * performing an necessary conversions.
-     * @param mediaType not null
-     * @param subType not null
-     * @param parameters not null
-     */
-    public ContentType(final String mediaType, final String subType, final Map<String, String> parameters) {
-        super();
-        this.mediaType = mediaType.toLowerCase(Locale.US);
-        this.subType = subType.toLowerCase(Locale.US);
-        this.parameters = new HashMap<String, String>(parameters.size());
-        for (Map.Entry<String, String> entry : parameters.entrySet()) {
-            this.parameters.put(entry.getKey().toString().toLowerCase(Locale.US), entry.getValue());
-        }
-    }
-
-    /**
-     * Gets the media type,
-     * normalised to lower case.
-     * @return media type, not null
-     */
-    public String getMediaType() {
-        return mediaType;
-    }
-    
-    /**
-     * Gets the media sub type
-     * normalised to lower case
-     * @return sub type, not null
-     */
-    public String getSubType() {
-        return subType;
-    }
-    
-    /**
-     * Gets an immutable map
-     * containing all content type parameters 
-     * with keys normalised to lower case.
-     * @return not null
-     */
-    public Map<String, String> getParameters() {
-        return parameters;
-    }
-}
diff --git a/0.12-release/apache-rat-core/src/main/java/org/apache/rat/api/Document.java b/0.12-release/apache-rat-core/src/main/java/org/apache/rat/api/Document.java
deleted file mode 100644
index b0818d0..0000000
--- a/0.12-release/apache-rat-core/src/main/java/org/apache/rat/api/Document.java
+++ /dev/null
@@ -1,58 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one   *
- * or more contributor license agreements.  See the NOTICE file *
- * distributed with this work for additional information        *
- * regarding copyright ownership.  The ASF licenses this file   *
- * to you under the Apache License, Version 2.0 (the            *
- * "License"); you may not use this file except in compliance   *
- * with the License.  You may obtain a copy of the License at   *
- *                                                              *
- *   http://www.apache.org/licenses/LICENSE-2.0                 *
- *                                                              *
- * Unless required by applicable law or agreed to in writing,   *
- * software distributed under the License is distributed on an  *
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY       *
- * KIND, either express or implied.  See the License for the    *
- * specific language governing permissions and limitations      *
- * under the License.                                           *
- */ 
-package org.apache.rat.api;
-
-import java.io.IOException;
-import java.io.InputStream;
-import java.io.Reader;
-
-import org.apache.rat.document.CompositeDocumentException;
-
-public interface Document {
-
-    String getName();
-    
-    /**
-     * Reads the content of this document.
-     * @return <code>Reader</code> not null
-     * @throws IOException if this document cannot be read
-     * @throws CompositeDocumentException if this document can only be read as
-     * a composite archive
-     */
-    Reader reader() throws IOException;
-    
-    /**
-     * Streams the document's contents.
-     * @return not null
-     * @throws IOException when stream could not be opened
-     */
-    InputStream inputStream() throws IOException;
-
-    /**
-     * Gets data describing this resource.
-     * @return not null
-     */
-    MetaData getMetaData();
-    
-    /**
-     * Is this a composite document?
-     * @return true if composite, false otherwise
-     */
-    boolean isComposite();
-}
diff --git a/0.12-release/apache-rat-core/src/main/java/org/apache/rat/api/MetaData.java b/0.12-release/apache-rat-core/src/main/java/org/apache/rat/api/MetaData.java
deleted file mode 100644
index d2bf87c..0000000
--- a/0.12-release/apache-rat-core/src/main/java/org/apache/rat/api/MetaData.java
+++ /dev/null
@@ -1,310 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one   *
- * or more contributor license agreements.  See the NOTICE file *
- * distributed with this work for additional information        *
- * regarding copyright ownership.  The ASF licenses this file   *
- * to you under the Apache License, Version 2.0 (the            *
- * "License"); you may not use this file except in compliance   *
- * with the License.  You may obtain a copy of the License at   *
- *                                                              *
- *   http://www.apache.org/licenses/LICENSE-2.0                 *
- *                                                              *
- * Unless required by applicable law or agreed to in writing,   *
- * software distributed under the License is distributed on an  *
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY       *
- * KIND, either express or implied.  See the License for the    *
- * specific language governing permissions and limitations      *
- * under the License.                                           *
- */
-package org.apache.rat.api;
-
-import java.util.ArrayList;
-import java.util.Collection;
-import java.util.Collections;
-import java.util.Iterator;
-import java.util.List;
-
-/**
- * Data about the subject.
- */
-public class MetaData {
-
-    public static final String RAT_BASE_URL = "http://org/apache/rat/meta-data";
-    
-    // Document Categories
-    public static final String RAT_URL_DOCUMENT_CATEGORY = RAT_BASE_URL + "#FileCategory";
-    public static final String RAT_DOCUMENT_CATEGORY_VALUE_GENERATED = "GEN  ";
-    public static final String RAT_DOCUMENT_CATEGORY_VALUE_UNKNOWN = "?????";
-    public static final String RAT_DOCUMENT_CATEGORY_VALUE_ARCHIVE = "archive";
-    public static final String RAT_DOCUMENT_CATEGORY_VALUE_NOTICE = "notice";
-    public static final String RAT_DOCUMENT_CATEGORY_VALUE_BINARY = "binary";
-    public static final String RAT_DOCUMENT_CATEGORY_VALUE_STANDARD = "standard";
-    public static final Datum RAT_DOCUMENT_CATEGORY_DATUM_GENERATED = new Datum(RAT_URL_DOCUMENT_CATEGORY, RAT_DOCUMENT_CATEGORY_VALUE_GENERATED);
-    public static final Datum RAT_DOCUMENT_CATEGORY_DATUM_UNKNOWN = new Datum(RAT_URL_DOCUMENT_CATEGORY, RAT_DOCUMENT_CATEGORY_VALUE_UNKNOWN);
-    public static final Datum RAT_DOCUMENT_CATEGORY_DATUM_ARCHIVE = new Datum(RAT_URL_DOCUMENT_CATEGORY, RAT_DOCUMENT_CATEGORY_VALUE_ARCHIVE);
-    public static final Datum RAT_DOCUMENT_CATEGORY_DATUM_NOTICE = new Datum(RAT_URL_DOCUMENT_CATEGORY, RAT_DOCUMENT_CATEGORY_VALUE_NOTICE);
-    public static final Datum RAT_DOCUMENT_CATEGORY_DATUM_BINARY = new Datum(RAT_URL_DOCUMENT_CATEGORY, RAT_DOCUMENT_CATEGORY_VALUE_BINARY);
-    public static final Datum RAT_DOCUMENT_CATEGORY_DATUM_STANDARD = new Datum(RAT_URL_DOCUMENT_CATEGORY, RAT_DOCUMENT_CATEGORY_VALUE_STANDARD);
-    
-    // Header Categories
-    public static final String RAT_URL_HEADER_CATEGORY = RAT_BASE_URL + "#HeaderCategory";
-    
-    // License Family Categories
-    public static final String RAT_URL_LICENSE_FAMILY_CATEGORY= RAT_BASE_URL + "#LicenseFamilyCategory";
-    // Shortcuts used in report output, must be exactly 5 characters
-    public static final String RAT_LICENSE_FAMILY_CATEGORY_VALUE_GEN = "GEN  ";
-    public static final String RAT_LICENSE_FAMILY_CATEGORY_VALUE_UNKNOWN = "?????";
-    public static final String RAT_LICENSE_FAMILY_CATEGORY_VALUE_ASL = "AL   ";
-    public static final String RAT_LICENSE_FAMILY_CATEGORY_VALUE_OASIS = "OASIS";
-    public static final String RAT_LICENSE_FAMILY_CATEGORY_VALUE_W3CD = "W3CD ";
-    public static final String RAT_LICENSE_FAMILY_CATEGORY_VALUE_W3C = "W3C  ";
-    public static final String RAT_LICENSE_FAMILY_CATEGORY_VALUE_DOJO = "DOJO ";
-    public static final String RAT_LICENSE_FAMILY_CATEGORY_VALUE_TMF = "TMF  ";
-    public static final String RAT_LICENSE_FAMILY_CATEGORY_VALUE_GPL1 ="GPL1 ";
-    public static final String RAT_LICENSE_FAMILY_CATEGORY_VALUE_GPL2 ="GPL2 ";
-    public static final String RAT_LICENSE_FAMILY_CATEGORY_VALUE_GPL3 = "GPL3 ";
-    public static final String RAT_LICENSE_FAMILY_CATEGORY_VALUE_MIT = "MIT  ";
-    public static final String RAT_LICENSE_FAMILY_CATEGORY_VALUE_CDDL1 = "CDDL1";
-
-    public static final Datum RAT_LICENSE_FAMILY_CATEGORY_DATUM_GEN = new Datum(RAT_URL_LICENSE_FAMILY_CATEGORY, RAT_LICENSE_FAMILY_CATEGORY_VALUE_GEN);
-    public static final Datum RAT_LICENSE_FAMILY_CATEGORY_DATUM_UNKNOWN = new Datum(RAT_URL_LICENSE_FAMILY_CATEGORY, RAT_LICENSE_FAMILY_CATEGORY_VALUE_UNKNOWN);
-    public static final Datum RAT_LICENSE_FAMILY_CATEGORY_DATUM_ASL = new Datum(RAT_URL_LICENSE_FAMILY_CATEGORY, RAT_LICENSE_FAMILY_CATEGORY_VALUE_ASL);
-    public static final Datum RAT_LICENSE_FAMILY_CATEGORY_DATUM_OASIS = new Datum(RAT_URL_LICENSE_FAMILY_CATEGORY, RAT_LICENSE_FAMILY_CATEGORY_VALUE_OASIS);
-    public static final Datum RAT_LICENSE_FAMILY_CATEGORY_DATUM_W3CD = new Datum(RAT_URL_LICENSE_FAMILY_CATEGORY, RAT_LICENSE_FAMILY_CATEGORY_VALUE_W3CD);
-    public static final Datum RAT_LICENSE_FAMILY_CATEGORY_DATUM_W3C = new Datum(RAT_URL_LICENSE_FAMILY_CATEGORY, RAT_LICENSE_FAMILY_CATEGORY_VALUE_W3C);
-    public static final Datum RAT_LICENSE_FAMILY_CATEGORY_DATUM_DOJO = new Datum(RAT_URL_LICENSE_FAMILY_CATEGORY, RAT_LICENSE_FAMILY_CATEGORY_VALUE_DOJO);
-    public static final Datum RAT_LICENSE_FAMILY_CATEGORY_DATUM_TMF = new Datum(RAT_URL_LICENSE_FAMILY_CATEGORY, RAT_LICENSE_FAMILY_CATEGORY_VALUE_TMF);
-    public static final Datum RAT_LICENSE_FAMILY_CATEGORY_DATUM_GPL1 = new Datum(RAT_URL_LICENSE_FAMILY_CATEGORY,RAT_LICENSE_FAMILY_CATEGORY_VALUE_GPL1);
-    public static final Datum RAT_LICENSE_FAMILY_CATEGORY_DATUM_GPL2 = new Datum(RAT_URL_LICENSE_FAMILY_CATEGORY,RAT_LICENSE_FAMILY_CATEGORY_VALUE_GPL2);
-    public static final Datum RAT_LICENSE_FAMILY_CATEGORY_DATUM_GPL3 = new Datum(RAT_URL_LICENSE_FAMILY_CATEGORY,RAT_LICENSE_FAMILY_CATEGORY_VALUE_GPL3);
-    public static final Datum RAT_LICENSE_FAMILY_CATEGORY_DATUM_MIT = new Datum(RAT_URL_LICENSE_FAMILY_CATEGORY,RAT_LICENSE_FAMILY_CATEGORY_VALUE_MIT);
-    public static final Datum RAT_LICENSE_FAMILY_CATEGORY_DATUM_CDLL1 = new Datum(RAT_URL_LICENSE_FAMILY_CATEGORY,RAT_LICENSE_FAMILY_CATEGORY_VALUE_CDDL1);
-
-    // License Family Standard Names
-    public static final String RAT_URL_LICENSE_FAMILY_NAME= RAT_BASE_URL + "#LicenseFamilyName";
-    public static final String RAT_LICENSE_FAMILY_NAME_VALUE_W3C_SOFTWARE_COPYRIGHT = "W3C Software Copyright";
-    public static final String RAT_LICENSE_FAMILY_NAME_VALUE_W3C_DOCUMENT_COPYRIGHT = "W3C Document Copyright";
-    public static final String RAT_LICENSE_FAMILY_NAME_VALUE_OASIS_OPEN_LICENSE = "OASIS Open License";
-    public static final String RAT_LICENSE_FAMILY_NAME_VALUE_MODIFIED_BSD_LICENSE = "Modified BSD License";
-    public static final String RAT_LICENSE_FAMILY_NAME_VALUE_APACHE_LICENSE_VERSION_2_0 = "Apache License Version 2.0";
-    public static final String RAT_LICENSE_FAMILY_NAME_VALUE_GPL_VERSION_1 =
-            "GNU General Public License, version 1";
-    public static final String RAT_LICENSE_FAMILY_NAME_VALUE_GPL_VERSION_2 =
-            "GNU General Public License, version 2";
-    public static final String RAT_LICENSE_FAMILY_NAME_VALUE_GPL_VERSION_3 =
-            "GNU General Public License, version 3";
-    public static final String RAT_LICENSE_FAMILY_NAME_VALUE_MIT =
-            "The MIT License";
-    public static final String RAT_LICENSE_FAMILY_NAME_VALUE_CDDL1 =
-            "COMMON DEVELOPMENT AND DISTRIBUTION LICENSE Version 1.0";
-    public static final String RAT_LICENSE_FAMILY_NAME_VALUE_ACADEMIC_FREE_LICENSE_VERSION_2_1 = "Academic Free License, Version 2.1";
-    public static final String RAT_LICENSE_FAMILY_NAME_VALUE_UNKNOWN = "?????";
-    public static final Datum RAT_LICENSE_FAMILY_NAME_DATUM_W3C_SOFTWARE_COPYRIGHT 
-        = new Datum(RAT_URL_LICENSE_FAMILY_NAME, RAT_LICENSE_FAMILY_NAME_VALUE_W3C_SOFTWARE_COPYRIGHT);
-    public static final Datum RAT_LICENSE_FAMILY_NAME_DATUM_W3C_DOCUMENT_COPYRIGHT 
-        = new Datum(RAT_URL_LICENSE_FAMILY_NAME, RAT_LICENSE_FAMILY_NAME_VALUE_W3C_DOCUMENT_COPYRIGHT);
-    public static final Datum RAT_LICENSE_FAMILY_NAME_DATUM_OASIS_OPEN_LICENSE 
-        = new Datum(RAT_URL_LICENSE_FAMILY_NAME, RAT_LICENSE_FAMILY_NAME_VALUE_OASIS_OPEN_LICENSE);
-    public static final Datum RAT_LICENSE_FAMILY_NAME_DATUM_MODIFIED_BSD_LICENSE 
-        = new Datum(RAT_URL_LICENSE_FAMILY_NAME, RAT_LICENSE_FAMILY_NAME_VALUE_MODIFIED_BSD_LICENSE);
-    public static final Datum RAT_LICENSE_FAMILY_NAME_DATUM_APACHE_LICENSE_VERSION_2_0
-        = new Datum(RAT_URL_LICENSE_FAMILY_NAME, RAT_LICENSE_FAMILY_NAME_VALUE_APACHE_LICENSE_VERSION_2_0);
-    public static final Datum
-            RAT_LICENSE_FAMILY_NAME_DATUM_GPL_VERSION_1 = new Datum(RAT_URL_LICENSE_FAMILY_NAME, RAT_LICENSE_FAMILY_CATEGORY_VALUE_GPL1);
-    public static final Datum
-            RAT_LICENSE_FAMILY_NAME_DATUM_GPL_VERSION_2 = new Datum(RAT_URL_LICENSE_FAMILY_NAME, RAT_LICENSE_FAMILY_CATEGORY_VALUE_GPL2);
-    public static final Datum
-            RAT_LICENSE_FAMILY_NAME_DATUM_GPL_VERSION_3 = new Datum(RAT_URL_LICENSE_FAMILY_NAME, RAT_LICENSE_FAMILY_NAME_VALUE_GPL_VERSION_3);
-    public static final Datum
-            RAT_LICENSE_FAMILY_NAME_DATUM_MIT = new Datum(RAT_URL_LICENSE_FAMILY_NAME, RAT_LICENSE_FAMILY_NAME_VALUE_MIT);
-    public static final Datum
-            RAT_LICENSE_FAMILY_NAME_DATUM_CDDL1 = new Datum(RAT_URL_LICENSE_FAMILY_NAME, RAT_LICENSE_FAMILY_NAME_VALUE_CDDL1);
-    public static final Datum RAT_LICENSE_FAMILY_NAME_DATUM_ACADEMIC_FREE_LICENSE_VERSION_2_1
-        = new Datum(RAT_URL_LICENSE_FAMILY_NAME, RAT_LICENSE_FAMILY_NAME_VALUE_ACADEMIC_FREE_LICENSE_VERSION_2_1);
-    public static final Datum RAT_LICENSE_FAMILY_NAME_DATUM_UNKNOWN
-        = new Datum(RAT_URL_LICENSE_FAMILY_NAME, RAT_LICENSE_FAMILY_NAME_VALUE_UNKNOWN); 
-    
-    // Header sample
-    public static final String RAT_URL_HEADER_SAMPLE = RAT_BASE_URL + "#HeaderSample";
-    
-    // License Approval
-    public static final String RAT_URL_APPROVED_LICENSE = RAT_BASE_URL + "#ApprovedLicense";
-    public static final String RAT_APPROVED_LICENSE_VALUE_TRUE = Boolean.TRUE.toString();
-    public static final String RAT_APPROVED_LICENSE_VALUE_FALSE = Boolean.FALSE.toString();
-    public static final Datum RAT_APPROVED_LICENSE_DATIM_TRUE = new Datum(RAT_URL_APPROVED_LICENSE, RAT_APPROVED_LICENSE_VALUE_TRUE);
-    public static final Datum RAT_APPROVED_LICENSE_DATIM_FALSE = new Datum(RAT_URL_APPROVED_LICENSE, RAT_APPROVED_LICENSE_VALUE_FALSE);
-    
-    private ContentType contentType;
-    /** 
-     * Only likely to be a small quantity of data 
-     * so trade some performance for simplicity.
-     */
-    private final List<Datum> data;
-
-    public MetaData() {
-        this(null);
-    }
-    
-    public MetaData(final ContentType contentType) {
-        this.contentType = contentType;
-        this.data = new ArrayList<Datum>(16);
-    }
-    
-    /**
-     * Gets the content type for the subject.
-     * @return or null when the type is unknown
-     */
-    public ContentType getContentType() {
-        return contentType;
-    }
-    
-    /**
-     * Sets the content type for this subject.
-     * @param contentType <code>ContentType</code>,
-     * or null when the content type is unknown
-     */
-    public void setContentType(final ContentType contentType) {
-        this.contentType = contentType;
-    }
-    
-    /**
-     * Gets all data.
-     * @return unmodifiable view of the meta data.
-     */
-    public Collection<Datum> getData() {
-        return Collections.unmodifiableCollection(data);
-    }
-    
-    /**
-     * Adds a new datum.
-     * Existing data with the same name are not replaced.
-     * @param datum datum to add.
-     * @see #set(org.apache.rat.api.MetaData.Datum)
-     */
-    public void add(final Datum datum) {
-       data.add(datum); 
-    }
-    
-    /**
-     * Puts in a new datum replacing any existing data.
-     * Any current data matching the name are removed.
-     * @param datum not null
-     * @see #add(org.apache.rat.api.MetaData.Datum)
-     */
-    public void set(final Datum datum) {
-       clear(datum.getName()); 
-       add(datum);
-    }
-    
-    /**
-     * Gets the first datum matching the given name.
-     * @param name not null
-     * @return the matching datum first added when there is any matching data,
-     * null otherwise
-     */
-    public Datum get(final String name) {
-        Datum result = null;
-        for (Datum next : data) {
-            if (name.equals(next.getName())) {
-                result = next;
-                break;
-            }
-        }
-        return result;
-    }
-    
-    /**
-     * Gets the value of the first datum matching the given name.
-     * @param name not null
-     * @return the value of the matchin datum first added when there is any matching data,
-     * null otherwise
-     */
-    public String value(final String name) {
-        final Datum datum = get(name);
-        final String result;
-        if (datum == null) {
-            result = null;
-        } else {
-            result = datum.getValue();
-        }
-        return result;
-    }
-    
-    /**
-     * Removes all data matching the given name.
-     * @param name not null
-     * @return true if any data match, false otherwise
-     */
-    public boolean clear(final String name) {
-        boolean dataRemoved = false;
-        for (final Iterator<Datum> it = data.iterator();it.hasNext();) {
-            final Datum datum = it.next();
-            if (datum.getName().equals(name)) {
-                it.remove();
-                dataRemoved = true;
-            }
-        }
-        return dataRemoved;
-    }
-    
-    /**
-     * Clears all data.
-     */
-    public void clear() {
-        data.clear();
-        this.contentType = null;
-    }
-    
-    /**
-     * A datum.
-     */
-    public static final class Datum {
-        private final String name;
-        private final String value;
-        
-        /**
-         * Constructs a datum.
-         * @param name not null
-         * @param value not null
-         */
-        public Datum(final String name, final String value) {
-            super();
-            this.name = name;
-            this.value = value;
-        }
-        
-        /**
-         * Gets the name of the data type.
-         * To avoid collisions, it is recommended that URLs are used.
-         * @return not null
-         */
-        public String getName() {
-            return name;
-        }
-     
-        /**
-         * Data type value.
-         * @return not null
-         */
-        public String getValue() {
-            return value;
-        }
-
-        /**
-         * Constructs a <code>String</code> with all attributes
-         * in name = value format.
-         *
-         * @return a <code>String</code> representation 
-         * of this object.
-         */
-        @Override
-        public String toString()
-        {
-            return "Datum [ "
-                + "name ='" + this.name + "',"
-                + "value ='" + this.value + " "
-                + "']";
-        }
-    }
-}
- 
\ No newline at end of file
diff --git a/0.12-release/apache-rat-core/src/main/java/org/apache/rat/api/MimeTyper.java b/0.12-release/apache-rat-core/src/main/java/org/apache/rat/api/MimeTyper.java
deleted file mode 100644
index 9e85f1d..0000000
--- a/0.12-release/apache-rat-core/src/main/java/org/apache/rat/api/MimeTyper.java
+++ /dev/null
@@ -1,37 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one   *
- * or more contributor license agreements.  See the NOTICE file *
- * distributed with this work for additional information        *
- * regarding copyright ownership.  The ASF licenses this file   *
- * to you under the Apache License, Version 2.0 (the            *
- * "License"); you may not use this file except in compliance   *
- * with the License.  You may obtain a copy of the License at   *
- *                                                              *
- *   http://www.apache.org/licenses/LICENSE-2.0                 *
- *                                                              *
- * Unless required by applicable law or agreed to in writing,   *
- * software distributed under the License is distributed on an  *
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY       *
- * KIND, either express or implied.  See the License for the    *
- * specific language governing permissions and limitations      *
- * under the License.                                           *
- */
-package org.apache.rat.api;
-
-import java.io.IOException;
-import java.io.InputStream;
-
-/**
- * Discovers the mime type of content.
- */
-public interface MimeTyper {
-
-    /**
-     * Guesses the mime type for the given content.
-     * @param inputStream not null
-     * @param name possibly null
-     * @return guessed content type, not null.
-     * @throws IOException in case of I/O errors.
-     */
-    ContentType type(final InputStream inputStream, String name) throws IOException;
-}
diff --git a/0.12-release/apache-rat-core/src/main/java/org/apache/rat/api/RatException.java b/0.12-release/apache-rat-core/src/main/java/org/apache/rat/api/RatException.java
deleted file mode 100644
index 9d5c2c3..0000000
--- a/0.12-release/apache-rat-core/src/main/java/org/apache/rat/api/RatException.java
+++ /dev/null
@@ -1,40 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one   *
- * or more contributor license agreements.  See the NOTICE file *
- * distributed with this work for additional information        *
- * regarding copyright ownership.  The ASF licenses this file   *
- * to you under the Apache License, Version 2.0 (the            *
- * "License"); you may not use this file except in compliance   *
- * with the License.  You may obtain a copy of the License at   *
- *                                                              *
- *   http://www.apache.org/licenses/LICENSE-2.0                 *
- *                                                              *
- * Unless required by applicable law or agreed to in writing,   *
- * software distributed under the License is distributed on an  *
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY       *
- * KIND, either express or implied.  See the License for the    *
- * specific language governing permissions and limitations      *
- * under the License.                                           *
- */ 
-package org.apache.rat.api;
-
-public class RatException extends Exception {
-
-    private static final long serialVersionUID = 4940711222435919034L;
-
-    public RatException() {
-        super();
-    }
-
-    public RatException(String message, Throwable cause) {
-        super(message, cause);
-    }
-
-    public RatException(String message) {
-        super(message);
-    }
-
-    public RatException(Throwable cause) {
-        super(cause);
-    }
-}
diff --git a/0.12-release/apache-rat-core/src/main/java/org/apache/rat/api/package.html b/0.12-release/apache-rat-core/src/main/java/org/apache/rat/api/package.html
deleted file mode 100644
index 5ffbf43..0000000
--- a/0.12-release/apache-rat-core/src/main/java/org/apache/rat/api/package.html
+++ /dev/null
@@ -1,17 +0,0 @@
-<!--
-  Licensed to the Apache Software Foundation (ASF) under one or more
-  contributor license agreements.  See the NOTICE file distributed with
-  this work for additional information regarding copyright ownership.
-  The ASF licenses this file to You under the Apache License, Version 2.0
-  (the "License"); you may not use this file except in compliance with
-  the License.  You may obtain a copy of the License at
-
-      http://www.apache.org/licenses/LICENSE-2.0
-
-  Unless required by applicable law or agreed to in writing, software
-  distributed under the License is distributed on an "AS IS" BASIS,
-  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-  See the License for the specific language governing permissions and
-  limitations under the License.
--->
-<body><p>Key abstractions. A good place to start.</p></body>
\ No newline at end of file
diff --git a/0.12-release/apache-rat-core/src/main/java/org/apache/rat/config/AddLicenseHeaders.java b/0.12-release/apache-rat-core/src/main/java/org/apache/rat/config/AddLicenseHeaders.java
deleted file mode 100644
index 523aa6e..0000000
--- a/0.12-release/apache-rat-core/src/main/java/org/apache/rat/config/AddLicenseHeaders.java
+++ /dev/null
@@ -1,44 +0,0 @@
-package org.apache.rat.config;
-
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- *
- *   http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-
-/**
- * Value of addLicenseHeaders configuration option.
- */
-public enum AddLicenseHeaders {
-    TRUE, //
-    FALSE, //
-    FORCED;
-
-    private static final char SEPARATOR = '|';
-
-    /**
-     * @return pretty-printed list of all available options.
-     */
-    public static String getValuesForHelp() {
-        StringBuilder sb = new StringBuilder();
-        for(AddLicenseHeaders headerOption : AddLicenseHeaders.values()) {
-            sb.append(headerOption.name().toLowerCase()).append(SEPARATOR);
-        }
-        // remove last separator
-        sb.setLength(sb.length() - 1);
-        return sb.toString();
-    }
-}
diff --git a/0.12-release/apache-rat-core/src/main/java/org/apache/rat/config/ConfigurationUtil.java b/0.12-release/apache-rat-core/src/main/java/org/apache/rat/config/ConfigurationUtil.java
deleted file mode 100644
index 482345e..0000000
--- a/0.12-release/apache-rat-core/src/main/java/org/apache/rat/config/ConfigurationUtil.java
+++ /dev/null
@@ -1,44 +0,0 @@
-package org.apache.rat.config;
-
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- *
- *   http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-
-import org.apache.rat.license.ILicenseFamily;
-
-import java.util.ArrayList;
-import java.util.List;
-
-public class ConfigurationUtil {
-    /**
-     * Extract license names from the given license families.
-     *
-     * @param approvedLicenses list of license family implementations.
-     * @return extracted names of given license families.
-     */
-    public static final List<String> toNames(final ILicenseFamily[] approvedLicenses) {
-        List<String> names = new ArrayList<String>();
-        if (approvedLicenses != null && approvedLicenses.length > 0) {
-            for (ILicenseFamily approvedFamily : approvedLicenses) {
-                names.add(approvedFamily.getFamilyName());
-            }
-        }
-        return names;
-    }
-
-}
diff --git a/0.12-release/apache-rat-core/src/main/java/org/apache/rat/config/ReportFormat.java b/0.12-release/apache-rat-core/src/main/java/org/apache/rat/config/ReportFormat.java
deleted file mode 100644
index a0635b4..0000000
--- a/0.12-release/apache-rat-core/src/main/java/org/apache/rat/config/ReportFormat.java
+++ /dev/null
@@ -1,33 +0,0 @@
-package org.apache.rat.config;
-
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- *
- *   http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-
-public enum ReportFormat {
-    PLAIN,
-
-    XML;
-
-    public boolean is(String optionGiven) {
-        if (optionGiven == null || optionGiven.length() == 0) {
-            return false;
-        }
-        return name().equalsIgnoreCase(optionGiven);
-    }
-}
diff --git a/0.12-release/apache-rat-core/src/main/java/org/apache/rat/config/SourceCodeManagementSystems.java b/0.12-release/apache-rat-core/src/main/java/org/apache/rat/config/SourceCodeManagementSystems.java
deleted file mode 100644
index 195dbef..0000000
--- a/0.12-release/apache-rat-core/src/main/java/org/apache/rat/config/SourceCodeManagementSystems.java
+++ /dev/null
@@ -1,105 +0,0 @@
-package org.apache.rat.config;
-
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- *
- *   http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-import java.util.ArrayList;
-import java.util.List;
-
-public enum SourceCodeManagementSystems {
-    SUBVERSION(".svn", null), //
-    GIT(".git", ".gitignore"), //
-    BAZAAR(".bzr", ".bzrignore"), //
-    MERCURIAL(".hg", ".hgignore"), //
-    CVS("CVS", ".cvsignore")
-    //
-    ;
-
-    /**
-     * Technical directory of that SCM which contains SCM internals.
-     */
-    private String directory;
-    /**
-     * If there is a external way to configure files to be ignored: name of this
-     * file, <code>null</code> otherwise.
-     */
-    private String ignoreFile;
-
-    private SourceCodeManagementSystems(String directory, String ignoreFile) {
-        this.directory = directory;
-        this.ignoreFile = ignoreFile;
-    }
-
-    /**
-     * If an ignore file exists it's added as
-     * 
-     * <pre>
-     * *&frasl;.scm&frasl;*
-     * </pre>
-     * 
-     * . Otherwise the technical directory of the SCM is added as
-     * 
-     * <pre>
-     * **&frasl;.scmignore
-     * </pre>
-     * 
-     * to be used as exclusion during RAT runs.
-     * 
-     * @return list of excludes if the current SCM is used.
-     */
-    public List<String> getExclusions() {
-        List<String> excludes = new ArrayList<String>(2);
-
-        if (hasIgnoreFile()) {
-            excludes.add("**/" + ignoreFile);
-        }
-        excludes.add("*/" + directory + "/*");
-
-        return excludes;
-    }
-
-    public boolean hasIgnoreFile() {
-        return ignoreFile != null && ignoreFile.length() != 0;
-    }
-
-    /**
-     * Calls {@link #getExclusions()} on each SCM to generate a global list of
-     * exclusions to be used during RAT runs.
-     * 
-     * @return the global list of exclusions usable for all known SCM.
-     */
-    public static List<String> getPluginExclusions() {
-        List<String> pluginExclusions = new ArrayList<String>();
-
-        for (SourceCodeManagementSystems scm : values()) {
-            pluginExclusions.addAll(scm.getExclusions());
-        }
-
-        return pluginExclusions;
-    }
-
-    /**
-     * Maybe <code>null</code>, check before with
-     * @see #hasIgnoreFile()
-     *
-     * @return the ignore file of the SCM.
-     */
-    public String getIgnoreFile() {
-        return ignoreFile;
-    }
-}
\ No newline at end of file
diff --git a/0.12-release/apache-rat-core/src/main/java/org/apache/rat/config/package.html b/0.12-release/apache-rat-core/src/main/java/org/apache/rat/config/package.html
deleted file mode 100644
index 3c8d8d4..0000000
--- a/0.12-release/apache-rat-core/src/main/java/org/apache/rat/config/package.html
+++ /dev/null
@@ -1,17 +0,0 @@
-<!--
-  Licensed to the Apache Software Foundation (ASF) under one or more
-  contributor license agreements.  See the NOTICE file distributed with
-  this work for additional information regarding copyright ownership.
-  The ASF licenses this file to You under the Apache License, Version 2.0
-  (the "License"); you may not use this file except in compliance with
-  the License.  You may obtain a copy of the License at
-
-      http://www.apache.org/licenses/LICENSE-2.0
-
-  Unless required by applicable law or agreed to in writing, software
-  distributed under the License is distributed on an "AS IS" BASIS,
-  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-  See the License for the specific language governing permissions and
-  limitations under the License.
--->
-<body><p>Contains source code management / revision control information used during plugin runs.</p></body>
\ No newline at end of file
diff --git a/0.12-release/apache-rat-core/src/main/java/org/apache/rat/document/CompositeDocumentException.java b/0.12-release/apache-rat-core/src/main/java/org/apache/rat/document/CompositeDocumentException.java
deleted file mode 100644
index a3d1d53..0000000
--- a/0.12-release/apache-rat-core/src/main/java/org/apache/rat/document/CompositeDocumentException.java
+++ /dev/null
@@ -1,39 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one   *
- * or more contributor license agreements.  See the NOTICE file *
- * distributed with this work for additional information        *
- * regarding copyright ownership.  The ASF licenses this file   *
- * to you under the Apache License, Version 2.0 (the            *
- * "License"); you may not use this file except in compliance   *
- * with the License.  You may obtain a copy of the License at   *
- *                                                              *
- *   http://www.apache.org/licenses/LICENSE-2.0                 *
- *                                                              *
- * Unless required by applicable law or agreed to in writing,   *
- * software distributed under the License is distributed on an  *
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY       *
- * KIND, either express or implied.  See the License for the    *
- * specific language governing permissions and limitations      *
- * under the License.                                           *
- */ 
-package org.apache.rat.document;
-
-import java.io.IOException;
-
-/**
- * Indicates that the document is a composite archive 
- * and cannot be read.
- */
-public class CompositeDocumentException extends IOException {
-
-    private static final long serialVersionUID = -8874256971728263295L;
-
-    public CompositeDocumentException() {
-        super("This document must be read as an archive.");
-    }
-
-    public CompositeDocumentException(String s) {
-        super(s);
-    }
-
-}
diff --git a/0.12-release/apache-rat-core/src/main/java/org/apache/rat/document/IDocumentAnalyser.java b/0.12-release/apache-rat-core/src/main/java/org/apache/rat/document/IDocumentAnalyser.java
deleted file mode 100644
index ec02ce0..0000000
--- a/0.12-release/apache-rat-core/src/main/java/org/apache/rat/document/IDocumentAnalyser.java
+++ /dev/null
@@ -1,27 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one   *
- * or more contributor license agreements.  See the NOTICE file *
- * distributed with this work for additional information        *
- * regarding copyright ownership.  The ASF licenses this file   *
- * to you under the Apache License, Version 2.0 (the            *
- * "License"); you may not use this file except in compliance   *
- * with the License.  You may obtain a copy of the License at   *
- *                                                              *
- *   http://www.apache.org/licenses/LICENSE-2.0                 *
- *                                                              *
- * Unless required by applicable law or agreed to in writing,   *
- * software distributed under the License is distributed on an  *
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY       *
- * KIND, either express or implied.  See the License for the    *
- * specific language governing permissions and limitations      *
- * under the License.                                           *
- */ 
-package org.apache.rat.document;
-
-import org.apache.rat.api.Document;
-
-
-public interface IDocumentAnalyser {
-
-    void analyse(Document document) throws RatDocumentAnalysisException;
-}
diff --git a/0.12-release/apache-rat-core/src/main/java/org/apache/rat/document/RatDocumentAnalysisException.java b/0.12-release/apache-rat-core/src/main/java/org/apache/rat/document/RatDocumentAnalysisException.java
deleted file mode 100644
index 5ffa5a1..0000000
--- a/0.12-release/apache-rat-core/src/main/java/org/apache/rat/document/RatDocumentAnalysisException.java
+++ /dev/null
@@ -1,40 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one   *
- * or more contributor license agreements.  See the NOTICE file *
- * distributed with this work for additional information        *
- * regarding copyright ownership.  The ASF licenses this file   *
- * to you under the Apache License, Version 2.0 (the            *
- * "License"); you may not use this file except in compliance   *
- * with the License.  You may obtain a copy of the License at   *
- *                                                              *
- *   http://www.apache.org/licenses/LICENSE-2.0                 *
- *                                                              *
- * Unless required by applicable law or agreed to in writing,   *
- * software distributed under the License is distributed on an  *
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY       *
- * KIND, either express or implied.  See the License for the    *
- * specific language governing permissions and limitations      *
- * under the License.                                           *
- */ 
-package org.apache.rat.document;
-
-public class RatDocumentAnalysisException extends Exception {
-
-    private static final long serialVersionUID = 2339068944003517510L;
-
-    public RatDocumentAnalysisException() {
-    }
-
-    public RatDocumentAnalysisException(String msg) {
-        super(msg);
-    }
-
-    public RatDocumentAnalysisException(Throwable cause) {
-        super(cause);
-    }
-
-    public RatDocumentAnalysisException(String msg, Throwable cause) {
-        super(msg, cause);
-    }
-
-}
diff --git a/0.12-release/apache-rat-core/src/main/java/org/apache/rat/document/ToNameTransformer.java b/0.12-release/apache-rat-core/src/main/java/org/apache/rat/document/ToNameTransformer.java
deleted file mode 100644
index b2322d4..0000000
--- a/0.12-release/apache-rat-core/src/main/java/org/apache/rat/document/ToNameTransformer.java
+++ /dev/null
@@ -1,40 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one   *
- * or more contributor license agreements.  See the NOTICE file *
- * distributed with this work for additional information        *
- * regarding copyright ownership.  The ASF licenses this file   *
- * to you under the Apache License, Version 2.0 (the            *
- * "License"); you may not use this file except in compliance   *
- * with the License.  You may obtain a copy of the License at   *
- *                                                              *
- *   http://www.apache.org/licenses/LICENSE-2.0                 *
- *                                                              *
- * Unless required by applicable law or agreed to in writing,   *
- * software distributed under the License is distributed on an  *
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY       *
- * KIND, either express or implied.  See the License for the    *
- * specific language governing permissions and limitations      *
- * under the License.                                           *
- */ 
-package org.apache.rat.document;
-
-import org.apache.commons.collections.Transformer;
-import org.apache.rat.api.Document;
-
-public class ToNameTransformer implements Transformer {
-
-    private static final Transformer TO_NAME_TRANSFORMER = new ToNameTransformer();
-    
-    public static final Transformer toNameTransformer() {
-        return TO_NAME_TRANSFORMER;
-    }
-    
-    public Object transform(Object subject) {
-        Object result = null;
-        if (subject != null && subject instanceof Document) {
-            Document location = (Document) subject;
-            result = location.getName();
-        }
-        return result;
-    }
-}
diff --git a/0.12-release/apache-rat-core/src/main/java/org/apache/rat/document/UnsuitableDocumentException.java b/0.12-release/apache-rat-core/src/main/java/org/apache/rat/document/UnsuitableDocumentException.java
deleted file mode 100644
index e112706..0000000
--- a/0.12-release/apache-rat-core/src/main/java/org/apache/rat/document/UnsuitableDocumentException.java
+++ /dev/null
@@ -1,46 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one   *
- * or more contributor license agreements.  See the NOTICE file *
- * distributed with this work for additional information        *
- * regarding copyright ownership.  The ASF licenses this file   *
- * to you under the Apache License, Version 2.0 (the            *
- * "License"); you may not use this file except in compliance   *
- * with the License.  You may obtain a copy of the License at   *
- *                                                              *
- *   http://www.apache.org/licenses/LICENSE-2.0                 *
- *                                                              *
- * Unless required by applicable law or agreed to in writing,   *
- * software distributed under the License is distributed on an  *
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY       *
- * KIND, either express or implied.  See the License for the    *
- * specific language governing permissions and limitations      *
- * under the License.                                           *
- */ 
-package org.apache.rat.document;
-
-/**
- * Indicates that the document was unsuitable for analysis.
- *
- */
-public class UnsuitableDocumentException extends RatDocumentAnalysisException {
-
-    private static final long serialVersionUID = 4202800209654402733L;
-
-    public UnsuitableDocumentException() {
-        super("This document is unsuitable for analysis");
-    }
-
-    public UnsuitableDocumentException(String msg, Throwable cause) {
-        super(msg, cause);
-    }
-
-    public UnsuitableDocumentException(String msg) {
-        super(msg);
-    }
-
-    public UnsuitableDocumentException(Throwable cause) {
-        super(cause);
-    }
-
-    
-}
diff --git a/0.12-release/apache-rat-core/src/main/java/org/apache/rat/document/impl/AbstractMonolithicDocument.java b/0.12-release/apache-rat-core/src/main/java/org/apache/rat/document/impl/AbstractMonolithicDocument.java
deleted file mode 100644
index 302e372..0000000
--- a/0.12-release/apache-rat-core/src/main/java/org/apache/rat/document/impl/AbstractMonolithicDocument.java
+++ /dev/null
@@ -1,48 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one   *
- * or more contributor license agreements.  See the NOTICE file *
- * distributed with this work for additional information        *
- * regarding copyright ownership.  The ASF licenses this file   *
- * to you under the Apache License, Version 2.0 (the            *
- * "License"); you may not use this file except in compliance   *
- * with the License.  You may obtain a copy of the License at   *
- *                                                              *
- *   http://www.apache.org/licenses/LICENSE-2.0                 *
- *                                                              *
- * Unless required by applicable law or agreed to in writing,   *
- * software distributed under the License is distributed on an  *
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY       *
- * KIND, either express or implied.  See the License for the    *
- * specific language governing permissions and limitations      *
- * under the License.                                           *
- */ 
-package org.apache.rat.document.impl;
-
-import org.apache.rat.api.Document;
-import org.apache.rat.api.MetaData;
-
-
-/**
- * Abstract base class for monolithic documents.
- */
-public abstract class AbstractMonolithicDocument implements Document {
-    private final String name;
-    private final MetaData metaData;
-
-    public AbstractMonolithicDocument(String pName) {
-        name = pName;
-        this.metaData = new MetaData();
-    }
-
-    public boolean isComposite() {
-        return false;
-    }
-
-    public String getName() {
-        return name;
-    }
-
-    public MetaData getMetaData() {
-        return metaData;
-    }
-}
diff --git a/0.12-release/apache-rat-core/src/main/java/org/apache/rat/document/impl/ArchiveEntryDocument.java b/0.12-release/apache-rat-core/src/main/java/org/apache/rat/document/impl/ArchiveEntryDocument.java
deleted file mode 100644
index f7c1064..0000000
--- a/0.12-release/apache-rat-core/src/main/java/org/apache/rat/document/impl/ArchiveEntryDocument.java
+++ /dev/null
@@ -1,80 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one   *
- * or more contributor license agreements.  See the NOTICE file *
- * distributed with this work for additional information        *
- * regarding copyright ownership.  The ASF licenses this file   *
- * to you under the Apache License, Version 2.0 (the            *
- * "License"); you may not use this file except in compliance   *
- * with the License.  You may obtain a copy of the License at   *
- *                                                              *
- *   http://www.apache.org/licenses/LICENSE-2.0                 *
- *                                                              *
- * Unless required by applicable law or agreed to in writing,   *
- * software distributed under the License is distributed on an  *
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY       *
- * KIND, either express or implied.  See the License for the    *
- * specific language governing permissions and limitations      *
- * under the License.                                           *
- */
-
-package org.apache.rat.document.impl;
-
-import java.io.ByteArrayInputStream;
-import java.io.File;
-import java.io.IOException;
-import java.io.InputStream;
-import java.io.InputStreamReader;
-import java.io.Reader;
-
-import org.apache.rat.api.Document;
-import org.apache.rat.api.MetaData;
-import org.apache.rat.api.RatException;
-
-public class ArchiveEntryDocument implements Document {
-
-    private byte[] contents;
-    private final String name;
-
-    private final MetaData metaData = new MetaData();
-
-    public ArchiveEntryDocument(File file, byte[] contents) throws RatException {
-        super();
-        name = DocumentImplUtils.toName(file);
-        this.contents = contents;
-    }
-
-    public MetaData getMetaData() {
-        return metaData;
-    }
-
-    public String getName() {
-        return name;
-    }
-
-    public InputStream inputStream() throws IOException {
-        return new ByteArrayInputStream(contents);
-    }
-
-    public boolean isComposite() {
-        return DocumentImplUtils.isZipStream(new ByteArrayInputStream(contents));
-    }
-
-    public Reader reader() throws IOException {
-        return new InputStreamReader(new ByteArrayInputStream(contents));
-    }
-
-
-    /**
-     * Representations suitable for logging.
-     * @return a <code>String</code> representation 
-     * of this object.
-     */
-    @Override
-    public String toString()
-    {
-        return "TarEntryDocument ( "
-            + "name = " + this.name + " "
-            + "metaData = " + this.metaData + " "
-            + " )";
-    }
-}
diff --git a/0.12-release/apache-rat-core/src/main/java/org/apache/rat/document/impl/DocumentImplUtils.java b/0.12-release/apache-rat-core/src/main/java/org/apache/rat/document/impl/DocumentImplUtils.java
deleted file mode 100644
index 6351398..0000000
--- a/0.12-release/apache-rat-core/src/main/java/org/apache/rat/document/impl/DocumentImplUtils.java
+++ /dev/null
@@ -1,60 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one   *
- * or more contributor license agreements.  See the NOTICE file *
- * distributed with this work for additional information        *
- * regarding copyright ownership.  The ASF licenses this file   *
- * to you under the Apache License, Version 2.0 (the            *
- * "License"); you may not use this file except in compliance   *
- * with the License.  You may obtain a copy of the License at   *
- *                                                              *
- *   http://www.apache.org/licenses/LICENSE-2.0                 *
- *                                                              *
- * Unless required by applicable law or agreed to in writing,   *
- * software distributed under the License is distributed on an  *
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY       *
- * KIND, either express or implied.  See the License for the    *
- * specific language governing permissions and limitations      *
- * under the License.                                           *
- */ 
-package org.apache.rat.document.impl;
-
-import java.io.File;
-import java.io.FileInputStream;
-import java.io.IOException;
-import java.io.InputStream;
-import java.util.zip.ZipException;
-import java.util.zip.ZipInputStream;
-
-import org.apache.commons.io.IOUtils;
-
-public class DocumentImplUtils {
-
-    public final static String toName(File file) {
-        String path = file.getPath();
-        String normalisedPath = path.replace('\\', '/');
-        return normalisedPath;
-    }
-    
-    public static final boolean isZipStream(InputStream stream) {
-        ZipInputStream zip = new ZipInputStream(stream);
-        try {
-            zip.getNextEntry();
-            return true;
-        } catch (ZipException e) {
-            return false;
-        } catch (IOException e) {
-            return false;
-        } finally {
-            IOUtils.closeQuietly(zip);
-        }
-    }
-
-    public static final boolean isZip(File file) {
-        try {
-            return isZipStream(new FileInputStream(file));
-        } catch (IOException e) {
-            return false;
-        }
-    }
-
-}
diff --git a/0.12-release/apache-rat-core/src/main/java/org/apache/rat/document/impl/FileDocument.java b/0.12-release/apache-rat-core/src/main/java/org/apache/rat/document/impl/FileDocument.java
deleted file mode 100644
index d8d3232..0000000
--- a/0.12-release/apache-rat-core/src/main/java/org/apache/rat/document/impl/FileDocument.java
+++ /dev/null
@@ -1,83 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one   *
- * or more contributor license agreements.  See the NOTICE file *
- * distributed with this work for additional information        *
- * regarding copyright ownership.  The ASF licenses this file   *
- * to you under the Apache License, Version 2.0 (the            *
- * "License"); you may not use this file except in compliance   *
- * with the License.  You may obtain a copy of the License at   *
- *                                                              *
- *   http://www.apache.org/licenses/LICENSE-2.0                 *
- *                                                              *
- * Unless required by applicable law or agreed to in writing,   *
- * software distributed under the License is distributed on an  *
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY       *
- * KIND, either express or implied.  See the License for the    *
- * specific language governing permissions and limitations      *
- * under the License.                                           *
- */ 
-package org.apache.rat.document.impl;
-
-import java.io.File;
-import java.io.FileInputStream;
-import java.io.FileReader;
-import java.io.IOException;
-import java.io.InputStream;
-import java.io.Reader;
-
-import org.apache.rat.api.Document;
-import org.apache.rat.api.MetaData;
-
-/**
- * Document wrapping a file of undetermined composition.
- *
- */
-public class FileDocument implements Document {
-
-    private final File file;
-    private final String name;
-    private final MetaData metaData = new MetaData();
-    
-    public FileDocument(final File file) {
-        super();
-        this.file = file;
-        name = DocumentImplUtils.toName(file);
-    }
-
-    public boolean isComposite() {
-        return DocumentImplUtils.isZip(file);
-    }
-
-    public Reader reader() throws IOException {
-        return new FileReader(file);
-    }
-
-    public String getName() {
-        return name;
-    }
-
-    public MetaData getMetaData() {
-        return metaData;
-    }    
-    
-    public InputStream inputStream() throws IOException {
-        return new FileInputStream(file);
-    }
-
-    /**
-     * Representations suitable for logging.
-     * @return a <code>String</code> representation 
-     * of this object.
-     */
-    @Override
-    public String toString()
-    {
-        return "FileDocument ( "
-            + "file = " + this.file + " "
-            + "name = " + this.name + " "
-            + "metaData = " + this.metaData + " "
-            + " )";
-    }
-    
-    
-}
diff --git a/0.12-release/apache-rat-core/src/main/java/org/apache/rat/document/impl/MonolithicFileDocument.java b/0.12-release/apache-rat-core/src/main/java/org/apache/rat/document/impl/MonolithicFileDocument.java
deleted file mode 100644
index 16e9e4e..0000000
--- a/0.12-release/apache-rat-core/src/main/java/org/apache/rat/document/impl/MonolithicFileDocument.java
+++ /dev/null
@@ -1,73 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one   *
- * or more contributor license agreements.  See the NOTICE file *
- * distributed with this work for additional information        *
- * regarding copyright ownership.  The ASF licenses this file   *
- * to you under the Apache License, Version 2.0 (the            *
- * "License"); you may not use this file except in compliance   *
- * with the License.  You may obtain a copy of the License at   *
- *                                                              *
- *   http://www.apache.org/licenses/LICENSE-2.0                 *
- *                                                              *
- * Unless required by applicable law or agreed to in writing,   *
- * software distributed under the License is distributed on an  *
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY       *
- * KIND, either express or implied.  See the License for the    *
- * specific language governing permissions and limitations      *
- * under the License.                                           *
- */
-package org.apache.rat.document.impl;
-
-import java.io.File;
-import java.io.FileInputStream;
-import java.io.FileReader;
-import java.io.IOException;
-import java.io.InputStream;
-import java.io.InputStreamReader;
-import java.io.Reader;
-import java.net.URL;
-
-import org.apache.rat.api.Document;
-
-
-public class MonolithicFileDocument extends AbstractMonolithicDocument {
-    private static final String UTF_8 = "UTF-8";
-
-    private static final String FILE_URL_PREFIX = "file";
-
-    private final File file;
-
-    /**
-     * @return Creates and returns a new instance.
-     *
-     * @param url The document is read from the given URL.
-     */
-    public static Document newInstance(final URL url) {
-        if (FILE_URL_PREFIX.equals(url.getProtocol())) {
-            final File f = new File(url.getFile());
-            return new MonolithicFileDocument(f);
-        }
-        return new AbstractMonolithicDocument(url.toExternalForm()){
-            public Reader reader() throws IOException {
-                return new InputStreamReader(inputStream(), UTF_8);
-           }
-
-            public InputStream inputStream() throws IOException {
-                return url.openStream();
-            }
-        };
-    }
-
-     public MonolithicFileDocument(final File file) {
-        super(DocumentImplUtils.toName(file));
-        this.file = file;
-    }
-
-     public Reader reader() throws IOException {
-        return new FileReader(file);
-    }
-
-     public InputStream inputStream() throws IOException {
-        return new FileInputStream(file);
-    }
-}
diff --git a/0.12-release/apache-rat-core/src/main/java/org/apache/rat/document/impl/guesser/ArchiveGuesser.java b/0.12-release/apache-rat-core/src/main/java/org/apache/rat/document/impl/guesser/ArchiveGuesser.java
deleted file mode 100644
index d3d44e6..0000000
--- a/0.12-release/apache-rat-core/src/main/java/org/apache/rat/document/impl/guesser/ArchiveGuesser.java
+++ /dev/null
@@ -1,66 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one   *
- * or more contributor license agreements.  See the NOTICE file *
- * distributed with this work for additional information        *
- * regarding copyright ownership.  The ASF licenses this file   *
- * to you under the Apache License, Version 2.0 (the            *
- * "License"); you may not use this file except in compliance   *
- * with the License.  You may obtain a copy of the License at   *
- *                                                              *
- *   http://www.apache.org/licenses/LICENSE-2.0                 *
- *                                                              *
- * Unless required by applicable law or agreed to in writing,   *
- * software distributed under the License is distributed on an  *
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY       *
- * KIND, either express or implied.  See the License for the    *
- * specific language governing permissions and limitations      *
- * under the License.                                           *
- */
-package org.apache.rat.document.impl.guesser;
-
-import java.util.Locale;
-
-import org.apache.rat.api.Document;
-
-public class ArchiveGuesser {
-
-    private static final String DOT = ".";
-
-    private static final String[] ARCHIVE_EXTENSIONS = {
-        "jar", "gz",
-        "zip", "tar",
-        "bz", "bz2",
-        "rar", "war",
-        "ear", "mar",
-        "par", "xar",
-        "odb", "odf",
-        "odg", "odp",
-        "ods", "odt",
-        "har", "sar",
-        "wsr",
-    };
-
-    /**
-     * @param document the current document.
-     * @return whether the given document is an archive.
-     */
-    public static final boolean isArchive(final Document document) {
-        return isArchive(document.getName());
-    }
-
-    /**
-     * @return Is a file by that name an archive?
-     * @param name file name to check against.
-     */
-    public static final boolean isArchive(final String name) {
-        if (name == null) {return false;}
-        String nameToLower = name.toLowerCase(Locale.US);
-        for (int i = 0; i < ArchiveGuesser.ARCHIVE_EXTENSIONS.length; i++) {
-            if (nameToLower.endsWith(DOT + ArchiveGuesser.ARCHIVE_EXTENSIONS[i])) {
-                return true;
-            }
-        }
-        return false;
-    }
-
-}
diff --git a/0.12-release/apache-rat-core/src/main/java/org/apache/rat/document/impl/guesser/BinaryGuesser.java b/0.12-release/apache-rat-core/src/main/java/org/apache/rat/document/impl/guesser/BinaryGuesser.java
deleted file mode 100644
index 16fa79e..0000000
--- a/0.12-release/apache-rat-core/src/main/java/org/apache/rat/document/impl/guesser/BinaryGuesser.java
+++ /dev/null
@@ -1,365 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one   *
- * or more contributor license agreements.  See the NOTICE file *
- * distributed with this work for additional information        *
- * regarding copyright ownership.  The ASF licenses this file   *
- * to you under the Apache License, Version 2.0 (the            *
- * "License"); you may not use this file except in compliance   *
- * with the License.  You may obtain a copy of the License at   *
- *                                                              *
- *   http://www.apache.org/licenses/LICENSE-2.0                 *
- *                                                              *
- * Unless required by applicable law or agreed to in writing,   *
- * software distributed under the License is distributed on an  *
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY       *
- * KIND, either express or implied.  See the License for the    *
- * specific language governing permissions and limitations      *
- * under the License.                                           *
- */
-package org.apache.rat.document.impl.guesser;
-
-import org.apache.commons.io.IOUtils;
-import org.apache.rat.api.Document;
-
-import java.io.IOException;
-import java.io.InputStream;
-import java.io.Reader;
-import java.nio.ByteBuffer;
-import java.nio.CharBuffer;
-import java.nio.charset.Charset;
-import java.nio.charset.CharsetDecoder;
-import java.nio.charset.CoderResult;
-import java.nio.charset.CodingErrorAction;
-import java.nio.charset.UnsupportedCharsetException;
-import java.util.Locale;
-
-/**
- * TODO: factor into MIME guesser and MIME-&gt;binary guesser
- */
-public class BinaryGuesser {
-
-    private static final String DOT = ".";
-
-    static final String FILE_ENCODING = "file.encoding";
-    private static Charset CHARSET_FROM_FILE_ENCODING_OR_UTF8 = getFileEncodingOrUTF8AsFallback();
-
-    private static boolean isBinaryDocument(Document document) {
-        boolean result = false;
-        InputStream stream = null;
-        try {
-            stream = document.inputStream();
-            result = isBinary(stream);
-        } catch (IOException e) {
-            result = false;
-        } finally {
-            IOUtils.closeQuietly(stream);
-        }
-        return result;
-    }
-
-    private static boolean isBinary(CharSequence taste) {
-        int highBytes = 0;
-        final int length = taste.length();
-        for (int i = 0; i < length; i++) {
-            char c = taste.charAt(i);
-            if (c > BinaryGuesser.NON_ASCII_THREASHOLD
-                    || c <= BinaryGuesser.ASCII_CHAR_THREASHOLD) {
-                highBytes++;
-            }
-        }
-        return highBytes * BinaryGuesser.HIGH_BYTES_RATIO
-                > length * BinaryGuesser.TOTAL_READ_RATIO;
-    }
-
-    /**
-     * @param in the file to check.
-     * @return Do the first few bytes of the stream hint at a binary file?
-     * <p>Any IOException is swallowed internally and the test returns
-     * false.</p>
-     * <p>This method may lead to false negatives if the reader throws
-     * an exception because it can't read characters according to the
-     * reader's encoding from the underlying stream.</p>
-     */
-    public static boolean isBinary(Reader in) {
-        char[] taste = new char[100];
-        try {
-            int bytesRead = in.read(taste);
-            if (bytesRead > 0) {
-                return isBinary(new String(taste, 0, bytesRead));
-            }
-        } catch (IOException e) {
-            // SWALLOW 
-        }
-        return false;
-    }
-
-    /**
-     * @param in the file to check.
-     * @return Do the first few bytes of the stream hint at a binary file?
-     * <p>Any IOException is swallowed internally and the test returns
-     * false.</p>
-     * <p>This method will try to read bytes from the stream and
-     * translate them to characters according to the platform's
-     * default encoding.  If any bytes can not be translated to
-     * characters it will assume the original data must be binary and
-     * return true.</p>
-     */
-    public static boolean isBinary(InputStream in) {
-        try {
-            byte[] taste = new byte[200];
-            int bytesRead = in.read(taste);
-            if (bytesRead > 0) {
-                ByteBuffer bytes = ByteBuffer.wrap(taste, 0, bytesRead);
-                CharBuffer chars = CharBuffer.allocate(2 * bytesRead);
-                CharsetDecoder cd = CHARSET_FROM_FILE_ENCODING_OR_UTF8.newDecoder()
-                        .onMalformedInput(CodingErrorAction.REPORT)
-                        .onUnmappableCharacter(CodingErrorAction.REPORT);
-                while (bytes.remaining() > 0) {
-                    CoderResult res = cd.decode(bytes, chars, true);
-                    if (res.isMalformed() || res.isUnmappable()) {
-                        return true;
-                    } else if (res.isOverflow()) {
-                        chars.limit(chars.position());
-                        chars.rewind();
-                        int c = chars.capacity() * 2;
-                        CharBuffer on = CharBuffer.allocate(c);
-                        on.put(chars);
-                        chars = on;
-                    }
-                }
-                chars.limit(chars.position());
-                chars.rewind();
-                return isBinary(chars);
-            }
-        } catch (IOException e) {
-            // SWALLOW 
-        }
-        return false;
-    }
-
-    static Charset getFileEncodingOrUTF8AsFallback() {
-        try {
-            return Charset.forName(System.getProperty(FILE_ENCODING));
-        } catch (UnsupportedCharsetException e) {
-            return Charset.forName("UTF-8");
-        }
-    }
-
-    /**
-     * @param name current file name.
-     * @return whether given name is binary.
-     */
-    public static final boolean isBinaryData(final String name) {
-        return extensionMatches(name, DATA_EXTENSIONS);
-    }
-
-    /**
-     * @param name current file name.
-     * @return Is a file by that name a known non-binary file?
-     */
-    public static final boolean isNonBinary(final String name) {
-        if (name == null) {
-            return false;
-        }
-        return extensionMatches(name.toUpperCase(Locale.US),
-                BinaryGuesser.NON_BINARY_EXTENSIONS);
-    }
-
-    /**
-     * @param name current file name.
-     * @return Is a file by that name an executable/binary file?
-     */
-    public static final boolean isExecutable(final String name) {
-        return name.equals(BinaryGuesser.JAVA) || extensionMatches(name, EXE_EXTENSIONS)
-                || containsExtension(name, EXE_EXTENSIONS);
-    }
-
-    public static boolean containsExtension(final String name,
-                                            final String[] exts) {
-        for (int i = 0; i < exts.length; i++) {
-            if (name.contains(DOT + exts[i] + DOT)) {
-                return true;
-            }
-        }
-        return false;
-    }
-
-    public static boolean extensionMatches(final String name,
-                                           final String[] exts) {
-        for (int i = 0; i < exts.length; i++) {
-            if (name.endsWith(DOT + exts[i])) {
-                return true;
-            }
-        }
-        return false;
-    }
-
-    public static boolean isBytecode(final String name) {
-        return BinaryGuesser.extensionMatches(name, BYTECODE_EXTENSIONS);
-    }
-
-    public static final boolean isImage(final String name) {
-        return BinaryGuesser.extensionMatches(name, IMAGE_EXTENSIONS);
-    }
-
-    public static final boolean isKeystore(final String name) {
-        return BinaryGuesser.extensionMatches(name, KEYSTORE_EXTENSIONS);
-    }
-
-    /**
-     * @param name file name.
-     * @return Is a file by that name a known binary file?
-     */
-    public static final boolean isBinary(final String name) {
-        if (name == null) {
-            return false;
-        }
-        String normalisedName = GuessUtils.normalise(name);
-        return BinaryGuesser.JAR_MANIFEST.equalsIgnoreCase(name) || BinaryGuesser.isImage(normalisedName)
-                || BinaryGuesser.isKeystore(normalisedName) || BinaryGuesser.isBytecode(normalisedName)
-                || BinaryGuesser.isBinaryData(normalisedName) || BinaryGuesser.isExecutable(normalisedName);
-    }
-
-    private static final String[] DATA_EXTENSIONS = {
-            "DAT", "DOC",
-            "NCB", "IDB",
-            "SUO", "XCF",
-            "RAJ", "CERT",
-            "KS", "TS",
-            "ODP", "SWF",
-            // fonts
-            "WOFF2", "WOFF", "TTF", "EOT"
-    };
-
-    private static final String[] EXE_EXTENSIONS = {
-            "EXE", "DLL",
-            "LIB", "SO",
-            "A", "EXP",
-    };
-
-    private static final String[] KEYSTORE_EXTENSIONS = {
-            "JKS", "KEYSTORE", "PEM", "CRL", "TRUSTSTORE"
-    };
-
-    private static final String[] IMAGE_EXTENSIONS = {
-            "PNG", "PDF",
-            "GIF", "GIFF",
-            "TIF", "TIFF",
-            "JPG", "JPEG",
-            "ICO", "ICNS",
-            "PSD",
-    };
-
-    private static final String[] BYTECODE_EXTENSIONS = {
-            "CLASS", "PYD",
-            "OBJ", "PYC",
-    };
-
-    /**
-     * Based on http://www.apache.org/dev/svn-eol-style.txt
-     */
-    private static final String[] NON_BINARY_EXTENSIONS = {
-            "AART",
-            "AC",
-            "AM",
-            "BAT",
-            "C",
-            "CAT",
-            "CGI",
-            "CLASSPATH",
-            "CMD",
-            "CONFIG",
-            "CPP",
-            "CSS",
-            "CWIKI",
-            "DATA",
-            "DCL",
-            "DTD",
-            "EGRM",
-            "ENT",
-            "FT",
-            "FN",
-            "FV",
-            "GRM",
-            "G",
-            "H",
-            "HTACCESS",
-            "HTML",
-            "IHTML",
-            "IN",
-            "JAVA",
-            "JMX",
-            "JSP",
-            "JS",
-            "JUNIT",
-            "JX",
-            "MANIFEST",
-            "M4",
-            "MF",
-            "MF",
-            "META",
-            "MOD",
-            "N3",
-            "PEN",
-            "PL",
-            "PM",
-            "POD",
-            "POM",
-            "PROJECT",
-            "PROPERTIES",
-            "PY",
-            "RB",
-            "RDF",
-            "RNC",
-            "RNG",
-            "RNX",
-            "ROLES",
-            "RSS",
-            "SH",
-            "SQL",
-            "SVG",
-            "TLD",
-            "TXT",
-            "TYPES",
-            "VM",
-            "VSL",
-            "WSDD",
-            "WSDL",
-            "XARGS",
-            "XCAT",
-            "XCONF",
-            "XEGRM",
-            "XGRM",
-            "XLEX",
-            "XLOG",
-            "XMAP",
-            "XML",
-            "XROLES",
-            "XSAMPLES",
-            "XSD",
-            "XSL",
-            "XSLT",
-            "XSP",
-            "XUL",
-            "XWEB",
-            "XWELCOME",
-    };
-    public static final String JAR_MANIFEST = "MANIFEST.MF";
-    public static final String JAVA = "JAVA";
-    public static final int HIGH_BYTES_RATIO = 100;
-    public static final int TOTAL_READ_RATIO = 30;
-    public static final int NON_ASCII_THREASHOLD = 256;
-    public static final int ASCII_CHAR_THREASHOLD = 8;
-
-    public static final boolean isBinary(final Document document) {
-        // TODO: reimplement the binary test algorithm?
-        // TODO: more efficient to move into standard analysis
-        // TODO: then use binary as default
-        return isBinary(document.getName())
-                ||
-                // try a taste
-                isBinaryDocument(document);
-    }
-
-
-}
diff --git a/0.12-release/apache-rat-core/src/main/java/org/apache/rat/document/impl/guesser/GuessUtils.java b/0.12-release/apache-rat-core/src/main/java/org/apache/rat/document/impl/guesser/GuessUtils.java
deleted file mode 100644
index d56a672..0000000
--- a/0.12-release/apache-rat-core/src/main/java/org/apache/rat/document/impl/guesser/GuessUtils.java
+++ /dev/null
@@ -1,43 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one   *
- * or more contributor license agreements.  See the NOTICE file *
- * distributed with this work for additional information        *
- * regarding copyright ownership.  The ASF licenses this file   *
- * to you under the Apache License, Version 2.0 (the            *
- * "License"); you may not use this file except in compliance   *
- * with the License.  You may obtain a copy of the License at   *
- *                                                              *
- *   http://www.apache.org/licenses/LICENSE-2.0                 *
- *                                                              *
- * Unless required by applicable law or agreed to in writing,   *
- * software distributed under the License is distributed on an  *
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY       *
- * KIND, either express or implied.  See the License for the    *
- * specific language governing permissions and limitations      *
- * under the License.                                           *
- */ 
-package org.apache.rat.document.impl.guesser;
-
-import java.util.Locale;
-
-import org.apache.commons.lang.StringUtils;
-
-public class GuessUtils {
-    
-    private static final String[] SEPARATORS = {"/", "\\"};
-    
-    /**
-     * Converts name to upper case and strips any path.
-     * @param name not null
-     * @return not null
-     */
-    public static final String normalise(final String name) {
-        String result = name.toUpperCase(Locale.US);
-        final int lastSeparatorIndex = StringUtils.lastIndexOfAny(result, SEPARATORS);
-        final int length = result.length();
-        if (lastSeparatorIndex >= 0 && lastSeparatorIndex < length) {
-            result = result.substring(lastSeparatorIndex + 1);
-        }
-        return result;
-    }
-}
diff --git a/0.12-release/apache-rat-core/src/main/java/org/apache/rat/document/impl/guesser/NoteGuesser.java b/0.12-release/apache-rat-core/src/main/java/org/apache/rat/document/impl/guesser/NoteGuesser.java
deleted file mode 100644
index d0b9901..0000000
--- a/0.12-release/apache-rat-core/src/main/java/org/apache/rat/document/impl/guesser/NoteGuesser.java
+++ /dev/null
@@ -1,84 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one   *
- * or more contributor license agreements.  See the NOTICE file *
- * distributed with this work for additional information        *
- * regarding copyright ownership.  The ASF licenses this file   *
- * to you under the Apache License, Version 2.0 (the            *
- * "License"); you may not use this file except in compliance   *
- * with the License.  You may obtain a copy of the License at   *
- *                                                              *
- *   http://www.apache.org/licenses/LICENSE-2.0                 *
- *                                                              *
- * Unless required by applicable law or agreed to in writing,   *
- * software distributed under the License is distributed on an  *
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY       *
- * KIND, either express or implied.  See the License for the    *
- * specific language governing permissions and limitations      *
- * under the License.                                           *
- */
-package org.apache.rat.document.impl.guesser;
-
-import java.util.Arrays;
-import java.util.List;
-
-import org.apache.rat.api.Document;
-
-public class NoteGuesser {
-
-    private static final String DOT = ".";
-
-    private static final String[] NOTE_FILE_NAMES = {
-        "NOTICE", "LICENSE",
-        "LICENSE.TXT", "NOTICE.TXT",
-        "INSTALL", "INSTALL.TXT",
-        "README", "README.TXT",
-        "NEWS", "NEWS.TXT",
-        "AUTHOR", "AUTHOR.TXT",
-        "AUTHORS", "AUTHORS.txt",
-        "CHANGELOG", "CHANGELOG.TXT",
-        "DISCLAIMER", "DISCLAIMER.TXT",
-        "KEYS", "KEYS.TXT",
-        "RELEASE-NOTES", "RELEASE-NOTES.TXT",
-        "RELEASE_NOTES", "RELEASE_NOTES.TXT",
-        "UPGRADE", "UPGRADE.TXT",
-        "STATUS", "STATUS.TXT",
-        "THIRD_PARTY_NOTICES", "THIRD_PARTY_NOTICES.TXT",
-        "COPYRIGHT", "COPYRIGHT.TXT",
-        "BUILDING", "BUILDING.TXT",
-        "BUILD", "BUILT.TXT",//
-        "DEPENDENCIES"
-    };
-
-    private static final String[] NOTE_FILE_EXTENSIONS = {
-        "LICENSE", "LICENSE.TXT",
-        "NOTICE", "NOTICE.TXT",
-    };
-
-    /**
-     * @return Is a file by that name a note file?
-     * @param name file name.
-     */
-    public static final boolean isNote(final String name) {
-        if (name == null) {return false;}
-
-        List<String> l = Arrays.asList(NoteGuesser.NOTE_FILE_NAMES);
-        String normalisedName = GuessUtils.normalise(name);
-
-        if (l.contains(name) || l.contains(normalisedName)) {
-            return true;
-        }
-
-        for (int i = 0; i < NoteGuesser.NOTE_FILE_EXTENSIONS.length; i++) {
-            if (normalisedName.endsWith(DOT + NoteGuesser.NOTE_FILE_EXTENSIONS[i])) {
-                return true;
-            }
-        }
-
-        return false;
-    }
-
-    public static final boolean isNote(final Document document) {
-        return isNote(document.getName());
-    }
-
-}
diff --git a/0.12-release/apache-rat-core/src/main/java/org/apache/rat/document/impl/util/DocumentAnalyserMultiplexer.java b/0.12-release/apache-rat-core/src/main/java/org/apache/rat/document/impl/util/DocumentAnalyserMultiplexer.java
deleted file mode 100644
index da2126e..0000000
--- a/0.12-release/apache-rat-core/src/main/java/org/apache/rat/document/impl/util/DocumentAnalyserMultiplexer.java
+++ /dev/null
@@ -1,40 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one   *
- * or more contributor license agreements.  See the NOTICE file *
- * distributed with this work for additional information        *
- * regarding copyright ownership.  The ASF licenses this file   *
- * to you under the Apache License, Version 2.0 (the            *
- * "License"); you may not use this file except in compliance   *
- * with the License.  You may obtain a copy of the License at   *
- *                                                              *
- *   http://www.apache.org/licenses/LICENSE-2.0                 *
- *                                                              *
- * Unless required by applicable law or agreed to in writing,   *
- * software distributed under the License is distributed on an  *
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY       *
- * KIND, either express or implied.  See the License for the    *
- * specific language governing permissions and limitations      *
- * under the License.                                           *
- */ 
-package org.apache.rat.document.impl.util;
-
-import org.apache.rat.api.Document;
-import org.apache.rat.document.IDocumentAnalyser;
-import org.apache.rat.document.RatDocumentAnalysisException;
-
-public class DocumentAnalyserMultiplexer implements IDocumentAnalyser {
-
-    private final IDocumentAnalyser[] analysers;
-    
-    public DocumentAnalyserMultiplexer(final IDocumentAnalyser[] analysers) {
-        super();
-        this.analysers = analysers;
-    }
-
-    public void analyse(Document document) throws RatDocumentAnalysisException {
-        for (IDocumentAnalyser analyser : analysers) {
-            analyser.analyse(document);
-        }
-    }
-
-}
diff --git a/0.12-release/apache-rat-core/src/main/java/org/apache/rat/header/ArrayCharFilter.java b/0.12-release/apache-rat-core/src/main/java/org/apache/rat/header/ArrayCharFilter.java
deleted file mode 100644
index 762f825..0000000
--- a/0.12-release/apache-rat-core/src/main/java/org/apache/rat/header/ArrayCharFilter.java
+++ /dev/null
@@ -1,43 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one   *
- * or more contributor license agreements.  See the NOTICE file *
- * distributed with this work for additional information        *
- * regarding copyright ownership.  The ASF licenses this file   *
- * to you under the Apache License, Version 2.0 (the            *
- * "License"); you may not use this file except in compliance   *
- * with the License.  You may obtain a copy of the License at   *
- *                                                              *
- *   http://www.apache.org/licenses/LICENSE-2.0                 *
- *                                                              *
- * Unless required by applicable law or agreed to in writing,   *
- * software distributed under the License is distributed on an  *
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY       *
- * KIND, either express or implied.  See the License for the    *
- * specific language governing permissions and limitations      *
- * under the License.                                           *
- */ 
-package org.apache.rat.header;
-
-class ArrayCharFilter implements CharFilter {
-
-    private final char[] filtered;
-    private final int length;
-    
-    protected ArrayCharFilter(final char[] filtered) {
-        super();
-        this.filtered = filtered;
-        length = filtered.length;
-    }
-
-    public boolean isFilteredOut(char character) {
-        boolean result = false;
-        for(int i=0; i<length ;i++) {
-            if (character == filtered[i]) {
-                result = true;
-                break;
-            }
-        }
-        return result;
-    }
-
-}
diff --git a/0.12-release/apache-rat-core/src/main/java/org/apache/rat/header/CharFilter.java b/0.12-release/apache-rat-core/src/main/java/org/apache/rat/header/CharFilter.java
deleted file mode 100644
index 76011e3..0000000
--- a/0.12-release/apache-rat-core/src/main/java/org/apache/rat/header/CharFilter.java
+++ /dev/null
@@ -1,30 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one   *
- * or more contributor license agreements.  See the NOTICE file *
- * distributed with this work for additional information        *
- * regarding copyright ownership.  The ASF licenses this file   *
- * to you under the Apache License, Version 2.0 (the            *
- * "License"); you may not use this file except in compliance   *
- * with the License.  You may obtain a copy of the License at   *
- *                                                              *
- *   http://www.apache.org/licenses/LICENSE-2.0                 *
- *                                                              *
- * Unless required by applicable law or agreed to in writing,   *
- * software distributed under the License is distributed on an  *
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY       *
- * KIND, either express or implied.  See the License for the    *
- * specific language governing permissions and limitations      *
- * under the License.                                           *
- */ 
-package org.apache.rat.header;
-
-interface CharFilter {
-
-    /**
-     * Is the given character filtered out?
-     * @param character character to be filtered
-     * @return true if this character should be filtered out,
-     * false if this character should be filtered in
-     */
-    boolean isFilteredOut(char character);
-}
diff --git a/0.12-release/apache-rat-core/src/main/java/org/apache/rat/header/FilteringSequenceFactory.java b/0.12-release/apache-rat-core/src/main/java/org/apache/rat/header/FilteringSequenceFactory.java
deleted file mode 100644
index f01dc0f..0000000
--- a/0.12-release/apache-rat-core/src/main/java/org/apache/rat/header/FilteringSequenceFactory.java
+++ /dev/null
@@ -1,59 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one   *
- * or more contributor license agreements.  See the NOTICE file *
- * distributed with this work for additional information        *
- * regarding copyright ownership.  The ASF licenses this file   *
- * to you under the Apache License, Version 2.0 (the            *
- * "License"); you may not use this file except in compliance   *
- * with the License.  You may obtain a copy of the License at   *
- *                                                              *
- *   http://www.apache.org/licenses/LICENSE-2.0                 *
- *                                                              *
- * Unless required by applicable law or agreed to in writing,   *
- * software distributed under the License is distributed on an  *
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY       *
- * KIND, either express or implied.  See the License for the    *
- * specific language governing permissions and limitations      *
- * under the License.                                           *
- */ 
-package org.apache.rat.header;
-
-import java.io.IOException;
-import java.io.Reader;
-import java.nio.CharBuffer;
-
-class FilteringSequenceFactory {
-    
-    private static final int BUFFER_CAPACITY = 5000;
-    
-    private final CharBuffer buffer;
-    private final CharFilter filter;
-    
-    public FilteringSequenceFactory(final CharFilter filter) {
-        this(BUFFER_CAPACITY, filter);
-    }
-    
-    public FilteringSequenceFactory(final int capacity, final CharFilter filter) {
-        this.buffer = CharBuffer.allocate(capacity);
-        this.filter = filter;
-    }
-
-    public CharSequence filter(Reader reader) throws IOException {
-        buffer.clear();
-        boolean eof = false;
-        while(!eof) {
-            final int next = reader.read();
-            if (next == -1 || !buffer.hasRemaining()) {
-                eof = true;
-            } else {
-                final char character = (char) next;
-                if (!filter.isFilteredOut(character))
-                {
-                    buffer.put(character); 
-                }
-            }
-        }
-        buffer.limit(buffer.position()).rewind();
-        return buffer;
-    }
-}
diff --git a/0.12-release/apache-rat-core/src/main/java/org/apache/rat/header/HeaderBean.java b/0.12-release/apache-rat-core/src/main/java/org/apache/rat/header/HeaderBean.java
deleted file mode 100644
index f55fa83..0000000
--- a/0.12-release/apache-rat-core/src/main/java/org/apache/rat/header/HeaderBean.java
+++ /dev/null
@@ -1,62 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one   *
- * or more contributor license agreements.  See the NOTICE file *
- * distributed with this work for additional information        *
- * regarding copyright ownership.  The ASF licenses this file   *
- * to you under the Apache License, Version 2.0 (the            *
- * "License"); you may not use this file except in compliance   *
- * with the License.  You may obtain a copy of the License at   *
- *                                                              *
- *   http://www.apache.org/licenses/LICENSE-2.0                 *
- *                                                              *
- * Unless required by applicable law or agreed to in writing,   *
- * software distributed under the License is distributed on an  *
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY       *
- * KIND, either express or implied.  See the License for the    *
- * specific language governing permissions and limitations      *
- * under the License.                                           *
- */ 
-package org.apache.rat.header;
-
-import java.util.regex.Pattern;
-
-public class HeaderBean {
-
-    private Pattern headerPattern;
-    private boolean match;
-    
-    public HeaderBean() {
-        super();
-    }
-    
-    public HeaderBean(Pattern headerPattern, boolean match) {
-        super();
-        this.headerPattern = headerPattern;
-        this.match = match;
-    }
-
-    /**
-     * Gets the header pattern to be matched.
-     * @return <code>Patter</code>
-     * or null when no match is to be made
-     */
-    public Pattern getHeaderPattern() {
-        return headerPattern;
-    }
-    
-    /**
-     * Sets the header pattern to be matched.
-     * @param headerPattern <code>Patter</code>
-     * or null when no match is to be made
-     */
-    public void setHeaderPattern(Pattern headerPattern) {
-        this.headerPattern = headerPattern;
-    }
-    
-    public boolean isMatch() {
-        return match;
-    }
-    public void setMatch(boolean match) {
-        this.match = match;
-    }
-}
diff --git a/0.12-release/apache-rat-core/src/main/java/org/apache/rat/header/HeaderMatcher.java b/0.12-release/apache-rat-core/src/main/java/org/apache/rat/header/HeaderMatcher.java
deleted file mode 100644
index 134152c..0000000
--- a/0.12-release/apache-rat-core/src/main/java/org/apache/rat/header/HeaderMatcher.java
+++ /dev/null
@@ -1,104 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one   *
- * or more contributor license agreements.  See the NOTICE file *
- * distributed with this work for additional information        *
- * regarding copyright ownership.  The ASF licenses this file   *
- * to you under the Apache License, Version 2.0 (the            *
- * "License"); you may not use this file except in compliance   *
- * with the License.  You may obtain a copy of the License at   *
- *                                                              *
- *   http://www.apache.org/licenses/LICENSE-2.0                 *
- *                                                              *
- * Unless required by applicable law or agreed to in writing,   *
- * software distributed under the License is distributed on an  *
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY       *
- * KIND, either express or implied.  See the License for the    *
- * specific language governing permissions and limitations      *
- * under the License.                                           *
- */ 
-package org.apache.rat.header;
-
-import java.io.IOException;
-import java.io.LineNumberReader;
-import java.io.Reader;
-import java.util.regex.Matcher;
-import java.util.regex.Pattern;
-
-/**
- * <p>Matches headers.</p>
- * <p><strong>Usage:</strong></p>
- * <ol>
- * <li>{@link #read(Reader)} content</li>
- * <li>{@link #matches(Pattern)} against filtered content</li>
- * </ol>
- * <p><strong>Note:</strong> use only from a single thread.</p>
- *
- */
-public class HeaderMatcher {
-
-    private final FilteringSequenceFactory factory;
-    private final HeaderBean[] headers;
-    private CharSequence read;
-    private int lines;
-    
-    public HeaderMatcher(final CharFilter filter, final int capacity) {
-        this(filter, capacity, null);
-    }
-    
-    public HeaderMatcher(final CharFilter filter, final int capacity, final HeaderBean[] headers) {
-        factory = new FilteringSequenceFactory(capacity, filter);
-        read = null;
-        this.headers = headers;
-    }
-    
-    public void read(Reader reader) throws IOException {
-        final LineNumberReader lineNumberReader = new LineNumberReader(reader);
-        read = factory.filter(lineNumberReader);
-        if (lineNumberReader.read() == -1) {
-            lines = lineNumberReader.getLineNumber();
-        } else {
-            lines = -1;
-        }
-        if (headers != null) {
-            final int length = headers.length;
-            for (int i=0;i<length;i++) {
-                final HeaderBean headerBean = headers[i];
-                if (headerBean != null) {
-                    final Pattern headerPattern = headerBean.getHeaderPattern();
-                    if (headerPattern != null) {
-                        final boolean matches = matches(headerPattern);
-                        headerBean.setMatch(matches);
-                    }
-                }
-            }
-        }
-    }
-    
-    /**
-     * <p>Seeks a match in the last headers read.</p>
-     * <p><strong>Note</strong> that this pattern
-     * must not contain filtered characters.
-     * </p>
-     * @param pattern <code>Pattern</code> to match
-     * @return true if the pattern matches,
-     * false otherwise or if {@link #read(Reader)} has not been
-     * called
-     */
-    public boolean matches(Pattern pattern) {
-        boolean result = false;
-        if (read != null) {
-            final Matcher matcher = pattern.matcher(read);
-            result = matcher.matches();
-        }
-        return result;
-    }
-    
-    /**
-     * Number of lines read.
-     * @return the number of lines in the file
-     * or -1 if the file has more lines than were read
-     */
-    public int lines() {
-        return lines;
-    }
-}
diff --git a/0.12-release/apache-rat-core/src/main/java/org/apache/rat/license/AcademicFree21LicenseFamily.java b/0.12-release/apache-rat-core/src/main/java/org/apache/rat/license/AcademicFree21LicenseFamily.java
deleted file mode 100644
index bc870c3..0000000
--- a/0.12-release/apache-rat-core/src/main/java/org/apache/rat/license/AcademicFree21LicenseFamily.java
+++ /dev/null
@@ -1,27 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one   *
- * or more contributor license agreements.  See the NOTICE file *
- * distributed with this work for additional information        *
- * regarding copyright ownership.  The ASF licenses this file   *
- * to you under the Apache License, Version 2.0 (the            *
- * "License"); you may not use this file except in compliance   *
- * with the License.  You may obtain a copy of the License at   *
- *                                                              *
- *   http://www.apache.org/licenses/LICENSE-2.0                 *
- *                                                              *
- * Unless required by applicable law or agreed to in writing,   *
- * software distributed under the License is distributed on an  *
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY       *
- * KIND, either express or implied.  See the License for the    *
- * specific language governing permissions and limitations      *
- * under the License.                                           *
- */ 
-package org.apache.rat.license;
-
-import org.apache.rat.api.MetaData;
-
-public class AcademicFree21LicenseFamily extends SimpleLicenseFamily {
-    public AcademicFree21LicenseFamily() {
-        super(MetaData.RAT_LICENSE_FAMILY_NAME_VALUE_ACADEMIC_FREE_LICENSE_VERSION_2_1);
-    }
-}
diff --git a/0.12-release/apache-rat-core/src/main/java/org/apache/rat/license/Apache20LicenseFamily.java b/0.12-release/apache-rat-core/src/main/java/org/apache/rat/license/Apache20LicenseFamily.java
deleted file mode 100644
index 17abbcd..0000000
--- a/0.12-release/apache-rat-core/src/main/java/org/apache/rat/license/Apache20LicenseFamily.java
+++ /dev/null
@@ -1,27 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one   *
- * or more contributor license agreements.  See the NOTICE file *
- * distributed with this work for additional information        *
- * regarding copyright ownership.  The ASF licenses this file   *
- * to you under the Apache License, Version 2.0 (the            *
- * "License"); you may not use this file except in compliance   *
- * with the License.  You may obtain a copy of the License at   *
- *                                                              *
- *   http://www.apache.org/licenses/LICENSE-2.0                 *
- *                                                              *
- * Unless required by applicable law or agreed to in writing,   *
- * software distributed under the License is distributed on an  *
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY       *
- * KIND, either express or implied.  See the License for the    *
- * specific language governing permissions and limitations      *
- * under the License.                                           *
- */ 
-package org.apache.rat.license;
-
-import org.apache.rat.api.MetaData;
-
-public final class Apache20LicenseFamily extends SimpleLicenseFamily {
-    public Apache20LicenseFamily() {
-        super(MetaData.RAT_LICENSE_FAMILY_NAME_VALUE_APACHE_LICENSE_VERSION_2_0);
-    }
-}
diff --git a/0.12-release/apache-rat-core/src/main/java/org/apache/rat/license/CDDL1LicenseFamily.java b/0.12-release/apache-rat-core/src/main/java/org/apache/rat/license/CDDL1LicenseFamily.java
deleted file mode 100644
index 6bf01c0..0000000
--- a/0.12-release/apache-rat-core/src/main/java/org/apache/rat/license/CDDL1LicenseFamily.java
+++ /dev/null
@@ -1,31 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one   *
- * or more contributor license agreements.  See the NOTICE file *
- * distributed with this work for additional information        *
- * regarding copyright ownership.  The ASF licenses this file   *
- * to you under the Apache License, Version 2.0 (the            *
- * "License"); you may not use this file except in compliance   *
- * with the License.  You may obtain a copy of the License at   *
- *                                                              *
- *   http://www.apache.org/licenses/LICENSE-2.0                 *
- *                                                              *
- * Unless required by applicable law or agreed to in writing,   *
- * software distributed under the License is distributed on an  *
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY       *
- * KIND, either express or implied.  See the License for the    *
- * specific language governing permissions and limitations      *
- * under the License.                                           *
- */
-package org.apache.rat.license;
-
-import org.apache.rat.api.MetaData;
-
-/**
- * Base implementation for CDDL 1.0 licenses.
- */
-public class CDDL1LicenseFamily extends SimpleLicenseFamily {
-
-    public CDDL1LicenseFamily() {
-        super(MetaData.RAT_LICENSE_FAMILY_NAME_VALUE_CDDL1);
-    }
-}
diff --git a/0.12-release/apache-rat-core/src/main/java/org/apache/rat/license/GPL1LicenseFamily.java b/0.12-release/apache-rat-core/src/main/java/org/apache/rat/license/GPL1LicenseFamily.java
deleted file mode 100644
index bdfd86e..0000000
--- a/0.12-release/apache-rat-core/src/main/java/org/apache/rat/license/GPL1LicenseFamily.java
+++ /dev/null
@@ -1,31 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one   *
- * or more contributor license agreements.  See the NOTICE file *
- * distributed with this work for additional information        *
- * regarding copyright ownership.  The ASF licenses this file   *
- * to you under the Apache License, Version 2.0 (the            *
- * "License"); you may not use this file except in compliance   *
- * with the License.  You may obtain a copy of the License at   *
- *                                                              *
- *   http://www.apache.org/licenses/LICENSE-2.0                 *
- *                                                              *
- * Unless required by applicable law or agreed to in writing,   *
- * software distributed under the License is distributed on an  *
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY       *
- * KIND, either express or implied.  See the License for the    *
- * specific language governing permissions and limitations      *
- * under the License.                                           *
- */ 
-package org.apache.rat.license;
-
-import org.apache.rat.api.MetaData;
-
-/**
- * Base implementation for GPLv1 or later.
- */
-public class GPL1LicenseFamily extends SimpleLicenseFamily {
-    public GPL1LicenseFamily() {
-        super(MetaData.RAT_LICENSE_FAMILY_NAME_VALUE_GPL_VERSION_1);
-    }
-
-}
diff --git a/0.12-release/apache-rat-core/src/main/java/org/apache/rat/license/GPL2LicenseFamily.java b/0.12-release/apache-rat-core/src/main/java/org/apache/rat/license/GPL2LicenseFamily.java
deleted file mode 100644
index e2d2522..0000000
--- a/0.12-release/apache-rat-core/src/main/java/org/apache/rat/license/GPL2LicenseFamily.java
+++ /dev/null
@@ -1,31 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one   *
- * or more contributor license agreements.  See the NOTICE file *
- * distributed with this work for additional information        *
- * regarding copyright ownership.  The ASF licenses this file   *
- * to you under the Apache License, Version 2.0 (the            *
- * "License"); you may not use this file except in compliance   *
- * with the License.  You may obtain a copy of the License at   *
- *                                                              *
- *   http://www.apache.org/licenses/LICENSE-2.0                 *
- *                                                              *
- * Unless required by applicable law or agreed to in writing,   *
- * software distributed under the License is distributed on an  *
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY       *
- * KIND, either express or implied.  See the License for the    *
- * specific language governing permissions and limitations      *
- * under the License.                                           *
- */ 
-package org.apache.rat.license;
-
-import org.apache.rat.api.MetaData;
-
-/**
- * Base implementation for GPLv2 or later.
- */
-public class GPL2LicenseFamily extends SimpleLicenseFamily {
-    public GPL2LicenseFamily() {
-        super(MetaData.RAT_LICENSE_FAMILY_NAME_VALUE_GPL_VERSION_2);
-    }
-
-}
diff --git a/0.12-release/apache-rat-core/src/main/java/org/apache/rat/license/GPL3LicenseFamily.java b/0.12-release/apache-rat-core/src/main/java/org/apache/rat/license/GPL3LicenseFamily.java
deleted file mode 100644
index 9d91466..0000000
--- a/0.12-release/apache-rat-core/src/main/java/org/apache/rat/license/GPL3LicenseFamily.java
+++ /dev/null
@@ -1,31 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one   *
- * or more contributor license agreements.  See the NOTICE file *
- * distributed with this work for additional information        *
- * regarding copyright ownership.  The ASF licenses this file   *
- * to you under the Apache License, Version 2.0 (the            *
- * "License"); you may not use this file except in compliance   *
- * with the License.  You may obtain a copy of the License at   *
- *                                                              *
- *   http://www.apache.org/licenses/LICENSE-2.0                 *
- *                                                              *
- * Unless required by applicable law or agreed to in writing,   *
- * software distributed under the License is distributed on an  *
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY       *
- * KIND, either express or implied.  See the License for the    *
- * specific language governing permissions and limitations      *
- * under the License.                                           *
- */ 
-package org.apache.rat.license;
-
-import org.apache.rat.api.MetaData;
-
-/**
- * Base implementation for GPLv3 or later.
- */
-public class GPL3LicenseFamily extends SimpleLicenseFamily {
-    public GPL3LicenseFamily() {
-        super(MetaData.RAT_LICENSE_FAMILY_NAME_VALUE_GPL_VERSION_3);
-    }
-
-}
diff --git a/0.12-release/apache-rat-core/src/main/java/org/apache/rat/license/ILicenseFamily.java b/0.12-release/apache-rat-core/src/main/java/org/apache/rat/license/ILicenseFamily.java
deleted file mode 100644
index 97ef9a9..0000000
--- a/0.12-release/apache-rat-core/src/main/java/org/apache/rat/license/ILicenseFamily.java
+++ /dev/null
@@ -1,24 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one   *
- * or more contributor license agreements.  See the NOTICE file *
- * distributed with this work for additional information        *
- * regarding copyright ownership.  The ASF licenses this file   *
- * to you under the Apache License, Version 2.0 (the            *
- * "License"); you may not use this file except in compliance   *
- * with the License.  You may obtain a copy of the License at   *
- *                                                              *
- *   http://www.apache.org/licenses/LICENSE-2.0                 *
- *                                                              *
- * Unless required by applicable law or agreed to in writing,   *
- * software distributed under the License is distributed on an  *
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY       *
- * KIND, either express or implied.  See the License for the    *
- * specific language governing permissions and limitations      *
- * under the License.                                           *
- */ 
-package org.apache.rat.license;
-
-
-public interface ILicenseFamily {
-    String getFamilyName();
-}
diff --git a/0.12-release/apache-rat-core/src/main/java/org/apache/rat/license/MITLicenseFamily.java b/0.12-release/apache-rat-core/src/main/java/org/apache/rat/license/MITLicenseFamily.java
deleted file mode 100644
index c6453d0..0000000
--- a/0.12-release/apache-rat-core/src/main/java/org/apache/rat/license/MITLicenseFamily.java
+++ /dev/null
@@ -1,31 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one   *
- * or more contributor license agreements.  See the NOTICE file *
- * distributed with this work for additional information        *
- * regarding copyright ownership.  The ASF licenses this file   *
- * to you under the Apache License, Version 2.0 (the            *
- * "License"); you may not use this file except in compliance   *
- * with the License.  You may obtain a copy of the License at   *
- *                                                              *
- *   http://www.apache.org/licenses/LICENSE-2.0                 *
- *                                                              *
- * Unless required by applicable law or agreed to in writing,   *
- * software distributed under the License is distributed on an  *
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY       *
- * KIND, either express or implied.  See the License for the    *
- * specific language governing permissions and limitations      *
- * under the License.                                           *
- */ 
-package org.apache.rat.license;
-
-import org.apache.rat.api.MetaData;
-
-/**
- * Base implementation for MIT licenses.
- */
-public class MITLicenseFamily extends SimpleLicenseFamily {
-    public MITLicenseFamily() {
-        super(MetaData.RAT_LICENSE_FAMILY_NAME_VALUE_MIT);
-    }
-
-}
diff --git a/0.12-release/apache-rat-core/src/main/java/org/apache/rat/license/ModifiedBSDLicenseFamily.java b/0.12-release/apache-rat-core/src/main/java/org/apache/rat/license/ModifiedBSDLicenseFamily.java
deleted file mode 100644
index d94de97..0000000
--- a/0.12-release/apache-rat-core/src/main/java/org/apache/rat/license/ModifiedBSDLicenseFamily.java
+++ /dev/null
@@ -1,27 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one   *
- * or more contributor license agreements.  See the NOTICE file *
- * distributed with this work for additional information        *
- * regarding copyright ownership.  The ASF licenses this file   *
- * to you under the Apache License, Version 2.0 (the            *
- * "License"); you may not use this file except in compliance   *
- * with the License.  You may obtain a copy of the License at   *
- *                                                              *
- *   http://www.apache.org/licenses/LICENSE-2.0                 *
- *                                                              *
- * Unless required by applicable law or agreed to in writing,   *
- * software distributed under the License is distributed on an  *
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY       *
- * KIND, either express or implied.  See the License for the    *
- * specific language governing permissions and limitations      *
- * under the License.                                           *
- */ 
-package org.apache.rat.license;
-
-import org.apache.rat.api.MetaData;
-
-public class ModifiedBSDLicenseFamily extends SimpleLicenseFamily {
-    public ModifiedBSDLicenseFamily() {
-        super(MetaData.RAT_LICENSE_FAMILY_NAME_VALUE_MODIFIED_BSD_LICENSE);
-    }
-}
diff --git a/0.12-release/apache-rat-core/src/main/java/org/apache/rat/license/OASISLicenseFamily.java b/0.12-release/apache-rat-core/src/main/java/org/apache/rat/license/OASISLicenseFamily.java
deleted file mode 100644
index 17c2709..0000000
--- a/0.12-release/apache-rat-core/src/main/java/org/apache/rat/license/OASISLicenseFamily.java
+++ /dev/null
@@ -1,27 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one   *
- * or more contributor license agreements.  See the NOTICE file *
- * distributed with this work for additional information        *
- * regarding copyright ownership.  The ASF licenses this file   *
- * to you under the Apache License, Version 2.0 (the            *
- * "License"); you may not use this file except in compliance   *
- * with the License.  You may obtain a copy of the License at   *
- *                                                              *
- *   http://www.apache.org/licenses/LICENSE-2.0                 *
- *                                                              *
- * Unless required by applicable law or agreed to in writing,   *
- * software distributed under the License is distributed on an  *
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY       *
- * KIND, either express or implied.  See the License for the    *
- * specific language governing permissions and limitations      *
- * under the License.                                           *
- */ 
-package org.apache.rat.license;
-
-import org.apache.rat.api.MetaData;
-
-public final class OASISLicenseFamily extends SimpleLicenseFamily {
-    public OASISLicenseFamily() {
-        super(MetaData.RAT_LICENSE_FAMILY_NAME_VALUE_OASIS_OPEN_LICENSE);
-    }
-}
diff --git a/0.12-release/apache-rat-core/src/main/java/org/apache/rat/license/SimpleLicenseFamily.java b/0.12-release/apache-rat-core/src/main/java/org/apache/rat/license/SimpleLicenseFamily.java
deleted file mode 100644
index 24231dd..0000000
--- a/0.12-release/apache-rat-core/src/main/java/org/apache/rat/license/SimpleLicenseFamily.java
+++ /dev/null
@@ -1,43 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one   *
- * or more contributor license agreements.  See the NOTICE file *
- * distributed with this work for additional information        *
- * regarding copyright ownership.  The ASF licenses this file   *
- * to you under the Apache License, Version 2.0 (the            *
- * "License"); you may not use this file except in compliance   *
- * with the License.  You may obtain a copy of the License at   *
- *                                                              *
- *   http://www.apache.org/licenses/LICENSE-2.0                 *
- *                                                              *
- * Unless required by applicable law or agreed to in writing,   *
- * software distributed under the License is distributed on an  *
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY       *
- * KIND, either express or implied.  See the License for the    *
- * specific language governing permissions and limitations      *
- * under the License.                                           *
- */ 
-package org.apache.rat.license;
-
-/**
- * Trivial bean implementing ILicenseFamily
- * @since Rat 0.8
- */
-public class SimpleLicenseFamily implements ILicenseFamily {
-    private String familyName;
-
-    public SimpleLicenseFamily(String familyName) {
-        setFamilyName(familyName);
-    }
-
-    public SimpleLicenseFamily() {
-        this(null);
-    }
-
-    public final void setFamilyName(String familyName) {
-        this.familyName = familyName;
-    }
-
-    public final String getFamilyName() {
-        return familyName;
-    }
-}
diff --git a/0.12-release/apache-rat-core/src/main/java/org/apache/rat/license/W3CDocumentLicenseFamily.java b/0.12-release/apache-rat-core/src/main/java/org/apache/rat/license/W3CDocumentLicenseFamily.java
deleted file mode 100644
index c3d2101..0000000
--- a/0.12-release/apache-rat-core/src/main/java/org/apache/rat/license/W3CDocumentLicenseFamily.java
+++ /dev/null
@@ -1,27 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one   *
- * or more contributor license agreements.  See the NOTICE file *
- * distributed with this work for additional information        *
- * regarding copyright ownership.  The ASF licenses this file   *
- * to you under the Apache License, Version 2.0 (the            *
- * "License"); you may not use this file except in compliance   *
- * with the License.  You may obtain a copy of the License at   *
- *                                                              *
- *   http://www.apache.org/licenses/LICENSE-2.0                 *
- *                                                              *
- * Unless required by applicable law or agreed to in writing,   *
- * software distributed under the License is distributed on an  *
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY       *
- * KIND, either express or implied.  See the License for the    *
- * specific language governing permissions and limitations      *
- * under the License.                                           *
- */ 
-package org.apache.rat.license;
-
-import org.apache.rat.api.MetaData;
-
-public class W3CDocumentLicenseFamily extends SimpleLicenseFamily {
-    public W3CDocumentLicenseFamily() {
-        super(MetaData.RAT_LICENSE_FAMILY_NAME_VALUE_W3C_DOCUMENT_COPYRIGHT);
-    }
-}
diff --git a/0.12-release/apache-rat-core/src/main/java/org/apache/rat/license/W3CSoftwareLicenseFamily.java b/0.12-release/apache-rat-core/src/main/java/org/apache/rat/license/W3CSoftwareLicenseFamily.java
deleted file mode 100644
index 42a6dc9..0000000
--- a/0.12-release/apache-rat-core/src/main/java/org/apache/rat/license/W3CSoftwareLicenseFamily.java
+++ /dev/null
@@ -1,27 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one   *
- * or more contributor license agreements.  See the NOTICE file *
- * distributed with this work for additional information        *
- * regarding copyright ownership.  The ASF licenses this file   *
- * to you under the Apache License, Version 2.0 (the            *
- * "License"); you may not use this file except in compliance   *
- * with the License.  You may obtain a copy of the License at   *
- *                                                              *
- *   http://www.apache.org/licenses/LICENSE-2.0                 *
- *                                                              *
- * Unless required by applicable law or agreed to in writing,   *
- * software distributed under the License is distributed on an  *
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY       *
- * KIND, either express or implied.  See the License for the    *
- * specific language governing permissions and limitations      *
- * under the License.                                           *
- */ 
-package org.apache.rat.license;
-
-import org.apache.rat.api.MetaData;
-
-public class W3CSoftwareLicenseFamily extends SimpleLicenseFamily {
-    public W3CSoftwareLicenseFamily() {
-        super(MetaData.RAT_LICENSE_FAMILY_NAME_VALUE_W3C_SOFTWARE_COPYRIGHT);
-    }
-}
diff --git a/0.12-release/apache-rat-core/src/main/java/org/apache/rat/policy/DefaultPolicy.java b/0.12-release/apache-rat-core/src/main/java/org/apache/rat/policy/DefaultPolicy.java
deleted file mode 100644
index 71bf11f..0000000
--- a/0.12-release/apache-rat-core/src/main/java/org/apache/rat/policy/DefaultPolicy.java
+++ /dev/null
@@ -1,87 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one   *
- * or more contributor license agreements.  See the NOTICE file *
- * distributed with this work for additional information        *
- * regarding copyright ownership.  The ASF licenses this file   *
- * to you under the Apache License, Version 2.0 (the            *
- * "License"); you may not use this file except in compliance   *
- * with the License.  You may obtain a copy of the License at   *
- *                                                              *
- *   http://www.apache.org/licenses/LICENSE-2.0                 *
- *                                                              *
- * Unless required by applicable law or agreed to in writing,   *
- * software distributed under the License is distributed on an  *
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY       *
- * KIND, either express or implied.  See the License for the    *
- * specific language governing permissions and limitations      *
- * under the License.                                           *
- */
-package org.apache.rat.policy;
-
-import org.apache.rat.Defaults;
-import org.apache.rat.api.Document;
-import org.apache.rat.api.MetaData;
-import org.apache.rat.config.ConfigurationUtil;
-import org.apache.rat.document.IDocumentAnalyser;
-import org.apache.rat.document.RatDocumentAnalysisException;
-import org.apache.rat.license.ILicenseFamily;
-
-import java.util.ArrayList;
-import java.util.Collections;
-import java.util.HashSet;
-import java.util.List;
-import java.util.Set;
-
-public class DefaultPolicy implements IDocumentAnalyser {
-    private List<String> approvedLicenseNames;
-
-    /**
-     * Creates a policy that matches the default licenses.
-     * Mainly used for testing purposes.
-     */
-    DefaultPolicy() {
-        this(new ArrayList<String>(0), true);
-    }
-
-    public DefaultPolicy(final ILicenseFamily[] approvedLicenses, boolean mergeWithDefault) {
-        this(ConfigurationUtil.toNames(approvedLicenses), mergeWithDefault);
-    }
-
-    public DefaultPolicy(final List<String> approvedLicenseNames, boolean mergeWithDefault) {
-        this.approvedLicenseNames = new ArrayList<String>();
-
-        if (approvedLicenseNames == null || approvedLicenseNames.isEmpty()) {
-            // used in tests only, no additional licenses given but defaults requested
-            if(mergeWithDefault) {
-                this.approvedLicenseNames = new ArrayList<String>(Defaults.DEFAULT_LICENSE_FAMILIES);
-            }
-        } else {
-            // avoid duplicate entries and merge with defaults if requested
-            Set<String> mergedLicenses = new HashSet<String>(approvedLicenseNames);
-            if(mergeWithDefault) {
-                mergedLicenses.addAll(Defaults.DEFAULT_LICENSE_FAMILIES);
-            }
-            this.approvedLicenseNames = new ArrayList<String>(mergedLicenses);
-        }
-        Collections.sort(this.approvedLicenseNames);
-    }
-
-    public void analyse(final Document subject) throws RatDocumentAnalysisException {
-        if (subject != null) {
-            final String name = subject.getMetaData().value(MetaData.RAT_URL_LICENSE_FAMILY_NAME);
-            if (name != null) {
-                final boolean isApproved = Collections.binarySearch(approvedLicenseNames, name) >= 0;
-                reportLicenseApprovalClaim(subject, isApproved);
-            }
-        }
-    }
-
-    public void reportLicenseApprovalClaim(final Document subject, final boolean isAcceptable) {
-        subject.getMetaData().set(//
-         isAcceptable ? MetaData.RAT_APPROVED_LICENSE_DATIM_TRUE: MetaData.RAT_APPROVED_LICENSE_DATIM_FALSE);
-    }
-
-    public List<String> getApprovedLicenseNames() {
-        return Collections.unmodifiableList(approvedLicenseNames);
-    }
-}
diff --git a/0.12-release/apache-rat-core/src/main/java/org/apache/rat/report/AbstractReport.java b/0.12-release/apache-rat-core/src/main/java/org/apache/rat/report/AbstractReport.java
deleted file mode 100644
index 18bfd1f..0000000
--- a/0.12-release/apache-rat-core/src/main/java/org/apache/rat/report/AbstractReport.java
+++ /dev/null
@@ -1,40 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one   *
- * or more contributor license agreements.  See the NOTICE file *
- * distributed with this work for additional information        *
- * regarding copyright ownership.  The ASF licenses this file   *
- * to you under the Apache License, Version 2.0 (the            *
- * "License"); you may not use this file except in compliance   *
- * with the License.  You may obtain a copy of the License at   *
- *                                                              *
- *   http://www.apache.org/licenses/LICENSE-2.0                 *
- *                                                              *
- * Unless required by applicable law or agreed to in writing,   *
- * software distributed under the License is distributed on an  *
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY       *
- * KIND, either express or implied.  See the License for the    *
- * specific language governing permissions and limitations      *
- * under the License.                                           *
- */ 
-package org.apache.rat.report;
-
-import org.apache.rat.api.Document;
-import org.apache.rat.api.RatException;
-
-
-/**
- * Abstract base class for deriving implementations of {@link RatReport}.
- */
-public abstract class AbstractReport implements RatReport {
-    public void startReport() throws RatException {
-        // Does nothing
-    }
-
-    public void report(Document document) throws RatException {
-        // Does nothing
-    }
-
-    public void endReport() throws RatException {
-        // Does nothing
-    }
-}
diff --git a/0.12-release/apache-rat-core/src/main/java/org/apache/rat/report/IReportable.java b/0.12-release/apache-rat-core/src/main/java/org/apache/rat/report/IReportable.java
deleted file mode 100644
index d7fd7af..0000000
--- a/0.12-release/apache-rat-core/src/main/java/org/apache/rat/report/IReportable.java
+++ /dev/null
@@ -1,26 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one   *
- * or more contributor license agreements.  See the NOTICE file *
- * distributed with this work for additional information        *
- * regarding copyright ownership.  The ASF licenses this file   *
- * to you under the Apache License, Version 2.0 (the            *
- * "License"); you may not use this file except in compliance   *
- * with the License.  You may obtain a copy of the License at   *
- *                                                              *
- *   http://www.apache.org/licenses/LICENSE-2.0                 *
- *                                                              *
- * Unless required by applicable law or agreed to in writing,   *
- * software distributed under the License is distributed on an  *
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY       *
- * KIND, either express or implied.  See the License for the    *
- * specific language governing permissions and limitations      *
- * under the License.                                           *
- */ 
-package org.apache.rat.report;
-
-import org.apache.rat.api.RatException;
-
-public interface IReportable {
-
-    void run(RatReport report) throws RatException;
-}
diff --git a/0.12-release/apache-rat-core/src/main/java/org/apache/rat/report/RatReport.java b/0.12-release/apache-rat-core/src/main/java/org/apache/rat/report/RatReport.java
deleted file mode 100644
index d178acf..0000000
--- a/0.12-release/apache-rat-core/src/main/java/org/apache/rat/report/RatReport.java
+++ /dev/null
@@ -1,31 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one   *
- * or more contributor license agreements.  See the NOTICE file *
- * distributed with this work for additional information        *
- * regarding copyright ownership.  The ASF licenses this file   *
- * to you under the Apache License, Version 2.0 (the            *
- * "License"); you may not use this file except in compliance   *
- * with the License.  You may obtain a copy of the License at   *
- *                                                              *
- *   http://www.apache.org/licenses/LICENSE-2.0                 *
- *                                                              *
- * Unless required by applicable law or agreed to in writing,   *
- * software distributed under the License is distributed on an  *
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY       *
- * KIND, either express or implied.  See the License for the    *
- * specific language governing permissions and limitations      *
- * under the License.                                           *
- */ 
-package org.apache.rat.report;
-
-import org.apache.rat.api.Document;
-import org.apache.rat.api.RatException;
-
-public interface RatReport {
-
-    void startReport() throws RatException;
-    
-    void report(Document document) throws RatException;
-    
-    void endReport() throws RatException;
-}
diff --git a/0.12-release/apache-rat-core/src/main/java/org/apache/rat/report/claim/ClaimStatistic.java b/0.12-release/apache-rat-core/src/main/java/org/apache/rat/report/claim/ClaimStatistic.java
deleted file mode 100644
index 578e8f6..0000000
--- a/0.12-release/apache-rat-core/src/main/java/org/apache/rat/report/claim/ClaimStatistic.java
+++ /dev/null
@@ -1,160 +0,0 @@
-/*
-* Licensed to the Apache Software Foundation (ASF) under one   *
-* or more contributor license agreements.  See the NOTICE file *
-* distributed with this work for additional information        *
-* regarding copyright ownership.  The ASF licenses this file   *
-* to you under the Apache License, Version 2.0 (the            *
-* "License"); you may not use this file except in compliance   *
-* with the License.  You may obtain a copy of the License at   *
-*                                                              *
-*   http://www.apache.org/licenses/LICENSE-2.0                 *
-*                                                              *
-* Unless required by applicable law or agreed to in writing,   *
-* software distributed under the License is distributed on an  *
-* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY       *
-* KIND, either express or implied.  See the License for the    *
-* specific language governing permissions and limitations      *
-* under the License.                                           *
-*/
-
-package org.apache.rat.report.claim;
-
-import java.util.Map;
-
-
-/**
- * This class provides a numerical overview about
- * the report.
- */
-public class ClaimStatistic {
-    private Map<String, Integer> documentCategoryMap, licenseFamilyCodeMap, licenseFamilyNameMap;
-    private int numApproved, numUnApproved, numGenerated, numUnknown;
-
-    /**
-     * @return Returns the number of files with approved licenses.
-     */
-    public int getNumApproved() {
-        return numApproved;
-    }
-
-    /**
-     * Sets the number of files with approved licenses.
-     * @param pNumApproved number of files with approved licenses.
-     */
-    public void setNumApproved(int pNumApproved) {
-        numApproved = pNumApproved;
-    }
-
-    /**
-     * @return Returns the number of files with unapproved licenses.
-     * <em>Note:</em> This might include files with unknown
-     * licenses.
-     * @see #getNumUnknown()
-     */
-    public int getNumUnApproved() {
-        return numUnApproved;
-    }
-
-    /**
-     * Sets the number of files with unapproved licenses.
-     * @param pNumUnApproved number of files with unapproved licenses.
-     */
-    public void setNumUnApproved(int pNumUnApproved) {
-        numUnApproved = pNumUnApproved;
-    }
-
-    /**
-     * @return Returns the number of generated files.
-     */
-    public int getNumGenerated() {
-        return numGenerated;
-    }
-
-    /**
-     * Sets the number of generated files.
-     * @param pNumGenerated the number of generated files.
-     */
-    public void setNumGenerated(int pNumGenerated) {
-        numGenerated = pNumGenerated;
-    }
-
-    /**
-     * @return Returns the number of files, which are neither
-     * generated nor have a known license header.
-     */
-    public int getNumUnknown() {
-        return numUnknown;
-    }
-
-    /**
-     * Sets the number of files, which are neither
-     * generated nor have a known license header.
-     * @param pNumUnknown set number of files. 
-     */
-    public void setNumUnknown(int pNumUnknown) {
-        numUnknown = pNumUnknown;
-    }
-
-    /**
-     * Sets a map with the file types. The map keys
-     * are file type names and the map values
-     * are integers with the number of resources matching
-     * the file type.
-     * @param pDocumentCategoryMap doc-category map.
-     */
-    public void setDocumentCategoryMap(Map<String, Integer> pDocumentCategoryMap) {
-        documentCategoryMap = pDocumentCategoryMap;
-    }
-
-    /**
-     * @return Returns a map with the file types. The map keys
-     * are file type names and the map values
-     * are integers with the number of resources matching
-     * the file type.
-     */
-    public Map<String, Integer> getDocumentCategoryMap() {
-        return documentCategoryMap;
-    }
-
-    /**
-     * @return Returns a map with the license family codes. The map
-     * keys are license family category names,
-     * the map values are integers with the number of resources
-     * matching the license family code.
-     */
-    public Map<String, Integer> getLicenseFileCodeMap() {
-        return licenseFamilyCodeMap;
-    }
-
-    /**
-     * Sets a map with the license family codes. The map
-     * keys are instances of license family category names and
-     * the map values are integers with the number of resources
-     * matching the license family code.
-     * @param pLicenseFamilyCodeMap license family map.
-     */
-    public void setLicenseFileCodeMap(Map<String, Integer> pLicenseFamilyCodeMap) {
-        licenseFamilyCodeMap = pLicenseFamilyCodeMap;
-    }
-
-    /**
-     * @return Returns a map with the license family codes. The map
-     * keys are the names of the license families and
-     * the map values are integers with the number of resources
-     * matching the license family name.
-     */
-    public Map<String, Integer> getLicenseFileNameMap() {
-        return licenseFamilyNameMap;
-    }
-
-    /**
-     * Sets map with the license family codes. The map
-     * keys are the name of the license families and
-     * the map values are integers with the number of resources
-     * matching the license family name.
-     * @param pLicenseFamilyNameMap license family-name map.
-     */
-    public void setLicenseFileNameMap(Map<String, Integer> pLicenseFamilyNameMap) {
-        licenseFamilyNameMap = pLicenseFamilyNameMap;
-    }
-}
diff --git a/0.12-release/apache-rat-core/src/main/java/org/apache/rat/report/claim/impl/AbstractClaimReporter.java b/0.12-release/apache-rat-core/src/main/java/org/apache/rat/report/claim/impl/AbstractClaimReporter.java
deleted file mode 100644
index 8904cfb..0000000
--- a/0.12-release/apache-rat-core/src/main/java/org/apache/rat/report/claim/impl/AbstractClaimReporter.java
+++ /dev/null
@@ -1,102 +0,0 @@
-/*
-* Licensed to the Apache Software Foundation (ASF) under one   *
-* or more contributor license agreements.  See the NOTICE file *
-* distributed with this work for additional information        *
-* regarding copyright ownership.  The ASF licenses this file   *
-* to you under the Apache License, Version 2.0 (the            *
-* "License"); you may not use this file except in compliance   *
-* with the License.  You may obtain a copy of the License at   *
-*                                                              *
-*   http://www.apache.org/licenses/LICENSE-2.0                 *
-*                                                              *
-* Unless required by applicable law or agreed to in writing,   *
-* software distributed under the License is distributed on an  *
-* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY       *
-* KIND, either express or implied.  See the License for the    *
-* specific language governing permissions and limitations      *
-* under the License.                                           *
-*/
-
-package org.apache.rat.report.claim.impl;
-
-import org.apache.rat.api.Document;
-import org.apache.rat.api.MetaData;
-import org.apache.rat.api.RatException;
-import org.apache.rat.report.AbstractReport;
-
-
-/**
- * Abstract base implementation of {@link AbstractReport}.
- * It is strongly suggested, that implementations derive from
- * this class.
- */
-public abstract class AbstractClaimReporter extends AbstractReport {
-    protected void handleDocumentCategoryClaim(String documentCategoryName) {
-        // Does nothing
-    }
-
-    protected void handleApprovedLicenseClaim(String licenseApproved) {
-        // Does nothing
-    }
-
-    protected void handleLicenseFamilyNameClaim(String licenseFamilyName) {
-        // Does Nothing
-    }
-
-    protected void handleHeaderCategoryClaim(String headerCategory) {
-        // Does nothing
-    }
-
-    private void writeDocumentClaim(Document subject)  {
-        final MetaData metaData = subject.getMetaData();
-        writeHeaderCategory(metaData);
-        writeLicenseFamilyName(metaData);
-        writeDocumentCategory(metaData);
-        writeApprovedLicenseClaim(metaData);
-    }
-
-    private void writeApprovedLicenseClaim(final MetaData metaData) {
-        final MetaData.Datum approvedLicenseDatum = metaData.get(MetaData.RAT_URL_APPROVED_LICENSE);
-        if (approvedLicenseDatum != null) {
-            final String approvedLicense = approvedLicenseDatum.getValue();
-            if (approvedLicense != null) {
-                handleApprovedLicenseClaim(approvedLicense);
-            }
-        }
-    }
-
-    private void writeHeaderCategory(final MetaData metaData) {
-        final MetaData.Datum headerCategoryDatum = metaData.get(MetaData.RAT_URL_HEADER_CATEGORY);
-        if (headerCategoryDatum != null) {
-            final String headerCategory = headerCategoryDatum.getValue();
-            if (headerCategory != null) {
-                handleHeaderCategoryClaim(headerCategory);
-            }
-        }
-    }
-
-    private void writeLicenseFamilyName(final MetaData metaData) {
-        final MetaData.Datum licenseFamilyNameDatum = metaData.get(MetaData.RAT_URL_LICENSE_FAMILY_NAME);
-        if (licenseFamilyNameDatum != null) {
-            final String licenseFamilyName = licenseFamilyNameDatum.getValue();
-            if (licenseFamilyName != null) {
-                handleLicenseFamilyNameClaim(licenseFamilyName);
-            }
-        }
-    }
-    
-    private void writeDocumentCategory(final MetaData metaData) {
-        final MetaData.Datum documentCategoryDatum = metaData.get(MetaData.RAT_URL_DOCUMENT_CATEGORY);
-        if (documentCategoryDatum != null) {
-            final String documentCategory = documentCategoryDatum.getValue();
-            if (documentCategory != null) {
-                handleDocumentCategoryClaim(documentCategory);
-            }
-        }
-    }
-    
-    @Override
-    public void report(Document subject) throws RatException {
-        writeDocumentClaim(subject);
-    }
-}
diff --git a/0.12-release/apache-rat-core/src/main/java/org/apache/rat/report/claim/impl/ClaimAggregator.java b/0.12-release/apache-rat-core/src/main/java/org/apache/rat/report/claim/impl/ClaimAggregator.java
deleted file mode 100644
index a4f915d..0000000
--- a/0.12-release/apache-rat-core/src/main/java/org/apache/rat/report/claim/impl/ClaimAggregator.java
+++ /dev/null
@@ -1,102 +0,0 @@
-/*
-* Licensed to the Apache Software Foundation (ASF) under one   *
-* or more contributor license agreements.  See the NOTICE file *
-* distributed with this work for additional information        *
-* regarding copyright ownership.  The ASF licenses this file   *
-* to you under the Apache License, Version 2.0 (the            *
-* "License"); you may not use this file except in compliance   *
-* with the License.  You may obtain a copy of the License at   *
-*                                                              *
-*   http://www.apache.org/licenses/LICENSE-2.0                 *
-*                                                              *
-* Unless required by applicable law or agreed to in writing,   *
-* software distributed under the License is distributed on an  *
-* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY       *
-* KIND, either express or implied.  See the License for the    *
-* specific language governing permissions and limitations      *
-* under the License.                                           *
-*/
-
-package org.apache.rat.report.claim.impl;
-
-import org.apache.rat.api.MetaData;
-import org.apache.rat.api.RatException;
-import org.apache.rat.report.claim.ClaimStatistic;
-
-import java.util.HashMap;
-import java.util.Map;
-
-
-/**
- * The aggregator is used to create a numerical statistic
- * of claims.
- */
-public class ClaimAggregator extends AbstractClaimReporter {
-    private final ClaimStatistic statistic;
-    private final Map<String, Integer> numsByLicenseFamilyName = new HashMap<String, Integer>();
-    private final Map<String, Integer> numsByLicenseFamilyCode = new HashMap<String, Integer>();
-    private final Map<String, Integer> numsByFileType = new HashMap<String, Integer>();
-    private int numApproved, numUnApproved, numGenerated, numUnknown;
-
-    public ClaimAggregator(ClaimStatistic pStatistic) {
-        statistic = pStatistic;
-    }
-    
-    private void incMapValue(Map<String, Integer> pMap, String pKey) {
-        final Integer num = pMap.get(pKey);
-        final int newNum;
-        if (num == null) {
-            newNum = 1;
-        } else {
-            newNum = num + 1;
-        }
-        pMap.put(pKey, newNum);
-    }
-    
-    @Override
-    protected void handleDocumentCategoryClaim(String documentCategoryName) {
-        incMapValue(numsByFileType, documentCategoryName);
-    }
-
-    @Override
-    protected void handleApprovedLicenseClaim(String licenseApproved) {
-        if (MetaData.RAT_APPROVED_LICENSE_VALUE_TRUE.equals(licenseApproved)) {
-            numApproved++;
-        } else {
-            numUnApproved++;
-        }
-    }
-
-    @Override
-    protected void handleLicenseFamilyNameClaim(String licenseFamilyName) {
-        incMapValue(numsByLicenseFamilyName, licenseFamilyName);
-    }
-
-    @Override
-    protected void handleHeaderCategoryClaim(String headerCategory) {
-        
-        if (MetaData.RAT_LICENSE_FAMILY_CATEGORY_VALUE_GEN.equals(headerCategory)) {
-            numGenerated++;
-            incMapValue(numsByLicenseFamilyCode, MetaData.RAT_LICENSE_FAMILY_CATEGORY_VALUE_GEN);
-        } else if (MetaData.RAT_LICENSE_FAMILY_CATEGORY_VALUE_UNKNOWN.equals(headerCategory)) {
-            numUnknown++;
-            incMapValue(numsByLicenseFamilyCode, MetaData.RAT_LICENSE_FAMILY_CATEGORY_VALUE_UNKNOWN);
-        }
-    }
-
-    public void fillClaimStatistic(ClaimStatistic pStatistic) {
-        pStatistic.setDocumentCategoryMap(numsByFileType);
-        pStatistic.setLicenseFileCodeMap(numsByLicenseFamilyCode);
-        pStatistic.setLicenseFileNameMap(numsByLicenseFamilyName);
-        pStatistic.setNumApproved(numApproved);
-        pStatistic.setNumGenerated(numGenerated);
-        pStatistic.setNumUnApproved(numUnApproved);
-        pStatistic.setNumUnknown(numUnknown);
-    }
-
-    @Override
-    public void endReport() throws RatException {
-        super.endReport();
-        fillClaimStatistic(statistic);
-    }
-}
diff --git a/0.12-release/apache-rat-core/src/main/java/org/apache/rat/report/claim/impl/xml/SimpleXmlClaimReporter.java b/0.12-release/apache-rat-core/src/main/java/org/apache/rat/report/claim/impl/xml/SimpleXmlClaimReporter.java
deleted file mode 100644
index 02e21d6..0000000
--- a/0.12-release/apache-rat-core/src/main/java/org/apache/rat/report/claim/impl/xml/SimpleXmlClaimReporter.java
+++ /dev/null
@@ -1,150 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one   *
- * or more contributor license agreements.  See the NOTICE file *
- * distributed with this work for additional information        *
- * regarding copyright ownership.  The ASF licenses this file   *
- * to you under the Apache License, Version 2.0 (the            *
- * "License"); you may not use this file except in compliance   *
- * with the License.  You may obtain a copy of the License at   *
- *                                                              *
- *   http://www.apache.org/licenses/LICENSE-2.0                 *
- *                                                              *
- * Unless required by applicable law or agreed to in writing,   *
- * software distributed under the License is distributed on an  *
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY       *
- * KIND, either express or implied.  See the License for the    *
- * specific language governing permissions and limitations      *
- * under the License.                                           *
- */ 
-package org.apache.rat.report.claim.impl.xml;
-
-import org.apache.commons.lang.time.DateFormatUtils;
-import org.apache.rat.api.Document;
-import org.apache.rat.api.MetaData;
-import org.apache.rat.api.RatException;
-import org.apache.rat.report.AbstractReport;
-import org.apache.rat.report.xml.writer.IXmlWriter;
-
-import java.io.IOException;
-import java.util.Calendar;
-
-public class SimpleXmlClaimReporter extends AbstractReport {
-    public static final String RAT_REPORT = "rat-report";
-    public static final String TIMESTAMP = "timestamp";
-    public static final String LICENSE_APPROVAL_PREDICATE = "license-approval";
-    public static final String LICENSE_FAMILY_PREDICATE = "license-family";
-    public static final String HEADER_SAMPLE_PREDICATE = "header-sample";
-    public static final String HEADER_TYPE_PREDICATE = "header-type";
-    public static final String FILE_TYPE_PREDICATE = "type";
-    public static final String ARCHIVE_TYPE_PREDICATE = "archive-type";
-    public static final String ARCHIVE_TYPE_UNREADABLE = "unreadable";
-    public static final String ARCHIVE_TYPE_READABLE = "readable";
-
-    private final IXmlWriter writer;
-    private static final String NAME = "name";
-    private boolean firstTime = true;
-
-    public SimpleXmlClaimReporter(final IXmlWriter writer) {
-        this.writer = writer;
-    }
-
-
-    /**
-     * Writes a single claim to the XML file.
-     * @param pPredicate The claims predicate.
-     * @param pObject The claims object.
-     * @param pLiteral Whether to write the object as an element (true),
-     *   or an attribute (false).
-     * @throws IOException An I/O error occurred while writing the claim.
-     * @throws RatException Another error occurred while writing the claim.
-     */
-    protected void writeClaim(String pPredicate, String pObject, boolean pLiteral)
-    throws IOException, RatException {
-        if (pLiteral) {
-            writer.openElement(pPredicate).content(pObject).closeElement();
-        } else {
-            writer.openElement(pPredicate).attribute(NAME, pObject).closeElement();
-        }
-    }
-
-    @Override
-    public void report(final Document subject) throws RatException {
-        try {
-            if (firstTime) {
-                firstTime = false;
-            } else {
-                writer.closeElement();
-            }
-            writer.openElement("resource").attribute(NAME, subject.getName());
-            writeDocumentClaims(subject);
-        } catch (IOException e) {
-            throw new RatException("XML writing failure: " + e.getMessage()
-                    + " subject: " + subject, e);
-        }
-    }
-
-    private void writeDocumentClaims(final Document subject) throws IOException, RatException {
-        final MetaData metaData = subject.getMetaData();
-        writeHeaderSample(metaData);
-        writeHeaderCategory(metaData);
-        writeLicenseFamilyName(metaData);
-        writeApprovedLicense(metaData);
-        writeDocumentCategory(metaData);
-    }
-
-    private void writeApprovedLicense(final MetaData metaData) throws IOException, RatException {
-        final String approvedLicense = metaData.value(MetaData.RAT_URL_APPROVED_LICENSE);
-        if (approvedLicense != null) {
-            writeClaim(LICENSE_APPROVAL_PREDICATE, approvedLicense, false);
-        }
-    }
-
-    private void writeLicenseFamilyName(final MetaData metaData) throws IOException, RatException {
-        final String licenseFamilyName = metaData.value(MetaData.RAT_URL_LICENSE_FAMILY_NAME);
-        if (licenseFamilyName != null) {
-            writeClaim(LICENSE_FAMILY_PREDICATE, licenseFamilyName, false);
-        }
-    }
-
-    private void writeHeaderCategory(final MetaData metaData) throws IOException, RatException {
-        final String headerCategory = metaData.value(MetaData.RAT_URL_HEADER_CATEGORY);
-        if (headerCategory != null) {
-            writeClaim(HEADER_TYPE_PREDICATE, headerCategory, false);
-        }
-    }
-
-    private void writeHeaderSample(final MetaData metaData) throws IOException, RatException {
-        final String sample = metaData.value(MetaData.RAT_URL_HEADER_SAMPLE);
-        if (sample != null) {
-            writeClaim(HEADER_SAMPLE_PREDICATE, sample, true);
-        }
-    }
-
-    private void writeDocumentCategory(final MetaData metaData) throws IOException, RatException {
-        final String documentCategory = metaData.value(MetaData.RAT_URL_DOCUMENT_CATEGORY);
-        if (documentCategory != null) {
-            writeClaim(FILE_TYPE_PREDICATE, documentCategory, false);
-        }
-    }
-
-    @Override
-    public void startReport() throws RatException {
-        try {
-            writer.openElement(RAT_REPORT)
-                .attribute(TIMESTAMP,
-                           DateFormatUtils.ISO_DATETIME_TIME_ZONE_FORMAT
-                           .format(Calendar.getInstance()));
-        } catch (IOException e) {
-            throw new RatException("Cannot open start element", e);
-        }
-    }
-
-    @Override
-    public void endReport() throws RatException {
-        try {
-            writer.closeDocument();
-        } catch (IOException e) {
-            throw new RatException("Cannot close last element", e);
-        }
-    }
-}
diff --git a/0.12-release/apache-rat-core/src/main/java/org/apache/rat/report/claim/util/ClaimReporterMultiplexer.java b/0.12-release/apache-rat-core/src/main/java/org/apache/rat/report/claim/util/ClaimReporterMultiplexer.java
deleted file mode 100644
index 572d7b9..0000000
--- a/0.12-release/apache-rat-core/src/main/java/org/apache/rat/report/claim/util/ClaimReporterMultiplexer.java
+++ /dev/null
@@ -1,63 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one   *
- * or more contributor license agreements.  See the NOTICE file *
- * distributed with this work for additional information        *
- * regarding copyright ownership.  The ASF licenses this file   *
- * to you under the Apache License, Version 2.0 (the            *
- * "License"); you may not use this file except in compliance   *
- * with the License.  You may obtain a copy of the License at   *
- *                                                              *
- *   http://www.apache.org/licenses/LICENSE-2.0                 *
- *                                                              *
- * Unless required by applicable law or agreed to in writing,   *
- * software distributed under the License is distributed on an  *
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY       *
- * KIND, either express or implied.  See the License for the    *
- * specific language governing permissions and limitations      *
- * under the License.                                           *
- */ 
-package org.apache.rat.report.claim.util;
-
-import org.apache.rat.api.Document;
-import org.apache.rat.api.RatException;
-import org.apache.rat.document.IDocumentAnalyser;
-import org.apache.rat.document.RatDocumentAnalysisException;
-import org.apache.rat.report.RatReport;
-
-import java.util.List;
-
-
-public class ClaimReporterMultiplexer implements RatReport {
-    private final IDocumentAnalyser analyser;
-    private final List<? extends RatReport> reporters;
-
-    public ClaimReporterMultiplexer(final IDocumentAnalyser pAnalyser, final List<? extends RatReport> reporters) {
-        analyser = pAnalyser;
-        this.reporters = reporters;
-    }
-
-    public void report(Document document) throws RatException {
-        if (analyser != null) {
-            try {
-                analyser.analyse(document);
-            } catch (RatDocumentAnalysisException e) {
-                throw new RatException(e.getMessage(), e);
-            }
-        }
-        for (RatReport report : reporters) {
-            report.report(document);
-        } 
-    }
-
-    public void startReport() throws RatException {
-        for (RatReport report : reporters) {
-            report.startReport();
-        } 
-    }
-
-    public void endReport() throws RatException {
-        for (RatReport report : reporters) {
-            report.endReport();
-        } 
-    }
-}
diff --git a/0.12-release/apache-rat-core/src/main/java/org/apache/rat/report/claim/util/LicenseAddingReport.java b/0.12-release/apache-rat-core/src/main/java/org/apache/rat/report/claim/util/LicenseAddingReport.java
deleted file mode 100644
index 8570c69..0000000
--- a/0.12-release/apache-rat-core/src/main/java/org/apache/rat/report/claim/util/LicenseAddingReport.java
+++ /dev/null
@@ -1,55 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one   *
- * or more contributor license agreements.  See the NOTICE file *
- * distributed with this work for additional information        *
- * regarding copyright ownership.  The ASF licenses this file   *
- * to you under the Apache License, Version 2.0 (the            *
- * "License"); you may not use this file except in compliance   *
- * with the License.  You may obtain a copy of the License at   *
- *                                                              *
- *   http://www.apache.org/licenses/LICENSE-2.0                 *
- *                                                              *
- * Unless required by applicable law or agreed to in writing,   *
- * software distributed under the License is distributed on an  *
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY       *
- * KIND, either express or implied.  See the License for the    *
- * specific language governing permissions and limitations      *
- * under the License.                                           *
- */ 
-package org.apache.rat.report.claim.util;
-
-import java.io.File;
-import java.io.IOException;
-
-import org.apache.rat.annotation.AbstractLicenseAppender;
-import org.apache.rat.annotation.ApacheV2LicenseAppender;
-import org.apache.rat.api.MetaData;
-import org.apache.rat.api.MetaData.Datum;
-import org.apache.rat.api.RatException;
-import org.apache.rat.report.AbstractReport;
-
-
-public class LicenseAddingReport extends AbstractReport {
-    private final AbstractLicenseAppender appender;
-
-    public LicenseAddingReport(String pCopyrightMsg, boolean pForced) {
-        appender = pCopyrightMsg == null ? new ApacheV2LicenseAppender() : new ApacheV2LicenseAppender(pCopyrightMsg);
-        appender.setForce(pForced);
-    }
-
-    @Override
-    public void report(org.apache.rat.api.Document document) throws RatException {
-        final Datum licenseHeader = document.getMetaData().get(MetaData.RAT_URL_HEADER_CATEGORY);
-        if (licenseHeader == null
-                ||  MetaData.RAT_LICENSE_FAMILY_CATEGORY_DATUM_UNKNOWN.getValue().equals(licenseHeader.getValue())) {
-            final File file = new File(document.getName());
-            if (file.isFile()) {
-                try {
-                    appender.append(file);
-                } catch (IOException e) {
-                    throw new RatException(e.getMessage(), e);
-                }
-            }
-        }
-    }
-}
diff --git a/0.12-release/apache-rat-core/src/main/java/org/apache/rat/report/xml/XmlReportFactory.java b/0.12-release/apache-rat-core/src/main/java/org/apache/rat/report/xml/XmlReportFactory.java
deleted file mode 100644
index 939b608..0000000
--- a/0.12-release/apache-rat-core/src/main/java/org/apache/rat/report/xml/XmlReportFactory.java
+++ /dev/null
@@ -1,61 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one   *
- * or more contributor license agreements.  See the NOTICE file *
- * distributed with this work for additional information        *
- * regarding copyright ownership.  The ASF licenses this file   *
- * to you under the Apache License, Version 2.0 (the            *
- * "License"); you may not use this file except in compliance   *
- * with the License.  You may obtain a copy of the License at   *
- *                                                              *
- *   http://www.apache.org/licenses/LICENSE-2.0                 *
- *                                                              *
- * Unless required by applicable law or agreed to in writing,   *
- * software distributed under the License is distributed on an  *
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY       *
- * KIND, either express or implied.  See the License for the    *
- * specific language governing permissions and limitations      *
- * under the License.                                           *
- */ 
-package org.apache.rat.report.xml;
-
-import org.apache.rat.ReportConfiguration;
-import org.apache.rat.analysis.DefaultAnalyserFactory;
-import org.apache.rat.document.IDocumentAnalyser;
-import org.apache.rat.document.impl.util.DocumentAnalyserMultiplexer;
-import org.apache.rat.policy.DefaultPolicy;
-import org.apache.rat.report.RatReport;
-import org.apache.rat.report.claim.ClaimStatistic;
-import org.apache.rat.report.claim.impl.ClaimAggregator;
-import org.apache.rat.report.claim.impl.xml.SimpleXmlClaimReporter;
-import org.apache.rat.report.claim.util.ClaimReporterMultiplexer;
-import org.apache.rat.report.claim.util.LicenseAddingReport;
-import org.apache.rat.report.xml.writer.IXmlWriter;
-
-import java.util.ArrayList;
-import java.util.List;
-
-/**
- * Creates reports.
- *
- */
-public class XmlReportFactory {
-    public static final RatReport createStandardReport(IXmlWriter writer,
-            final ClaimStatistic pStatistic, ReportConfiguration pConfiguration) {
-        final List<RatReport> reporters = new ArrayList<RatReport>();
-        if (pStatistic != null) {
-            reporters.add(new ClaimAggregator(pStatistic));
-        }
-        if (pConfiguration.isAddingLicenses()) {
-            reporters.add(new LicenseAddingReport(pConfiguration.getCopyrightMessage(), pConfiguration.isAddingLicensesForced()));
-        }
-        reporters.add(new SimpleXmlClaimReporter(writer));
-
-        final IDocumentAnalyser analyser =
-            DefaultAnalyserFactory.createDefaultAnalyser(pConfiguration.getHeaderMatcher());
-        final DefaultPolicy policy = new DefaultPolicy(pConfiguration.getApprovedLicenseNames(), pConfiguration.isApproveDefaultLicenses());
-
-        final IDocumentAnalyser[] analysers = {analyser, policy};
-        DocumentAnalyserMultiplexer analysisMultiplexer = new DocumentAnalyserMultiplexer(analysers);
-        return new ClaimReporterMultiplexer(analysisMultiplexer, reporters);
-    }
-}
diff --git a/0.12-release/apache-rat-core/src/main/java/org/apache/rat/report/xml/writer/IXmlWriter.java b/0.12-release/apache-rat-core/src/main/java/org/apache/rat/report/xml/writer/IXmlWriter.java
deleted file mode 100644
index 9f7268f..0000000
--- a/0.12-release/apache-rat-core/src/main/java/org/apache/rat/report/xml/writer/IXmlWriter.java
+++ /dev/null
@@ -1,101 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one   *
- * or more contributor license agreements.  See the NOTICE file *
- * distributed with this work for additional information        *
- * regarding copyright ownership.  The ASF licenses this file   *
- * to you under the Apache License, Version 2.0 (the            *
- * "License"); you may not use this file except in compliance   *
- * with the License.  You may obtain a copy of the License at   *
- *                                                              *
- *   http://www.apache.org/licenses/LICENSE-2.0                 *
- *                                                              *
- * Unless required by applicable law or agreed to in writing,   *
- * software distributed under the License is distributed on an  *
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY       *
- * KIND, either express or implied.  See the License for the    *
- * specific language governing permissions and limitations      *
- * under the License.                                           *
- */ 
-package org.apache.rat.report.xml.writer;
-
-import java.io.IOException;
-
-/**
- * Simple interface for creating basic xml documents.
- * Performs basic validation and escaping.
- * Not namespace aware (may reconsider this later).
- */
-public interface IXmlWriter {
-
-    /**
-     * Starts a document by writing a prolog.
-     * Calling this method is optional.
-     * When writing a document fragment, it should <em>not</em> be called.
-     * @return this object
-     * @throws OperationNotAllowedException 
-     * if called after the first element has been written
-     * or once a prolog has already been written
-     */
-    IXmlWriter startDocument() throws IOException;
-    
-    /**
-     * Writes the start of an element.
-     * 
-     * @param elementName the name of the element, not null
-     * @return this object 
-     * @throws InvalidXmlException if the name is not valid for an xml element
-     * @throws OperationNotAllowedException 
-     * if called after the first element has been closed
-     */
-    IXmlWriter openElement(CharSequence elementName) throws IOException;
-    
-    /**
-     * Writes an attribute of an element.
-     * Note that this is only allowed directly after {@link #openElement(CharSequence)}
-     * or {@link #attribute}.
-     * 
-     * @param name the attribute name, not null
-     * @param value the attribute value, not null
-     * @return this object
-     * @throws InvalidXmlException if the name is not valid for an xml attribute 
-     * or if a value for the attribute has already been written
-     * @throws OperationNotAllowedException if called after {@link #content(CharSequence)} 
-     * or {@link #closeElement()} or before any call to {@link #openElement(CharSequence)}
-     */
-    IXmlWriter attribute(CharSequence name, CharSequence value) throws IOException;
-    
-    /**
-     * Writes content.
-     * Calling this method will automatically 
-     * Note that this method does not use CDATA.
-     * 
-     * @param content the content to write
-     * @return this object
-     * @throws OperationNotAllowedException 
-     * if called before any call to {@link #openElement} 
-     * or after the first element has been closed
-     */
-    IXmlWriter content(CharSequence content) throws IOException;
-    
-    /**
-     * Closes the last element written.
-     * 
-     * @return this object
-     * @throws OperationNotAllowedException 
-     * if called before any call to {@link #openElement} 
-     * or after the first element has been closed
-     */
-    IXmlWriter closeElement() throws IOException;
-    
-    /**
-     * Closes all pending elements.
-     * When appropriate, resources are also flushed and closed.
-     * No exception is raised when called upon a document whose
-     * root element has already been closed.
-     * 
-     * @return this object
-     * @throws OperationNotAllowedException 
-     * if called before any call to {@link #openElement} 
-     */
-    IXmlWriter closeDocument() throws IOException;
-}
diff --git a/0.12-release/apache-rat-core/src/main/java/org/apache/rat/report/xml/writer/InvalidXmlException.java b/0.12-release/apache-rat-core/src/main/java/org/apache/rat/report/xml/writer/InvalidXmlException.java
deleted file mode 100644
index e01226f..0000000
--- a/0.12-release/apache-rat-core/src/main/java/org/apache/rat/report/xml/writer/InvalidXmlException.java
+++ /dev/null
@@ -1,35 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one   *
- * or more contributor license agreements.  See the NOTICE file *
- * distributed with this work for additional information        *
- * regarding copyright ownership.  The ASF licenses this file   *
- * to you under the Apache License, Version 2.0 (the            *
- * "License"); you may not use this file except in compliance   *
- * with the License.  You may obtain a copy of the License at   *
- *                                                              *
- *   http://www.apache.org/licenses/LICENSE-2.0                 *
- *                                                              *
- * Unless required by applicable law or agreed to in writing,   *
- * software distributed under the License is distributed on an  *
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY       *
- * KIND, either express or implied.  See the License for the    *
- * specific language governing permissions and limitations      *
- * under the License.                                           *
- */ 
-package org.apache.rat.report.xml.writer;
-
-import java.io.IOException;
-
-/**
- * Indicates that the requested document would not be well formed.
- *
- */
-public class InvalidXmlException extends IOException {
-
-    private static final long serialVersionUID = 1L;
-
-    public InvalidXmlException(String s) {
-        super(s);
-    }
-
-}
diff --git a/0.12-release/apache-rat-core/src/main/java/org/apache/rat/report/xml/writer/OperationNotAllowedException.java b/0.12-release/apache-rat-core/src/main/java/org/apache/rat/report/xml/writer/OperationNotAllowedException.java
deleted file mode 100644
index 2009069..0000000
--- a/0.12-release/apache-rat-core/src/main/java/org/apache/rat/report/xml/writer/OperationNotAllowedException.java
+++ /dev/null
@@ -1,36 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one   *
- * or more contributor license agreements.  See the NOTICE file *
- * distributed with this work for additional information        *
- * regarding copyright ownership.  The ASF licenses this file   *
- * to you under the Apache License, Version 2.0 (the            *
- * "License"); you may not use this file except in compliance   *
- * with the License.  You may obtain a copy of the License at   *
- *                                                              *
- *   http://www.apache.org/licenses/LICENSE-2.0                 *
- *                                                              *
- * Unless required by applicable law or agreed to in writing,   *
- * software distributed under the License is distributed on an  *
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY       *
- * KIND, either express or implied.  See the License for the    *
- * specific language governing permissions and limitations      *
- * under the License.                                           *
- */ 
-package org.apache.rat.report.xml.writer;
-
-import java.io.IOException;
-
-/**
- * Thrown by {@link IXmlWriter} implementations when the current
- * state does not allow the requested operation.
- */
-public class OperationNotAllowedException extends IOException {
-
-    private static final long serialVersionUID = 1L;
-
-    public OperationNotAllowedException(String message) {
-        super(message);
-    }
-
-    
-}
diff --git a/0.12-release/apache-rat-core/src/main/java/org/apache/rat/report/xml/writer/XmlWriterUtils.java b/0.12-release/apache-rat-core/src/main/java/org/apache/rat/report/xml/writer/XmlWriterUtils.java
deleted file mode 100644
index 26f540c..0000000
--- a/0.12-release/apache-rat-core/src/main/java/org/apache/rat/report/xml/writer/XmlWriterUtils.java
+++ /dev/null
@@ -1,29 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one   *
- * or more contributor license agreements.  See the NOTICE file *
- * distributed with this work for additional information        *
- * regarding copyright ownership.  The ASF licenses this file   *
- * to you under the Apache License, Version 2.0 (the            *
- * "License"); you may not use this file except in compliance   *
- * with the License.  You may obtain a copy of the License at   *
- *                                                              *
- *   http://www.apache.org/licenses/LICENSE-2.0                 *
- *                                                              *
- * Unless required by applicable law or agreed to in writing,   *
- * software distributed under the License is distributed on an  *
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY       *
- * KIND, either express or implied.  See the License for the    *
- * specific language governing permissions and limitations      *
- * under the License.                                           *
- */ 
-package org.apache.rat.report.xml.writer;
-
-import java.io.IOException;
-
-public class XmlWriterUtils {
-
-    public static final void writeAttribute(final IXmlWriter writer, final String name, final boolean booleanValue) throws IOException {
-        final String value = Boolean.toString(booleanValue);
-        writer.attribute(name, value);
-    }
-}
diff --git a/0.12-release/apache-rat-core/src/main/java/org/apache/rat/report/xml/writer/impl/base/XmlWriter.java b/0.12-release/apache-rat-core/src/main/java/org/apache/rat/report/xml/writer/impl/base/XmlWriter.java
deleted file mode 100644
index 71ab3b9..0000000
--- a/0.12-release/apache-rat-core/src/main/java/org/apache/rat/report/xml/writer/impl/base/XmlWriter.java
+++ /dev/null
@@ -1,650 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one   *
- * or more contributor license agreements.  See the NOTICE file *
- * distributed with this work for additional information        *
- * regarding copyright ownership.  The ASF licenses this file   *
- * to you under the Apache License, Version 2.0 (the            *
- * "License"); you may not use this file except in compliance   *
- * with the License.  You may obtain a copy of the License at   *
- *                                                              *
- *   http://www.apache.org/licenses/LICENSE-2.0                 *
- *                                                              *
- * Unless required by applicable law or agreed to in writing,   *
- * software distributed under the License is distributed on an  *
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY       *
- * KIND, either express or implied.  See the License for the    *
- * specific language governing permissions and limitations      *
- * under the License.                                           *
- */
-package org.apache.rat.report.xml.writer.impl.base;
-
-import org.apache.commons.collections.ArrayStack;
-import org.apache.rat.report.xml.writer.IXmlWriter;
-import org.apache.rat.report.xml.writer.InvalidXmlException;
-import org.apache.rat.report.xml.writer.OperationNotAllowedException;
-
-import java.io.IOException;
-import java.io.Writer;
-import java.util.Arrays;
-import java.util.HashSet;
-import java.util.Set;
-
-/**
- * <p>Lightweight {@link IXmlWriter} implementation.</p>
- * <p>
- * Requires a wrapper to be used safely in a multithreaded
- * environment.</p>
- * <p>
- * Not intended to be subclassed. Please copy and hack!</p>
- */
-public final class XmlWriter implements IXmlWriter {
-
-    private static final byte NAME_START_MASK = 1 << 1;
-    private static final byte NAME_MASK = 1 << 2;
-    private static final byte NAME_BODY_CHAR = NAME_MASK;
-    private static final byte NAME_START_OR_BODY_CHAR = NAME_MASK | NAME_START_MASK;
-
-    private final static boolean[] ALLOWED_CHARACTERS = new boolean[1 << 16];
-
-    static {
-        Arrays.fill(ALLOWED_CHARACTERS, false);
-        ALLOWED_CHARACTERS[0x9] = true;
-        ALLOWED_CHARACTERS[0xA] = true;
-        ALLOWED_CHARACTERS[0xD] = true;
-        Arrays.fill(ALLOWED_CHARACTERS, 0x20, 0xD7FF, true);
-        Arrays.fill(ALLOWED_CHARACTERS, 0xE000, 0xFFFD, true);
-    }
-
-    private final static byte[] CHARACTER_CODES = new byte[1 << 16];
-
-    static {
-        // Name ::= (Letter | '_' | ':') (NameChar)*
-        CHARACTER_CODES['_'] = NAME_START_OR_BODY_CHAR;
-        CHARACTER_CODES[':'] = NAME_START_OR_BODY_CHAR;
-        // Letter ::= BaseChar | Ideographic
-        // BaseChar
-        Arrays.fill(CHARACTER_CODES, 0x0041, 0x005A, NAME_START_OR_BODY_CHAR);
-        Arrays.fill(CHARACTER_CODES, 0x0061, 0x007A, NAME_START_OR_BODY_CHAR);
-        Arrays.fill(CHARACTER_CODES, 0x00C0, 0x00D6, NAME_START_OR_BODY_CHAR);
-        Arrays.fill(CHARACTER_CODES, 0x00D8, 0x00F6, NAME_START_OR_BODY_CHAR);
-        Arrays.fill(CHARACTER_CODES, 0x00F8, 0x00FF, NAME_START_OR_BODY_CHAR);
-        Arrays.fill(CHARACTER_CODES, 0x0100, 0x0131, NAME_START_OR_BODY_CHAR);
-        Arrays.fill(CHARACTER_CODES, 0x0134, 0x013E, NAME_START_OR_BODY_CHAR);
-        Arrays.fill(CHARACTER_CODES, 0x0141, 0x0148, NAME_START_OR_BODY_CHAR);
-        Arrays.fill(CHARACTER_CODES, 0x014A, 0x017E, NAME_START_OR_BODY_CHAR);
-        Arrays.fill(CHARACTER_CODES, 0x0180, 0x01C3, NAME_START_OR_BODY_CHAR);
-        Arrays.fill(CHARACTER_CODES, 0x01CD, 0x01F0, NAME_START_OR_BODY_CHAR);
-        Arrays.fill(CHARACTER_CODES, 0x01F4, 0x01F5, NAME_START_OR_BODY_CHAR);
-        Arrays.fill(CHARACTER_CODES, 0x01FA, 0x0217, NAME_START_OR_BODY_CHAR);
-        Arrays.fill(CHARACTER_CODES, 0x0250, 0x02A8, NAME_START_OR_BODY_CHAR);
-        Arrays.fill(CHARACTER_CODES, 0x02BB, 0x02C1, NAME_START_OR_BODY_CHAR);
-        CHARACTER_CODES[0x0386] = NAME_START_OR_BODY_CHAR;
-        Arrays.fill(CHARACTER_CODES, 0x0388, 0x038A, NAME_START_OR_BODY_CHAR);
-        CHARACTER_CODES[0x038C] = NAME_START_OR_BODY_CHAR;
-        Arrays.fill(CHARACTER_CODES, 0x038E, 0x03A1, NAME_START_OR_BODY_CHAR);
-        Arrays.fill(CHARACTER_CODES, 0x03A3, 0x03CE, NAME_START_OR_BODY_CHAR);
-        Arrays.fill(CHARACTER_CODES, 0x03D0, 0x03D6, NAME_START_OR_BODY_CHAR);
-        CHARACTER_CODES[0x03DA] = NAME_START_OR_BODY_CHAR;
-        CHARACTER_CODES[0x03DC] = NAME_START_OR_BODY_CHAR;
-        CHARACTER_CODES[0x03DE] = NAME_START_OR_BODY_CHAR;
-        CHARACTER_CODES[0x03E0] = NAME_START_OR_BODY_CHAR;
-        Arrays.fill(CHARACTER_CODES, 0x03E2, 0x03F3, NAME_START_OR_BODY_CHAR);
-        Arrays.fill(CHARACTER_CODES, 0x0401, 0x040C, NAME_START_OR_BODY_CHAR);
-        Arrays.fill(CHARACTER_CODES, 0x040E, 0x044F, NAME_START_OR_BODY_CHAR);
-        Arrays.fill(CHARACTER_CODES, 0x0451, 0x045C, NAME_START_OR_BODY_CHAR);
-        Arrays.fill(CHARACTER_CODES, 0x045E, 0x0481, NAME_START_OR_BODY_CHAR);
-        Arrays.fill(CHARACTER_CODES, 0x0490, 0x04C4, NAME_START_OR_BODY_CHAR);
-        Arrays.fill(CHARACTER_CODES, 0x04C7, 0x04C8, NAME_START_OR_BODY_CHAR);
-        Arrays.fill(CHARACTER_CODES, 0x04CB, 0x04CC, NAME_START_OR_BODY_CHAR);
-        Arrays.fill(CHARACTER_CODES, 0x04D0, 0x04EB, NAME_START_OR_BODY_CHAR);
-        Arrays.fill(CHARACTER_CODES, 0x04EE, 0x04F5, NAME_START_OR_BODY_CHAR);
-        Arrays.fill(CHARACTER_CODES, 0x04F8, 0x04F9, NAME_START_OR_BODY_CHAR);
-        Arrays.fill(CHARACTER_CODES, 0x0531, 0x0556, NAME_START_OR_BODY_CHAR);
-        CHARACTER_CODES[0x0559] = NAME_START_OR_BODY_CHAR;
-        Arrays.fill(CHARACTER_CODES, 0x0561, 0x0586, NAME_START_OR_BODY_CHAR);
-        Arrays.fill(CHARACTER_CODES, 0x05D0, 0x05EA, NAME_START_OR_BODY_CHAR);
-        Arrays.fill(CHARACTER_CODES, 0x05F0, 0x05F2, NAME_START_OR_BODY_CHAR);
-        Arrays.fill(CHARACTER_CODES, 0x0621, 0x063A, NAME_START_OR_BODY_CHAR);
-        Arrays.fill(CHARACTER_CODES, 0x0641, 0x064A, NAME_START_OR_BODY_CHAR);
-        Arrays.fill(CHARACTER_CODES, 0x0671, 0x06B7, NAME_START_OR_BODY_CHAR);
-        Arrays.fill(CHARACTER_CODES, 0x06BA, 0x06BE, NAME_START_OR_BODY_CHAR);
-        Arrays.fill(CHARACTER_CODES, 0x06C0, 0x06CE, NAME_START_OR_BODY_CHAR);
-        Arrays.fill(CHARACTER_CODES, 0x06D0, 0x06D3, NAME_START_OR_BODY_CHAR);
-        CHARACTER_CODES[0x06D5] = NAME_START_OR_BODY_CHAR;
-        Arrays.fill(CHARACTER_CODES, 0x06E5, 0x06E6, NAME_START_OR_BODY_CHAR);
-        Arrays.fill(CHARACTER_CODES, 0x0905, 0x0939, NAME_START_OR_BODY_CHAR);
-        CHARACTER_CODES[0x093D] = NAME_START_OR_BODY_CHAR;
-        Arrays.fill(CHARACTER_CODES, 0x0958, 0x0961, NAME_START_OR_BODY_CHAR);
-        Arrays.fill(CHARACTER_CODES, 0x0985, 0x098C, NAME_START_OR_BODY_CHAR);
-        Arrays.fill(CHARACTER_CODES, 0x098F, 0x0990, NAME_START_OR_BODY_CHAR);
-        Arrays.fill(CHARACTER_CODES, 0x0993, 0x09A8, NAME_START_OR_BODY_CHAR);
-        Arrays.fill(CHARACTER_CODES, 0x09AA, 0x09B0, NAME_START_OR_BODY_CHAR);
-        CHARACTER_CODES[0x09B2] = NAME_START_OR_BODY_CHAR;
-        Arrays.fill(CHARACTER_CODES, 0x09B6, 0x09B9, NAME_START_OR_BODY_CHAR);
-        Arrays.fill(CHARACTER_CODES, 0x09DC, 0x09DD, NAME_START_OR_BODY_CHAR);
-        Arrays.fill(CHARACTER_CODES, 0x09DF, 0x09E1, NAME_START_OR_BODY_CHAR);
-        Arrays.fill(CHARACTER_CODES, 0x09F0, 0x09F1, NAME_START_OR_BODY_CHAR);
-        Arrays.fill(CHARACTER_CODES, 0x0A05, 0x0A0A, NAME_START_OR_BODY_CHAR);
-        Arrays.fill(CHARACTER_CODES, 0x0A0F, 0x0A10, NAME_START_OR_BODY_CHAR);
-        Arrays.fill(CHARACTER_CODES, 0x0A13, 0x0A28, NAME_START_OR_BODY_CHAR);
-        Arrays.fill(CHARACTER_CODES, 0x0A2A, 0x0A30, NAME_START_OR_BODY_CHAR);
-        Arrays.fill(CHARACTER_CODES, 0x0A32, 0x0A33, NAME_START_OR_BODY_CHAR);
-        Arrays.fill(CHARACTER_CODES, 0x0A35, 0x0A36, NAME_START_OR_BODY_CHAR);
-        Arrays.fill(CHARACTER_CODES, 0x0A38, 0x0A39, NAME_START_OR_BODY_CHAR);
-        Arrays.fill(CHARACTER_CODES, 0x0A59, 0x0A5C, NAME_START_OR_BODY_CHAR);
-        CHARACTER_CODES[0x0A5E] = NAME_START_OR_BODY_CHAR;
-        Arrays.fill(CHARACTER_CODES, 0x0A72, 0x0A74, NAME_START_OR_BODY_CHAR);
-        Arrays.fill(CHARACTER_CODES, 0x0A85, 0x0A8B, NAME_START_OR_BODY_CHAR);
-        CHARACTER_CODES[0x0A8D] = NAME_START_OR_BODY_CHAR;
-        Arrays.fill(CHARACTER_CODES, 0x0A8F, 0x0A91, NAME_START_OR_BODY_CHAR);
-        Arrays.fill(CHARACTER_CODES, 0x0A93, 0x0AA8, NAME_START_OR_BODY_CHAR);
-        Arrays.fill(CHARACTER_CODES, 0x0AAA, 0x0AB0, NAME_START_OR_BODY_CHAR);
-        Arrays.fill(CHARACTER_CODES, 0x0AB2, 0x0AB3, NAME_START_OR_BODY_CHAR);
-        Arrays.fill(CHARACTER_CODES, 0x0AB5, 0x0AB9, NAME_START_OR_BODY_CHAR);
-        CHARACTER_CODES[0x0ABD] = NAME_START_OR_BODY_CHAR;
-        CHARACTER_CODES[0x0AE0] = NAME_START_OR_BODY_CHAR;
-        Arrays.fill(CHARACTER_CODES, 0x0B05, 0x0B0C, NAME_START_OR_BODY_CHAR);
-        Arrays.fill(CHARACTER_CODES, 0x0B0F, 0x0B10, NAME_START_OR_BODY_CHAR);
-        Arrays.fill(CHARACTER_CODES, 0x0B13, 0x0B28, NAME_START_OR_BODY_CHAR);
-        Arrays.fill(CHARACTER_CODES, 0x0B2A, 0x0B30, NAME_START_OR_BODY_CHAR);
-        Arrays.fill(CHARACTER_CODES, 0x0B32, 0x0B33, NAME_START_OR_BODY_CHAR);
-        Arrays.fill(CHARACTER_CODES, 0x0B36, 0x0B39, NAME_START_OR_BODY_CHAR);
-        CHARACTER_CODES[0x0B3D] = NAME_START_OR_BODY_CHAR;
-        Arrays.fill(CHARACTER_CODES, 0x0B5C, 0x0B5D, NAME_START_OR_BODY_CHAR);
-        Arrays.fill(CHARACTER_CODES, 0x0B5F, 0x0B61, NAME_START_OR_BODY_CHAR);
-        Arrays.fill(CHARACTER_CODES, 0x0B85, 0x0B8A, NAME_START_OR_BODY_CHAR);
-        Arrays.fill(CHARACTER_CODES, 0x0B8E, 0x0B90, NAME_START_OR_BODY_CHAR);
-        Arrays.fill(CHARACTER_CODES, 0x0B92, 0x0B95, NAME_START_OR_BODY_CHAR);
-        Arrays.fill(CHARACTER_CODES, 0x0B99, 0x0B9A, NAME_START_OR_BODY_CHAR);
-        CHARACTER_CODES[0x0B9C] = NAME_START_OR_BODY_CHAR;
-        Arrays.fill(CHARACTER_CODES, 0x0B9E, 0x0B9F, NAME_START_OR_BODY_CHAR);
-        Arrays.fill(CHARACTER_CODES, 0x0BA3, 0x0BA4, NAME_START_OR_BODY_CHAR);
-        Arrays.fill(CHARACTER_CODES, 0x0BA8, 0x0BAA, NAME_START_OR_BODY_CHAR);
-        Arrays.fill(CHARACTER_CODES, 0x0BAE, 0x0BB5, NAME_START_OR_BODY_CHAR);
-        Arrays.fill(CHARACTER_CODES, 0x0BB7, 0x0BB9, NAME_START_OR_BODY_CHAR);
-        Arrays.fill(CHARACTER_CODES, 0x0C05, 0x0C0C, NAME_START_OR_BODY_CHAR);
-        Arrays.fill(CHARACTER_CODES, 0x0C0E, 0x0C10, NAME_START_OR_BODY_CHAR);
-        Arrays.fill(CHARACTER_CODES, 0x0C12, 0x0C28, NAME_START_OR_BODY_CHAR);
-        Arrays.fill(CHARACTER_CODES, 0x0C2A, 0x0C33, NAME_START_OR_BODY_CHAR);
-        Arrays.fill(CHARACTER_CODES, 0x0C35, 0x0C39, NAME_START_OR_BODY_CHAR);
-        Arrays.fill(CHARACTER_CODES, 0x0C60, 0x0C61, NAME_START_OR_BODY_CHAR);
-        Arrays.fill(CHARACTER_CODES, 0x0C85, 0x0C8C, NAME_START_OR_BODY_CHAR);
-        Arrays.fill(CHARACTER_CODES, 0x0C8E, 0x0C90, NAME_START_OR_BODY_CHAR);
-        Arrays.fill(CHARACTER_CODES, 0x0C92, 0x0CA8, NAME_START_OR_BODY_CHAR);
-        Arrays.fill(CHARACTER_CODES, 0x0CAA, 0x0CB3, NAME_START_OR_BODY_CHAR);
-        Arrays.fill(CHARACTER_CODES, 0x0CB5, 0x0CB9, NAME_START_OR_BODY_CHAR);
-        CHARACTER_CODES[0x0CDE] = NAME_START_OR_BODY_CHAR;
-        Arrays.fill(CHARACTER_CODES, 0x0CE0, 0x0CE1, NAME_START_OR_BODY_CHAR);
-        Arrays.fill(CHARACTER_CODES, 0x0D05, 0x0D0C, NAME_START_OR_BODY_CHAR);
-        Arrays.fill(CHARACTER_CODES, 0x0D0E, 0x0D10, NAME_START_OR_BODY_CHAR);
-        Arrays.fill(CHARACTER_CODES, 0x0D12, 0x0D28, NAME_START_OR_BODY_CHAR);
-        Arrays.fill(CHARACTER_CODES, 0x0D2A, 0x0D39, NAME_START_OR_BODY_CHAR);
-        Arrays.fill(CHARACTER_CODES, 0x0D60, 0x0D61, NAME_START_OR_BODY_CHAR);
-        Arrays.fill(CHARACTER_CODES, 0x0E01, 0x0E2E, NAME_START_OR_BODY_CHAR);
-        CHARACTER_CODES[0x0E30] = NAME_START_OR_BODY_CHAR;
-        Arrays.fill(CHARACTER_CODES, 0x0E32, 0x0E33, NAME_START_OR_BODY_CHAR);
-        Arrays.fill(CHARACTER_CODES, 0x0E40, 0x0E45, NAME_START_OR_BODY_CHAR);
-        Arrays.fill(CHARACTER_CODES, 0x0E81, 0x0E82, NAME_START_OR_BODY_CHAR);
-        CHARACTER_CODES[0x0E84] = NAME_START_OR_BODY_CHAR;
-        Arrays.fill(CHARACTER_CODES, 0x0E87, 0x0E88, NAME_START_OR_BODY_CHAR);
-        CHARACTER_CODES[0x0E8A] = NAME_START_OR_BODY_CHAR;
-        CHARACTER_CODES[0x0E8D] = NAME_START_OR_BODY_CHAR;
-        Arrays.fill(CHARACTER_CODES, 0x0E94, 0x0E97, NAME_START_OR_BODY_CHAR);
-        Arrays.fill(CHARACTER_CODES, 0x0E99, 0x0E9F, NAME_START_OR_BODY_CHAR);
-        Arrays.fill(CHARACTER_CODES, 0x0EA1, 0x0EA3, NAME_START_OR_BODY_CHAR);
-        CHARACTER_CODES[0x0EA5] = NAME_START_OR_BODY_CHAR;
-        CHARACTER_CODES[0x0EA7] = NAME_START_OR_BODY_CHAR;
-        Arrays.fill(CHARACTER_CODES, 0x0EAA, 0x0EAB, NAME_START_OR_BODY_CHAR);
-        Arrays.fill(CHARACTER_CODES, 0x0EAD, 0x0EAE, NAME_START_OR_BODY_CHAR);
-        CHARACTER_CODES[0x0EB0] = NAME_START_OR_BODY_CHAR;
-        Arrays.fill(CHARACTER_CODES, 0x0EB2, 0x0EB3, NAME_START_OR_BODY_CHAR);
-        CHARACTER_CODES[0x0EBD] = NAME_START_OR_BODY_CHAR;
-        Arrays.fill(CHARACTER_CODES, 0x0EC0, 0x0EC4, NAME_START_OR_BODY_CHAR);
-        Arrays.fill(CHARACTER_CODES, 0x0F40, 0x0F47, NAME_START_OR_BODY_CHAR);
-        Arrays.fill(CHARACTER_CODES, 0x0F49, 0x0F69, NAME_START_OR_BODY_CHAR);
-        Arrays.fill(CHARACTER_CODES, 0x10A0, 0x10C5, NAME_START_OR_BODY_CHAR);
-        Arrays.fill(CHARACTER_CODES, 0x10D0, 0x10F6, NAME_START_OR_BODY_CHAR);
-        CHARACTER_CODES[0x1100] = NAME_START_OR_BODY_CHAR;
-        Arrays.fill(CHARACTER_CODES, 0x1102, 0x1103, NAME_START_OR_BODY_CHAR);
-        Arrays.fill(CHARACTER_CODES, 0x1105, 0x1107, NAME_START_OR_BODY_CHAR);
-        CHARACTER_CODES[0x1109] = NAME_START_OR_BODY_CHAR;
-        Arrays.fill(CHARACTER_CODES, 0x110B, 0x110C, NAME_START_OR_BODY_CHAR);
-        Arrays.fill(CHARACTER_CODES, 0x110E, 0x1112, NAME_START_OR_BODY_CHAR);
-        CHARACTER_CODES[0x113C] = NAME_START_OR_BODY_CHAR;
-        CHARACTER_CODES[0x113E] = NAME_START_OR_BODY_CHAR;
-        CHARACTER_CODES[0x1140] = NAME_START_OR_BODY_CHAR;
-        CHARACTER_CODES[0x114C] = NAME_START_OR_BODY_CHAR;
-        CHARACTER_CODES[0x114E] = NAME_START_OR_BODY_CHAR;
-        CHARACTER_CODES[0x1150] = NAME_START_OR_BODY_CHAR;
-        Arrays.fill(CHARACTER_CODES, 0x1154, 0x1155, NAME_START_OR_BODY_CHAR);
-        CHARACTER_CODES[0x1159] = NAME_START_OR_BODY_CHAR;
-        Arrays.fill(CHARACTER_CODES, 0x115F, 0x1161, NAME_START_OR_BODY_CHAR);
-        CHARACTER_CODES[0x1163] = NAME_START_OR_BODY_CHAR;
-        CHARACTER_CODES[0x1165] = NAME_START_OR_BODY_CHAR;
-        CHARACTER_CODES[0x1167] = NAME_START_OR_BODY_CHAR;
-        CHARACTER_CODES[0x1169] = NAME_START_OR_BODY_CHAR;
-        Arrays.fill(CHARACTER_CODES, 0x116D, 0x116E, NAME_START_OR_BODY_CHAR);
-        Arrays.fill(CHARACTER_CODES, 0x1172, 0x1173, NAME_START_OR_BODY_CHAR);
-        CHARACTER_CODES[0x1175] = NAME_START_OR_BODY_CHAR;
-        CHARACTER_CODES[0x119E] = NAME_START_OR_BODY_CHAR;
-        CHARACTER_CODES[0x11A8] = NAME_START_OR_BODY_CHAR;
-        CHARACTER_CODES[0x11AB] = NAME_START_OR_BODY_CHAR;
-        Arrays.fill(CHARACTER_CODES, 0x11AE, 0x11AF, NAME_START_OR_BODY_CHAR);
-        Arrays.fill(CHARACTER_CODES, 0x11B7, 0x11B8, NAME_START_OR_BODY_CHAR);
-        CHARACTER_CODES[0x11BA] = NAME_START_OR_BODY_CHAR;
-        Arrays.fill(CHARACTER_CODES, 0x11BC, 0x11C2, NAME_START_OR_BODY_CHAR);
-        CHARACTER_CODES[0x11EB] = NAME_START_OR_BODY_CHAR;
-        CHARACTER_CODES[0x11F0] = NAME_START_OR_BODY_CHAR;
-        CHARACTER_CODES[0x11F9] = NAME_START_OR_BODY_CHAR;
-        Arrays.fill(CHARACTER_CODES, 0x1E00, 0x1E9B, NAME_START_OR_BODY_CHAR);
-        Arrays.fill(CHARACTER_CODES, 0x1EA0, 0x1EF9, NAME_START_OR_BODY_CHAR);
-        Arrays.fill(CHARACTER_CODES, 0x1F00, 0x1F15, NAME_START_OR_BODY_CHAR);
-        Arrays.fill(CHARACTER_CODES, 0x1F18, 0x1F1D, NAME_START_OR_BODY_CHAR);
-        Arrays.fill(CHARACTER_CODES, 0x1F20, 0x1F45, NAME_START_OR_BODY_CHAR);
-        Arrays.fill(CHARACTER_CODES, 0x1F48, 0x1F4D, NAME_START_OR_BODY_CHAR);
-        Arrays.fill(CHARACTER_CODES, 0x1F50, 0x1F57, NAME_START_OR_BODY_CHAR);
-        CHARACTER_CODES[0x1F59] = NAME_START_OR_BODY_CHAR;
-        CHARACTER_CODES[0x1F5B] = NAME_START_OR_BODY_CHAR;
-        CHARACTER_CODES[0x1F5D] = NAME_START_OR_BODY_CHAR;
-        Arrays.fill(CHARACTER_CODES, 0x1F5F, 0x1F7D, NAME_START_OR_BODY_CHAR);
-        Arrays.fill(CHARACTER_CODES, 0x1F80, 0x1FB4, NAME_START_OR_BODY_CHAR);
-        Arrays.fill(CHARACTER_CODES, 0x1FB6, 0x1FBC, NAME_START_OR_BODY_CHAR);
-        CHARACTER_CODES[0x1FBE] = NAME_START_OR_BODY_CHAR;
-        Arrays.fill(CHARACTER_CODES, 0x1FC2, 0x1FC4, NAME_START_OR_BODY_CHAR);
-        Arrays.fill(CHARACTER_CODES, 0x1FC6, 0x1FCC, NAME_START_OR_BODY_CHAR);
-        Arrays.fill(CHARACTER_CODES, 0x1FD0, 0x1FD3, NAME_START_OR_BODY_CHAR);
-        Arrays.fill(CHARACTER_CODES, 0x1FD6, 0x1FDB, NAME_START_OR_BODY_CHAR);
-        Arrays.fill(CHARACTER_CODES, 0x1FE0, 0x1FEC, NAME_START_OR_BODY_CHAR);
-        Arrays.fill(CHARACTER_CODES, 0x1FF2, 0x1FF4, NAME_START_OR_BODY_CHAR);
-        Arrays.fill(CHARACTER_CODES, 0x1FF6, 0x1FFC, NAME_START_OR_BODY_CHAR);
-        CHARACTER_CODES[0x2126] = NAME_START_OR_BODY_CHAR;
-        Arrays.fill(CHARACTER_CODES, 0x212A, 0x212B, NAME_START_OR_BODY_CHAR);
-        CHARACTER_CODES[0x212E] = NAME_START_OR_BODY_CHAR;
-        Arrays.fill(CHARACTER_CODES, 0x2180, 0x2182, NAME_START_OR_BODY_CHAR);
-        Arrays.fill(CHARACTER_CODES, 0x3041, 0x3094, NAME_START_OR_BODY_CHAR);
-        Arrays.fill(CHARACTER_CODES, 0x30A1, 0x30FA, NAME_START_OR_BODY_CHAR);
-        Arrays.fill(CHARACTER_CODES, 0x3105, 0x312C, NAME_START_OR_BODY_CHAR);
-        Arrays.fill(CHARACTER_CODES, 0xAC00, 0xD7A3, NAME_START_OR_BODY_CHAR);
-        // Ideographic
-        Arrays.fill(CHARACTER_CODES, 0x4E00, 0x9FA5, NAME_START_OR_BODY_CHAR);
-        CHARACTER_CODES[0x3007] = NAME_START_OR_BODY_CHAR;
-        Arrays.fill(CHARACTER_CODES, 0x3021, 0x3029, NAME_START_OR_BODY_CHAR);
-        // NameChar ::= Letter | Digit | '.' | '-' | '_' | ':' | CombiningChar | Extender
-        CHARACTER_CODES['.'] = NAME_BODY_CHAR;
-        CHARACTER_CODES['-'] = NAME_BODY_CHAR;
-        // CombiningChar 
-        Arrays.fill(CHARACTER_CODES, 0x0300, 0x0345, NAME_BODY_CHAR);
-        Arrays.fill(CHARACTER_CODES, 0x0360, 0x0361, NAME_BODY_CHAR);
-        Arrays.fill(CHARACTER_CODES, 0x0483, 0x0486, NAME_BODY_CHAR);
-        Arrays.fill(CHARACTER_CODES, 0x0591, 0x05A1, NAME_BODY_CHAR);
-        Arrays.fill(CHARACTER_CODES, 0x05A3, 0x05B9, NAME_BODY_CHAR);
-        Arrays.fill(CHARACTER_CODES, 0x05BB, 0x05BD, NAME_BODY_CHAR);
-        CHARACTER_CODES[0x05BF] = NAME_BODY_CHAR;
-        Arrays.fill(CHARACTER_CODES, 0x05C1, 0x05C2, NAME_BODY_CHAR);
-        CHARACTER_CODES[0x05C4] = NAME_BODY_CHAR;
-        Arrays.fill(CHARACTER_CODES, 0x064B, 0x0652, NAME_BODY_CHAR);
-        CHARACTER_CODES[0x0670] = NAME_BODY_CHAR;
-        Arrays.fill(CHARACTER_CODES, 0x06D6, 0x06DC, NAME_BODY_CHAR);
-        Arrays.fill(CHARACTER_CODES, 0x06DD, 0x06DF, NAME_BODY_CHAR);
-        Arrays.fill(CHARACTER_CODES, 0x06E0, 0x06E4, NAME_BODY_CHAR);
-        Arrays.fill(CHARACTER_CODES, 0x06E7, 0x06E8, NAME_BODY_CHAR);
-        Arrays.fill(CHARACTER_CODES, 0x06EA, 0x06ED, NAME_BODY_CHAR);
-        Arrays.fill(CHARACTER_CODES, 0x0901, 0x0903, NAME_BODY_CHAR);
-        CHARACTER_CODES[0x093C] = NAME_BODY_CHAR;
-        Arrays.fill(CHARACTER_CODES, 0x093E, 0x094C, NAME_BODY_CHAR);
-        CHARACTER_CODES[0x094D] = NAME_BODY_CHAR;
-        Arrays.fill(CHARACTER_CODES, 0x0951, 0x0954, NAME_BODY_CHAR);
-        Arrays.fill(CHARACTER_CODES, 0x0962, 0x0963, NAME_BODY_CHAR);
-        Arrays.fill(CHARACTER_CODES, 0x0981, 0x0983, NAME_BODY_CHAR);
-        CHARACTER_CODES[0x09BC] = NAME_BODY_CHAR;
-        CHARACTER_CODES[0x09BE] = NAME_BODY_CHAR;
-        CHARACTER_CODES[0x09BF] = NAME_BODY_CHAR;
-        Arrays.fill(CHARACTER_CODES, 0x09C0, 0x09C4, NAME_BODY_CHAR);
-        Arrays.fill(CHARACTER_CODES, 0x09C7, 0x09C8, NAME_BODY_CHAR);
-        Arrays.fill(CHARACTER_CODES, 0x09CB, 0x09CD, NAME_BODY_CHAR);
-        CHARACTER_CODES[0x09D7] = NAME_BODY_CHAR;
-        Arrays.fill(CHARACTER_CODES, 0x09E2, 0x09E3, NAME_BODY_CHAR);
-        CHARACTER_CODES[0x0A02] = NAME_BODY_CHAR;
-        CHARACTER_CODES[0x0A3C] = NAME_BODY_CHAR;
-        CHARACTER_CODES[0x0A3E] = NAME_BODY_CHAR;
-        CHARACTER_CODES[0x0A3F] = NAME_BODY_CHAR;
-        Arrays.fill(CHARACTER_CODES, 0x0A40, 0x0A42, NAME_BODY_CHAR);
-        Arrays.fill(CHARACTER_CODES, 0x0A47, 0x0A48, NAME_BODY_CHAR);
-        Arrays.fill(CHARACTER_CODES, 0x0A4B, 0x0A4D, NAME_BODY_CHAR);
-        Arrays.fill(CHARACTER_CODES, 0x0A70, 0x0A71, NAME_BODY_CHAR);
-        Arrays.fill(CHARACTER_CODES, 0x0A81, 0x0A83, NAME_BODY_CHAR);
-        CHARACTER_CODES[0x0ABC] = NAME_BODY_CHAR;
-        Arrays.fill(CHARACTER_CODES, 0x0ABE, 0x0AC5, NAME_BODY_CHAR);
-        Arrays.fill(CHARACTER_CODES, 0x0AC7, 0x0AC9, NAME_BODY_CHAR);
-        Arrays.fill(CHARACTER_CODES, 0x0ACB, 0x0ACD, NAME_BODY_CHAR);
-        Arrays.fill(CHARACTER_CODES, 0x0B01, 0x0B03, NAME_BODY_CHAR);
-        CHARACTER_CODES[0x0B3C] = NAME_BODY_CHAR;
-        Arrays.fill(CHARACTER_CODES, 0x0B3E, 0x0B43, NAME_BODY_CHAR);
-        Arrays.fill(CHARACTER_CODES, 0x0B47, 0x0B48, NAME_BODY_CHAR);
-        Arrays.fill(CHARACTER_CODES, 0x0B4B, 0x0B4D, NAME_BODY_CHAR);
-        Arrays.fill(CHARACTER_CODES, 0x0B56, 0x0B57, NAME_BODY_CHAR);
-        Arrays.fill(CHARACTER_CODES, 0x0B82, 0x0B83, NAME_BODY_CHAR);
-        Arrays.fill(CHARACTER_CODES, 0x0BBE, 0x0BC2, NAME_BODY_CHAR);
-        Arrays.fill(CHARACTER_CODES, 0x0BC6, 0x0BC8, NAME_BODY_CHAR);
-        Arrays.fill(CHARACTER_CODES, 0x0BCA, 0x0BCD, NAME_BODY_CHAR);
-        CHARACTER_CODES[0x0BD7] = NAME_BODY_CHAR;
-        Arrays.fill(CHARACTER_CODES, 0x0C01, 0x0C03, NAME_BODY_CHAR);
-        Arrays.fill(CHARACTER_CODES, 0x0C3E, 0x0C44, NAME_BODY_CHAR);
-        Arrays.fill(CHARACTER_CODES, 0x0C46, 0x0C48, NAME_BODY_CHAR);
-        Arrays.fill(CHARACTER_CODES, 0x0C4A, 0x0C4D, NAME_BODY_CHAR);
-        Arrays.fill(CHARACTER_CODES, 0x0C55, 0x0C56, NAME_BODY_CHAR);
-        Arrays.fill(CHARACTER_CODES, 0x0C82, 0x0C83, NAME_BODY_CHAR);
-        Arrays.fill(CHARACTER_CODES, 0x0CBE, 0x0CC4, NAME_BODY_CHAR);
-        Arrays.fill(CHARACTER_CODES, 0x0CC6, 0x0CC8, NAME_BODY_CHAR);
-        Arrays.fill(CHARACTER_CODES, 0x0CCA, 0x0CCD, NAME_BODY_CHAR);
-        Arrays.fill(CHARACTER_CODES, 0x0CD5, 0x0CD6, NAME_BODY_CHAR);
-        Arrays.fill(CHARACTER_CODES, 0x0D02, 0x0D03, NAME_BODY_CHAR);
-        Arrays.fill(CHARACTER_CODES, 0x0D3E, 0x0D43, NAME_BODY_CHAR);
-        Arrays.fill(CHARACTER_CODES, 0x0D46, 0x0D48, NAME_BODY_CHAR);
-        Arrays.fill(CHARACTER_CODES, 0x0D4A, 0x0D4D, NAME_BODY_CHAR);
-        CHARACTER_CODES[0x0D57] = NAME_BODY_CHAR;
-        CHARACTER_CODES[0x0E31] = NAME_BODY_CHAR;
-        Arrays.fill(CHARACTER_CODES, 0x0E34, 0x0E3A, NAME_BODY_CHAR);
-        Arrays.fill(CHARACTER_CODES, 0x0E47, 0x0E4E, NAME_BODY_CHAR);
-        CHARACTER_CODES[0x0EB1] = NAME_BODY_CHAR;
-        Arrays.fill(CHARACTER_CODES, 0x0EB4, 0x0EB9, NAME_BODY_CHAR);
-        Arrays.fill(CHARACTER_CODES, 0x0EBB, 0x0EBC, NAME_BODY_CHAR);
-        Arrays.fill(CHARACTER_CODES, 0x0EC8, 0x0ECD, NAME_BODY_CHAR);
-        Arrays.fill(CHARACTER_CODES, 0x0F18, 0x0F19, NAME_BODY_CHAR);
-        CHARACTER_CODES[0x0F35] = NAME_BODY_CHAR;
-        CHARACTER_CODES[0x0F37] = NAME_BODY_CHAR;
-        CHARACTER_CODES[0x0F39] = NAME_BODY_CHAR;
-        CHARACTER_CODES[0x0F3E] = NAME_BODY_CHAR;
-        CHARACTER_CODES[0x0F3F] = NAME_BODY_CHAR;
-        Arrays.fill(CHARACTER_CODES, 0x0F71, 0x0F84, NAME_BODY_CHAR);
-        Arrays.fill(CHARACTER_CODES, 0x0F86, 0x0F8B, NAME_BODY_CHAR);
-        Arrays.fill(CHARACTER_CODES, 0x0F90, 0x0F95, NAME_BODY_CHAR);
-        CHARACTER_CODES[0x0F97] = NAME_BODY_CHAR;
-        Arrays.fill(CHARACTER_CODES, 0x0F99, 0x0FAD, NAME_BODY_CHAR);
-        Arrays.fill(CHARACTER_CODES, 0x0FB1, 0x0FB7, NAME_BODY_CHAR);
-        CHARACTER_CODES[0x0FB9] = NAME_BODY_CHAR;
-        Arrays.fill(CHARACTER_CODES, 0x20D0, 0x20DC, NAME_BODY_CHAR);
-        CHARACTER_CODES[0x20E1] = NAME_BODY_CHAR;
-        Arrays.fill(CHARACTER_CODES, 0x302A, 0x302F, NAME_BODY_CHAR);
-        CHARACTER_CODES[0x3099] = NAME_BODY_CHAR;
-        CHARACTER_CODES[0x309A] = NAME_BODY_CHAR;
-        // Digit 
-        Arrays.fill(CHARACTER_CODES, 0x0030, 0x0039, NAME_BODY_CHAR);
-        Arrays.fill(CHARACTER_CODES, 0x0660, 0x0669, NAME_BODY_CHAR);
-        Arrays.fill(CHARACTER_CODES, 0x06F0, 0x06F9, NAME_BODY_CHAR);
-        Arrays.fill(CHARACTER_CODES, 0x0966, 0x096F, NAME_BODY_CHAR);
-        Arrays.fill(CHARACTER_CODES, 0x09E6, 0x09EF, NAME_BODY_CHAR);
-        Arrays.fill(CHARACTER_CODES, 0x0A66, 0x0A6F, NAME_BODY_CHAR);
-        Arrays.fill(CHARACTER_CODES, 0x0AE6, 0x0AEF, NAME_BODY_CHAR);
-        Arrays.fill(CHARACTER_CODES, 0x0B66, 0x0B6F, NAME_BODY_CHAR);
-        Arrays.fill(CHARACTER_CODES, 0x0BE7, 0x0BEF, NAME_BODY_CHAR);
-        Arrays.fill(CHARACTER_CODES, 0x0C66, 0x0C6F, NAME_BODY_CHAR);
-        Arrays.fill(CHARACTER_CODES, 0x0CE6, 0x0CEF, NAME_BODY_CHAR);
-        Arrays.fill(CHARACTER_CODES, 0x0D66, 0x0D6F, NAME_BODY_CHAR);
-        Arrays.fill(CHARACTER_CODES, 0x0E50, 0x0E59, NAME_BODY_CHAR);
-        Arrays.fill(CHARACTER_CODES, 0x0ED0, 0x0ED9, NAME_BODY_CHAR);
-        Arrays.fill(CHARACTER_CODES, 0x0F20, 0x0F29, NAME_BODY_CHAR);
-        // Extender 
-        CHARACTER_CODES[0x00B7] = NAME_BODY_CHAR;
-        CHARACTER_CODES[0x02D0] = NAME_BODY_CHAR;
-        CHARACTER_CODES[0x02D1] = NAME_BODY_CHAR;
-        CHARACTER_CODES[0x0387] = NAME_BODY_CHAR;
-        CHARACTER_CODES[0x0640] = NAME_BODY_CHAR;
-        CHARACTER_CODES[0x0E46] = NAME_BODY_CHAR;
-        CHARACTER_CODES[0x0EC6] = NAME_BODY_CHAR;
-        CHARACTER_CODES[0x3005] = NAME_BODY_CHAR;
-        Arrays.fill(CHARACTER_CODES, 0x3031, 0x3035, NAME_BODY_CHAR);
-        Arrays.fill(CHARACTER_CODES, 0x309D, 0x309E, NAME_BODY_CHAR);
-        Arrays.fill(CHARACTER_CODES, 0x30FC, 0x30FE, NAME_BODY_CHAR);
-
-    }
-
-    private final Writer writer;
-    private final ArrayStack elementNames;
-    private final Set<CharSequence> currentAttributes = new HashSet<CharSequence>();
-
-    boolean elementsWritten = false;
-    boolean inElement = false;
-    boolean prologWritten = false;
-
-    public XmlWriter(final Writer writer) {
-        this.writer = writer;
-        this.elementNames = new ArrayStack();
-    }
-
-    /**
-     * Starts a document by writing a prolog.
-     * Calling this method is optional.
-     * When writing a document fragment, it should <em>not</em> be called.
-     *
-     * @return this object
-     * @throws OperationNotAllowedException if called after the first element has been written
-     *                                      or once a prolog has already been written
-     */
-    public IXmlWriter startDocument() throws IOException {
-        if (elementsWritten) {
-            throw new OperationNotAllowedException("Document already started");
-        }
-        if (prologWritten) {
-            throw new OperationNotAllowedException("Only one prolog allowed");
-        }
-        writer.write("<?xml version='1.0'?>");
-        prologWritten = true;
-        return this;
-    }
-
-    /**
-     * Writes the start of an element.
-     *
-     * @param elementName the name of the element, not null
-     * @return this object
-     * @throws InvalidXmlException          if the name is not valid for an xml element
-     * @throws OperationNotAllowedException if called after the first element has been closed
-     */
-    public IXmlWriter openElement(final CharSequence elementName) throws IOException {
-        if (elementsWritten && elementNames.isEmpty()) {
-            throw new OperationNotAllowedException("Root element already closed. Cannot open new element.");
-        }
-        if (!isValidName(elementName)) {
-            throw new InvalidXmlException("'" + elementName + "' is not a valid element name");
-        }
-        elementsWritten = true;
-        if (inElement) {
-            writer.write('>');
-        }
-        writer.write('<');
-        rawWrite(elementName);
-        inElement = true;
-        elementNames.push(elementName);
-        currentAttributes.clear();
-        return this;
-    }
-
-    /**
-     * Writes an attribute of an element.
-     * Note that this is only allowed directly after {@link #openElement(CharSequence)}
-     * or {@link #attribute}.
-     *
-     * @param name  the attribute name, not null
-     * @param value the attribute value, not null
-     * @return this object
-     * @throws InvalidXmlException          if the name is not valid for an xml attribute
-     *                                      or if a value for the attribute has already been written
-     * @throws OperationNotAllowedException if called after {@link #content(CharSequence)}
-     *                                      or {@link #closeElement()} or before any call to {@link #openElement(CharSequence)}
-     */
-    public IXmlWriter attribute(CharSequence name, CharSequence value) throws IOException {
-        if (elementNames.isEmpty()) {
-            if (elementsWritten) {
-                throw new OperationNotAllowedException("Root element has already been closed.");
-            } else {
-                throw new OperationNotAllowedException("Close called before an element has been opened.");
-            }
-        }
-        if (!isValidName(name)) {
-            throw new InvalidXmlException("'" + name + "' is not a valid attribute name.");
-        }
-        if (!inElement) {
-            throw new InvalidXmlException("Attributes can only be written in elements");
-        }
-        if (currentAttributes.contains(name)) {
-            throw new InvalidXmlException("Each attribute can only be written once");
-        }
-        writer.write(' ');
-        rawWrite(name);
-        writer.write('=');
-        writer.write('\'');
-        writeAttributeContent(value);
-        writer.write('\'');
-        currentAttributes.add(name);
-        return this;
-    }
-
-    private void writeAttributeContent(CharSequence content) throws IOException {
-        writeEscaped(content, true);
-    }
-
-    /**
-     * Writes content.
-     * Calling this method will automatically
-     * Note that this method does not use CDATA.
-     *
-     * @param content the content to write
-     * @return this object
-     * @throws OperationNotAllowedException if called before any call to {@link #openElement}
-     *                                      or after the first element has been closed
-     */
-    public IXmlWriter content(CharSequence content) throws IOException {
-        if (elementNames.isEmpty()) {
-            if (elementsWritten) {
-                throw new OperationNotAllowedException("Root element has already been closed.");
-            } else {
-                throw new OperationNotAllowedException("An element must be opened before content can be written.");
-            }
-        }
-        if (inElement) {
-            writer.write('>');
-        }
-        writeBodyContent(content);
-        inElement = false;
-        return this;
-    }
-
-    private void writeBodyContent(final CharSequence content) throws IOException {
-        writeEscaped(content, false);
-    }
-
-    private void writeEscaped(final CharSequence content, boolean isAttributeContent) throws IOException {
-        final int length = content.length();
-        for (int i = 0; i < length; i++) {
-            char character = content.charAt(i);
-            if (character == '&') {
-                writer.write("&amp;");
-            } else if (character == '<') {
-                writer.write("&lt;");
-            } else if (character == '>') {
-                writer.write("&gt;");
-            } else if (isAttributeContent && character == '\'') {
-                writer.write("&apos;");
-            } else if (isAttributeContent && character == '\"') {
-                writer.write("&quot;");
-            } else if (isOutOfRange(character)) {
-                writer.write('?');
-            } else {
-                writer.write(character);
-            }
-        }
-    }
-
-    private boolean isOutOfRange(final char character) {
-        return !ALLOWED_CHARACTERS[character];
-    }
-
-    /**
-     * Closes the last element written.
-     *
-     * @return this object
-     * @throws OperationNotAllowedException if called before any call to {@link #openElement}
-     *                                      or after the first element has been closed
-     */
-    public IXmlWriter closeElement() throws IOException {
-        if (elementNames.isEmpty()) {
-            if (elementsWritten) {
-                throw new OperationNotAllowedException("Root element has already been closed.");
-            } else {
-                throw new OperationNotAllowedException("Close called before an element has been opened.");
-            }
-        }
-        final CharSequence elementName = (CharSequence) elementNames.pop();
-        if (inElement) {
-            writer.write('/');
-            writer.write('>');
-        } else {
-            writer.write('<');
-            writer.write('/');
-            rawWrite(elementName);
-            writer.write('>');
-        }
-        writer.flush();
-        inElement = false;
-        return this;
-    }
-
-
-    /**
-     * Closes all pending elements.
-     * When appropriate, resources are also flushed and closed.
-     * No exception is raised when called upon a document whose
-     * root element has already been closed.
-     *
-     * @return this object
-     * @throws OperationNotAllowedException if called before any call to {@link #openElement}
-     */
-    public IXmlWriter closeDocument() throws IOException {
-        if (elementNames.isEmpty() && !elementsWritten) {
-            throw new OperationNotAllowedException("Close called before an element has been opened.");
-        }
-        while (!elementNames.isEmpty()) {
-            closeElement();
-        }
-        writer.flush();
-        return this;
-    }
-
-    private void rawWrite(final CharSequence sequence) throws IOException {
-        for (int i = 0; i < sequence.length(); i++) {
-            final char charAt = sequence.charAt(i);
-            writer.write(charAt);
-        }
-    }
-
-    private boolean isValidName(final CharSequence sequence) {
-        boolean result = true;
-        final int length = sequence.length();
-        for (int i = 0; i < length; i++) {
-            char character = sequence.charAt(i);
-            if (i == 0) {
-                if (!isValidNameStart(character)) {
-                    result = false;
-                    break;
-                }
-            } else {
-                if (!isValidNameBody(character)) {
-                    result = false;
-                    break;
-                }
-            }
-        }
-        return result;
-    }
-
-    private boolean isValidNameStart(final char character) {
-        final byte code = CHARACTER_CODES[character];
-        return (code & NAME_START_MASK) > 0;
-    }
-
-    private boolean isValidNameBody(final char character) {
-        final byte code = CHARACTER_CODES[character];
-        return (code & NAME_MASK) > 0;
-    }
-}
diff --git a/0.12-release/apache-rat-core/src/main/java/org/apache/rat/walker/ArchiveWalker.java b/0.12-release/apache-rat-core/src/main/java/org/apache/rat/walker/ArchiveWalker.java
deleted file mode 100644
index 57caccb..0000000
--- a/0.12-release/apache-rat-core/src/main/java/org/apache/rat/walker/ArchiveWalker.java
+++ /dev/null
@@ -1,119 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one   *
- * or more contributor license agreements.  See the NOTICE file *
- * distributed with this work for additional information        *
- * regarding copyright ownership.  The ASF licenses this file   *
- * to you under the Apache License, Version 2.0 (the            *
- * "License"); you may not use this file except in compliance   *
- * with the License.  You may obtain a copy of the License at   *
- *                                                              *
- *   http://www.apache.org/licenses/LICENSE-2.0                 *
- *                                                              *
- * Unless required by applicable law or agreed to in writing,   *
- * software distributed under the License is distributed on an  *
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY       *
- * KIND, either express or implied.  See the License for the    *
- * specific language governing permissions and limitations      *
- * under the License.                                           *
- */
-
-package org.apache.rat.walker;
-
-import java.io.File;
-import java.io.FileInputStream;
-import java.io.FileNotFoundException;
-import java.io.FilenameFilter;
-import java.io.IOException;
-
-import org.apache.commons.compress.archivers.ArchiveEntry;
-import org.apache.commons.compress.archivers.ArchiveInputStream;
-import org.apache.commons.compress.archivers.tar.TarArchiveInputStream;
-import org.apache.commons.compress.archivers.zip.ZipArchiveInputStream;
-import org.apache.commons.compress.compressors.bzip2.BZip2CompressorInputStream;
-import org.apache.commons.compress.compressors.gzip.GzipCompressorInputStream;
-import org.apache.rat.api.Document;
-import org.apache.rat.api.RatException;
-import org.apache.rat.document.impl.ArchiveEntryDocument;
-import org.apache.rat.report.IReportable;
-import org.apache.rat.report.RatReport;
-
-/**
- * Walks various kinds of archives files
- */
-public class ArchiveWalker extends Walker implements IReportable {
-
-    /**
-     * Constructs a walker.
-     * @param file not null
-     * @param filter filters input files (optional), 
-     * or null when no filtering should be performed
-     * @throws FileNotFoundException in case of I/O errors. 
-     */
-    public ArchiveWalker(File file, final FilenameFilter filter) throws FileNotFoundException {
-        super(file, filter);
-    }
-    
-    /**
-     * Run a report over all files and directories in this GZIPWalker,
-     * ignoring any files/directories set to be ignored.
-     * 
-     * @param report the defined RatReport to run on this GZIP walker.
-     * 
-     */
-    public void run(final RatReport report) throws RatException {
-
-        try {
-            ArchiveInputStream input;
-
-            /* I am really sad that classes aren't first-class objects in
-               Java :'( */
-            try {
-                input = new TarArchiveInputStream(new GzipCompressorInputStream(new FileInputStream(file)));
-            } catch (IOException e) {
-                try {
-                    input = new TarArchiveInputStream(new BZip2CompressorInputStream(new FileInputStream(file)));
-                } catch (IOException e2) {
-                    input = new ZipArchiveInputStream(new FileInputStream(file));
-                }
-            }
-
-            ArchiveEntry entry = input.getNextEntry();
-            while (entry != null) {
-                File f = new File(entry.getName());
-                byte[] contents = new byte[(int) entry.getSize()];
-                int offset = 0;
-                int length = contents.length;
-
-                while (offset < entry.getSize()) {
-                    int actualRead = input.read(contents, offset, length);
-                    length -= actualRead;
-                    offset += actualRead;
-                }
-
-                if (!entry.isDirectory() && !ignored(f)) {
-                    report(report, contents, f);
-                }
-
-                entry = input.getNextEntry();
-            }
-
-            input.close();
-        } catch (IOException e) {
-            throw new RatException(e);
-        }
-    }
-
-    /**
-     * Report on the given file.
-     * 
-     * @param report the report to process the file with
-     * @param file the file to be reported on
-     * @throws RatException
-     */
-    private void report(final RatReport report, byte[] contents, File file) throws RatException {
-
-        Document document = new ArchiveEntryDocument(file, contents);
-        report.report(document);
-
-    }
-}
diff --git a/0.12-release/apache-rat-core/src/main/java/org/apache/rat/walker/DirectoryWalker.java b/0.12-release/apache-rat-core/src/main/java/org/apache/rat/walker/DirectoryWalker.java
deleted file mode 100644
index 49dfcb4..0000000
--- a/0.12-release/apache-rat-core/src/main/java/org/apache/rat/walker/DirectoryWalker.java
+++ /dev/null
@@ -1,147 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one   *
- * or more contributor license agreements.  See the NOTICE file *
- * distributed with this work for additional information        *
- * regarding copyright ownership.  The ASF licenses this file   *
- * to you under the Apache License, Version 2.0 (the            *
- * "License"); you may not use this file except in compliance   *
- * with the License.  You may obtain a copy of the License at   *
- *                                                              *
- *   http://www.apache.org/licenses/LICENSE-2.0                 *
- *                                                              *
- * Unless required by applicable law or agreed to in writing,   *
- * software distributed under the License is distributed on an  *
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY       *
- * KIND, either express or implied.  See the License for the    *
- * specific language governing permissions and limitations      *
- * under the License.                                           *
- */
-
-package org.apache.rat.walker;
-
-import org.apache.rat.api.Document;
-import org.apache.rat.api.RatException;
-import org.apache.rat.document.impl.FileDocument;
-import org.apache.rat.report.IReportable;
-import org.apache.rat.report.RatReport;
-
-import java.io.File;
-import java.io.FilenameFilter;
-import java.util.Arrays;
-import java.util.regex.Pattern;
-
-/**
- * Walks directories.
- */
-public class DirectoryWalker extends Walker implements IReportable {
-
-    protected static final FileNameComparator COMPARATOR = new FileNameComparator();
-
-    public DirectoryWalker(File file) {
-        this(file, (FilenameFilter) null);
-    }
-
-    /**
-     * Constructs a walker.
-     *
-     * @param file   not null
-     * @param filter filters input files (optional),
-     *               or null when no filtering should be performed
-     */
-    public DirectoryWalker(File file, final FilenameFilter filter) {
-        super(file.getPath(), file, filter);
-    }
-
-    public DirectoryWalker(File file, final Pattern ignoreNameRegex) {
-        super(file.getPath(), file, regexFilter(ignoreNameRegex));
-    }
-
-    public boolean isRestricted() {
-        return false;
-    }
-
-    /**
-     * Process a directory, restricted directories will be ignored.
-     *
-     * @param report The report to process the directory with
-     * @param file   the directory to process
-     * @throws RatException
-     */
-    private void processDirectory(RatReport report, final File file) throws RatException {
-        if (!isRestricted(file)) {
-            process(report, file);
-        }
-    }
-
-    /**
-     * Run a report over all files and directories in this DirectoryWalker,
-     * ignoring any files/directories set to be ignored.
-     *
-     * @param report the defined RatReport to run on this Directory walker.
-     */
-    public void run(final RatReport report) throws RatException {
-        process(report, file);
-    }
-
-    /**
-     * Process a directory, ignoring any files/directories set to be ignored.
-     *
-     * @param report the report to use in processing
-     * @param file   the run the report against
-     * @throws RatException
-     */
-    private void process(final RatReport report, final File file) throws RatException {
-        final File[] files = file.listFiles();
-        if (files != null) {
-            Arrays.sort(files, COMPARATOR);
-            // breadth first traversal
-            processNonDirectories(report, files);
-            processDirectories(report, files);
-        }
-    }
-
-    /**
-     * Process all directories in a set of file objects, ignoring any directories set to be ignored.
-     *
-     * @param report the report to use in processing
-     * @param files  the files to process (only directories will be processed)
-     * @throws RatException
-     */
-    private void processDirectories(final RatReport report, final File[] files) throws RatException {
-        for (final File file : files) {
-            if (!ignored(file) && file.isDirectory()) {
-                processDirectory(report, file);
-            }
-        }
-    }
-
-    /**
-     * Process all files in a set of file objects, ignoring any files set to be ignored.
-     *
-     * @param report the report to use in processing
-     * @param files  the files to process (only files will be processed)
-     * @throws RatException
-     */
-    private void processNonDirectories(final RatReport report, final File[] files) throws RatException {
-        for (final File file : files) {
-            if (!ignored(file) && !file.isDirectory()) {
-                report(report, file);
-            }
-        }
-
-    }
-
-    /**
-     * Report on the given file.
-     *
-     * @param report the report to process the file with
-     * @param file   the file to be reported on
-     * @throws RatException
-     */
-    private void report(final RatReport report, File file) throws RatException {
-
-        Document document = new FileDocument(file);
-        report.report(document);
-
-    }
-}
diff --git a/0.12-release/apache-rat-core/src/main/java/org/apache/rat/walker/FileNameComparator.java b/0.12-release/apache-rat-core/src/main/java/org/apache/rat/walker/FileNameComparator.java
deleted file mode 100644
index c3ed803..0000000
--- a/0.12-release/apache-rat-core/src/main/java/org/apache/rat/walker/FileNameComparator.java
+++ /dev/null
@@ -1,44 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one   *
- * or more contributor license agreements.  See the NOTICE file *
- * distributed with this work for additional information        *
- * regarding copyright ownership.  The ASF licenses this file   *
- * to you under the Apache License, Version 2.0 (the            *
- * "License"); you may not use this file except in compliance   *
- * with the License.  You may obtain a copy of the License at   *
- *                                                              *
- *   http://www.apache.org/licenses/LICENSE-2.0                 *
- *                                                              *
- * Unless required by applicable law or agreed to in writing,   *
- * software distributed under the License is distributed on an  *
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY       *
- * KIND, either express or implied.  See the License for the    *
- * specific language governing permissions and limitations      *
- * under the License.                                           *
- */ 
-package org.apache.rat.walker;
-
-import java.io.File;
-import java.util.Comparator;
-
-class FileNameComparator implements Comparator<File> {
-
-    public int compare(File firstFile, File secondFile) {
-        int result = 0;
-        if (firstFile == null) {
-            if (secondFile != null) {
-                result = 1;
-            }
-        } else {
-            if (secondFile == null) {
-                result = -1;
-            } else {
-                final String firstName = firstFile.getName();
-                final String secondName = secondFile.getName();
-                result = firstName.compareTo(secondName);
-            }
-        }
-        return result;
-    }
-
-}
diff --git a/0.12-release/apache-rat-core/src/main/java/org/apache/rat/walker/Walker.java b/0.12-release/apache-rat-core/src/main/java/org/apache/rat/walker/Walker.java
deleted file mode 100644
index 06f8bd7..0000000
--- a/0.12-release/apache-rat-core/src/main/java/org/apache/rat/walker/Walker.java
+++ /dev/null
@@ -1,76 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one   *
- * or more contributor license agreements.  See the NOTICE file *
- * distributed with this work for additional information        *
- * regarding copyright ownership.  The ASF licenses this file   *
- * to you under the Apache License, Version 2.0 (the            *
- * "License"); you may not use this file except in compliance   *
- * with the License.  You may obtain a copy of the License at   *
- *                                                              *
- *   http://www.apache.org/licenses/LICENSE-2.0                 *
- *                                                              *
- * Unless required by applicable law or agreed to in writing,   *
- * software distributed under the License is distributed on an  *
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY       *
- * KIND, either express or implied.  See the License for the    *
- * specific language governing permissions and limitations      *
- * under the License.                                           *
- */
-
-package org.apache.rat.walker;
-
-import org.apache.rat.report.IReportable;
-
-import java.io.File;
-import java.io.FilenameFilter;
-import java.util.regex.Pattern;
-
-/**
- * Abstract walker.
- */
-public abstract class Walker implements IReportable {
-
-    protected final File file;
-    protected final String name;
-
-    protected final FilenameFilter filter;
-
-    protected static FilenameFilter regexFilter(final Pattern pattern) {
-        return new FilenameFilter() {
-            public boolean accept(File dir, String name) {
-                final boolean result;
-                if (pattern == null) {
-                    result = true;
-                } else {
-                    result = !pattern.matcher(name).matches();
-                }
-                return result;
-            }
-        };
-    }
-
-    protected boolean isRestricted(File file) {
-        return file.getName().startsWith(".");
-    }
- 
-    protected final boolean ignored(final File file) {
-        boolean result = false;
-        if (filter != null) {
-            final String name = file.getName();
-            final File dir = file.getParentFile();
-            result = !filter.accept(dir, name);
-        }
-        return result;
-    }
-
-    public Walker(File file, final FilenameFilter filter) {
-        this(file.getPath(), file, filter);
-    }
-
-    protected Walker(final String name, final File file, final FilenameFilter filter) {
-        this.name = name;
-        this.file = file;
-        this.filter = filter;
-    }
-
-}
diff --git a/0.12-release/apache-rat-core/src/main/resources/org/apache/rat/plain-rat.xsl b/0.12-release/apache-rat-core/src/main/resources/org/apache/rat/plain-rat.xsl
deleted file mode 100644
index 2ea353f..0000000
--- a/0.12-release/apache-rat-core/src/main/resources/org/apache/rat/plain-rat.xsl
+++ /dev/null
@@ -1,95 +0,0 @@
-<?xml version='1.0' ?>
-<!--
- Licensed to the Apache Software Foundation (ASF) under one   *
- or more contributor license agreements.  See the NOTICE file *
- distributed with this work for additional information        *
- regarding copyright ownership.  The ASF licenses this file   *
- to you under the Apache License, Version 2.0 (the            *
- "License"); you may not use this file except in compliance   *
- with the License.  You may obtain a copy of the License at   *
-                                                              *
-   http://www.apache.org/licenses/LICENSE-2.0                 *
-                                                              *
- Unless required by applicable law or agreed to in writing,   *
- software distributed under the License is distributed on an  *
- "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY       *
- KIND, either express or implied.  See the License for the    *
- specific language governing permissions and limitations      *
- under the License.                                           *
--->
-<xsl:stylesheet version="1.0"
-                xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
-<xsl:output method='text'/>
-<xsl:template match='/'>
-*****************************************************
-Summary
--------
-Generated at: <xsl:value-of select='rat-report/@timestamp'/>
-
-Notes: <xsl:value-of select='count(descendant::type[attribute::name="notice"])'/>
-Binaries: <xsl:value-of select='count(descendant::type[attribute::name="binary"])'/>
-Archives: <xsl:value-of select='count(descendant::type[attribute::name="archive"])'/>
-Standards: <xsl:value-of select='count(descendant::type[attribute::name="standard"])'/>
-
-Apache Licensed: <xsl:value-of select='count(descendant::header-type[attribute::name="AL   "])'/>
-Generated Documents: <xsl:value-of select='count(descendant::header-type[attribute::name="GEN  "])'/>
-
-JavaDocs are generated, thus a license header is optional.
-Generated files do not require license headers.
-
-<xsl:value-of select='count(descendant::header-type[attribute::name="?????"])'/> Unknown Licenses
-<xsl:if test="descendant::resource[license-approval/@name='false']">
-*****************************************************
-
-Files with unapproved licenses:
-
-<xsl:for-each select='descendant::resource[license-approval/@name="false"]'>
-  <xsl:text>  </xsl:text>
-  <xsl:value-of select='@name'/>
-  <xsl:text>
-</xsl:text>
-</xsl:for-each>
-*****************************************************
-</xsl:if>
-<xsl:if test="descendant::resource[type/@name='archive']">
-Archives:
-<xsl:for-each select='descendant::resource[type/@name="archive"]'>
- + <xsl:value-of select='@name'/>
- <xsl:text>
- </xsl:text>
- </xsl:for-each>
-</xsl:if>
-*****************************************************
-  Files with Apache License headers will be marked AL
-  Binary files (which do not require any license headers) will be marked B
-  Compressed archives will be marked A
-  Notices, licenses etc. will be marked N
- <xsl:for-each select='descendant::resource'>
-  <xsl:choose>
-     <xsl:when test='license-approval/@name="false"'>!</xsl:when>
-     <xsl:otherwise><xsl:text> </xsl:text></xsl:otherwise>
- </xsl:choose>
- <xsl:choose>
-     <xsl:when test='type/@name="notice"'>N    </xsl:when>
-     <xsl:when test='type/@name="archive"'>A    </xsl:when>
-     <xsl:when test='type/@name="binary"'>B    </xsl:when>
-     <xsl:when test='type/@name="standard"'><xsl:value-of select='header-type/@name'/></xsl:when>
-     <xsl:otherwise>!!!!!</xsl:otherwise>
- </xsl:choose>
- <xsl:text> </xsl:text>
- <xsl:value-of select='@name'/>
- <xsl:text>
- </xsl:text>
- </xsl:for-each>
-*****************************************************
-<xsl:if test="descendant::resource[header-type/@name='?????']">
- Printing headers for text files without a valid license header...
- <xsl:for-each select='descendant::resource[header-type/@name="?????"]'>
-=====================================================
-== File: <xsl:value-of select='@name'/>
-=====================================================
-<xsl:value-of select='header-sample'/>
-</xsl:for-each>
-</xsl:if>
-</xsl:template>
-</xsl:stylesheet>
\ No newline at end of file
diff --git a/0.12-release/apache-rat-core/src/main/resources/org/apache/rat/unapproved-licenses.xsl b/0.12-release/apache-rat-core/src/main/resources/org/apache/rat/unapproved-licenses.xsl
deleted file mode 100644
index 040909b..0000000
--- a/0.12-release/apache-rat-core/src/main/resources/org/apache/rat/unapproved-licenses.xsl
+++ /dev/null
@@ -1,31 +0,0 @@
-<?xml version='1.0' ?>
-<!--
- Licensed to the Apache Software Foundation (ASF) under one   *
- or more contributor license agreements.  See the NOTICE file *
- distributed with this work for additional information        *
- regarding copyright ownership.  The ASF licenses this file   *
- to you under the Apache License, Version 2.0 (the            *
- "License"); you may not use this file except in compliance   *
- with the License.  You may obtain a copy of the License at   *
-                                                              *
-   http://www.apache.org/licenses/LICENSE-2.0                 *
-                                                              *
- Unless required by applicable law or agreed to in writing,   *
- software distributed under the License is distributed on an  *
- "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY       *
- KIND, either express or implied.  See the License for the    *
- specific language governing permissions and limitations      *
- under the License.                                           *
--->
-<xsl:stylesheet version="1.0"
-                xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
-<xsl:output method='text'/>
-<xsl:template match='/'>Files with unapproved licenses:
-<xsl:for-each select='descendant::resource[license-approval/@name="false"]'>
-  <xsl:text>  </xsl:text>
-  <xsl:value-of select='@name'/>
-  <xsl:text>
-</xsl:text>
-</xsl:for-each>
-</xsl:template>
-</xsl:stylesheet>
diff --git a/0.12-release/apache-rat-core/src/site/apt/index.apt.vm b/0.12-release/apache-rat-core/src/site/apt/index.apt.vm
deleted file mode 100644
index 770b109..0000000
--- a/0.12-release/apache-rat-core/src/site/apt/index.apt.vm
+++ /dev/null
@@ -1,72 +0,0 @@
-~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
-~~   Licensed to the Apache Software Foundation (ASF) under one or more
-~~   contributor license agreements.  See the NOTICE file distributed with
-~~   this work for additional information regarding copyright ownership.
-~~   The ASF licenses this file to You under the Apache License, Version 2.0
-~~   (the "License"); you may not use this file except in compliance with
-~~   the License.  You may obtain a copy of the License at
-~~
-~~       http://www.apache.org/licenses/LICENSE-2.0
-~~
-~~   Unless required by applicable law or agreed to in writing, software
-~~   distributed under the License is distributed on an "AS IS" BASIS,
-~~   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-~~   See the License for the specific language governing permissions and
-~~   limitations under the License.
-~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
-
-                   --------------------------
-                   Core Module
-                   --------------------------
-
-About Apache Rat
-
- Rat audits software distributions, with a special interest in headers.
- If this isn't quite what you're looking for then take a look at the
- other products developed by {{{http://creadur.apache.org}Apache Creadur}},
- including {{{http://creadur.apache.org/whisker}Apache Whisker}} which audits
- and generates legal (for example <<<LICENSE>>>) documents for
- complex software distributions.
-
-Developing Rat
-
-* Introducing the Modules
-
- This module, <<<apache-rat-core>>>, is a library containing the basic
- engine. Other modules allow this engine to be run in various ways.
-
-*----------+--------------+----------------+
- <<Runs Rat via>> | <<Requires>>     | <<Module>>       |
-*----------+--------------+----------------+
- An Ant task | {{{http://ant.apache.org}Apache Ant}}     | {{{../apache-rat-tasks}apache-rat-tasks}}      |
-*----------+--------------+----------------+
- The command line | Java\u00ae     | {{{../apache-rat}apache-rat}}       |
-*----------+--------------+----------------+
- A Maven plugin | {{{http://maven.apache.org}Apache Maven}}     | {{{../apache-rat-plugin}apache-rat-plugin}}       |
-*----------+--------------+----------------+
-<<Modules that run Rat>>
-
- Support for new build tools and alternative ways to run rat should be coded
- in new modules building on <<<apache-rat-core>>>. Developers interested in
- improving existing support for a specific build tool should start by taking
- a look at that module.
-
-* Diving into Core
-
- Browse the source {{{./xref/index.html}here}}.
-
- Read the JavaDocs {{{./apidocs/index.html}here}}.
-
- Check out with {{{http://subversion.apache.org}Subversion}}
-
-+------------------------------------------+
-svn co http://svn.apache.org/repos/asf/creadur/rat/trunk/
-+------------------------------------------+
-
- Build with {{{http://maven.apache.org/} Apache Maven}}
-
-+------------------------------------------+
-mvn install
-+------------------------------------------+
-
- Subscribe to our {{{./mail-lists.html}mailing lists}} for a warm welcome one and all.
\ No newline at end of file
diff --git a/0.12-release/apache-rat-core/src/site/resources/css/site.css b/0.12-release/apache-rat-core/src/site/resources/css/site.css
deleted file mode 100644
index 3683f87..0000000
--- a/0.12-release/apache-rat-core/src/site/resources/css/site.css
+++ /dev/null
@@ -1,27 +0,0 @@
-/*
-  Licensed to the Apache Software Foundation (ASF) under one
-  or more contributor license agreements.  See the NOTICE file
-  distributed with this work for additional information
-  regarding copyright ownership.  The ASF licenses this file
-  to you under the Apache License, Version 2.0 (the
-  "License"); you may not use this file except in compliance
-  with the License.  You may obtain a copy of the License at
-
-    http://www.apache.org/licenses/LICENSE-2.0
-
-  Unless required by applicable law or agreed to in writing,
-  software distributed under the License is distributed on an
-  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
-  KIND, either express or implied.  See the License for the
-  specific language governing permissions and limitations
-  under the License.    
-*/
-footer {
-    font-family: "Mate SC", "Lucida Console", Monaco, monospace;
-    font-size: 9pt;
-    padding: 5px 10px;
-    text-align: justify;
-    border: thin solid #D0D0D0;
-    background-color: #F8F8F8;
-    color: #404040;
-}
\ No newline at end of file
diff --git a/0.12-release/apache-rat-core/src/site/site.xml b/0.12-release/apache-rat-core/src/site/site.xml
deleted file mode 100644
index 56b93ce..0000000
--- a/0.12-release/apache-rat-core/src/site/site.xml
+++ /dev/null
@@ -1,32 +0,0 @@
-<?xml version="1.0" ?>
-<!--
-  Licensed to the Apache Software Foundation (ASF) under one or more
-  contributor license agreements.  See the NOTICE file distributed with
-  this work for additional information regarding copyright ownership.
-  The ASF licenses this file to You under the Apache License, Version 2.0
-  (the "License"); you may not use this file except in compliance with
-  the License.  You may obtain a copy of the License at
-
-      http://www.apache.org/licenses/LICENSE-2.0
-
-  Unless required by applicable law or agreed to in writing, software
-  distributed under the License is distributed on an "AS IS" BASIS,
-  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-  See the License for the specific language governing permissions and
-  limitations under the License.
--->
-<project xmlns="http://maven.apache.org/DECORATION/1.3.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
-         xsi:schemaLocation="http://maven.apache.org/DECORATION/1.3.0 http://maven.apache.org/xsd/decoration-1.3.0.xsd"
-         name="Apache Rat&trade; Core">
-  <body>   
-    <head>
-        <link 
-            href='http://fonts.googleapis.com/css?family=Mate+SC' 
-            rel='stylesheet' 
-            type='text/css'/>
-    </head>
-   
-    <menu ref="parent"/>
-    <menu ref="reports"/>
-  </body>
-</project>
diff --git a/0.12-release/apache-rat-core/src/test/java/org/apache/rat/ReportTest.java b/0.12-release/apache-rat-core/src/test/java/org/apache/rat/ReportTest.java
deleted file mode 100644
index bccab10..0000000
--- a/0.12-release/apache-rat-core/src/test/java/org/apache/rat/ReportTest.java
+++ /dev/null
@@ -1,133 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one   *
- * or more contributor license agreements.  See the NOTICE file *
- * distributed with this work for additional information        *
- * regarding copyright ownership.  The ASF licenses this file   *
- * to you under the Apache License, Version 2.0 (the            *
- * "License"); you may not use this file except in compliance   *
- * with the License.  You may obtain a copy of the License at   *
- *                                                              *
- *   http://www.apache.org/licenses/LICENSE-2.0                 *
- *                                                              *
- * Unless required by applicable law or agreed to in writing,   *
- * software distributed under the License is distributed on an  *
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY       *
- * KIND, either express or implied.  See the License for the    *
- * specific language governing permissions and limitations      *
- * under the License.                                           *
- */
-package org.apache.rat;
-
-import org.apache.rat.analysis.util.HeaderMatcherMultiplexer;
-import org.apache.rat.test.utils.Resources;
-import org.apache.rat.walker.DirectoryWalker;
-import org.junit.Test;
-
-import java.io.File;
-import java.io.StringWriter;
-
-import static org.junit.Assert.assertEquals;
-import static org.junit.Assert.assertTrue;
-
-public class ReportTest {
-    private static final String NL = System.getProperty("line.separator");
-    private static final String PARAGRAPH = "*****************************************************";
-    private static final String FILE_PARAGRAPH = "=====================================================";
-
-    private static final String HEADER =
-            NL +
-                    PARAGRAPH + NL +//
-                    "Summary" + NL +//
-                    "-------" + NL +//
-                    "Generated at: ";
-
-    private static String getElementsReports(String pElementsPath) {
-        return
-                NL + "Notes: 2" + NL +//
-                        "Binaries: 1" + NL +//
-                        "Archives: 1" + NL +//
-                        "Standards: 6" + NL +//
-                        "" + NL +//
-                        "Apache Licensed: 3" + NL +//
-                        "Generated Documents: 0" + NL +//
-                        "" + NL +//
-                        "JavaDocs are generated, thus a license header is optional." + NL +//
-                        "Generated files do not require license headers." + NL +//
-                        "" + NL +//
-                        "2 Unknown Licenses" + NL +//
-                        "" + NL +//
-                        PARAGRAPH + NL +//
-                        "" + NL +//
-                        "Files with unapproved licenses:" + NL +//
-                        "" + NL +//
-                        "  " + pElementsPath + "/Source.java" + NL +//
-                        "  " + pElementsPath + "/sub/Empty.txt" + NL +//
-                        "" + NL +//
-                        PARAGRAPH + NL +//
-                        "" + NL +//
-                        "Archives:" + NL +//
-                        "" + NL +//
-                        " + " + pElementsPath + "/dummy.jar" + NL +//
-                        " " + NL +//
-                        PARAGRAPH + NL +//
-                        "  Files with Apache License headers will be marked AL" + NL +//
-                        "  Binary files (which do not require any license headers) will be marked B" + NL +//
-                        "  Compressed archives will be marked A" + NL +//
-                        "  Notices, licenses etc. will be marked N" + NL +//
-                        "  MIT   " + pElementsPath + "/ILoggerFactory.java" + NL +//
-                        "  B     " + pElementsPath + "/Image.png" + NL +//
-                        "  N     " + pElementsPath + "/LICENSE" + NL +//
-                        "  N     " + pElementsPath + "/NOTICE" + NL +//
-                        " !????? " + pElementsPath + "/Source.java" + NL +//
-                        "  AL    " + pElementsPath + "/Text.txt" + NL +//
-                        "  AL    " + pElementsPath + "/Xml.xml" + NL +//
-                        "  AL    " + pElementsPath + "/buildr.rb" + NL +//
-                        "  A     " + pElementsPath + "/dummy.jar" + NL +//
-                        " !????? " + pElementsPath + "/sub/Empty.txt" + NL +//
-                        " " + NL +//
-                        PARAGRAPH + NL +//
-                        NL +//
-                        " Printing headers for text files without a valid license header..." + NL +//
-                        " " + NL +//
-                        FILE_PARAGRAPH + NL +//
-                        "== File: " + pElementsPath + "/Source.java" + NL +//
-                        FILE_PARAGRAPH + NL + //
-                        "package elements;" + NL +//
-                        "" + NL +//
-                        "/*" + NL +//
-                        " * This file does intentionally *NOT* contain an AL license header," + NL +//
-                        " * because it is used in the test suite." + NL +//
-                        " */" + NL +//
-                        "public class Source {" + NL +//
-                        "" + NL +//
-                        "}" + NL +//
-                        "" + NL +//
-                        FILE_PARAGRAPH + NL +//
-                        "== File: " + pElementsPath + "/sub/Empty.txt" + NL +//
-                        FILE_PARAGRAPH + NL +//
-                        NL;
-    }
-
-    @Test
-    public void plainReportWithArchivesAndUnapprovedLicenses() throws Exception {
-        StringWriter out = new StringWriter();
-        HeaderMatcherMultiplexer matcherMultiplexer = new HeaderMatcherMultiplexer(Defaults.DEFAULT_MATCHERS);
-        final String elementsPath = Resources.getResourceDirectory("elements/Source.java");
-        final ReportConfiguration configuration = new ReportConfiguration();
-        configuration.setApproveDefaultLicenses(true);
-        configuration.setHeaderMatcher(matcherMultiplexer);
-        Report.report(out, new DirectoryWalker(new File(elementsPath)),
-                Defaults.getPlainStyleSheet(), configuration);
-
-        String result = out.getBuffer().toString();
-        assertTrue("'Generated at' is present in " + result,
-                result.startsWith(HEADER));
-
-        final int generatedAtLineEnd = result.indexOf(NL, HEADER.length());
-
-        final String elementsReports = getElementsReports(elementsPath);
-        assertEquals("Report created was: " + result,
-                elementsReports,
-                result.substring(generatedAtLineEnd + NL.length()));
-    }
-}
diff --git a/0.12-release/apache-rat-core/src/test/java/org/apache/rat/ReportTransformerTest.java b/0.12-release/apache-rat-core/src/test/java/org/apache/rat/ReportTransformerTest.java
deleted file mode 100644
index e9f6338..0000000
--- a/0.12-release/apache-rat-core/src/test/java/org/apache/rat/ReportTransformerTest.java
+++ /dev/null
@@ -1,53 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one   *
- * or more contributor license agreements.  See the NOTICE file *
- * distributed with this work for additional information        *
- * regarding copyright ownership.  The ASF licenses this file   *
- * to you under the Apache License, Version 2.0 (the            *
- * "License"); you may not use this file except in compliance   *
- * with the License.  You may obtain a copy of the License at   *
- *                                                              *
- *   http://www.apache.org/licenses/LICENSE-2.0                 *
- *                                                              *
- * Unless required by applicable law or agreed to in writing,   *
- * software distributed under the License is distributed on an  *
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY       *
- * KIND, either express or implied.  See the License for the    *
- * specific language governing permissions and limitations      *
- * under the License.                                           *
- */ 
-package org.apache.rat;
-
-import org.apache.rat.test.utils.Resources;
-import org.junit.Test;
-
-import java.io.BufferedReader;
-import java.io.FileReader;
-import java.io.StringReader;
-import java.io.StringWriter;
-
-import static org.junit.Assert.assertNotNull;
-
-public class ReportTransformerTest {
-    
-    private static final String SIMPLE_CONTENT =  
-        "<?xml version='1.0'?>" +
-        "<directory name='sub'>" +
-        "<standard name='Empty.txt'>" +
-        "<license code='?????' name='UNKNOWN' version='' approved='false' generated='false'></license>" +
-        "</standard>" +
-        "<directory name='.svn' restricted='true'/>" +
-        "</directory>";
-
-    @Test
-    public void testTransform() throws Exception {
-        StringWriter writer = new StringWriter();
-        assertNotNull(writer);
-        StringReader in = new StringReader(SIMPLE_CONTENT);
-        ReportTransformer transformer = new ReportTransformer(writer, 
-                new BufferedReader(new FileReader(Resources.getMainResourceFile("/org/apache/rat/plain-rat.xsl"))),
-                in);
-        transformer.transform();
-    }
-
-}
diff --git a/0.12-release/apache-rat-core/src/test/java/org/apache/rat/analysis/AnalyserFactoryTest.java b/0.12-release/apache-rat-core/src/test/java/org/apache/rat/analysis/AnalyserFactoryTest.java
deleted file mode 100644
index 30d3365..0000000
--- a/0.12-release/apache-rat-core/src/test/java/org/apache/rat/analysis/AnalyserFactoryTest.java
+++ /dev/null
@@ -1,117 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one   *
- * or more contributor license agreements.  See the NOTICE file *
- * distributed with this work for additional information        *
- * regarding copyright ownership.  The ASF licenses this file   *
- * to you under the Apache License, Version 2.0 (the            *
- * "License"); you may not use this file except in compliance   *
- * with the License.  You may obtain a copy of the License at   *
- *                                                              *
- *   http://www.apache.org/licenses/LICENSE-2.0                 *
- *                                                              *
- * Unless required by applicable law or agreed to in writing,   *
- * software distributed under the License is distributed on an  *
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY       *
- * KIND, either express or implied.  See the License for the    *
- * specific language governing permissions and limitations      *
- * under the License.                                           *
- */
-package org.apache.rat.analysis;
-
-import org.apache.rat.api.Document;
-import org.apache.rat.document.IDocumentAnalyser;
-import org.apache.rat.document.impl.MonolithicFileDocument;
-import org.apache.rat.report.claim.impl.xml.SimpleXmlClaimReporter;
-import org.apache.rat.report.xml.writer.impl.base.XmlWriter;
-import org.apache.rat.test.utils.Resources;
-import org.junit.Before;
-import org.junit.Test;
-
-import java.io.StringWriter;
-
-import static org.junit.Assert.assertEquals;
-
-public class AnalyserFactoryTest {
-
-    private static final IHeaderMatcher MATCHES_NOTHING_MATCHER = new IHeaderMatcher() {
-        public boolean match(Document subject, String line) throws RatHeaderAnalysisException {
-            return false;
-        }
-
-        public void reset() {
-        }
-    };
-
-    private StringWriter out;
-    private SimpleXmlClaimReporter reporter;
-    private IDocumentAnalyser analyser;
-
-    @Before
-    public void setUp() throws Exception {
-        out = new StringWriter();
-        final XmlWriter writer = new XmlWriter(out);
-        reporter = new SimpleXmlClaimReporter(writer);
-        analyser = DefaultAnalyserFactory.createDefaultAnalyser(MATCHES_NOTHING_MATCHER);
-    }
-
-    @Test
-    public void standardTypeAnalyser() throws Exception {
-        final MonolithicFileDocument document = new MonolithicFileDocument(Resources.getResourceFile("/elements/Text.txt"));
-        analyser.analyse(document);
-        reporter.report(document);
-        assertEquals("Open standard element", //
-                "<resource name='src/test/resources/elements/Text.txt'><header-sample>/*\n" +
-                        " * Licensed to the Apache Software Foundation (ASF) under one\n" +
-                        " * or more contributor license agreements.  See the NOTICE file\n" +
-                        " * distributed with this work for additional information\n" +
-                        " * regarding copyright ownership.  The ASF licenses this file\n" +
-                        " * to you under the Apache License, Version 2.0 (the \"License\");\n" +
-                        " * you may not use this file except in compliance with the License.\n" +
-                        " * You may obtain a copy of the License at\n" +
-                        " *\n" +
-                        " *    http://www.apache.org/licenses/LICENSE-2.0\n" +
-                        " *\n" +
-                        " * Unless required by applicable law or agreed to in writing,\n" +
-                        " * software distributed under the License is distributed on an\n" +
-                        " * \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n" +
-                        " * KIND, either express or implied.  See the License for the\n" +
-                        " * specific language governing permissions and limitations\n" +
-                        " * under the License.    \n" +
-                        " */\n" +
-                        "\n" +
-                        "            \n" +
-                        "</header-sample><header-type name='?????'/><license-family name='?????'/><type name='standard'/>", out.toString());
-    }
-
-    @Test
-    public void noteTypeAnalyser() throws Exception {
-        final MonolithicFileDocument document = new MonolithicFileDocument(Resources.getResourceFile("/elements/LICENSE"));
-        analyser.analyse(document);
-        reporter.report(document);
-        assertEquals("Open note element", "<resource name='src/test/resources/elements/LICENSE'><type name='notice'/>", out.toString());
-    }
-
-    @Test
-    public void binaryTypeAnalyser() throws Exception {
-        final MonolithicFileDocument document = new MonolithicFileDocument(Resources.getResourceFile("/elements/Image.png"));
-        analyser.analyse(document);
-        reporter.report(document);
-        assertEquals("Open binary element", "<resource name='src/test/resources/elements/Image.png'><type name='binary'/>", out.toString());
-    }
-
-    @Test
-    public void archiveTypeAnalyser() throws Exception {
-        final MonolithicFileDocument document = new MonolithicFileDocument(Resources.getResourceFile("/elements/dummy.jar"));
-        analyser.analyse(document);
-        reporter.report(document);
-        assertEquals("Open archive element", "<resource name='src/test/resources/elements/dummy.jar'><type name='archive'/>", out.toString());
-    }
-
-    @Test
-    public void archiveTypeAnalyserIntelliJ() throws Exception {
-        final MonolithicFileDocument document = new MonolithicFileDocument(Resources.getResourceFile("/elements/dummy.jar"));
-        analyser.analyse(document);
-        reporter.report(document);
-        assertEquals("Open archive element", "<resource name='src/test/resources/elements/dummy.jar'><type name='archive'/>", out.toString());
-    }
-}
diff --git a/0.12-release/apache-rat-core/src/test/java/org/apache/rat/analysis/HeaderCheckWorkerTest.java b/0.12-release/apache-rat-core/src/test/java/org/apache/rat/analysis/HeaderCheckWorkerTest.java
deleted file mode 100644
index e7ad809..0000000
--- a/0.12-release/apache-rat-core/src/test/java/org/apache/rat/analysis/HeaderCheckWorkerTest.java
+++ /dev/null
@@ -1,42 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one   *
- * or more contributor license agreements.  See the NOTICE file *
- * distributed with this work for additional information        *
- * regarding copyright ownership.  The ASF licenses this file   *
- * to you under the Apache License, Version 2.0 (the            *
- * "License"); you may not use this file except in compliance   *
- * with the License.  You may obtain a copy of the License at   *
- *                                                              *
- *   http://www.apache.org/licenses/LICENSE-2.0                 *
- *                                                              *
- * Unless required by applicable law or agreed to in writing,   *
- * software distributed under the License is distributed on an  *
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY       *
- * KIND, either express or implied.  See the License for the    *
- * specific language governing permissions and limitations      *
- * under the License.                                           *
- */ 
-
-package org.apache.rat.analysis;
-
-import org.apache.rat.analysis.license.ApacheSoftwareLicense20;
-import org.apache.rat.api.Document;
-import org.apache.rat.document.MockLocation;
-import org.junit.Test;
-
-import java.io.StringReader;
-
-import static org.junit.Assert.assertFalse;
-import static org.junit.Assert.assertTrue;
-
-public class HeaderCheckWorkerTest {
-
-    @Test
-    public void isFinished() throws Exception {
-        final Document subject = new MockLocation("subject");
-        HeaderCheckWorker worker = new HeaderCheckWorker(new StringReader(""), new ApacheSoftwareLicense20(), subject);
-        assertFalse(worker.isFinished());
-        worker.read();
-        assertTrue(worker.isFinished());
-    }
-}
diff --git a/0.12-release/apache-rat-core/src/test/java/org/apache/rat/analysis/MockLicenseMatcher.java b/0.12-release/apache-rat-core/src/test/java/org/apache/rat/analysis/MockLicenseMatcher.java
deleted file mode 100644
index 3c7ff13..0000000
--- a/0.12-release/apache-rat-core/src/test/java/org/apache/rat/analysis/MockLicenseMatcher.java
+++ /dev/null
@@ -1,41 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one   *
- * or more contributor license agreements.  See the NOTICE file *
- * distributed with this work for additional information        *
- * regarding copyright ownership.  The ASF licenses this file   *
- * to you under the Apache License, Version 2.0 (the            *
- * "License"); you may not use this file except in compliance   *
- * with the License.  You may obtain a copy of the License at   *
- *                                                              *
- *   http://www.apache.org/licenses/LICENSE-2.0                 *
- *                                                              *
- * Unless required by applicable law or agreed to in writing,   *
- * software distributed under the License is distributed on an  *
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY       *
- * KIND, either express or implied.  See the License for the    *
- * specific language governing permissions and limitations      *
- * under the License.                                           *
- */ 
-package org.apache.rat.analysis;
-
-import org.apache.rat.api.Document;
-
-import java.util.ArrayList;
-import java.util.List;
-
-public class MockLicenseMatcher implements IHeaderMatcher {
-
-    public final List<String> lines = new ArrayList<String>();
-    public int resets = 0;
-    public boolean result = true;
-
-    public boolean match(Document subject, String line) {
-        lines.add(line);
-        return result;
-    }
-
-    public void reset() {
-        resets++;
-    }
-
-}
diff --git a/0.12-release/apache-rat-core/src/test/java/org/apache/rat/analysis/generation/GeneratedLicenseNotRequiredTest.java b/0.12-release/apache-rat-core/src/test/java/org/apache/rat/analysis/generation/GeneratedLicenseNotRequiredTest.java
deleted file mode 100644
index d9fc72f..0000000
--- a/0.12-release/apache-rat-core/src/test/java/org/apache/rat/analysis/generation/GeneratedLicenseNotRequiredTest.java
+++ /dev/null
@@ -1,50 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one   *
- * or more contributor license agreements.  See the NOTICE file *
- * distributed with this work for additional information        *
- * regarding copyright ownership.  The ASF licenses this file   *
- * to you under the Apache License, Version 2.0 (the            *
- * "License"); you may not use this file except in compliance   *
- * with the License.  You may obtain a copy of the License at   *
- *                                                              *
- *   http://www.apache.org/licenses/LICENSE-2.0                 *
- *                                                              *
- * Unless required by applicable law or agreed to in writing,   *
- * software distributed under the License is distributed on an  *
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY       *
- * KIND, either express or implied.  See the License for the    *
- * specific language governing permissions and limitations      *
- * under the License.                                           *
- */ 
-package org.apache.rat.analysis.generation;
-
-import org.apache.rat.api.Document;
-import org.apache.rat.document.MockLocation;
-import org.apache.rat.report.claim.impl.xml.MockClaimReporter;
-import org.junit.Before;
-import org.junit.Test;
-
-import java.util.regex.Pattern;
-
-import static org.junit.Assert.assertFalse;
-import static org.junit.Assert.assertTrue;
-
-public class GeneratedLicenseNotRequiredTest {
-
-    private GeneratedLicenseNotRequired license;
-    private MockClaimReporter reporter;
-    
-    @Before
-    public void setUp() throws Exception {
-        Pattern[] patterns = {Pattern.compile(".*Generated")};
-        license = new GeneratedLicenseNotRequired(patterns);
-        reporter = new MockClaimReporter();
-    }
-
-    @Test
-    public void match() throws Exception {
-        final Document subject = new MockLocation("subject");
-        assertFalse("Does not match regex", license.match(subject, "Not at all"));
-        assertTrue("Matches regex", license.match(subject, "This is Generated"));
-    }
-}
diff --git a/0.12-release/apache-rat-core/src/test/java/org/apache/rat/analysis/generation/JavaDocLicenseNotRequiredTest.java b/0.12-release/apache-rat-core/src/test/java/org/apache/rat/analysis/generation/JavaDocLicenseNotRequiredTest.java
deleted file mode 100644
index 2f22cdc..0000000
--- a/0.12-release/apache-rat-core/src/test/java/org/apache/rat/analysis/generation/JavaDocLicenseNotRequiredTest.java
+++ /dev/null
@@ -1,82 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one   *
- * or more contributor license agreements.  See the NOTICE file *
- * distributed with this work for additional information        *
- * regarding copyright ownership.  The ASF licenses this file   *
- * to you under the Apache License, Version 2.0 (the            *
- * "License"); you may not use this file except in compliance   *
- * with the License.  You may obtain a copy of the License at   *
- *                                                              *
- *   http://www.apache.org/licenses/LICENSE-2.0                 *
- *                                                              *
- * Unless required by applicable law or agreed to in writing,   *
- * software distributed under the License is distributed on an  *
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY       *
- * KIND, either express or implied.  See the License for the    *
- * specific language governing permissions and limitations      *
- * under the License.                                           *
- */
-package org.apache.rat.analysis.generation;
-
-import org.apache.commons.io.IOUtils;
-import org.apache.rat.api.Document;
-import org.apache.rat.document.MockLocation;
-import org.apache.rat.report.claim.impl.xml.MockClaimReporter;
-import org.apache.rat.test.utils.Resources;
-import org.junit.Before;
-import org.junit.Test;
-
-import java.io.BufferedReader;
-import java.io.File;
-import java.io.FileReader;
-
-import static org.junit.Assert.assertFalse;
-import static org.junit.Assert.assertTrue;
-
-public class JavaDocLicenseNotRequiredTest {
-
-    private MockClaimReporter reporter;
-    private JavaDocLicenseNotRequired license;
-
-    @Before
-    public void setUp() throws Exception {
-        license = new JavaDocLicenseNotRequired();
-        reporter = new MockClaimReporter();
-    }
-
-    @Test
-    public void matchIndexDoc() throws Exception {
-        boolean result = readAndMatch("index.html");
-        assertTrue("Is a javadoc", result);
-    }
-
-    @Test
-    public void matchClassDoc() throws Exception {
-        boolean result = readAndMatch("ArchiveElement.html");
-        assertTrue("Is a javadoc", result);
-    }
-
-    @Test
-    public void matchNonJavaDoc() throws Exception {
-        boolean result = readAndMatch("notjavadoc.html");
-        assertFalse("Not javadocs and so should return null", result);
-    }
-
-    boolean readAndMatch(String name) throws Exception {
-        File file = Resources.getResourceFile("javadocs/" + name);
-        boolean result = false;
-        BufferedReader in = null;
-        try {
-            in = new BufferedReader(new FileReader(file));
-            String line = in.readLine();
-            final Document subject = new MockLocation("subject");
-            while (line != null && !result) {
-                result = license.match(subject, line);
-                line = in.readLine();
-            }
-        } finally {
-                IOUtils.closeQuietly(in);
-        }
-            return result;
-        }
-    }
diff --git a/0.12-release/apache-rat-core/src/test/java/org/apache/rat/analysis/license/ApacheSoftwareLicense20Test.java b/0.12-release/apache-rat-core/src/test/java/org/apache/rat/analysis/license/ApacheSoftwareLicense20Test.java
deleted file mode 100644
index 838ae0b..0000000
--- a/0.12-release/apache-rat-core/src/test/java/org/apache/rat/analysis/license/ApacheSoftwareLicense20Test.java
+++ /dev/null
@@ -1,70 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one   *
- * or more contributor license agreements.  See the NOTICE file *
- * distributed with this work for additional information        *
- * regarding copyright ownership.  The ASF licenses this file   *
- * to you under the Apache License, Version 2.0 (the            *
- * "License"); you may not use this file except in compliance   *
- * with the License.  You may obtain a copy of the License at   *
- *                                                              *
- *   http://www.apache.org/licenses/LICENSE-2.0                 *
- *                                                              *
- * Unless required by applicable law or agreed to in writing,   *
- * software distributed under the License is distributed on an  *
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY       *
- * KIND, either express or implied.  See the License for the    *
- * specific language governing permissions and limitations      *
- * under the License.                                           *
- */ 
-package org.apache.rat.analysis.license;
-
-import org.apache.rat.api.Document;
-import org.apache.rat.document.MockLocation;
-import org.apache.rat.report.claim.impl.xml.MockClaimReporter;
-import org.junit.Before;
-import org.junit.Test;
-
-import static org.junit.Assert.assertFalse;
-import static org.junit.Assert.assertTrue;
-
-public class ApacheSoftwareLicense20Test {
-
-    private MockClaimReporter reporter;
-
-    @Before
-    public void setUp() throws Exception {
-        reporter = new MockClaimReporter();
-    }
-
-    @Test
-    public void matches() throws Exception {
-        ApacheSoftwareLicense20 worker = new ApacheSoftwareLicense20();
-        assertTrue(worker.matches(ApacheSoftwareLicense20.FIRST_LICENSE_LINE));
-        assertTrue(worker.matches("    Licensed under the Apache License, Version 2.0 (the \"License\");"));
-        assertTrue(worker.matches("Licensed under the Apache License, Version 2.0 (the \"License\");"));
-        assertTrue(worker.matches(" * Licensed under the Apache License, Version 2.0 (the \"License\");"));
-        assertTrue(worker.matches(" // Licensed under the Apache License, Version 2.0 (the \"License\");"));
-        assertTrue(worker.matches(" /* Licensed under the Apache License, Version 2.0 (the \"License\");"));
-        assertTrue(worker.matches("    Licensed under the Apache License, Version 2.0 (the \"License\");"));
-        assertTrue(worker.matches(" ## Licensed under the Apache License, Version 2.0 (the \"License\");"));
-        assertTrue(worker.matches(" ## Licensed under the Apache License, Version 2.0 (the \"License\") ##);"));
-        assertFalse(worker.matches("'Behold, Telemachus! (nor fear the sight,)"));
-    }
-
-    @Test
-    public void match() throws Exception {
-        ApacheSoftwareLicense20 worker = new ApacheSoftwareLicense20();
-        final Document subject = new MockLocation("subject");
-        assertTrue(worker.match(subject, ApacheSoftwareLicense20.FIRST_LICENSE_LINE));
-        assertTrue(worker.match(subject, "    Licensed under the Apache License, Version 2.0 (the \"License\");"));
-        assertTrue(worker.match(subject, "Licensed under the Apache License, Version 2.0 (the \"License\");"));
-        assertTrue(worker.match(subject, " * Licensed under the Apache License, Version 2.0 (the \"License\");"));
-        assertTrue(worker.match(subject, " // Licensed under the Apache License, Version 2.0 (the \"License\");"));
-        assertTrue(worker.match(subject, " /* Licensed under the Apache License, Version 2.0 (the \"License\");"));
-        assertTrue(worker.match(subject, "    Licensed under the Apache License, Version 2.0 (the \"License\");"));
-        assertTrue(worker.match(subject, " ## Licensed under the Apache License, Version 2.0 (the \"License\");"));
-        assertTrue(worker.match(subject, " ## Licensed under the Apache License, Version 2.0 (the \"License\") ##);"));
-        assertFalse(worker.match(subject, "'Behold, Telemachus! (nor fear the sight,)"));
-    }
-
-}
diff --git a/0.12-release/apache-rat-core/src/test/java/org/apache/rat/analysis/license/AppliedApacheSoftwareLicense20Test.java b/0.12-release/apache-rat-core/src/test/java/org/apache/rat/analysis/license/AppliedApacheSoftwareLicense20Test.java
deleted file mode 100644
index 94c0917..0000000
--- a/0.12-release/apache-rat-core/src/test/java/org/apache/rat/analysis/license/AppliedApacheSoftwareLicense20Test.java
+++ /dev/null
@@ -1,109 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one   *
- * or more contributor license agreements.  See the NOTICE file *
- * distributed with this work for additional information        *
- * regarding copyright ownership.  The ASF licenses this file   *
- * to you under the Apache License, Version 2.0 (the            *
- * "License"); you may not use this file except in compliance   *
- * with the License.  You may obtain a copy of the License at   *
- *                                                              *
- *   http://www.apache.org/licenses/LICENSE-2.0                 *
- *                                                              *
- * Unless required by applicable law or agreed to in writing,   *
- * software distributed under the License is distributed on an  *
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY       *
- * KIND, either express or implied.  See the License for the    *
- * specific language governing permissions and limitations      *
- * under the License.                                           *
- */
-package org.apache.rat.analysis.license;
-
-import org.apache.commons.io.IOUtils;
-import org.apache.rat.api.Document;
-import org.apache.rat.document.MockLocation;
-import org.apache.rat.report.claim.impl.xml.MockClaimReporter;
-import org.apache.rat.test.utils.Resources;
-import org.junit.Before;
-import org.junit.Test;
-
-import java.io.BufferedReader;
-import java.io.StringReader;
-
-import static org.junit.Assert.assertFalse;
-import static org.junit.Assert.assertTrue;
-
-public class AppliedApacheSoftwareLicense20Test {
-
-    private static final String HEADER
-            = "/*\n"
-            + " *  Copyright 2012-2013 FooBar.\n"
-            + " *\n"
-            + " *  Licensed under the Apache License, Version 2.0 (the \"License\");\n"
-            + " *  you may not use this file except in compliance with the License.\n"
-            + " *\n"
-            + " *  You may obtain a copy of the License at\n"
-            + " *       http://www.apache.org/licenses/LICENSE-2.0\n"
-            + " *\n"
-            + " *  Unless required by applicable law or agreed to in writing, software\n"
-            + " *  distributed under the License is distributed on an \"AS IS\" BASIS,\n"
-            + " *  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n"
-            + " *  See the License for the specific language governing permissions and\n"
-            + " *  limitations under the License.\n"
-            + " */\n";
-
-    private AppliedApacheSoftwareLicense20 license;
-
-    private MockClaimReporter reporter;
-
-    @Before
-    public void setUp() throws Exception {
-        license = new AppliedApacheSoftwareLicense20("FooBar");
-        reporter = new MockClaimReporter();
-    }
-
-    @Test
-    public void match() throws Exception {
-        BufferedReader in = new BufferedReader(new StringReader(HEADER));
-        String line = in.readLine();
-        boolean result = false;
-        final Document subject = new MockLocation("subject");
-        while (line != null) {
-            result = license.match(subject, line);
-            line = in.readLine();
-        }
-        assertTrue("Applied AL2.0 license should be matched", result);
-        license.reset();
-        result = license.match(subject, "New line");
-        assertFalse("After reset, content should build up again", result);
-    }
-
-    @Test
-    public void noMatch() throws Exception {
-        BufferedReader in = null;
-        try {
-            in = Resources.getBufferedResourceReader("elements/Source.java");
-            String line = in.readLine();
-            boolean result = false;
-            final Document subject = new MockLocation("subject");
-            while (line != null) {
-                result = license.match(subject, line);
-                line = in.readLine();
-            }
-            assertFalse("Applied AL2.0 license should not be matched", result);
-            license.reset();
-        } finally {
-            IOUtils.closeQuietly(in);
-        }
-    }
-
-    @Test(timeout = 2000) // may need to be adjusted if many more files are added
-    public void goodFiles() throws Exception {
-        DirectoryScanner.testFilesInDir("appliedAL20/good", license, true);
-    }
-
-    @Test(timeout = 2000) // may need to be adjusted if many more files are added
-    public void baddFiles() throws Exception {
-        DirectoryScanner.testFilesInDir("appliedAL20/bad", license, false);
-    }
-
-}
diff --git a/0.12-release/apache-rat-core/src/test/java/org/apache/rat/analysis/license/CDDL1LicenseTest.java b/0.12-release/apache-rat-core/src/test/java/org/apache/rat/analysis/license/CDDL1LicenseTest.java
deleted file mode 100644
index 813e5e5..0000000
--- a/0.12-release/apache-rat-core/src/test/java/org/apache/rat/analysis/license/CDDL1LicenseTest.java
+++ /dev/null
@@ -1,88 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one   *
- * or more contributor license agreements.  See the NOTICE file *
- * distributed with this work for additional information        *
- * regarding copyright ownership.  The ASF licenses this file   *
- * to you under the Apache License, Version 2.0 (the            *
- * "License"); you may not use this file except in compliance   *
- * with the License.  You may obtain a copy of the License at   *
- *                                                              *
- *   http://www.apache.org/licenses/LICENSE-2.0                 *
- *                                                              *
- * Unless required by applicable law or agreed to in writing,   *
- * software distributed under the License is distributed on an  *
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY       *
- * KIND, either express or implied.  See the License for the    *
- * specific language governing permissions and limitations      *
- * under the License.                                           *
- */
-package org.apache.rat.analysis.license;
-
-import org.apache.rat.analysis.IHeaderMatcher;
-import org.apache.rat.api.Document;
-import org.apache.rat.document.MockLocation;
-import org.junit.Before;
-import org.junit.BeforeClass;
-import org.junit.Test;
-
-import java.util.HashMap;
-import java.util.Map;
-
-import static org.junit.Assert.assertEquals;
-import static org.junit.Assert.assertFalse;
-import static org.junit.Assert.assertTrue;
-
-public class CDDL1LicenseTest {
-
-    private static final String LICENSE_LINE =
-            " DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.\n\n"
-                    + "Copyright 2011-2013 Tirasa. All rights reserved.\n\n"
-                    + "The contents of this file are subject to the terms of the Common Development\n"
-                    + "and Distribution License(\"CDDL\") (the \"License\"). You may not use this file\n"
-                    + "except in compliance with the License.\n\n"
-                    + "You can obtain a copy of the License at https://oss.oracle.com/licenses/CDDL\n"
-                    + "See the License for the specific language governing permissions and limitations\n"
-                    + "under the License.";
-
-    /**
-     * To ease testing provide a map with a given license version and the string to test for.
-     */
-    private static Map<IHeaderMatcher, String> licenseStringMap;
-
-    private Document subject;
-
-    @BeforeClass
-    public static void initLicensesUnderTest() {
-        licenseStringMap = new HashMap<IHeaderMatcher, String>();
-        licenseStringMap.put(new CDDL1License(), LICENSE_LINE);
-        assertEquals(1, licenseStringMap.entrySet().size());
-    }
-
-    @Before
-    public final void initSubject() {
-        this.subject = new MockLocation("subject");
-    }
-
-    @Test
-    public void testNegativeMatches() throws Exception {
-        for (Map.Entry<IHeaderMatcher, String> licenseUnderTest : licenseStringMap.entrySet()) {
-            assertFalse(licenseUnderTest.getKey().match(subject, "'Behold, Telemachus! (nor fear the sight,)"));
-        }
-    }
-
-    @Test
-    public void testPositiveMatchInDocument() throws Exception {
-        for (Map.Entry<IHeaderMatcher, String> licenseUnderTest : licenseStringMap.entrySet()) {
-            assertTrue(licenseUnderTest.getKey().match(subject, "\t" + licenseUnderTest.getValue()));
-            assertTrue(licenseUnderTest.getKey().match(subject, "     " + licenseUnderTest.getValue()));
-            assertTrue(licenseUnderTest.getKey().match(subject, licenseUnderTest.getValue()));
-            assertTrue(licenseUnderTest.getKey().match(subject, " * " + licenseUnderTest.getValue()));
-            assertTrue(licenseUnderTest.getKey().match(subject, " // " + licenseUnderTest.getValue()));
-            assertTrue(licenseUnderTest.getKey().match(subject, " /* " + licenseUnderTest.getValue()));
-            assertTrue(licenseUnderTest.getKey().match(subject, " /** " + licenseUnderTest.getValue()));
-            assertTrue(licenseUnderTest.getKey().match(subject, "    " + licenseUnderTest.getValue()));
-            assertTrue(licenseUnderTest.getKey().match(subject, " ## " + licenseUnderTest.getValue()));
-            assertTrue(licenseUnderTest.getKey().match(subject, " ## " + licenseUnderTest.getValue() + " ##"));
-        }
-    }
-}
diff --git a/0.12-release/apache-rat-core/src/test/java/org/apache/rat/analysis/license/CopyrightHeaderTest.java b/0.12-release/apache-rat-core/src/test/java/org/apache/rat/analysis/license/CopyrightHeaderTest.java
deleted file mode 100644
index 5699cf5..0000000
--- a/0.12-release/apache-rat-core/src/test/java/org/apache/rat/analysis/license/CopyrightHeaderTest.java
+++ /dev/null
@@ -1,76 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one   *
- * or more contributor license agreements.  See the NOTICE file *
- * distributed with this work for additional information        *
- * regarding copyright ownership.  The ASF licenses this file   *
- * to you under the Apache License, Version 2.0 (the            *
- * "License"); you may not use this file except in compliance   *
- * with the License.  You may obtain a copy of the License at   *
- *                                                              *
- *   http://www.apache.org/licenses/LICENSE-2.0                 *
- *                                                              *
- * Unless required by applicable law or agreed to in writing,   *
- * software distributed under the License is distributed on an  *
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY       *
- * KIND, either express or implied.  See the License for the    *
- * specific language governing permissions and limitations      *
- * under the License.                                           *
- */ 
-package org.apache.rat.analysis.license;
-
-import org.apache.rat.api.Document;
-import org.apache.rat.api.MetaData;
-import org.apache.rat.document.MockLocation;
-import org.apache.rat.report.claim.impl.xml.MockClaimReporter;
-import org.junit.Before;
-import org.junit.Test;
-
-import static org.junit.Assert.assertFalse;
-import static org.junit.Assert.assertTrue;
-
-public class CopyrightHeaderTest {
-
-    private static final String[] MATCHING_HEADERS =
-            { "/*  Copyright 2012 FooBar.*/"
-            , "/*  copyright 2012 foobar.*/"
-            , "/*  Copyright 2012-2013 FooBar.*/" };
-    private static final String[] NON_MATCHING_HEADERS =
-            { "/*  Copyright*/"
-            , "/*  Copyright FooBar.*/"
-            , "/*  Copyright 2013*/"
-            , "/*  Copyright 123a*/"
-            , "/*  Copyright 123f oobar*/"
-            , "/*  Copyright 2013FooBar*/"
-            , "/*  Copyright 2012 2013 FooBar.*/" };
-
-    private CopyrightHeader header;
-    private MockClaimReporter reporter;
-    private Document subject = new MockLocation("subject");
-
-    @Before
-    public void setUp() throws Exception {
-        header = new CopyrightHeader(MetaData.RAT_LICENSE_FAMILY_CATEGORY_DATUM_ASL,MetaData.RAT_LICENSE_FAMILY_NAME_DATUM_APACHE_LICENSE_VERSION_2_0,"","FooBar");
-        reporter = new MockClaimReporter();
-        subject = new MockLocation("subject");
-    }
-
-    @Test
-    public void match() throws Exception {
-        for (String line : MATCHING_HEADERS) {
-            assertTrue("Copyright Header should be matched", header.match(subject, line));
-            header.reset();
-            assertFalse("After reset, content should build up again", header.match(subject, "New line"));
-            header.reset();
-        }
-    }
-
-    @Test
-    public void noMatch() throws Exception {
-        for (String line : NON_MATCHING_HEADERS) {
-            assertFalse("Copyright Header shouldn't be matched", header.match(subject, line));
-            header.reset();
-            assertTrue("After reset, content should build up again", header.match(subject, MATCHING_HEADERS[0]));
-            header.reset();
-        }
-    }
-}
diff --git a/0.12-release/apache-rat-core/src/test/java/org/apache/rat/analysis/license/DirectoryScanner.java b/0.12-release/apache-rat-core/src/test/java/org/apache/rat/analysis/license/DirectoryScanner.java
deleted file mode 100644
index 8d9a67b..0000000
--- a/0.12-release/apache-rat-core/src/test/java/org/apache/rat/analysis/license/DirectoryScanner.java
+++ /dev/null
@@ -1,66 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements.  See the NOTICE file distributed with
- * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You under the Apache License, Version 2.0
- * (the "License"); you may not use this file except in compliance with
- * the License.  You may obtain a copy of the License at
- *
- *   http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- * 
- */
-
-package org.apache.rat.analysis.license;
-
-import static org.junit.Assert.assertEquals;
-
-import java.io.BufferedReader;
-import java.io.File;
-
-import org.apache.commons.io.IOUtils;
-import org.apache.rat.analysis.IHeaderMatcher;
-import org.apache.rat.api.Document;
-import org.apache.rat.document.MockLocation;
-import org.apache.rat.test.utils.Resources;
-import org.junit.Assert;
-
-class DirectoryScanner {
-
-    @SuppressWarnings("boxing") // OK in test code
-    /**
-     * Get list of files in a directory, and scan for license matches
-     * @param directory the directory containing the files
-     * @param matcher the license matcher
-     * @param expected the expected result of the each scan
-     * @throws Exception
-     */
-    public static void testFilesInDir(String directory, IHeaderMatcher matcher, boolean expected) throws Exception {
-        final File[] resourceFiles = Resources.getResourceFiles(directory);
-        if (resourceFiles.length == 0) {
-            Assert.fail("No files found under "+directory);
-        }
-        for(File f : resourceFiles) {
-            final Document subject = new MockLocation(f.toString());
-            BufferedReader br = null;
-            try {
-                boolean result = false;
-                br = Resources.getBufferedReader(f);
-                String line;
-                while(!result && (line = br.readLine()) != null) {
-                    result = matcher.match(subject, line);
-                }
-                assertEquals(f.toString(), expected, result);
-            } finally {
-                matcher.reset();
-                IOUtils.closeQuietly(br);
-            }
-        }
-    }
-
-}
diff --git a/0.12-release/apache-rat-core/src/test/java/org/apache/rat/analysis/license/GPL123LicenseTest.java b/0.12-release/apache-rat-core/src/test/java/org/apache/rat/analysis/license/GPL123LicenseTest.java
deleted file mode 100644
index 127d75a..0000000
--- a/0.12-release/apache-rat-core/src/test/java/org/apache/rat/analysis/license/GPL123LicenseTest.java
+++ /dev/null
@@ -1,87 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one   *
- * or more contributor license agreements.  See the NOTICE file *
- * distributed with this work for additional information        *
- * regarding copyright ownership.  The ASF licenses this file   *
- * to you under the Apache License, Version 2.0 (the            *
- * "License"); you may not use this file except in compliance   *
- * with the License.  You may obtain a copy of the License at   *
- *                                                              *
- *   http://www.apache.org/licenses/LICENSE-2.0                 *
- *                                                              *
- * Unless required by applicable law or agreed to in writing,   *
- * software distributed under the License is distributed on an  *
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY       *
- * KIND, either express or implied.  See the License for the    *
- * specific language governing permissions and limitations      *
- * under the License.                                           *
- */
-package org.apache.rat.analysis.license;
-
-import org.apache.rat.analysis.IHeaderMatcher;
-import org.apache.rat.api.Document;
-import org.apache.rat.document.MockLocation;
-import org.apache.rat.report.claim.impl.xml.MockClaimReporter;
-import org.junit.Before;
-import org.junit.Test;
-
-import java.util.HashMap;
-import java.util.Map;
-
-import static org.junit.Assert.assertFalse;
-import static org.junit.Assert.assertTrue;
-
-/**
- * Tests GPL license occurrences within comments and other characters.
- * Works for GPL1 to GPL3.
- */
-public class GPL123LicenseTest {
-    MockClaimReporter reporter;
-    Document subject;
-
-    /**
-     * To ease testing provide a map with a given license version and the string to test for.
-     */
-    private static Map<IHeaderMatcher, String> licenseStringMap;
-
-    /**
-     * If you replace this with BeforeClass and make this method static the build fails at line 67.
-     */
-    @Before
-    public void initLicensesUnderTest() {
-        licenseStringMap = new HashMap<IHeaderMatcher, String>();
-        licenseStringMap.put(new GPL1License(), GPL1License.FIRST_LICENSE_LINE);
-        licenseStringMap.put(new GPL2License(), GPL2License.FIRST_LICENSE_LINE);
-        licenseStringMap.put(new GPL3License(), GPL3License.FIRST_LICENSE_LINE);
-    }
-
-    @Before
-    public final void initReporter() {
-        this.reporter = new MockClaimReporter();
-        this.subject = new MockLocation("subject");
-    }
-
-    @Test
-    public void testNegativeMatches() throws Exception {
-        for (Map.Entry<IHeaderMatcher, String> licenseUnderTest : licenseStringMap.entrySet()) {
-            assertFalse(licenseUnderTest.getKey().match(subject, "'Behold, Telemachus! (nor fear the sight,)"));
-        }
-    }
-
-    @Test
-    public void testPositiveMatchInDocument() throws Exception {
-        for (Map.Entry<IHeaderMatcher, String> licenseUnderTest : licenseStringMap.entrySet()) {
-            assertTrue(licenseUnderTest.getKey().match(subject, "\t" + licenseUnderTest.getValue()));
-            assertTrue(licenseUnderTest.getKey().match(subject, "     " + licenseUnderTest.getValue()));
-            assertTrue(licenseUnderTest.getKey().match(subject, licenseUnderTest.getValue()));
-            assertTrue(licenseUnderTest.getKey().match(subject, " * " + licenseUnderTest.getValue()));
-            assertTrue(licenseUnderTest.getKey().match(subject, " // " + licenseUnderTest.getValue()));
-            assertTrue(licenseUnderTest.getKey().match(subject, " /* " + licenseUnderTest.getValue()));
-            assertTrue(licenseUnderTest.getKey().match(subject, " /** " + licenseUnderTest.getValue()));
-            assertTrue(licenseUnderTest.getKey().match(subject, "    " + licenseUnderTest.getValue()));
-            assertTrue(licenseUnderTest.getKey().match(subject, " ## " + licenseUnderTest.getValue()));
-            assertTrue(licenseUnderTest.getKey().match(subject, " ## " + licenseUnderTest.getValue() + " ##"));
-        }
-    }
-
-}
diff --git a/0.12-release/apache-rat-core/src/test/java/org/apache/rat/analysis/license/MITLicenseTest.java b/0.12-release/apache-rat-core/src/test/java/org/apache/rat/analysis/license/MITLicenseTest.java
deleted file mode 100644
index 8cb1f84..0000000
--- a/0.12-release/apache-rat-core/src/test/java/org/apache/rat/analysis/license/MITLicenseTest.java
+++ /dev/null
@@ -1,84 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one   *
- * or more contributor license agreements.  See the NOTICE file *
- * distributed with this work for additional information        *
- * regarding copyright ownership.  The ASF licenses this file   *
- * to you under the Apache License, Version 2.0 (the            *
- * "License"); you may not use this file except in compliance   *
- * with the License.  You may obtain a copy of the License at   *
- *                                                              *
- *   http://www.apache.org/licenses/LICENSE-2.0                 *
- *                                                              *
- * Unless required by applicable law or agreed to in writing,   *
- * software distributed under the License is distributed on an  *
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY       *
- * KIND, either express or implied.  See the License for the    *
- * specific language governing permissions and limitations      *
- * under the License.                                           *
- */
-package org.apache.rat.analysis.license;
-
-import org.apache.rat.analysis.IHeaderMatcher;
-import org.apache.rat.api.Document;
-import org.apache.rat.document.MockLocation;
-import org.junit.Before;
-import org.junit.Test;
-
-import java.util.HashMap;
-import java.util.Map;
-
-import static org.junit.Assert.assertEquals;
-import static org.junit.Assert.assertFalse;
-import static org.junit.Assert.assertTrue;
-
-public class MITLicenseTest {
-    private Document subject;
-
-    /**
-     * To ease testing provide a map with a given license version and the string to test for.
-     */
-    private static Map<IHeaderMatcher, String> licenseStringMap;
-
-    /**
-     * If you replace this with BeforeClass and make this method static the build fails at line 71.
-     */
-    @Before
-    public void initLicensesUnderTest() {
-        licenseStringMap = new HashMap<IHeaderMatcher, String>();
-        licenseStringMap.put(new MITLicense(),
-                MITLicense.FIRST_LICENSE_LINE
-                        + "\n" + MITLicense.MIDDLE_LICENSE_LINE
-                        + "\r\n * " + MITLicense.AS_IS_LICENSE_LINE);
-        assertEquals(1, licenseStringMap.entrySet().size());
-    }
-
-
-    @Before
-    public final void initReporter() {
-        this.subject = new MockLocation("subject");
-    }
-
-    @Test
-    public void testNegativeMatches() throws Exception {
-        for (Map.Entry<IHeaderMatcher, String> licenseUnderTest : licenseStringMap.entrySet()) {
-            assertFalse(licenseUnderTest.getKey().match(subject, "'Behold, Telemachus! (nor fear the sight,)"));
-        }
-    }
-
-    @Test
-    public void testPositiveMatchInDocument() throws Exception {
-        for (Map.Entry<IHeaderMatcher, String> licenseUnderTest : licenseStringMap.entrySet()) {
-            assertTrue(licenseUnderTest.getKey().match(subject, "\t" + licenseUnderTest.getValue()));
-            assertTrue(licenseUnderTest.getKey().match(subject, "     " + licenseUnderTest.getValue()));
-            assertTrue(licenseUnderTest.getKey().match(subject, licenseUnderTest.getValue()));
-            assertTrue(licenseUnderTest.getKey().match(subject, " * " + licenseUnderTest.getValue()));
-            assertTrue(licenseUnderTest.getKey().match(subject, " // " + licenseUnderTest.getValue()));
-            assertTrue(licenseUnderTest.getKey().match(subject, " /* " + licenseUnderTest.getValue()));
-            assertTrue(licenseUnderTest.getKey().match(subject, " /** " + licenseUnderTest.getValue()));
-            assertTrue(licenseUnderTest.getKey().match(subject, "    " + licenseUnderTest.getValue()));
-            assertTrue(licenseUnderTest.getKey().match(subject, " ## " + licenseUnderTest.getValue()));
-            assertTrue(licenseUnderTest.getKey().match(subject, " ## " + licenseUnderTest.getValue() + " ##"));
-        }
-    }
-
-}
diff --git a/0.12-release/apache-rat-core/src/test/java/org/apache/rat/analysis/license/MockStandardLicense.java b/0.12-release/apache-rat-core/src/test/java/org/apache/rat/analysis/license/MockStandardLicense.java
deleted file mode 100644
index 537f69e..0000000
--- a/0.12-release/apache-rat-core/src/test/java/org/apache/rat/analysis/license/MockStandardLicense.java
+++ /dev/null
@@ -1,32 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one   *
- * or more contributor license agreements.  See the NOTICE file *
- * distributed with this work for additional information        *
- * regarding copyright ownership.  The ASF licenses this file   *
- * to you under the Apache License, Version 2.0 (the            *
- * "License"); you may not use this file except in compliance   *
- * with the License.  You may obtain a copy of the License at   *
- *                                                              *
- *   http://www.apache.org/licenses/LICENSE-2.0                 *
- *                                                              *
- * Unless required by applicable law or agreed to in writing,   *
- * software distributed under the License is distributed on an  *
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY       *
- * KIND, either express or implied.  See the License for the    *
- * specific language governing permissions and limitations      *
- * under the License.                                           *
- */ 
-package org.apache.rat.analysis.license;
-
-import org.apache.rat.api.MetaData;
-
-
-public class MockStandardLicense extends BaseLicense {
-
-//    public List visitors = new ArrayList();
-    
-    public MockStandardLicense() {
-        super(new MetaData.Datum(MetaData.RAT_URL_LICENSE_FAMILY_CATEGORY, ""), 
-                new MetaData.Datum(MetaData.RAT_URL_LICENSE_FAMILY_NAME, ""), "");
-    }
-}
diff --git a/0.12-release/apache-rat-core/src/test/java/org/apache/rat/analysis/license/OASISLicenseTest.java b/0.12-release/apache-rat-core/src/test/java/org/apache/rat/analysis/license/OASISLicenseTest.java
deleted file mode 100644
index 7e46921..0000000
--- a/0.12-release/apache-rat-core/src/test/java/org/apache/rat/analysis/license/OASISLicenseTest.java
+++ /dev/null
@@ -1,117 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one   *
- * or more contributor license agreements.  See the NOTICE file *
- * distributed with this work for additional information        *
- * regarding copyright ownership.  The ASF licenses this file   *
- * to you under the Apache License, Version 2.0 (the            *
- * "License"); you may not use this file except in compliance   *
- * with the License.  You may obtain a copy of the License at   *
- *                                                              *
- *   http://www.apache.org/licenses/LICENSE-2.0                 *
- *                                                              *
- * Unless required by applicable law or agreed to in writing,   *
- * software distributed under the License is distributed on an  *
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY       *
- * KIND, either express or implied.  See the License for the    *
- * specific language governing permissions and limitations      *
- * under the License.                                           *
- */
-package org.apache.rat.analysis.license;
-
-import org.apache.commons.io.IOUtils;
-import org.apache.rat.api.Document;
-import org.apache.rat.document.MockLocation;
-import org.apache.rat.report.claim.impl.xml.MockClaimReporter;
-import org.apache.rat.test.utils.Resources;
-import org.junit.Before;
-import org.junit.Test;
-
-import java.io.BufferedReader;
-import java.io.StringReader;
-
-import static org.junit.Assert.assertFalse;
-import static org.junit.Assert.assertTrue;
-
-public class OASISLicenseTest {
-
-    private static final String LICENSE = "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n" +
-            "<!--\n" +
-            "\n" +
-            "\n" +
-            "OASIS takes no position regarding the validity or scope of any intellectual property or other rights that might be claimed to pertain to the implementation or use of the technology described in this document or the extent to which any license under such rights might or might not be available; neither does it represent that it has made any effort to identify any such rights. Information on OASIS's procedures with respect to rights in OASIS specifications can be found at the OASIS website. Copies of claims of rights made available for publication and any assurances of licenses to be made available, or the result of an attempt made to obtain a general license or permission for the use of such proprietary rights by implementors or users of this specification, can be obtained from the OASIS Executive Director.\n" +
-            "\n" +
-            "\n" +
-            "OASIS invites any interested party to bring to its attention any copyrights, patents or patent applications, or other proprietary rights which may cover technology that may be required to implement this specification. Please address the information to the OASIS Executive Director\n." +
-            "\n" +
-            "Copyright (C) OASIS Open (2004-2005). All Rights Reserved.\n" +
-            "\n" +
-            "This document and translations of it may be copied and furnished to others, and derivative works that comment on or otherwise explain it or assist in its implementation may be prepared, copied, published and distributed, in whole or in part, without restriction of any kind, provided that the above copyright notice and this paragraph are included on all such copies and derivative works. However, this document itself may not be modified in any way, such as by removing the copyright notice or references to OASIS, except as needed for the purpose of developing OASIS specifications, in which case the procedures for copyrights defined in the OASIS Intellectual Property Rights document must be followed, or as required to translate it into languages other than English.\n" +
-            "\n" +
-            "\n" +
-            "The limited permissions granted above are perpetual and will not be revoked by OASIS or its successors or assigns.\n" +
-            "\n" +
-            "\n" +
-            "This document and the information contained herein is provided on an \"AS IS\" basis and OASIS DISCLAIMS ALL WARRANTIES, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO ANY WARRANTY THAT THE USE OF THE INFORMATION HEREIN WILL NOT INFRINGE ANY RIGHTS OR ANY IMPLIED WARRANTIES OF MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE.\n" +
-            "-->\n";
-
-    private OASISLicense license;
-
-    private MockClaimReporter reporter;
-
-    @Before
-    public void setUp() throws Exception {
-        license = new OASISLicense();
-        reporter = new MockClaimReporter();
-    }
-
-    @Test
-    public void match() throws Exception {
-        BufferedReader in = null;
-        try {
-            in = new BufferedReader(new StringReader(LICENSE));
-            String line = in.readLine();
-            boolean result = false;
-            final Document subject = new MockLocation("subject");
-            while (line != null) {
-                result = license.match(subject, line);
-                line = in.readLine();
-            }
-            assertTrue("OASIS license should be matched", result);
-            license.reset();
-            result = license.match(subject, "New line");
-            assertFalse("After reset, content should build up again", result);
-        } finally {
-            IOUtils.closeQuietly(in);
-        }
-    }
-
-    @Test
-    public void noMatch() throws Exception {
-        BufferedReader in = null;
-        try {
-            in = Resources.getBufferedResourceReader("elements/Source.java");
-            String line = in.readLine();
-            boolean result = false;
-            final Document subject = new MockLocation("subject");
-            while (line != null) {
-                result = license.match(subject, line);
-                line = in.readLine();
-            }
-            assertFalse("OASIS license should not be matched", result);
-            license.reset();
-        } finally {
-            IOUtils.closeQuietly(in);
-        }
-    }
-
-    @Test(timeout = 2000) // may need to be adjusted if many more files are added
-    public void goodFiles() throws Exception {
-        DirectoryScanner.testFilesInDir("oasis/good", license, true);
-    }
-
-    @Test(timeout = 2000) // may need to be adjusted if many more files are added
-    public void baddFiles() throws Exception {
-        DirectoryScanner.testFilesInDir("oasis/bad", license, false);
-    }
-
-}
diff --git a/0.12-release/apache-rat-core/src/test/java/org/apache/rat/analysis/license/W3CLicenseTest.java b/0.12-release/apache-rat-core/src/test/java/org/apache/rat/analysis/license/W3CLicenseTest.java
deleted file mode 100644
index 6397bbd..0000000
--- a/0.12-release/apache-rat-core/src/test/java/org/apache/rat/analysis/license/W3CLicenseTest.java
+++ /dev/null
@@ -1,59 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one   *
- * or more contributor license agreements.  See the NOTICE file *
- * distributed with this work for additional information        *
- * regarding copyright ownership.  The ASF licenses this file   *
- * to you under the Apache License, Version 2.0 (the            *
- * "License"); you may not use this file except in compliance   *
- * with the License.  You may obtain a copy of the License at   *
- *                                                              *
- *   http://www.apache.org/licenses/LICENSE-2.0                 *
- *                                                              *
- * Unless required by applicable law or agreed to in writing,   *
- * software distributed under the License is distributed on an  *
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY       *
- * KIND, either express or implied.  See the License for the    *
- * specific language governing permissions and limitations      *
- * under the License.                                           *
- */ 
-package org.apache.rat.analysis.license;
-
-import org.apache.rat.api.Document;
-import org.apache.rat.document.MockLocation;
-import org.apache.rat.report.claim.impl.xml.MockClaimReporter;
-import org.junit.Before;
-import org.junit.Test;
-
-import static org.junit.Assert.assertFalse;
-import static org.junit.Assert.assertTrue;
-
-public class W3CLicenseTest {
-
-    public static final String COPYRIGHT_URL 
-    = "http://www.w3.org/Consortium/Legal/2002/copyright-software-20021231";
-    
-    public static final String COPYRIGHT_URL_COMMENTED
-    = "# http://www.w3.org/Consortium/Legal/2002/copyright-software-20021231 #";
-    
-    public static final String COPYRIGHT_URL_XML
-    = "<!-- http://www.w3.org/Consortium/Legal/2002/copyright-software-20021231 -->";
-    
-    private W3CLicense license;
-    private MockClaimReporter reporter;
-
-    @Before
-    public void setUp() throws Exception {
-        license = new W3CLicense();
-        reporter = new MockClaimReporter();
-    }
-
-    @Test
-    public void match() throws Exception {
-        final Document subject = new MockLocation("subject");
-        assertTrue("Expected matcher to return license", license.match(subject, COPYRIGHT_URL));
-        assertTrue("Expected matcher to return license", license.match(subject, COPYRIGHT_URL_COMMENTED));
-        assertTrue("Expected matcher to return license", license.match(subject, COPYRIGHT_URL_XML));
-        assertFalse("Return null if the license isn't matched", license.match(subject, "Bogus"));
-    }
-
-}
diff --git a/0.12-release/apache-rat-core/src/test/java/org/apache/rat/analysis/util/MatcherMultiplexerTest.java b/0.12-release/apache-rat-core/src/test/java/org/apache/rat/analysis/util/MatcherMultiplexerTest.java
deleted file mode 100644
index 1ed6e69..0000000
--- a/0.12-release/apache-rat-core/src/test/java/org/apache/rat/analysis/util/MatcherMultiplexerTest.java
+++ /dev/null
@@ -1,80 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one   *
- * or more contributor license agreements.  See the NOTICE file *
- * distributed with this work for additional information        *
- * regarding copyright ownership.  The ASF licenses this file   *
- * to you under the Apache License, Version 2.0 (the            *
- * "License"); you may not use this file except in compliance   *
- * with the License.  You may obtain a copy of the License at   *
- *                                                              *
- *   http://www.apache.org/licenses/LICENSE-2.0                 *
- *                                                              *
- * Unless required by applicable law or agreed to in writing,   *
- * software distributed under the License is distributed on an  *
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY       *
- * KIND, either express or implied.  See the License for the    *
- * specific language governing permissions and limitations      *
- * under the License.                                           *
- */ 
-package org.apache.rat.analysis.util;
-
-import junit.framework.TestCase;
-
-import org.apache.rat.analysis.IHeaderMatcher;
-import org.apache.rat.analysis.MockLicenseMatcher;
-import org.apache.rat.api.Document;
-import org.apache.rat.document.MockLocation;
-import org.apache.rat.report.claim.impl.xml.MockClaimReporter;
-
-import java.util.Arrays;
-
-public class MatcherMultiplexerTest extends TestCase {
-
-    private static final String LINE_ONE = "Line One";
-    private static final String LINE_TWO = "Line Two";
-
-    MockClaimReporter reporter;
-    MockLicenseMatcher matcherOne;
-    MockLicenseMatcher matcherTwo;
-
-    HeaderMatcherMultiplexer multiplexer;
-
-    @Override
-    protected void setUp() throws Exception {
-        super.setUp();
-        matcherOne = new MockLicenseMatcher();
-        matcherTwo = new MockLicenseMatcher();
-        multiplexer = new HeaderMatcherMultiplexer(Arrays.<IHeaderMatcher>asList(matcherOne, matcherTwo));
-        reporter = new MockClaimReporter();
-    }
-
-    @Override
-    protected void tearDown() throws Exception {
-        super.tearDown();
-    }
-
-    public void testMatcherLine() throws Exception {
-        matcherOne.result = false;
-        matcherTwo.result = false;
-        final Document subject = new MockLocation("subject");
-        multiplexer.match(subject, LINE_ONE);
-        assertEquals("One line", 1, matcherOne.lines.size());
-        assertEquals("Same as line passed", LINE_ONE, matcherOne.lines.get(0));
-        assertEquals("One line", 1, matcherTwo.lines.size());
-        assertEquals("Same as line passed", LINE_ONE, matcherTwo.lines.get(0));
-        multiplexer.match(subject, LINE_TWO);
-        assertEquals("One line", 2, matcherOne.lines.size());
-        assertEquals("Same as line passed", LINE_TWO, matcherOne.lines.get(1));
-        assertEquals("One line", 2, matcherTwo.lines.size());
-        assertEquals("Same as line passed", LINE_TWO, matcherTwo.lines.get(1));
-    }
-
-    public void testReset() {
-        multiplexer.reset();
-        assertEquals("Reset once", 1, matcherOne.resets);
-        assertEquals("Reset once", 1, matcherTwo.resets);
-        multiplexer.reset();
-        assertEquals("Reset twice", 2, matcherOne.resets);
-        assertEquals("Reset twice", 2, matcherTwo.resets);
-    }
-}
diff --git a/0.12-release/apache-rat-core/src/test/java/org/apache/rat/annotation/TestLicenseAppender.java b/0.12-release/apache-rat-core/src/test/java/org/apache/rat/annotation/TestLicenseAppender.java
deleted file mode 100644
index 0c58154..0000000
--- a/0.12-release/apache-rat-core/src/test/java/org/apache/rat/annotation/TestLicenseAppender.java
+++ /dev/null
@@ -1,700 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one   *
- * or more contributor license agreements.  See the NOTICE file *
- * distributed with this work for additional information        *
- * regarding copyright ownership.  The ASF licenses this file   *
- * to you under the Apache License, Version 2.0 (the            *
- * "License"); you may not use this file except in compliance   *
- * with the License.  You may obtain a copy of the License at   *
- *                                                              *
- *   http://www.apache.org/licenses/LICENSE-2.0                 *
- *                                                              *
- * Unless required by applicable law or agreed to in writing,   *
- * software distributed under the License is distributed on an  *
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY       *
- * KIND, either express or implied.  See the License for the    *
- * specific language governing permissions and limitations      *
- * under the License.                                           *
- */
-package org.apache.rat.annotation;
-
-import org.apache.commons.io.IOUtils;
-import org.apache.rat.test.utils.Resources;
-import org.junit.ClassRule;
-import org.junit.Test;
-import org.junit.rules.TemporaryFolder;
-
-import java.io.BufferedReader;
-import java.io.File;
-import java.io.FileReader;
-import java.io.FileWriter;
-import java.io.IOException;
-import java.io.Writer;
-
-import static org.junit.Assert.assertEquals;
-import static org.junit.Assert.assertFalse;
-
-public class TestLicenseAppender {
-    @ClassRule
-    public static TemporaryFolder baseTempFolder = new TemporaryFolder();
-
-    private static final String FIRST_LICENSE_LINE = " Licensed to the Apache Software Foundation (ASF) under one";
-
-    private interface FileCreator {
-        void createFile(Writer w) throws IOException;
-    }
-
-    private interface NewFileReader {
-        void readFile(BufferedReader r) throws IOException;
-    }
-
-    private static String getTemporaryFileWithName(String fileName) throws IOException {
-        if (fileName != null) {
-            return baseTempFolder.newFile(fileName).getAbsolutePath();
-        } else {
-            return baseTempFolder.newFile().getAbsolutePath();
-        }
-    }
-
-    private static void createTestFile(String fileName,
-                                       FileCreator creator)
-            throws IOException {
-        FileWriter w = null;
-        try {
-            creator.createFile(w = new FileWriter(fileName));
-        } finally {
-            IOUtils.closeQuietly(w);
-        }
-    }
-
-    private static void tryToDelete(File f) {
-        if (f != null && f.exists() && !f.delete()) {
-            f.deleteOnExit();
-        }
-    }
-
-    private static void commonTestTemplate(String relativeName,
-                                           FileCreator creator,
-                                           NewFileReader reader)
-            throws IOException {
-        String name = getTemporaryFileWithName(relativeName);
-        try {
-            createTestFile(name, creator);
-
-            ApacheV2LicenseAppender appender =
-                    new ApacheV2LicenseAppender();
-            appender.append(new File(name));
-
-            BufferedReader r = null;
-            try {
-                r = new BufferedReader(new FileReader(name + ".new"));
-                reader.readFile(r);
-            } finally {
-                IOUtils.closeQuietly(r);
-            }
-        } finally {
-            tryToDelete(new File(name));
-            tryToDelete(new File(name + ".new"));
-        }
-    }
-
-    private static NewFileReader checkLines(final String firstLine,
-                                            final String secondLine) {
-        return new NewFileReader() {
-            public void readFile(BufferedReader r) throws IOException {
-                String line = r.readLine();
-                assertEquals("First line is incorrect",
-                        firstLine, line);
-                if (secondLine != null) {
-                    line = r.readLine();
-                    assertEquals("Second line is incorrect",
-                            secondLine, line);
-                }
-            }
-        };
-    }
-
-    private static NewFileReader checkLines(final String firstLine,
-                                            final String secondLine,
-                                            final String thirdLine) {
-        return new NewFileReader() {
-            public void readFile(BufferedReader r) throws IOException {
-                String line = r.readLine();
-                assertEquals("First line is incorrect",
-                        firstLine, line);
-                if (secondLine != null) {
-                    line = r.readLine();
-                    assertEquals("Second line is incorrect",
-                            secondLine, line);
-                }
-                if (thirdLine != null) {
-                    line = r.readLine();
-                    assertEquals("Third line is incorrect",
-                            thirdLine, line);
-                }
-            }
-        };
-    }
-
-    @Test
-    public void addLicenseToUnknownFile() throws IOException {
-        String filename = getTemporaryFileWithName(null);
-        createTestFile(filename, new FileCreator() {
-            public void createFile(Writer writer)
-                    throws IOException {
-                writer.write("Unknown file type\n");
-            }
-        });
-
-        File file = new File(filename);
-        file.deleteOnExit();
-        ApacheV2LicenseAppender appender =
-                new ApacheV2LicenseAppender();
-        appender.append(file);
-
-        File newFile = new File(filename + ".new");
-        newFile.deleteOnExit();
-        assertFalse("No new file should have been written",
-                newFile.exists());
-    }
-
-    @Test
-    public void addLicenseToJava() throws IOException {
-        String filename = "tmp.java";
-        final String firstLine = "package foo;";
-        final String secondLine = "";
-        final String thirdLine = "/*";
-        commonTestTemplate(filename, new FileCreator() {
-                    public void createFile(Writer writer)
-                            throws IOException {
-                        writer.write(firstLine + "\n");
-                        writer.write("\n");
-                        writer.write("public class test {\n");
-                        writer.write("}\n");
-                    }
-                },
-                checkLines(firstLine, secondLine, thirdLine));
-    }
-
-    @Test
-    public void addLicenseToJavaWithoutPackage() throws IOException {
-        String filename = "tmp.java";
-        String commentLine = "/*";
-        commonTestTemplate(filename, new FileCreator() {
-                    public void createFile(Writer writer)
-                            throws IOException {
-                        writer.write("public class test {\n");
-                        writer.write("}\n");
-                    }
-                },
-                checkLines(commentLine, null));
-    }
-
-    @Test
-    public void addLicenseToXML() throws IOException {
-        String filename = "tmp.xml";
-        final String firstLine = "<?xml version='1.0'?>";
-        final String secondLine = "";
-        final String thirdLine = "<!--";
-
-        commonTestTemplate(filename, new FileCreator() {
-                    public void createFile(Writer writer)
-                            throws IOException {
-                        writer.write(firstLine + "\n");
-                        writer.write("\n");
-                        writer.write("<xml>\n");
-                        writer.write("</xml>\n");
-                    }
-                },
-                checkLines(firstLine, secondLine, thirdLine));
-    }
-
-    @Test
-    public void addLicenseToXMLWithoutDecl() throws IOException {
-        String filename = "tmp.xml";
-        final String firstLine = "<?xml version='1.0'?>";
-        final String secondLine = "<!--";
-
-        commonTestTemplate(filename, new FileCreator() {
-                    public void createFile(Writer writer)
-                            throws IOException {
-                        writer.write("<xml>\n");
-                        writer.write("</xml>\n");
-                    }
-                },
-                checkLines(firstLine, secondLine));
-    }
-
-    @Test
-    public void addLicenseToHTML() throws IOException {
-        String filename = "tmp.html";
-        String commentLine = "<!--";
-
-        commonTestTemplate(filename, new FileCreator() {
-                    public void createFile(Writer writer)
-                            throws IOException {
-                        writer.write("<html>\n");
-                        writer.write("\n");
-                        writer.write("</html>\n");
-                    }
-                },
-                checkLines(commentLine, null));
-    }
-
-    @Test
-    public void addLicenseToCSS() throws IOException {
-        String filename = "tmp.css";
-        String firstLine = "/*";
-
-        commonTestTemplate(filename, new FileCreator() {
-                    public void createFile(Writer writer)
-                            throws IOException {
-                        writer.write(".class {\n");
-                        writer.write(" background-color: red;");
-                        writer.write("}\n");
-                    }
-                },
-                checkLines(firstLine, null));
-    }
-
-    @Test
-    public void addLicenseToJavascript() throws IOException {
-        String filename = "tmp.js";
-        String firstLine = "/*";
-
-        commonTestTemplate(filename, new FileCreator() {
-                    public void createFile(Writer writer)
-                            throws IOException {
-                        writer.write("if (a ==b) {>\n");
-                        writer.write(" alert(\"how useful!\");");
-                        writer.write("}\n");
-                    }
-                },
-                checkLines(firstLine, null));
-    }
-
-    @Test
-    public void addLicenseToAPT() throws IOException {
-        String filename = "tmp.apt";
-        String firstLine = "~~" + FIRST_LICENSE_LINE;
-
-        commonTestTemplate(filename, new FileCreator() {
-                    public void createFile(Writer writer)
-                            throws IOException {
-                        writer.write("A Simple APT file");
-                        writer.write(" This file contains nothing\n");
-                        writer.write(" of any importance\n");
-                    }
-                },
-                checkLines(firstLine, null));
-    }
-
-    @Test
-    public void addLicenseToProperties() throws IOException {
-        String filename = "tmp.properties";
-        String firstLine = "#" + FIRST_LICENSE_LINE;
-
-        commonTestTemplate(filename, new FileCreator() {
-                    public void createFile(Writer writer)
-                            throws IOException {
-                        writer.write("property = value\n");
-                        writer.write("fun = true\n");
-                        writer.write("cool = true\n");
-                    }
-                },
-                checkLines(firstLine, null));
-    }
-
-    @Test
-    public void addLicenseToScala() throws IOException {
-        String filename = "tmp.scala";
-        final String firstLine = "package foo {";
-        final String newFirstLine = "/*";
-
-        commonTestTemplate(filename, new FileCreator() {
-                    public void createFile(Writer writer)
-                            throws IOException {
-                        writer.write(firstLine + "\n");
-                        writer.write("\n");
-                        writer.write("    object X { val x = 1; }\n");
-                        writer.write("}\n");
-                    }
-                },
-                new NewFileReader() {
-                    public void readFile(BufferedReader reader)
-                            throws IOException {
-                        String line = reader.readLine();
-                        assertEquals("First line is incorrect",
-                                newFirstLine, line);
-                        while ((line = reader.readLine()) != null) {
-                            if (line.length() == 0) {
-                                line = reader.readLine();
-                                break;
-                            }
-                        }
-                        assertEquals("Package line is incorrect",
-                                firstLine, line);
-                    }
-                });
-    }
-
-    @Test
-    public void addLicenseToRubyWithoutHashBang()
-            throws IOException {
-        String filename = "tmp.rb";
-        String firstLine = "#" + FIRST_LICENSE_LINE;
-
-        commonTestTemplate(filename, new FileCreator() {
-                    public void createFile(Writer writer)
-                            throws IOException {
-                        writer.write("class Foo\n");
-                        writer.write("end\n");
-                    }
-                },
-                checkLines(firstLine, null));
-    }
-
-    @Test
-    public void addLicenseToRubyWithHashBang() throws IOException {
-        String filename = "tmp.rb";
-        final String firstLine = "#!/usr/bin/env ruby";
-        String secondLine = "#" + FIRST_LICENSE_LINE;
-
-        commonTestTemplate(filename, new FileCreator() {
-                    public void createFile(Writer writer)
-                            throws IOException {
-                        writer.write(firstLine + "\n");
-                        writer.write("class Foo\n");
-                        writer.write("end\n");
-                    }
-                },
-                checkLines(firstLine, secondLine));
-    }
-
-    @Test
-    public void addLicenseToPerlWithoutHashBang()
-            throws IOException {
-        String filename = "tmp.pl";
-        String firstLine = "#" + FIRST_LICENSE_LINE;
-
-        commonTestTemplate(filename, new FileCreator() {
-                    public void createFile(Writer writer)
-                            throws IOException {
-                        writer.write("print \"Hello world\"\n");
-                    }
-                },
-                checkLines(firstLine, null));
-    }
-
-    @Test
-    public void addLicenseToPerlWithHashBang() throws IOException {
-        String filename = "tmp.pl";
-        final String firstLine = "#!/usr/bin/env perl";
-        String secondLine = "#" + FIRST_LICENSE_LINE;
-
-        commonTestTemplate(filename, new FileCreator() {
-                    public void createFile(Writer writer)
-                            throws IOException {
-                        writer.write(firstLine + "\n");
-                        writer.write("print \"Hello world\"\n");
-                    }
-                },
-                checkLines(firstLine, secondLine));
-    }
-
-    @Test
-    public void addLicenseToTclWithoutHashBang()
-            throws IOException {
-        String filename = "tmp.tcl";
-        String firstLine = "#" + FIRST_LICENSE_LINE;
-
-        commonTestTemplate(filename, new FileCreator() {
-                    public void createFile(Writer writer)
-                            throws IOException {
-                        writer.write("puts \"Hello world\"\n");
-                    }
-                },
-                checkLines(firstLine, null));
-    }
-
-    @Test
-    public void addLicenseToTclWithHashBang() throws IOException {
-        String filename = "tmp.tcl";
-        final String firstLine = "#!/usr/bin/env tcl";
-        String secondLine = "#" + FIRST_LICENSE_LINE;
-
-        commonTestTemplate(filename, new FileCreator() {
-                    public void createFile(Writer writer)
-                            throws IOException {
-                        writer.write(firstLine + "\n");
-                        writer.write("puts \"Hello world\"\n");
-                    }
-                },
-                checkLines(firstLine, secondLine));
-    }
-
-    @Test
-    public void addLicenseToPHP() throws IOException {
-        String filename = "tmp.php";
-        final String firstLine = "<?php";
-        final String secondLine = "";
-        final String thirdLine = "/*";
-
-        commonTestTemplate(filename, new FileCreator() {
-                    public void createFile(Writer writer)
-                            throws IOException {
-                        writer.write(firstLine + "\n");
-                        writer.write("echo 'Hello World'\n");
-                        writer.write("?>\n");
-                    }
-                },
-                checkLines(firstLine, secondLine, thirdLine));
-    }
-
-    @Test
-    public void addLicenseToCSharp() throws IOException {
-        String filename = "tmp.cs";
-        String firstLine = "/*";
-
-        commonTestTemplate(filename, new FileCreator() {
-                    public void createFile(Writer writer)
-                            throws IOException {
-                        writer.write("namespace org.example {\n");
-                        writer.write("    public class Foo {\n");
-                        writer.write("    }\n");
-                        writer.write("}\n");
-                    }
-                },
-                checkLines(firstLine, null));
-    }
-
-    @Test
-    public void addLicenseToGroovy() throws IOException {
-        String filename = "tmp.groovy";
-        String firstLine = "/*";
-
-        commonTestTemplate(filename, new FileCreator() {
-                    public void createFile(Writer writer)
-                            throws IOException {
-                        writer.write("package org.example \n");
-                        writer.write("    class Foo {\n");
-                        writer.write("    }\n");
-                    }
-                },
-                checkLines(firstLine, null));
-    }
-
-    @Test
-    public void addLicenseToCPlusPlus() throws IOException {
-        String filename = "tmp.cpp";
-        String firstLine = "/*";
-
-        commonTestTemplate(filename, new FileCreator() {
-                    public void createFile(Writer writer)
-                            throws IOException {
-                        writer.write("namespace org.example {\n");
-                        writer.write("    public class Foo {\n");
-                        writer.write("    }\n");
-                        writer.write("}\n");
-                    }
-                },
-                checkLines(firstLine, null));
-    }
-
-    @Test
-    public void fileWithBOM() throws IOException {
-        File f = Resources.getResourceFile("violations/FilterTest.cs");
-        try {
-            ApacheV2LicenseAppender appender =
-                    new ApacheV2LicenseAppender();
-            appender.append(f);
-
-            BufferedReader r = null;
-            try {
-                r = new BufferedReader(new FileReader(f.getAbsolutePath()
-                        + ".new"));
-                assertEquals("/*", r.readLine());
-                String line = null;
-                while ((line = r.readLine()) != null) {
-                    if (line.trim().length() == 0) {
-                        break;
-                    }
-                }
-                assertEquals("#if NET_2_0", r.readLine());
-            } finally {
-                IOUtils.closeQuietly(r);
-            }
-        } finally {
-            tryToDelete(new File(f.getAbsolutePath() + ".new"));
-        }
-    }
-
-    @Test
-    public void addLicenseToVS2003solution() throws IOException {
-        String filename = "tmp.sln";
-        final String firstLine = "Microsoft Visual Studio Solution File,"
-                + " Format Version 8.0";
-        String secondLine = "#" + FIRST_LICENSE_LINE;
-
-        commonTestTemplate(filename, new FileCreator() {
-                    public void createFile(Writer writer)
-                            throws IOException {
-                        writer.write(firstLine + "\n");
-                        writer.write("Project(\"{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}\") = \"ConsoleApp\", \"Tutorials\\ConsoleApp\\cs\\src\\ConsoleApp.csproj\", \"{933969DF-2BC5-44E6-8B1A-400FC276A23F}\"\n");
-                        writer.write("\tProjectSection(WebsiteProperties) = preProject\n");
-                        writer.write("\t\tDebug.AspNetCompiler.Debug = \"True\"\n");
-                        writer.write("\t\tRelease.AspNetCompiler.Debug = \"False\"\n");
-                        writer.write("\tEndProjectSection\n");
-                        writer.write("EndProject\n");
-                    }
-                },
-                checkLines(firstLine, secondLine));
-    }
-
-    @Test
-    public void addLicenseToVS2005solution() throws IOException {
-        String filename = "tmp.sln";
-        final String firstLine = "Microsoft Visual Studio Solution File,"
-                + " Format Version 9.0";
-        final String secondLine = "# Visual Studio 2005";
-        final String thirdLine = "#" + FIRST_LICENSE_LINE;
-
-        commonTestTemplate(filename, new FileCreator() {
-                    public void createFile(Writer writer)
-                            throws IOException {
-                        writer.write(firstLine + "\n");
-                        writer.write(secondLine + "\n");
-                        writer.write("Project(\"{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}\") = \"ConsoleApp\", \"Tutorials\\ConsoleApp\\cs\\src\\ConsoleApp.csproj\", \"{933969DF-2BC5-44E6-8B1A-400FC276A23F}\"\n");
-                        writer.write("\tProjectSection(WebsiteProperties) = preProject\n");
-                        writer.write("\t\tDebug.AspNetCompiler.Debug = \"True\"\n");
-                        writer.write("\t\tRelease.AspNetCompiler.Debug = \"False\"\n");
-                        writer.write("\tEndProjectSection\n");
-                        writer.write("EndProject\n");
-                    }
-                },
-                new NewFileReader() {
-                    public void readFile(BufferedReader r) throws IOException {
-                        String line = r.readLine();
-                        assertEquals("First line is incorrect",
-                                firstLine, line);
-                        line = r.readLine();
-                        assertEquals("Second line is incorrect",
-                                secondLine, line);
-                        line = r.readLine();
-                        assertEquals("Third line is incorrect",
-                                thirdLine, line);
-                    }
-                });
-    }
-
-    @Test
-    public void addLicenseToVS2010ExpressSolution() throws IOException {
-        String filename = "tmp.sln";
-        final String firstLine = "Microsoft Visual Studio Solution File, "
-                + "Format Version 11.00";
-        final String secondLine = "# Visual C# Express 2010";
-        final String thirdLine = "#" + FIRST_LICENSE_LINE;
-
-        commonTestTemplate(filename, new FileCreator() {
-                    public void createFile(Writer writer)
-                            throws IOException {
-                        writer.write(firstLine + "\n");
-                        writer.write(secondLine + "\n");
-                        writer.write("Project(\"{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}\") = \"Lucene.Net\", \"..\\..\\..\\src\\core\\Lucene.Net.csproj\", \"{5D4AD9BE-1FFB-41AB-9943-25737971BF57}\"\n");
-                        writer.write("EndProject\n");
-                        writer.write("Project(\"{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}\") = \"Contrib.Highlighter\", \"..\\..\\..\\src\\contrib\\Highlighter\\Contrib.Highlighter.csproj\", \"{901D5415-383C-4AA6-A256-879558841BEA}\"\n");
-                        writer.write("EndProject\n");
-                        writer.write("Global\n");
-                        writer.write("GlobalSection(SolutionConfigurationPlatforms) = preSolution\n");
-                        writer.write("Debug|Any CPU = Debug|Any CPU\n");
-                        writer.write("Release|Any CPU = Release|Any CPU\n");
-                        writer.write("EndGlobalSection\n");
-                        writer.write("GlobalSection(ProjectConfigurationPlatforms) = postSolution\n");
-                        writer.write("{5D4AD9BE-1FFB-41AB-9943-25737971BF57}.Debug|Any CPU.ActiveCfg = Debug|Any CPU\n");
-                        writer.write("{5D4AD9BE-1FFB-41AB-9943-25737971BF57}.Debug|Any CPU.Build.0 = Debug|Any CPU\n");
-                        writer.write("{5D4AD9BE-1FFB-41AB-9943-25737971BF57}.Release|Any CPU.ActiveCfg = Release|Any CPU\n");
-                        writer.write("{5D4AD9BE-1FFB-41AB-9943-25737971BF57}.Release|Any CPU.Build.0 = Release|Any CPU\n");
-                        writer.write("{901D5415-383C-4AA6-A256-879558841BEA}.Debug|Any CPU.ActiveCfg = Debug|Any CPU\n");
-                        writer.write("{901D5415-383C-4AA6-A256-879558841BEA}.Debug|Any CPU.Build.0 = Debug|Any CPU\n");
-                        writer.write("{901D5415-383C-4AA6-A256-879558841BEA}.Release|Any CPU.ActiveCfg = Release|Any CPU\n");
-                        writer.write("{901D5415-383C-4AA6-A256-879558841BEA}.Release|Any CPU.Build.0 = Release|Any CPU\n");
-                        writer.write("EndGlobalSection\n");
-                        writer.write("GlobalSection(SolutionProperties) = preSolution\n");
-                        writer.write("HideSolutionNode = FALSE\n");
-                        writer.write("EndGlobalSection\n");
-                        writer.write("EndGlobal \n");
-                    }
-                },
-                new NewFileReader() {
-                    public void readFile(BufferedReader r) throws IOException {
-                        String line = r.readLine();
-                        assertEquals("First line is incorrect",
-                                firstLine, line);
-                        line = r.readLine();
-                        assertEquals("Second line is incorrect",
-                                secondLine, line);
-                        line = r.readLine();
-                        assertEquals("Third line is incorrect",
-                                thirdLine, line);
-                    }
-                });
-    }
-
-    @Test
-    public void addLicenseToVS2010SolutionWithBlankLine() throws IOException {
-        String filename = "tmp.sln";
-        final String firstLine = "";
-        final String secondLine = "Microsoft Visual Studio Solution File, "
-                + "Format Version 11.00";
-        final String thirdLine = "# Visual C# Express 2010";
-        final String forthLine = "#" + FIRST_LICENSE_LINE;
-
-        commonTestTemplate(filename, new FileCreator() {
-                    public void createFile(Writer writer)
-                            throws IOException {
-                        writer.write(firstLine + "\n");
-                        writer.write(secondLine + "\n");
-                        writer.write(thirdLine + "\n");
-                        writer.write("Project(\"{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}\") = \"Lucene.Net\", \"..\\..\\..\\src\\core\\Lucene.Net.csproj\", \"{5D4AD9BE-1FFB-41AB-9943-25737971BF57}\"\n");
-                        writer.write("EndProject\n");
-                        writer.write("Project(\"{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}\") = \"Contrib.Highlighter\", \"..\\..\\..\\src\\contrib\\Highlighter\\Contrib.Highlighter.csproj\", \"{901D5415-383C-4AA6-A256-879558841BEA}\"\n");
-                        writer.write("EndProject\n");
-                        writer.write("Global\n");
-                        writer.write("GlobalSection(SolutionConfigurationPlatforms) = preSolution\n");
-                        writer.write("Debug|Any CPU = Debug|Any CPU\n");
-                        writer.write("Release|Any CPU = Release|Any CPU\n");
-                        writer.write("EndGlobalSection\n");
-                        writer.write("GlobalSection(ProjectConfigurationPlatforms) = postSolution\n");
-                        writer.write("{5D4AD9BE-1FFB-41AB-9943-25737971BF57}.Debug|Any CPU.ActiveCfg = Debug|Any CPU\n");
-                        writer.write("{5D4AD9BE-1FFB-41AB-9943-25737971BF57}.Debug|Any CPU.Build.0 = Debug|Any CPU\n");
-                        writer.write("{5D4AD9BE-1FFB-41AB-9943-25737971BF57}.Release|Any CPU.ActiveCfg = Release|Any CPU\n");
-                        writer.write("{5D4AD9BE-1FFB-41AB-9943-25737971BF57}.Release|Any CPU.Build.0 = Release|Any CPU\n");
-                        writer.write("{901D5415-383C-4AA6-A256-879558841BEA}.Debug|Any CPU.ActiveCfg = Debug|Any CPU\n");
-                        writer.write("{901D5415-383C-4AA6-A256-879558841BEA}.Debug|Any CPU.Build.0 = Debug|Any CPU\n");
-                        writer.write("{901D5415-383C-4AA6-A256-879558841BEA}.Release|Any CPU.ActiveCfg = Release|Any CPU\n");
-                        writer.write("{901D5415-383C-4AA6-A256-879558841BEA}.Release|Any CPU.Build.0 = Release|Any CPU\n");
-                        writer.write("EndGlobalSection\n");
-                        writer.write("GlobalSection(SolutionProperties) = preSolution\n");
-                        writer.write("HideSolutionNode = FALSE\n");
-                        writer.write("EndGlobalSection\n");
-                        writer.write("EndGlobal \n");
-                    }
-                },
-                new NewFileReader() {
-                    public void readFile(BufferedReader r) throws IOException {
-                        String line = r.readLine();
-                        assertEquals("First line is incorrect",
-                                firstLine, line);
-                        line = r.readLine();
-                        assertEquals("Second line is incorrect",
-                                secondLine, line);
-                        line = r.readLine();
-                        assertEquals("Third line is incorrect",
-                                thirdLine, line);
-                        line = r.readLine();
-                        assertEquals("Forth line is incorrect",
-                                forthLine, line);
-                    }
-                });
-    }
-}
diff --git a/0.12-release/apache-rat-core/src/test/java/org/apache/rat/config/AddLicenseHeadersTest.java b/0.12-release/apache-rat-core/src/test/java/org/apache/rat/config/AddLicenseHeadersTest.java
deleted file mode 100644
index 7b90c18..0000000
--- a/0.12-release/apache-rat-core/src/test/java/org/apache/rat/config/AddLicenseHeadersTest.java
+++ /dev/null
@@ -1,31 +0,0 @@
-package org.apache.rat.config;
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- *
- *   http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-import org.junit.Test;
-
-import static org.junit.Assert.assertFalse;
-
-public class AddLicenseHeadersTest {
-    @Test
-    public void verifyHelpOptions() {
-        String allOptions = AddLicenseHeaders.getValuesForHelp();
-        assertFalse(allOptions, allOptions.isEmpty());
-        assertFalse(allOptions, allOptions.endsWith("|"));
-    }
-}
diff --git a/0.12-release/apache-rat-core/src/test/java/org/apache/rat/config/ConfigurationUtilTest.java b/0.12-release/apache-rat-core/src/test/java/org/apache/rat/config/ConfigurationUtilTest.java
deleted file mode 100644
index e628910..0000000
--- a/0.12-release/apache-rat-core/src/test/java/org/apache/rat/config/ConfigurationUtilTest.java
+++ /dev/null
@@ -1,44 +0,0 @@
-package org.apache.rat.config;
-
-import org.apache.rat.api.MetaData;
-import org.apache.rat.license.GPL1LicenseFamily;
-import org.apache.rat.license.ILicenseFamily;
-import org.junit.Test;
-
-import static org.junit.Assert.assertEquals;
-import static org.junit.Assert.assertTrue;
-
-
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- *
- *   http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-public class ConfigurationUtilTest {
-    @Test
-    public void toNamesIsNullSafe() {
-        assertTrue(ConfigurationUtil.toNames(null).isEmpty());
-    }
-
-    @Test
-    public void toNamesIsEmptyArraySafe() {
-        assertTrue(ConfigurationUtil.toNames(new ILicenseFamily[0]).isEmpty());
-    }
-    @Test
-    public void toNamesRegular() {
-        assertEquals(MetaData.RAT_LICENSE_FAMILY_NAME_VALUE_GPL_VERSION_1, ConfigurationUtil.toNames(new ILicenseFamily[]{new GPL1LicenseFamily()}).get(0));
-    }
-}
diff --git a/0.12-release/apache-rat-core/src/test/java/org/apache/rat/config/ReportFormatTest.java b/0.12-release/apache-rat-core/src/test/java/org/apache/rat/config/ReportFormatTest.java
deleted file mode 100644
index ccb5612..0000000
--- a/0.12-release/apache-rat-core/src/test/java/org/apache/rat/config/ReportFormatTest.java
+++ /dev/null
@@ -1,43 +0,0 @@
-package org.apache.rat.config;
-
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- *
- *   http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-
-import org.junit.Test;
-
-import java.util.Arrays;
-
-import static org.junit.Assert.assertFalse;
-import static org.junit.Assert.assertTrue;
-
-public class ReportFormatTest {
-    @Test
-    public void isANullSafe() {
-        for (String optionType : Arrays.asList(null, "")) {
-            assertFalse("Must not equal PLAIN, was " + optionType, ReportFormat.PLAIN.is(optionType));
-        }
-    }
-    @Test
-    public void isAConfigurationOption() {
-        for (String optionType : Arrays.asList("PLAIN", "pLain", "plain", ReportFormat.PLAIN.name())) {
-            assertTrue("Must equal PLAIN, was " + optionType, ReportFormat.PLAIN.is(optionType));
-        }
-        assertFalse(ReportFormat.PLAIN.is(ReportFormat.XML.name()));
-    }
-}
diff --git a/0.12-release/apache-rat-core/src/test/java/org/apache/rat/config/SourceCodeManagementSystemsTest.java b/0.12-release/apache-rat-core/src/test/java/org/apache/rat/config/SourceCodeManagementSystemsTest.java
deleted file mode 100644
index 1b1edd2..0000000
--- a/0.12-release/apache-rat-core/src/test/java/org/apache/rat/config/SourceCodeManagementSystemsTest.java
+++ /dev/null
@@ -1,56 +0,0 @@
-package org.apache.rat.config;
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- *
- *   http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-import static org.junit.Assert.*;
-
-import static org.apache.rat.config.SourceCodeManagementSystems.*;
-
-import org.junit.Test;
-
-public class SourceCodeManagementSystemsTest {
-
-    @Test
-    public void testSubversionAndNumberOfSCMSystems() {
-        assertFalse("SVN does not have any external ignore files.", SUBVERSION.hasIgnoreFile());
-        
-        int hasIgnore = 0;
-        int hasNoIgnore = 0;
-        for(SourceCodeManagementSystems scm : values()) {
-            if(scm.hasIgnoreFile()) {
-                hasIgnore++;
-            } else {
-                hasNoIgnore++;
-            }
-        }
-        
-        assertEquals("Did you change the number of SCMs?", 4, hasIgnore);
-        assertEquals("Did you add a new SCM without ignoreFile?", 1, hasNoIgnore);
-        assertEquals("Amount of SCM has changed.", values().length, hasIgnore+hasNoIgnore);
-    }
-    
-    @Test
-    public void testPluginExcludeLists()  {
-        assertEquals(1, SUBVERSION.getExclusions().size());
-        assertEquals(2, GIT.getExclusions().size());
-        
-        assertEquals("Did you change the number of SCM systems?", 9, getPluginExclusions().size());
-        assertEquals("Did you change the number of SCM systems?", 5, values().length);
-    }
-
-}
diff --git a/0.12-release/apache-rat-core/src/test/java/org/apache/rat/document/MockDocument.java b/0.12-release/apache-rat-core/src/test/java/org/apache/rat/document/MockDocument.java
deleted file mode 100644
index d52ae6b..0000000
--- a/0.12-release/apache-rat-core/src/test/java/org/apache/rat/document/MockDocument.java
+++ /dev/null
@@ -1,68 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one   *
- * or more contributor license agreements.  See the NOTICE file *
- * distributed with this work for additional information        *
- * regarding copyright ownership.  The ASF licenses this file   *
- * to you under the Apache License, Version 2.0 (the            *
- * "License"); you may not use this file except in compliance   *
- * with the License.  You may obtain a copy of the License at   *
- *                                                              *
- *   http://www.apache.org/licenses/LICENSE-2.0                 *
- *                                                              *
- * Unless required by applicable law or agreed to in writing,   *
- * software distributed under the License is distributed on an  *
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY       *
- * KIND, either express or implied.  See the License for the    *
- * specific language governing permissions and limitations      *
- * under the License.                                           *
- */ 
-package org.apache.rat.document;
-
-import org.apache.rat.api.Document;
-import org.apache.rat.api.MetaData;
-
-import java.io.IOException;
-import java.io.InputStream;
-import java.io.Reader;
-
-public class MockDocument implements Document {
-
-    private final Reader reader;
-    private final String name;
-    private final MetaData metaData = new MetaData();
-
-    public MockDocument() {
-        this(null, "name");
-    }
-
-    public MockDocument(String name) {
-        this(null, name);
-    }
-    
-    public MockDocument(Reader reader, String name) {
-        super();
-        this.reader = reader;
-        this.name = name;
-    }
-
-    public Reader reader() throws IOException {
-        return reader;
-    }
-
-    public String getName() {
-        return name;
-    }
-
-    public boolean isComposite() {
-        return false;
-    }
-    
-    public MetaData getMetaData() {
-        return metaData;
-    }
-    
-
-    public InputStream inputStream() throws IOException {
-        throw new UnsupportedOperationException();
-    }
-}
diff --git a/0.12-release/apache-rat-core/src/test/java/org/apache/rat/document/MockDocumentAnalyser.java b/0.12-release/apache-rat-core/src/test/java/org/apache/rat/document/MockDocumentAnalyser.java
deleted file mode 100644
index 3d93e82..0000000
--- a/0.12-release/apache-rat-core/src/test/java/org/apache/rat/document/MockDocumentAnalyser.java
+++ /dev/null
@@ -1,34 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one   *
- * or more contributor license agreements.  See the NOTICE file *
- * distributed with this work for additional information        *
- * regarding copyright ownership.  The ASF licenses this file   *
- * to you under the Apache License, Version 2.0 (the            *
- * "License"); you may not use this file except in compliance   *
- * with the License.  You may obtain a copy of the License at   *
- *                                                              *
- *   http://www.apache.org/licenses/LICENSE-2.0                 *
- *                                                              *
- * Unless required by applicable law or agreed to in writing,   *
- * software distributed under the License is distributed on an  *
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY       *
- * KIND, either express or implied.  See the License for the    *
- * specific language governing permissions and limitations      *
- * under the License.                                           *
- */ 
-package org.apache.rat.document;
-
-import org.apache.rat.api.Document;
-
-import java.util.ArrayList;
-import java.util.List;
-
-public class MockDocumentAnalyser implements IDocumentAnalyser {
-
-    public List<Document> matches = new ArrayList<Document>();
-    
-    public void analyse(Document document) throws RatDocumentAnalysisException {
-        matches.add(document);
-    }
-
-}
diff --git a/0.12-release/apache-rat-core/src/test/java/org/apache/rat/document/MockLocation.java b/0.12-release/apache-rat-core/src/test/java/org/apache/rat/document/MockLocation.java
deleted file mode 100644
index d639223..0000000
--- a/0.12-release/apache-rat-core/src/test/java/org/apache/rat/document/MockLocation.java
+++ /dev/null
@@ -1,72 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one   *
- * or more contributor license agreements.  See the NOTICE file *
- * distributed with this work for additional information        *
- * regarding copyright ownership.  The ASF licenses this file   *
- * to you under the Apache License, Version 2.0 (the            *
- * "License"); you may not use this file except in compliance   *
- * with the License.  You may obtain a copy of the License at   *
- *                                                              *
- *   http://www.apache.org/licenses/LICENSE-2.0                 *
- *                                                              *
- * Unless required by applicable law or agreed to in writing,   *
- * software distributed under the License is distributed on an  *
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY       *
- * KIND, either express or implied.  See the License for the    *
- * specific language governing permissions and limitations      *
- * under the License.                                           *
- */ 
-package org.apache.rat.document;
-
-import java.io.IOException;
-import java.io.InputStream;
-import java.io.Reader;
-
-import org.apache.rat.api.Document;
-import org.apache.rat.api.MetaData;
-
-public class MockLocation implements Document {
-
-    public String name;
-    public String url;
-    private final MetaData metaData = new MetaData();
-    
-    public MockLocation() {
-        this("name", "url");
-    }
-    
-    public MockLocation(String name) {
-        this(name, "url");
-    }
-
-    public MockLocation(String name, String url) {
-        super();
-        this.name = name;
-        this.url = url;
-    }
-
-    public String getName() {
-        return name;
-    }
-
-    public String getURL() {
-        return url;
-    }
-
-    public boolean isComposite() {
-        return false;
-    }
-
-    public Reader reader() throws IOException {
-        throw new UnsupportedOperationException();
-    }
-
-    public MetaData getMetaData() {
-        return metaData;
-    }
-    
-
-    public InputStream inputStream() throws IOException {
-        throw new UnsupportedOperationException();
-    }
-}
diff --git a/0.12-release/apache-rat-core/src/test/java/org/apache/rat/document/ToNameTransformerTest.java b/0.12-release/apache-rat-core/src/test/java/org/apache/rat/document/ToNameTransformerTest.java
deleted file mode 100644
index a5aadb4..0000000
--- a/0.12-release/apache-rat-core/src/test/java/org/apache/rat/document/ToNameTransformerTest.java
+++ /dev/null
@@ -1,44 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one   *
- * or more contributor license agreements.  See the NOTICE file *
- * distributed with this work for additional information        *
- * regarding copyright ownership.  The ASF licenses this file   *
- * to you under the Apache License, Version 2.0 (the            *
- * "License"); you may not use this file except in compliance   *
- * with the License.  You may obtain a copy of the License at   *
- *                                                              *
- *   http://www.apache.org/licenses/LICENSE-2.0                 *
- *                                                              *
- * Unless required by applicable law or agreed to in writing,   *
- * software distributed under the License is distributed on an  *
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY       *
- * KIND, either express or implied.  See the License for the    *
- * specific language governing permissions and limitations      *
- * under the License.                                           *
- */ 
-package org.apache.rat.document;
-
-import org.junit.Test;
-
-import static org.junit.Assert.assertEquals;
-import static org.junit.Assert.assertNotNull;
-import static org.junit.Assert.assertNull;
-
-public class ToNameTransformerTest {
-
-    private ToNameTransformer transformer = new ToNameTransformer();
-    
-    @Test
-    public void transformLocation() {
-        MockLocation location = new MockLocation();
-        Object result = transformer.transform(location);
-        assertNotNull("Transform into name", result);
-        assertEquals("Transform into name", location.name, result);
-    }
-
-    @Test
-    public void transformNull() {
-        Object result = transformer.transform(null);
-        assertNull("Null transforms to null", result);
-    }
-}
diff --git a/0.12-release/apache-rat-core/src/test/java/org/apache/rat/document/impl/SingularFileDocumentTest.java b/0.12-release/apache-rat-core/src/test/java/org/apache/rat/document/impl/SingularFileDocumentTest.java
deleted file mode 100644
index b7ef80c..0000000
--- a/0.12-release/apache-rat-core/src/test/java/org/apache/rat/document/impl/SingularFileDocumentTest.java
+++ /dev/null
@@ -1,57 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one   *
- * or more contributor license agreements.  See the NOTICE file *
- * distributed with this work for additional information        *
- * regarding copyright ownership.  The ASF licenses this file   *
- * to you under the Apache License, Version 2.0 (the            *
- * "License"); you may not use this file except in compliance   *
- * with the License.  You may obtain a copy of the License at   *
- *                                                              *
- *   http://www.apache.org/licenses/LICENSE-2.0                 *
- *                                                              *
- * Unless required by applicable law or agreed to in writing,   *
- * software distributed under the License is distributed on an  *
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY       *
- * KIND, either express or implied.  See the License for the    *
- * specific language governing permissions and limitations      *
- * under the License.                                           *
- */ 
-package org.apache.rat.document.impl;
-
-import org.apache.rat.api.Document;
-import org.apache.rat.test.utils.Resources;
-import org.junit.Before;
-import org.junit.Test;
-
-import java.io.BufferedReader;
-import java.io.File;
-import java.io.Reader;
-
-import static org.junit.Assert.assertEquals;
-import static org.junit.Assert.assertNotNull;
-
-public class SingularFileDocumentTest {
-    private Document document;
-    private File file;
-    
-    @Before
-    public void setUp() throws Exception {
-        file = Resources.getResourceFile("elements/Source.java");
-        document = new MonolithicFileDocument(file);
-    }
-
-    @Test
-    public void reader() throws Exception {
-        Reader reader = document.reader();
-        assertNotNull("Reader should be returned", reader);
-        assertEquals("First file line expected", "package elements;", 
-                 new BufferedReader(reader).readLine());
-    }
-
-    @Test
-    public void getName() {
-        final String name = document.getName();
-        assertNotNull("Name is set", name);
-        assertEquals("Name is filename", DocumentImplUtils.toName(file), name);
-    }
-}
diff --git a/0.12-release/apache-rat-core/src/test/java/org/apache/rat/document/impl/guesser/ArchiveGuesserTest.java b/0.12-release/apache-rat-core/src/test/java/org/apache/rat/document/impl/guesser/ArchiveGuesserTest.java
deleted file mode 100644
index d54e7ed..0000000
--- a/0.12-release/apache-rat-core/src/test/java/org/apache/rat/document/impl/guesser/ArchiveGuesserTest.java
+++ /dev/null
@@ -1,66 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one   *
- * or more contributor license agreements.  See the NOTICE file *
- * distributed with this work for additional information        *
- * regarding copyright ownership.  The ASF licenses this file   *
- * to you under the Apache License, Version 2.0 (the            *
- * "License"); you may not use this file except in compliance   *
- * with the License.  You may obtain a copy of the License at   *
- *                                                              *
- *   http://www.apache.org/licenses/LICENSE-2.0                 *
- *                                                              *
- * Unless required by applicable law or agreed to in writing,   *
- * software distributed under the License is distributed on an  *
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY       *
- * KIND, either express or implied.  See the License for the    *
- * specific language governing permissions and limitations      *
- * under the License.                                           *
- */ 
-package org.apache.rat.document.impl.guesser;
-
-import org.apache.rat.document.MockDocument;
-import org.junit.Test;
-
-import static org.junit.Assert.assertTrue;
-
-public class ArchiveGuesserTest {
-
-    @Test
-    public void matches() {
-        assertTrue(ArchiveGuesser.isArchive(new MockDocument("42.jar")));
-        assertTrue(ArchiveGuesser.isArchive(new MockDocument("42.tar.gz")));
-        assertTrue(ArchiveGuesser.isArchive(new MockDocument("42.zip")));
-        assertTrue(ArchiveGuesser.isArchive(new MockDocument("42.tar")));
-        assertTrue(ArchiveGuesser.isArchive(new MockDocument("42.bz")));
-        assertTrue(ArchiveGuesser.isArchive(new MockDocument("42.bz2")));
-        assertTrue(ArchiveGuesser.isArchive(new MockDocument("42.odb")));
-        assertTrue(ArchiveGuesser.isArchive(new MockDocument("42.odf")));
-        assertTrue(ArchiveGuesser.isArchive(new MockDocument("42.odg")));
-        assertTrue(ArchiveGuesser.isArchive(new MockDocument("42.odp")));
-        assertTrue(ArchiveGuesser.isArchive(new MockDocument("42.ods")));
-        assertTrue(ArchiveGuesser.isArchive(new MockDocument("42.odt")));
-        assertTrue(ArchiveGuesser.isArchive(new MockDocument("42.sar")));
-        assertTrue(ArchiveGuesser.isArchive(new MockDocument("42.har")));
-        assertTrue(ArchiveGuesser.isArchive(new MockDocument("42.wsr")));
-    }
-    
-    @Test
-    public void isArchive() {
-        assertTrue(ArchiveGuesser.isArchive("42.jar"));
-        assertTrue(ArchiveGuesser.isArchive("42.tar.gz"));
-        assertTrue(ArchiveGuesser.isArchive("42.zip"));
-        assertTrue(ArchiveGuesser.isArchive("42.tar"));
-        assertTrue(ArchiveGuesser.isArchive("42.bz"));
-        assertTrue(ArchiveGuesser.isArchive("42.bz2"));
-        assertTrue(ArchiveGuesser.isArchive("42.odb"));
-        assertTrue(ArchiveGuesser.isArchive("42.odf"));
-        assertTrue(ArchiveGuesser.isArchive("42.odg"));
-        assertTrue(ArchiveGuesser.isArchive("42.odp"));
-        assertTrue(ArchiveGuesser.isArchive("42.ods"));
-        assertTrue(ArchiveGuesser.isArchive("42.odt"));
-        assertTrue(ArchiveGuesser.isArchive("42.sar"));
-        assertTrue(ArchiveGuesser.isArchive("42.har"));
-        assertTrue(ArchiveGuesser.isArchive("42.wsr"));
-    }
-
-}
diff --git a/0.12-release/apache-rat-core/src/test/java/org/apache/rat/document/impl/guesser/BinaryGuesserTest.java b/0.12-release/apache-rat-core/src/test/java/org/apache/rat/document/impl/guesser/BinaryGuesserTest.java
deleted file mode 100644
index a80c3fb..0000000
--- a/0.12-release/apache-rat-core/src/test/java/org/apache/rat/document/impl/guesser/BinaryGuesserTest.java
+++ /dev/null
@@ -1,143 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one   *
- * or more contributor license agreements.  See the NOTICE file *
- * distributed with this work for additional information        *
- * regarding copyright ownership.  The ASF licenses this file   *
- * to you under the Apache License, Version 2.0 (the            *
- * "License"); you may not use this file except in compliance   *
- * with the License.  You may obtain a copy of the License at   *
- *                                                              *
- *   http://www.apache.org/licenses/LICENSE-2.0                 *
- *                                                              *
- * Unless required by applicable law or agreed to in writing,   *
- * software distributed under the License is distributed on an  *
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY       *
- * KIND, either express or implied.  See the License for the    *
- * specific language governing permissions and limitations      *
- * under the License.                                           *
- */
-package org.apache.rat.document.impl.guesser;
-
-import org.apache.commons.io.IOUtils;
-import org.apache.rat.document.MockDocument;
-import org.apache.rat.document.impl.FileDocument;
-import org.apache.rat.test.utils.Resources;
-import org.junit.Test;
-
-import java.io.IOException;
-import java.io.Reader;
-import java.util.Arrays;
-import java.util.List;
-
-import static org.junit.Assert.assertEquals;
-import static org.junit.Assert.assertFalse;
-import static org.junit.Assert.assertTrue;
-
-public class BinaryGuesserTest {
-
-    private static final List<String> BINARY_FILES = Arrays.asList(//
-            "image.png",//
-            "image.pdf",//
-            "image.psd",//
-            "image.gif",//
-            "image.giff",//
-            "image.jpg",//
-            "image.jpeg",//
-            "image.exe",//
-            "Whatever.class",//
-            "data.dat",//
-            "libicuda.so.34",//
-            "my.truststore",//
-            //"foo.Java", //
-            //"manifest.Mf",//
-            "deprecatedtechnology.swf"
-    );
-
-    @Test
-    public void testMatches() {
-        for (String name : BINARY_FILES) {
-            assertTrue("'" + name + "' should be detected as a binary", BinaryGuesser.isBinary(new MockDocument(name)));
-        }
-
-    }
-
-    @Test
-    public void testIsBinary() {
-        for (String name : BINARY_FILES) {
-            assertTrue("'" + name + "' should be detected as a binary", BinaryGuesser.isBinary(name));
-        }
-    }
-
-    /**
-     * Used to swallow a MalformedInputException and return false
-     * because the encoding of the stream was different from the
-     * platform's default encoding.
-     *
-     * @throws Exception
-     * @see "RAT-81"
-     */
-    @Test
-    public void binaryWithMalformedInputRAT81() throws Exception {
-        FileDocument doc = new FileDocument(Resources.getResourceFile("/binaries/UTF16_with_signature.xml"));
-        Reader r = doc.reader(); // this will fail test if file is not readable
-        try {
-            char[] dummy = new char[100];
-            r.read(dummy);
-            // if we get here, the UTF-16 encoded file didn't throw
-            // any exception, try the UTF-8 encoded one
-            r.close();
-            r = null; // ensure we detect failure to read second file
-            doc = new FileDocument(Resources.getResourceFile("/binaries/UTF8_with_signature.xml"));
-            r = doc.reader();
-            r.read(dummy);
-            // still here?  can't test on this platform
-            System.err.println("Skipping testBinaryWithMalformedInput");
-        } catch (IOException e) {
-            if (r != null) {
-                IOUtils.closeQuietly(r);
-            } else {
-                throw e; // could not open the second file
-            }
-            r = null;
-            assertTrue("Expected binary for " + doc.getName(), BinaryGuesser.isBinary(doc));
-        } finally {
-            IOUtils.closeQuietly(r);
-        }
-    }
-
-    @Test
-    public void realBinaryContent() throws IOException {
-        // This test is not accurate on all platforms
-        final String encoding = System.getProperty("file.encoding");
-        final boolean isBinary = BinaryGuesser.isBinary(new FileDocument(Resources.getResourceFile("/binaries/Image-png.not")));
-        if (encoding.startsWith("ANSI")) {
-            assertTrue(isBinary);
-        } else {
-            if (isBinary) {
-                System.out.println("BinaryGuesserTest.realBinaryContent() succeeded when using encoding " + encoding);
-            } else {
-                System.err.println("BinaryGuesserTest.realBinaryContent() failed when using encoding " + encoding);
-            }
-        }
-    }
-
-    @Test
-    public void textualContent() throws IOException {
-        assertFalse(BinaryGuesser.isBinary(new FileDocument(Resources.getResourceFile("/elements/Text.txt"))));
-    }
-
-    @Test
-    public void emptyFile() throws IOException {
-        assertFalse(BinaryGuesser.isBinary(new FileDocument(Resources.getResourceFile("/elements/sub/Empty.txt"))));
-    }
-
-    @Test
-    public void testFileEncodingCanBeSetAndHasFallbackInCaseOfErrors() {
-        System.setProperty(BinaryGuesser.FILE_ENCODING, "shouldThrowAnExceptionBecauseNotFound");
-        assertEquals("UTF-8", BinaryGuesser.getFileEncodingOrUTF8AsFallback().displayName());
-
-        final String usAscii = "US-ASCII";
-        System.setProperty(BinaryGuesser.FILE_ENCODING, usAscii);
-        assertEquals(usAscii, BinaryGuesser.getFileEncodingOrUTF8AsFallback().displayName());
-    }
-}
diff --git a/0.12-release/apache-rat-core/src/test/java/org/apache/rat/document/impl/guesser/GuessUtilsTest.java b/0.12-release/apache-rat-core/src/test/java/org/apache/rat/document/impl/guesser/GuessUtilsTest.java
deleted file mode 100644
index faf4a39..0000000
--- a/0.12-release/apache-rat-core/src/test/java/org/apache/rat/document/impl/guesser/GuessUtilsTest.java
+++ /dev/null
@@ -1,36 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one   *
- * or more contributor license agreements.  See the NOTICE file *
- * distributed with this work for additional information        *
- * regarding copyright ownership.  The ASF licenses this file   *
- * to you under the Apache License, Version 2.0 (the            *
- * "License"); you may not use this file except in compliance   *
- * with the License.  You may obtain a copy of the License at   *
- *                                                              *
- *   http://www.apache.org/licenses/LICENSE-2.0                 *
- *                                                              *
- * Unless required by applicable law or agreed to in writing,   *
- * software distributed under the License is distributed on an  *
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY       *
- * KIND, either express or implied.  See the License for the    *
- * specific language governing permissions and limitations      *
- * under the License.                                           *
- */ 
-package org.apache.rat.document.impl.guesser;
-
-import org.junit.Test;
-
-import static org.junit.Assert.assertEquals;
-
-public class GuessUtilsTest {
-
-    @Test
-    public void normalise() throws Exception {
-        assertEquals("LICENSE", GuessUtils.normalise("license"));
-        assertEquals("LICENSE.TXT", GuessUtils.normalise("license.txt"));
-        assertEquals("LICENSE.TXT", GuessUtils.normalise("some/path/license.txt"));
-        assertEquals("LICENSE.TXT", GuessUtils.normalise("/license.txt"));
-        assertEquals("LICENSE.TXT", GuessUtils.normalise("some\\path\\license.txt"));
-        assertEquals("", GuessUtils.normalise("/"));
-    }
-}
diff --git a/0.12-release/apache-rat-core/src/test/java/org/apache/rat/document/impl/guesser/NoteGuesserTest.java b/0.12-release/apache-rat-core/src/test/java/org/apache/rat/document/impl/guesser/NoteGuesserTest.java
deleted file mode 100644
index 509782a..0000000
--- a/0.12-release/apache-rat-core/src/test/java/org/apache/rat/document/impl/guesser/NoteGuesserTest.java
+++ /dev/null
@@ -1,67 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one   *
- * or more contributor license agreements.  See the NOTICE file *
- * distributed with this work for additional information        *
- * regarding copyright ownership.  The ASF licenses this file   *
- * to you under the Apache License, Version 2.0 (the            *
- * "License"); you may not use this file except in compliance   *
- * with the License.  You may obtain a copy of the License at   *
- *                                                              *
- *   http://www.apache.org/licenses/LICENSE-2.0                 *
- *                                                              *
- * Unless required by applicable law or agreed to in writing,   *
- * software distributed under the License is distributed on an  *
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY       *
- * KIND, either express or implied.  See the License for the    *
- * specific language governing permissions and limitations      *
- * under the License.                                           *
- */ 
-package org.apache.rat.document.impl.guesser;
-
-import org.apache.rat.document.MockDocument;
-import org.junit.Test;
-
-import static org.junit.Assert.assertTrue;
-
-public class NoteGuesserTest {
-
-    @Test
-    public void testMatches() {
-        assertTrue(NoteGuesser.isNote(new MockDocument("DEPENDENCIES")));
-        assertTrue(NoteGuesser.isNote(new MockDocument("LICENSE")));
-        assertTrue(NoteGuesser.isNote(new MockDocument("LICENSE.txt")));
-        assertTrue(NoteGuesser.isNote(new MockDocument("NOTICE")));
-        assertTrue(NoteGuesser.isNote(new MockDocument("NOTICE.txt")));
-        assertTrue(NoteGuesser.isNote(new MockDocument("README")));
-        assertTrue(NoteGuesser.isNote(new MockDocument("README.txt")));
-    }
-
-    @Test
-    public void isNote() {
-        assertTrue(NoteGuesser.isNote("DEPENDENCIES"));
-        assertTrue(NoteGuesser.isNote("LICENSE"));
-        assertTrue(NoteGuesser.isNote("LICENSE.txt"));
-        assertTrue(NoteGuesser.isNote("NOTICE"));
-        assertTrue(NoteGuesser.isNote("NOTICE.txt"));
-        assertTrue(NoteGuesser.isNote("README"));
-        assertTrue(NoteGuesser.isNote("README.txt"));
-    }
-    
-    @Test
-    public void isNoteWithPath() {
-        assertTrue(NoteGuesser.isNote("src/test/DEPENDENCIES"));
-        assertTrue(NoteGuesser.isNote("src/test/LICENSE"));
-        assertTrue(NoteGuesser.isNote("src/test/LICENSE.txt"));
-        assertTrue(NoteGuesser.isNote("src/test/NOTICE"));
-        assertTrue(NoteGuesser.isNote("src/test/NOTICE.txt"));
-        assertTrue(NoteGuesser.isNote("src/test/README"));
-        assertTrue(NoteGuesser.isNote("src/test/README.txt"));
-        assertTrue(NoteGuesser.isNote("src\\test\\DEPENDENCIES"));
-        assertTrue(NoteGuesser.isNote("src\\test\\LICENSE"));
-        assertTrue(NoteGuesser.isNote("src\\test\\LICENSE.txt"));
-        assertTrue(NoteGuesser.isNote("src\\test\\NOTICE"));
-        assertTrue(NoteGuesser.isNote("src\\test\\NOTICE.txt"));
-        assertTrue(NoteGuesser.isNote("src\\test\\README"));
-        assertTrue(NoteGuesser.isNote("src\\test\\README.txt"));
-    }
-}
diff --git a/0.12-release/apache-rat-core/src/test/java/org/apache/rat/document/impl/util/DocumentAnalyserMultiplexerTest.java b/0.12-release/apache-rat-core/src/test/java/org/apache/rat/document/impl/util/DocumentAnalyserMultiplexerTest.java
deleted file mode 100644
index c03df15..0000000
--- a/0.12-release/apache-rat-core/src/test/java/org/apache/rat/document/impl/util/DocumentAnalyserMultiplexerTest.java
+++ /dev/null
@@ -1,63 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one   *
- * or more contributor license agreements.  See the NOTICE file *
- * distributed with this work for additional information        *
- * regarding copyright ownership.  The ASF licenses this file   *
- * to you under the Apache License, Version 2.0 (the            *
- * "License"); you may not use this file except in compliance   *
- * with the License.  You may obtain a copy of the License at   *
- *                                                              *
- *   http://www.apache.org/licenses/LICENSE-2.0                 *
- *                                                              *
- * Unless required by applicable law or agreed to in writing,   *
- * software distributed under the License is distributed on an  *
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY       *
- * KIND, either express or implied.  See the License for the    *
- * specific language governing permissions and limitations      *
- * under the License.                                           *
- */ 
-package org.apache.rat.document.impl.util;
-
-import org.apache.rat.document.IDocumentAnalyser;
-import org.apache.rat.document.MockDocument;
-import org.apache.rat.document.MockDocumentAnalyser;
-import junit.framework.TestCase;
-
-public class DocumentAnalyserMultiplexerTest extends TestCase {
-
-    private DocumentAnalyserMultiplexer multiplexer;
-    private IDocumentAnalyser[] analysers;
-    private MockDocument document;
-    
-    @Override
-    protected void setUp() throws Exception {
-        super.setUp();
-        IDocumentAnalyser[] analysers = {
-                new MockDocumentAnalyser(), 
-                new MockDocumentAnalyser(),
-                new MockDocumentAnalyser()
-        };
-        this.analysers = analysers;
-        document = new MockDocument();
-        multiplexer = new DocumentAnalyserMultiplexer(analysers);
-    }
-
-    @Override
-    protected void tearDown() throws Exception {
-        super.tearDown();
-    }
-
-    public void testAnalyse() throws Exception {
-        multiplexer.analyse(document);
-        MockDocumentAnalyser analyser =  (MockDocumentAnalyser) (analysers[0]);
-        assertEquals("Call made to analyser", 1, analyser.matches.size());
-        assertEquals("Call made to analyser", document, analyser.matches.get(0));
-        analyser =  (MockDocumentAnalyser) (analysers[1]);
-        assertEquals("Call made to analyser", 1, analyser.matches.size());
-        assertEquals("Call made to analyser", document, analyser.matches.get(0));
-        analyser =  (MockDocumentAnalyser) (analysers[2]);
-        assertEquals("Call made to analyser", 1, analyser.matches.size());
-        assertEquals("Call made to analyser", document, analyser.matches.get(0));
-    }
-
-}
diff --git a/0.12-release/apache-rat-core/src/test/java/org/apache/rat/header/ArrayCharFilterTest.java b/0.12-release/apache-rat-core/src/test/java/org/apache/rat/header/ArrayCharFilterTest.java
deleted file mode 100644
index adddf1a..0000000
--- a/0.12-release/apache-rat-core/src/test/java/org/apache/rat/header/ArrayCharFilterTest.java
+++ /dev/null
@@ -1,47 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one   *
- * or more contributor license agreements.  See the NOTICE file *
- * distributed with this work for additional information        *
- * regarding copyright ownership.  The ASF licenses this file   *
- * to you under the Apache License, Version 2.0 (the            *
- * "License"); you may not use this file except in compliance   *
- * with the License.  You may obtain a copy of the License at   *
- *                                                              *
- *   http://www.apache.org/licenses/LICENSE-2.0                 *
- *                                                              *
- * Unless required by applicable law or agreed to in writing,   *
- * software distributed under the License is distributed on an  *
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY       *
- * KIND, either express or implied.  See the License for the    *
- * specific language governing permissions and limitations      *
- * under the License.                                           *
- */ 
-package org.apache.rat.header;
-
-import org.junit.Before;
-import org.junit.Test;
-
-import static org.junit.Assert.assertFalse;
-import static org.junit.Assert.assertTrue;
-
-public class ArrayCharFilterTest {
-
-    private static final char[] filtered = {'d', 'o', 'a'};
-    private ArrayCharFilter filter;
-    
-    @Before
-    public void setUp() throws Exception {
-        filter = new ArrayCharFilter(filtered);
-    }
-
-    @Test
-    public void isFilteredOut() {
-        assertTrue(filter.isFilteredOut('a'));
-        assertFalse(filter.isFilteredOut('b'));
-        assertFalse(filter.isFilteredOut('c'));
-        assertTrue(filter.isFilteredOut('d'));
-        assertFalse(filter.isFilteredOut('e'));
-        assertFalse(filter.isFilteredOut('f'));
-    }
-
-}
diff --git a/0.12-release/apache-rat-core/src/test/java/org/apache/rat/header/FilteringSequenceFactoryTest.java b/0.12-release/apache-rat-core/src/test/java/org/apache/rat/header/FilteringSequenceFactoryTest.java
deleted file mode 100644
index c98db84..0000000
--- a/0.12-release/apache-rat-core/src/test/java/org/apache/rat/header/FilteringSequenceFactoryTest.java
+++ /dev/null
@@ -1,81 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one   *
- * or more contributor license agreements.  See the NOTICE file *
- * distributed with this work for additional information        *
- * regarding copyright ownership.  The ASF licenses this file   *
- * to you under the Apache License, Version 2.0 (the            *
- * "License"); you may not use this file except in compliance   *
- * with the License.  You may obtain a copy of the License at   *
- *                                                              *
- *   http://www.apache.org/licenses/LICENSE-2.0                 *
- *                                                              *
- * Unless required by applicable law or agreed to in writing,   *
- * software distributed under the License is distributed on an  *
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY       *
- * KIND, either express or implied.  See the License for the    *
- * specific language governing permissions and limitations      *
- * under the License.                                           *
- */ 
-package org.apache.rat.header;
-
-import org.junit.Before;
-import org.junit.Test;
-
-import java.io.StringReader;
-
-import static org.junit.Assert.assertEquals;
-import static org.junit.Assert.assertNotNull;
-
-public class FilteringSequenceFactoryTest {
-
-    private int capacity;
-    private FilteringSequenceFactory factory;
-    private SimpleCharFilter filter;
-
-    @Before
-    public void setUp() throws Exception {
-        capacity = 50;
-        filter = new SimpleCharFilter();
-        factory = new FilteringSequenceFactory(capacity, filter);
-    }
-
-    @Test
-    public void noFiltering() throws Exception {
-        final String INPUT = "Whatever";
-        StringReader reader = new StringReader(INPUT);
-        CharSequence result = factory.filter(reader);
-        assertNotNull(result);
-        String output = result.toString();
-        assertEquals("No filtering so input equals output.", INPUT, output);
-        reader = new StringReader(INPUT);
-        result = factory.filter(reader);
-        assertNotNull(result);
-        output = result.toString();
-        assertEquals("No filtering so input equals output. Independent of previous input", INPUT, output);
-    }
-
-    @Test
-    public void filtering() throws Exception {
-        final String INPUT = "Whatever";
-        StringReader reader = new StringReader(INPUT);
-        CharSequence result = factory.filter(reader);
-        assertNotNull(result);
-        String output = result.toString();
-        assertEquals("No filtering so input equals output.", INPUT, output);
-        filter.filterOut = true;
-        reader = new StringReader(INPUT);
-        result = factory.filter(reader);
-        assertNotNull(result);
-        assertEquals("All filtered output is empty. Independent of previous input", 0, result.length());
-    }
-    
-    @Test
-    public void overCapacity() throws Exception {
-        final String INPUT = "WhateverWhateverWhateverWhateverWhateverWhateverWhateverWhateverWhateverWhatever";
-        StringReader reader = new StringReader(INPUT);
-        CharSequence result = factory.filter(reader);
-        assertNotNull(result);
-        String output = result.toString();
-        assertEquals("No filtering so input equals output.", INPUT.substring(0, capacity), output);
-    }
-}
diff --git a/0.12-release/apache-rat-core/src/test/java/org/apache/rat/header/HeaderMatcherTest.java b/0.12-release/apache-rat-core/src/test/java/org/apache/rat/header/HeaderMatcherTest.java
deleted file mode 100644
index 7bfd068..0000000
--- a/0.12-release/apache-rat-core/src/test/java/org/apache/rat/header/HeaderMatcherTest.java
+++ /dev/null
@@ -1,99 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one   *
- * or more contributor license agreements.  See the NOTICE file *
- * distributed with this work for additional information        *
- * regarding copyright ownership.  The ASF licenses this file   *
- * to you under the Apache License, Version 2.0 (the            *
- * "License"); you may not use this file except in compliance   *
- * with the License.  You may obtain a copy of the License at   *
- *                                                              *
- *   http://www.apache.org/licenses/LICENSE-2.0                 *
- *                                                              *
- * Unless required by applicable law or agreed to in writing,   *
- * software distributed under the License is distributed on an  *
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY       *
- * KIND, either express or implied.  See the License for the    *
- * specific language governing permissions and limitations      *
- * under the License.                                           *
- */ 
-package org.apache.rat.header;
-
-import org.junit.Before;
-import org.junit.Test;
-
-import java.io.StringReader;
-import java.util.regex.Pattern;
-
-import static org.junit.Assert.assertEquals;
-import static org.junit.Assert.assertFalse;
-import static org.junit.Assert.assertTrue;
-
-public class HeaderMatcherTest {
-
-    private int capacity;
-    private HeaderMatcher matcher;
-    private SimpleCharFilter filter;
-
-    @Before
-    public void setUp() throws Exception {
-        capacity = 20;
-        filter = new SimpleCharFilter();
-        matcher = new HeaderMatcher(filter, 20);
-    }
-
-    @Test
-    public void simpleMatches() throws Exception {
-        Pattern hatPattern = Pattern.compile("(.*)hat(.*)");
-        Pattern headPattern = Pattern.compile("head....");
-        StringReader reader = new StringReader("The mad hatter");
-        matcher.read(reader);
-        assertTrue(matcher.matches(hatPattern));
-        assertFalse(matcher.matches(headPattern));
-        reader = new StringReader("headache");
-        matcher.read(reader);
-        assertFalse(matcher.matches(hatPattern));
-        assertTrue(matcher.matches(headPattern));   
-    }
-
-    @Test
-    public void filteredMatches() throws Exception {
-        Pattern capPattern = Pattern.compile("cap(.*)");
-        StringReader reader = new StringReader("capped");
-        matcher.read(reader);
-        assertTrue(matcher.matches(capPattern));
-        filter.filterOut = true;
-        reader = new StringReader("capped");
-        matcher.read(reader);
-        assertFalse(matcher.matches(capPattern));
-    }
-
-    @Test
-    public void noLines() throws Exception {
-        StringReader reader = new StringReader("None");
-        matcher.read(reader);
-        assertEquals("No lines read", 0, matcher.lines());
-    }
-    
-    @Test
-    public void lines() throws Exception {
-        StringReader reader = new StringReader("One\n");
-        matcher.read(reader);
-        assertEquals("One line read", 1, matcher.lines());
-        reader = new StringReader("One\nTwo");
-        matcher.read(reader);
-        assertEquals("One line read", 1, matcher.lines());
-        reader = new StringReader("One\nTwo\nThree");
-        matcher.read(reader);
-        assertEquals("Two lines read", 2, matcher.lines());
-        reader = new StringReader("One\nTwo\nThree\n");
-        matcher.read(reader);
-        assertEquals("Three lines read", 3, matcher.lines());
-    }
-    
-    @Test
-    public void tooManyLines() throws Exception {
-        StringReader reader = new StringReader("WhateverWhateverWhateverWhateverWhateverWhateverWhateverWhatever");
-        matcher.read(reader);
-        assertEquals("Too many lines read", -1, matcher.lines());
-    }
-}
diff --git a/0.12-release/apache-rat-core/src/test/java/org/apache/rat/header/HeaderMatcherWithBeansTest.java b/0.12-release/apache-rat-core/src/test/java/org/apache/rat/header/HeaderMatcherWithBeansTest.java
deleted file mode 100644
index ce5e9db..0000000
--- a/0.12-release/apache-rat-core/src/test/java/org/apache/rat/header/HeaderMatcherWithBeansTest.java
+++ /dev/null
@@ -1,80 +0,0 @@
-
-/*
- * Licensed to the Apache Software Foundation (ASF) under one   *
- * or more contributor license agreements.  See the NOTICE file *
- * distributed with this work for additional information        *
- * regarding copyright ownership.  The ASF licenses this file   *
- * to you under the Apache License, Version 2.0 (the            *
- * "License"); you may not use this file except in compliance   *
- * with the License.  You may obtain a copy of the License at   *
- *                                                              *
- *   http://www.apache.org/licenses/LICENSE-2.0                 *
- *                                                              *
- * Unless required by applicable law or agreed to in writing,   *
- * software distributed under the License is distributed on an  *
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY       *
- * KIND, either express or implied.  See the License for the    *
- * specific language governing permissions and limitations      *
- * under the License.                                           *
- */ 
-package org.apache.rat.header;
-
-import org.junit.Before;
-import org.junit.Test;
-
-import java.io.StringReader;
-import java.util.regex.Pattern;
-
-import static org.junit.Assert.assertFalse;
-import static org.junit.Assert.assertTrue;
-
-public class HeaderMatcherWithBeansTest {
-
-    private int capacity;
-    private HeaderMatcher matcher;
-    private SimpleCharFilter filter;
-    private HeaderBean[] beans;
-
-    @Before
-    public void setUp() throws Exception {
-        HeaderBean[] beans = {
-                new HeaderBean(),
-                new HeaderBean(),
-                new HeaderBean()
-            };
-        this.beans = beans;
-        capacity = 20;
-        filter = new SimpleCharFilter();
-        matcher = new HeaderMatcher(filter, 20, beans);
-    }
-
-    @Test
-    public void nulls() throws Exception {
-        beans[0].setMatch(false);
-        beans[1].setMatch(true);
-        beans[2].setMatch(false);
-        StringReader reader = new StringReader("Whatever");
-        matcher.read(reader);   
-        assertFalse("State preserved", beans[0].isMatch());
-        assertTrue("State preserved", beans[1].isMatch());
-        assertFalse("State preserved", beans[2].isMatch());
-        beans[0].setMatch(true);
-        beans[1].setMatch(false);
-        beans[2].setMatch(true);
-        assertTrue("State preserved", beans[0].isMatch());
-        assertFalse("State preserved", beans[1].isMatch());
-        assertTrue("State preserved", beans[2].isMatch());
-    }
-
-    @Test
-    public void matches() throws Exception {
-        beans[0].setHeaderPattern(Pattern.compile("What(.*)"));
-        beans[1].setHeaderPattern(Pattern.compile("(.*)ever"));
-        beans[2].setHeaderPattern(Pattern.compile("What"));
-        StringReader reader = new StringReader("Whatever");
-        matcher.read(reader);   
-        assertTrue("Match header pattern", beans[0].isMatch());
-        assertTrue("Match header pattern", beans[1].isMatch());
-        assertFalse("Match header pattern", beans[2].isMatch());
-    }
-}
diff --git a/0.12-release/apache-rat-core/src/test/java/org/apache/rat/header/SimpleCharFilter.java b/0.12-release/apache-rat-core/src/test/java/org/apache/rat/header/SimpleCharFilter.java
deleted file mode 100644
index cf44004..0000000
--- a/0.12-release/apache-rat-core/src/test/java/org/apache/rat/header/SimpleCharFilter.java
+++ /dev/null
@@ -1,31 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one   *
- * or more contributor license agreements.  See the NOTICE file *
- * distributed with this work for additional information        *
- * regarding copyright ownership.  The ASF licenses this file   *
- * to you under the Apache License, Version 2.0 (the            *
- * "License"); you may not use this file except in compliance   *
- * with the License.  You may obtain a copy of the License at   *
- *                                                              *
- *   http://www.apache.org/licenses/LICENSE-2.0                 *
- *                                                              *
- * Unless required by applicable law or agreed to in writing,   *
- * software distributed under the License is distributed on an  *
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY       *
- * KIND, either express or implied.  See the License for the    *
- * specific language governing permissions and limitations      *
- * under the License.                                           *
- */ 
-package org.apache.rat.header;
-
-public class SimpleCharFilter implements CharFilter {
-
-    public boolean filterOut = false;
-    
-    public SimpleCharFilter() {}
-
-    public boolean isFilteredOut(char character) {
-        return filterOut;
-    }
-
-}
diff --git a/0.12-release/apache-rat-core/src/test/java/org/apache/rat/policy/DefaultPolicyTest.java b/0.12-release/apache-rat-core/src/test/java/org/apache/rat/policy/DefaultPolicyTest.java
deleted file mode 100644
index ae59f66..0000000
--- a/0.12-release/apache-rat-core/src/test/java/org/apache/rat/policy/DefaultPolicyTest.java
+++ /dev/null
@@ -1,152 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one   *
- * or more contributor license agreements.  See the NOTICE file *
- * distributed with this work for additional information        *
- * regarding copyright ownership.  The ASF licenses this file   *
- * to you under the Apache License, Version 2.0 (the            *
- * "License"); you may not use this file except in compliance   *
- * with the License.  You may obtain a copy of the License at   *
- *                                                              *
- *   http://www.apache.org/licenses/LICENSE-2.0                 *
- *                                                              *
- * Unless required by applicable law or agreed to in writing,   *
- * software distributed under the License is distributed on an  *
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY       *
- * KIND, either express or implied.  See the License for the    *
- * specific language governing permissions and limitations      *
- * under the License.                                           *
- */
-package org.apache.rat.policy;
-
-import org.apache.rat.Defaults;
-import org.apache.rat.api.Document;
-import org.apache.rat.api.MetaData;
-import org.apache.rat.document.MockLocation;
-import org.apache.rat.license.ILicenseFamily;
-import org.junit.Before;
-import org.junit.Test;
-
-import java.util.ArrayList;
-
-import static org.junit.Assert.assertEquals;
-
-
-public class DefaultPolicyTest {
-    private static final int NUMBER_OF_DEFAULT_ACCEPTED_LICENSES = Defaults.DEFAULT_LICENSE_FAMILIES.size();
-
-    private static final ILicenseFamily JUST_A_TEST_LIC_FAMILY = new ILicenseFamily() {
-        public String getFamilyName() {
-            return "justATest";
-        }
-    };
-
-    private Document subject;
-    private DefaultPolicy policy;
-
-    @Before
-    public void setUp() throws Exception {
-        policy = new DefaultPolicy();
-        subject = new MockLocation("subject");
-    }
-
-    @SuppressWarnings("boxing") // OK in test code
-    private void assertApproval(boolean pApproved) {
-        assertEquals(pApproved, MetaData.RAT_APPROVED_LICENSE_VALUE_TRUE.equals(subject.getMetaData().value(MetaData.RAT_URL_APPROVED_LICENSE)));
-    }
-
-    @Test
-    public void testALFamily() throws Exception {
-        assertEquals(NUMBER_OF_DEFAULT_ACCEPTED_LICENSES, policy.getApprovedLicenseNames().size());
-        subject.getMetaData().set(MetaData.RAT_LICENSE_FAMILY_NAME_DATUM_APACHE_LICENSE_VERSION_2_0);
-        policy.analyse(subject);
-        assertApproval(true);
-    }
-
-    @Test
-    public void testOASISFamily() throws Exception {
-        assertEquals(NUMBER_OF_DEFAULT_ACCEPTED_LICENSES, policy.getApprovedLicenseNames().size());
-        subject.getMetaData().set(MetaData.RAT_LICENSE_FAMILY_NAME_DATUM_OASIS_OPEN_LICENSE);
-        policy.analyse(subject);
-        assertApproval(true);
-    }
-
-    @Test
-    public void testW3CFamily() throws Exception {
-        assertEquals(NUMBER_OF_DEFAULT_ACCEPTED_LICENSES, policy.getApprovedLicenseNames().size());
-        subject.getMetaData().set(MetaData.RAT_LICENSE_FAMILY_NAME_DATUM_W3C_SOFTWARE_COPYRIGHT);
-        policy.analyse(subject);
-        assertApproval(true);
-    }
-
-    @Test
-    public void testW3CDocFamily() throws Exception {
-        assertEquals(NUMBER_OF_DEFAULT_ACCEPTED_LICENSES, policy.getApprovedLicenseNames().size());
-        subject.getMetaData().set(MetaData.RAT_LICENSE_FAMILY_NAME_DATUM_W3C_DOCUMENT_COPYRIGHT);
-        policy.analyse(subject);
-        assertApproval(true);
-    }
-
-    @Test
-    public void testModifiedBSDFamily() throws Exception {
-        assertEquals(NUMBER_OF_DEFAULT_ACCEPTED_LICENSES, policy.getApprovedLicenseNames().size());
-        subject.getMetaData().set(MetaData.RAT_LICENSE_FAMILY_NAME_DATUM_MODIFIED_BSD_LICENSE);
-        policy.analyse(subject);
-        assertApproval(true);
-    }
-
-    @Test
-    public void testMITFamily() throws Exception {
-        assertEquals(NUMBER_OF_DEFAULT_ACCEPTED_LICENSES, policy.getApprovedLicenseNames().size());
-        subject.getMetaData().set(MetaData.RAT_LICENSE_FAMILY_NAME_DATUM_MIT);
-        policy.analyse(subject);
-        assertApproval(true);
-    }
-
-    @Test
-    public void testCDDL1Family() throws Exception {
-        assertEquals(NUMBER_OF_DEFAULT_ACCEPTED_LICENSES, policy.getApprovedLicenseNames().size());
-        subject.getMetaData().set(MetaData.RAT_LICENSE_FAMILY_NAME_DATUM_CDDL1);
-        policy.analyse(subject);
-        assertApproval(true);
-    }
-
-    @Test
-    public void testUnknownFamily() throws Exception {
-        assertEquals(NUMBER_OF_DEFAULT_ACCEPTED_LICENSES, policy.getApprovedLicenseNames().size());
-        subject.getMetaData().set(MetaData.RAT_LICENSE_FAMILY_NAME_DATUM_UNKNOWN);
-        policy.analyse(subject);
-        assertApproval(false);
-    }
-
-    @Test
-    public void testNullAsMarkerOfDefaults() {
-        // with defaults
-        for (DefaultPolicy policy : new DefaultPolicy[]{//
-                new DefaultPolicy(), //
-                new DefaultPolicy(new ArrayList<String>(0), true),//
-                new DefaultPolicy(new ILicenseFamily[]{}, true),
-        }) {
-            assertEquals("Did you add new license defaults?", NUMBER_OF_DEFAULT_ACCEPTED_LICENSES, policy.getApprovedLicenseNames().size());
-        }
-
-        // without defaults and no additions == 0
-        for (DefaultPolicy policy : new DefaultPolicy[]{//
-                new DefaultPolicy(new ArrayList<String>(0), false),//
-                new DefaultPolicy(new ILicenseFamily[]{}, false),
-        }) {
-            assertEquals(0, policy.getApprovedLicenseNames().size());
-        }
-    }
-
-    @Test
-    public void testAddNewApprovedLicenseAndDefaults() {
-        assertEquals("justATest", new DefaultPolicy(new ILicenseFamily[]{JUST_A_TEST_LIC_FAMILY}, false).getApprovedLicenseNames().get(0));
-        assertEquals("Did not properly merge approved licenses with default", 1, new DefaultPolicy(new ILicenseFamily[]{JUST_A_TEST_LIC_FAMILY}, false).getApprovedLicenseNames().size());
-    }
-
-    @Test
-    public void testAddNewApprovedLicenseNoDefaults() {
-        assertEquals("justATest", new DefaultPolicy(new ILicenseFamily[]{JUST_A_TEST_LIC_FAMILY}, false).getApprovedLicenseNames().get(0));
-        assertEquals("Did not properly merge approved licenses with default", NUMBER_OF_DEFAULT_ACCEPTED_LICENSES + 1, new DefaultPolicy(new ILicenseFamily[]{JUST_A_TEST_LIC_FAMILY}, true).getApprovedLicenseNames().size());
-    }
-}
diff --git a/0.12-release/apache-rat-core/src/test/java/org/apache/rat/report/claim/impl/xml/MockClaimReporter.java b/0.12-release/apache-rat-core/src/test/java/org/apache/rat/report/claim/impl/xml/MockClaimReporter.java
deleted file mode 100644
index 009e727..0000000
--- a/0.12-release/apache-rat-core/src/test/java/org/apache/rat/report/claim/impl/xml/MockClaimReporter.java
+++ /dev/null
@@ -1,24 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one   *
- * or more contributor license agreements.  See the NOTICE file *
- * distributed with this work for additional information        *
- * regarding copyright ownership.  The ASF licenses this file   *
- * to you under the Apache License, Version 2.0 (the            *
- * "License"); you may not use this file except in compliance   *
- * with the License.  You may obtain a copy of the License at   *
- *                                                              *
- *   http://www.apache.org/licenses/LICENSE-2.0                 *
- *                                                              *
- * Unless required by applicable law or agreed to in writing,   *
- * software distributed under the License is distributed on an  *
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY       *
- * KIND, either express or implied.  See the License for the    *
- * specific language governing permissions and limitations      *
- * under the License.                                           *
- */ 
-package org.apache.rat.report.claim.impl.xml;
-
-import org.apache.rat.report.AbstractReport;
-
-public class MockClaimReporter extends AbstractReport {
-}
diff --git a/0.12-release/apache-rat-core/src/test/java/org/apache/rat/report/xml/MockXmlWriter.java b/0.12-release/apache-rat-core/src/test/java/org/apache/rat/report/xml/MockXmlWriter.java
deleted file mode 100644
index ec08988..0000000
--- a/0.12-release/apache-rat-core/src/test/java/org/apache/rat/report/xml/MockXmlWriter.java
+++ /dev/null
@@ -1,122 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one   *
- * or more contributor license agreements.  See the NOTICE file *
- * distributed with this work for additional information        *
- * regarding copyright ownership.  The ASF licenses this file   *
- * to you under the Apache License, Version 2.0 (the            *
- * "License"); you may not use this file except in compliance   *
- * with the License.  You may obtain a copy of the License at   *
- *                                                              *
- *   http://www.apache.org/licenses/LICENSE-2.0                 *
- *                                                              *
- * Unless required by applicable law or agreed to in writing,   *
- * software distributed under the License is distributed on an  *
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY       *
- * KIND, either express or implied.  See the License for the    *
- * specific language governing permissions and limitations      *
- * under the License.                                           *
- */ 
-package org.apache.rat.report.xml;
-
-import org.apache.rat.report.xml.writer.IXmlWriter;
-
-import java.io.IOException;
-import java.util.ArrayList;
-import java.util.List;
-
-public class MockXmlWriter implements IXmlWriter {
-
-    public final List<Object> calls = new ArrayList<Object>();
-    
-    public IXmlWriter attribute(CharSequence name, CharSequence value)
-            throws IOException {
-        calls.add(new Attribute(name, value));
-        return this;
-    }
-
-    public IXmlWriter closeDocument() throws IOException {
-        calls.add(new CloseDocument());
-        return this;
-    }
-
-    public IXmlWriter closeElement() throws IOException {
-        calls.add(new CloseElement());
-        return this;
-    }
-
-    public IXmlWriter content(CharSequence content) throws IOException {
-        calls.add(new Content(content));
-        return this;
-    }
-
-    public IXmlWriter openElement(CharSequence elementName) throws IOException {
-        calls.add(new OpenElement(elementName));
-        return this;
-    }
-
-    public IXmlWriter startDocument() throws IOException {
-        calls.add(new StartDocument());
-        return this;
-    }
-    
-    public boolean isCloseElement(int index) {
-        boolean result = false;
-        final Object call = calls.get(index);
-        result = call instanceof CloseElement;
-        return result;
-    }
-    
-    public boolean isContent(String content, int index) {
-        boolean result = false;
-        final Object call = calls.get(index);
-        if (call instanceof Content) {
-            Content contentCall = (Content) call;
-            result = content.equals(contentCall.content);
-        }
-        return result;
-    }
-    
-    public boolean isOpenElement(String name, int index) {
-        boolean result = false;
-        final Object call = calls.get(index);
-        if (call instanceof OpenElement) {
-            OpenElement openElement = (OpenElement) call;
-            result = name.equals(openElement.elementName);
-        }
-        return result;
-    }
-
-    public boolean isAttribute(String name, String value, int index) {
-        boolean result = false;
-        final Object call = calls.get(index);
-        if (call instanceof Attribute) {
-            Attribute attribute = (Attribute) call;
-            result = name.equals(attribute.name) && value.equals(attribute.value);
-        }
-        return result;
-    }
-    
-    public class StartDocument {}
-    public class CloseDocument {}
-    public class CloseElement {}
-    public class OpenElement {
-        public final CharSequence elementName;
-        private OpenElement(CharSequence elementName) {
-            this.elementName = elementName;
-        }
-    }
-    public class Content {
-        public final CharSequence content;
-        private Content(CharSequence content) {
-            this.content = content;
-        }
-    }
-    public class Attribute {
-        public final CharSequence name;
-        public final CharSequence value;
-        private Attribute(CharSequence name, CharSequence value) {
-            this.name = name;
-            this.value = value;
-        }
-    }
-}
diff --git a/0.12-release/apache-rat-core/src/test/java/org/apache/rat/report/xml/XmlReportFactoryTest.java b/0.12-release/apache-rat-core/src/test/java/org/apache/rat/report/xml/XmlReportFactoryTest.java
deleted file mode 100644
index b02d047..0000000
--- a/0.12-release/apache-rat-core/src/test/java/org/apache/rat/report/xml/XmlReportFactoryTest.java
+++ /dev/null
@@ -1,97 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one   *
- * or more contributor license agreements.  See the NOTICE file *
- * distributed with this work for additional information        *
- * regarding copyright ownership.  The ASF licenses this file   *
- * to you under the Apache License, Version 2.0 (the            *
- * "License"); you may not use this file except in compliance   *
- * with the License.  You may obtain a copy of the License at   *
- *                                                              *
- *   http://www.apache.org/licenses/LICENSE-2.0                 *
- *                                                              *
- * Unless required by applicable law or agreed to in writing,   *
- * software distributed under the License is distributed on an  *
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY       *
- * KIND, either express or implied.  See the License for the    *
- * specific language governing permissions and limitations      *
- * under the License.                                           *
- */ 
-package org.apache.rat.report.xml;
-
-import org.apache.rat.ReportConfiguration;
-import org.apache.rat.analysis.MockLicenseMatcher;
-import org.apache.rat.api.MetaData;
-import org.apache.rat.report.RatReport;
-import org.apache.rat.report.claim.ClaimStatistic;
-import org.apache.rat.report.xml.writer.IXmlWriter;
-import org.apache.rat.report.xml.writer.impl.base.XmlWriter;
-import org.apache.rat.test.utils.Resources;
-import org.apache.rat.walker.DirectoryWalker;
-import org.junit.Before;
-import org.junit.Test;
-
-import java.io.File;
-import java.io.StringWriter;
-import java.util.regex.Pattern;
-
-import static org.junit.Assert.assertEquals;
-import static org.junit.Assert.assertTrue;
-
-public class XmlReportFactoryTest {
-
-    private static final Pattern IGNORE_EMPTY = Pattern.compile(".svn|Empty.txt");
-    
-    private StringWriter out;
-    private IXmlWriter writer;
-    
-    @Before
-    public void setUp() throws Exception {
-        out = new StringWriter();
-        writer = new XmlWriter(out);
-        writer.startDocument();
-    }
-
-    private void report(DirectoryWalker directory, RatReport report) throws Exception {
-        directory.run(report);
-    }
-    
-    @Test
-    public void standardReport() throws Exception {
-        final String elementsPath = Resources.getResourceDirectory("elements/Source.java");
-        final MockLicenseMatcher mockLicenseMatcher = new MockLicenseMatcher();
-        DirectoryWalker directory = new DirectoryWalker(new File(elementsPath), IGNORE_EMPTY);
-        final ClaimStatistic statistic = new ClaimStatistic();
-        final ReportConfiguration configuration = new ReportConfiguration();
-        configuration.setHeaderMatcher(mockLicenseMatcher);
-        RatReport report = XmlReportFactory.createStandardReport(writer, statistic, configuration);
-        report.startReport();
-        report(directory, report);
-        report.endReport();
-        writer.closeDocument();
-        final String output = out.toString();
-        assertTrue("Preamble and document element are OK",
-                   output.startsWith("<?xml version='1.0'?>" +
-                "<rat-report timestamp="));
-        assertTrue("Part after timestamp attribute is OK",
-                   output.endsWith(">" +
-                "<resource name='" + elementsPath + "/ILoggerFactory.java'><type name='standard'/></resource>" +
-                "<resource name='" + elementsPath + "/Image.png'><type name='binary'/></resource>" +
-                "<resource name='" + elementsPath + "/LICENSE'><type name='notice'/></resource>" +
-                "<resource name='" + elementsPath + "/NOTICE'><type name='notice'/></resource>" +
-                "<resource name='" + elementsPath + "/Source.java'><type name='standard'/>" +
-                "</resource>" +
-                "<resource name='" + elementsPath + "/Text.txt'><type name='standard'/>" +
-                "</resource>" +
-                "<resource name='" + elementsPath + "/Xml.xml'><type name='standard'/>" +
-                "</resource>" +
-                "<resource name='" + elementsPath + "/buildr.rb'><type name='standard'/>" +
-                "</resource>" +
-                "<resource name='" + elementsPath + "/dummy.jar'><type name='archive'/></resource>" +
-                                   "</rat-report>"));
-        assertTrue("Is well formed", XmlUtils.isWellFormedXml(output));
-        assertEquals("Binary files", Integer.valueOf(1), statistic.getDocumentCategoryMap().get(MetaData.RAT_DOCUMENT_CATEGORY_VALUE_BINARY));
-        assertEquals("Notice files", Integer.valueOf(2), statistic.getDocumentCategoryMap().get(MetaData.RAT_DOCUMENT_CATEGORY_VALUE_NOTICE));
-        assertEquals("Standard files", Integer.valueOf(5), statistic.getDocumentCategoryMap().get(MetaData.RAT_DOCUMENT_CATEGORY_VALUE_STANDARD));
-        assertEquals("Archives", Integer.valueOf(1), statistic.getDocumentCategoryMap().get(MetaData.RAT_DOCUMENT_CATEGORY_VALUE_ARCHIVE));
-    }
-}
diff --git a/0.12-release/apache-rat-core/src/test/java/org/apache/rat/report/xml/XmlReportTest.java b/0.12-release/apache-rat-core/src/test/java/org/apache/rat/report/xml/XmlReportTest.java
deleted file mode 100644
index 6debecc..0000000
--- a/0.12-release/apache-rat-core/src/test/java/org/apache/rat/report/xml/XmlReportTest.java
+++ /dev/null
@@ -1,196 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one   *
- * or more contributor license agreements.  See the NOTICE file *
- * distributed with this work for additional information        *
- * regarding copyright ownership.  The ASF licenses this file   *
- * to you under the Apache License, Version 2.0 (the            *
- * "License"); you may not use this file except in compliance   *
- * with the License.  You may obtain a copy of the License at   *
- *                                                              *
- *   http://www.apache.org/licenses/LICENSE-2.0                 *
- *                                                              *
- * Unless required by applicable law or agreed to in writing,   *
- * software distributed under the License is distributed on an  *
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY       *
- * KIND, either express or implied.  See the License for the    *
- * specific language governing permissions and limitations      *
- * under the License.                                           *
- */ 
-package org.apache.rat.report.xml;
-
-import org.apache.rat.analysis.DefaultAnalyserFactory;
-import org.apache.rat.analysis.IHeaderMatcher;
-import org.apache.rat.analysis.RatHeaderAnalysisException;
-import org.apache.rat.api.Document;
-import org.apache.rat.document.IDocumentAnalyser;
-import org.apache.rat.report.AbstractReport;
-import org.apache.rat.report.RatReport;
-import org.apache.rat.report.claim.impl.xml.SimpleXmlClaimReporter;
-import org.apache.rat.report.claim.util.ClaimReporterMultiplexer;
-import org.apache.rat.report.xml.writer.IXmlWriter;
-import org.apache.rat.report.xml.writer.impl.base.XmlWriter;
-import org.apache.rat.test.utils.Resources;
-import org.apache.rat.walker.DirectoryWalker;
-import org.junit.Before;
-import org.junit.Test;
-
-import java.io.File;
-import java.io.StringWriter;
-import java.util.ArrayList;
-import java.util.List;
-import java.util.regex.Pattern;
-
-import static org.junit.Assert.assertTrue;
-
-public class XmlReportTest {
-
-    private static final Pattern IGNORE = Pattern.compile(".svn");
-    private StringWriter out;
-    private IXmlWriter writer;
-    private RatReport report;
-    
-    @Before
-    public void setUp() throws Exception {
-        out = new StringWriter();
-        writer = new XmlWriter(out);
-        writer.startDocument();
-        final SimpleXmlClaimReporter reporter = new SimpleXmlClaimReporter(writer);
-        final IHeaderMatcher matcher = new IHeaderMatcher() {
-
-            public boolean match(Document subject, String line) throws RatHeaderAnalysisException {
-                return false;
-            }
-
-            public void reset() {
-            }            
-        };
-        IDocumentAnalyser analyser = DefaultAnalyserFactory.createDefaultAnalyser(matcher);
-        final List<AbstractReport> reporters = new ArrayList<AbstractReport>();
-        reporters.add(reporter);
-        report = new ClaimReporterMultiplexer(analyser, reporters); 
-    }
-
-    private void report(DirectoryWalker directory) throws Exception {
-        directory.run(report);
-    }
-    
-    @Test
-    public void baseReport() throws Exception {
-        final String elementsPath = Resources.getResourceDirectory("elements/Source.java");
-        DirectoryWalker directory = new DirectoryWalker(new File(elementsPath), IGNORE);
-        report.startReport();
-        report(directory);
-        report.endReport();
-        writer.closeDocument();
-        final String output = out.toString();
-        assertTrue("Preamble and document element are OK",
-                   output.startsWith("<?xml version='1.0'?>" +
-                "<rat-report timestamp="));
-        assertTrue("Part after timestamp attribute is OK",
-                   output.endsWith(">" +
-                    "<resource name='" + elementsPath + "/Image.png'><type name='binary'/></resource>" +
-                    "<resource name='" + elementsPath + "/LICENSE'><type name='notice'/></resource>" +
-                    "<resource name='" + elementsPath + "/NOTICE'><type name='notice'/></resource>" +
-                    "<resource name='" + elementsPath + "/Source.java'><header-sample>package elements;\n" +
-"\n" +
-"/*\n" +
-" * This file does intentionally *NOT* contain an AL license header,\n" +
-" * because it is used in the test suite.\n" +
-" */\n" +
-"public class Source {\n" +
-"\n" +
-"}\n" + "</header-sample><header-type name='?????'/><license-family name='?????'/><type name='standard'/></resource>" +
-                    "<resource name='" + elementsPath + "/Text.txt'><header-sample>/*\n" +
-" * Licensed to the Apache Software Foundation (ASF) under one\n" +
-" * or more contributor license agreements.  See the NOTICE file\n" +
-" * distributed with this work for additional information\n" +
-" * regarding copyright ownership.  The ASF licenses this file\n" +
-" * to you under the Apache License, Version 2.0 (the \"License\");\n" +
-" * you may not use this file except in compliance with the License.\n" +
-" * You may obtain a copy of the License at\n" +
-" *\n" +
-" *    http://www.apache.org/licenses/LICENSE-2.0\n" +
-" *\n" +
-" * Unless required by applicable law or agreed to in writing,\n" +
-" * software distributed under the License is distributed on an\n" +
-" * \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n" +
-" * KIND, either express or implied.  See the License for the\n" +
-" * specific language governing permissions and limitations\n" +
-" * under the License.    \n" +
-" */\n" +
-"\n" +
-"            \n" +
-"</header-sample><header-type name='?????'/><license-family name='?????'/><type name='standard'/></resource>" +
-                    "<resource name='" + elementsPath + "/Xml.xml'><header-sample>&lt;?xml version='1.0'?&gt;\n" +
-"&lt;!--\n" +
-" Licensed to the Apache Software Foundation (ASF) under one   *\n" +
-" or more contributor license agreements.  See the NOTICE file *\n" +
-" distributed with this work for additional information        *\n" +
-" regarding copyright ownership.  The ASF licenses this file   *\n" +
-" to you under the Apache License, Version 2.0 (the            *\n" +
-" \"License\"); you may not use this file except in compliance   *\n" +
-" with the License.  You may obtain a copy of the License at   *\n" +
-"                                                              *\n" +
-"   http://www.apache.org/licenses/LICENSE-2.0                 *\n" +
-"                                                              *\n" +
-" Unless required by applicable law or agreed to in writing,   *\n" +
-" software distributed under the License is distributed on an  *\n" +
-" \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY       *\n" +
-" KIND, either express or implied.  See the License for the    *\n" +
-" specific language governing permissions and limitations      *\n" +
-" under the License.                                           *\n" +
-"--&gt;\n" +
-"&lt;document/&gt;\n" +
-"</header-sample><header-type name='?????'/><license-family name='?????'/><type name='standard'/></resource>" +
-                    "<resource name='" + elementsPath + "/buildr.rb'><header-sample># Licensed to the Apache Software Foundation (ASF) under one or more\n" +
-"# contributor license agreements.  See the NOTICE file distributed with this\n" +
-"# work for additional information regarding copyright ownership.  The ASF\n" +
-"# licenses this file to you under the Apache License, Version 2.0 (the\n" +
-"# \"License\"); you may not use this file except in compliance with the License.\n" +
-"# You may obtain a copy of the License at\n" +
-"#\n" +
-"#    http://www.apache.org/licenses/LICENSE-2.0\n" +
-"#\n" +
-"# Unless required by applicable law or agreed to in writing, software\n" +
-"# distributed under the License is distributed on an \"AS IS\" BASIS, WITHOUT\n" +
-"# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.  See the\n" +
-"# License for the specific language governing permissions and limitations under\n" +
-"# the License.\n" +
-"\n" +
-"unless defined?(Buildr::VERSION)\n" +
-"  require 'buildr/version'\n" +
-"end\n" +
-"\n" +
-"require 'buildr/core'\n" +
-"require 'buildr/packaging'\n" +
-"require 'buildr/java'\n" +
-"require 'buildr/ide'\n" +
-"require 'buildr/shell'\n" +
-"require 'buildr/run'\n" +
-"\n" +
-"# Methods defined in Buildr are both instance methods (e.g. when included in Project)\n" +
-"# and class methods when invoked like Buildr.artifacts().\n" +
-"module Buildr ; extend self ; end\n" +
-"\n" +
-"# The Buildfile object (self) has access to all the Buildr methods and constants.\n" +
-"class &lt;&lt; self ; include Buildr ; end\n" +
-"\n" +
-"# All modules defined under Buildr::* can be referenced without Buildr:: prefix\n" +
-"# unless a conflict exists (e.g.  Buildr::RSpec vs ::RSpec)\n" +
-"class Object #:nodoc:\n" +
-"  Buildr.constants.each do |name|\n" +
-"    const = Buildr.const_get(name)\n" +
-"    if const.is_a?(Module)\n" +
-"      const_set name, const unless const_defined?(name)\n" +
-"    end\n" +
-"  end\n" +
-"end\n" +
-"\n" +
-                "</header-sample><header-type name='?????'/><license-family name='?????'/><type name='standard'/></resource>" +
-                    "<resource name='" + elementsPath + "/dummy.jar'><type name='archive'/></resource>" +
-                    "<resource name='" + elementsPath + "/sub/Empty.txt'><header-sample>\n</header-sample><header-type name='?????'/><license-family name='?????'/><type name='standard'/></resource>" +
-                    "</rat-report>"));
-        assertTrue("Is well formed", XmlUtils.isWellFormedXml(output));
-    }
-
-}
diff --git a/0.12-release/apache-rat-core/src/test/java/org/apache/rat/report/xml/XmlUtils.java b/0.12-release/apache-rat-core/src/test/java/org/apache/rat/report/xml/XmlUtils.java
deleted file mode 100644
index 3137464..0000000
--- a/0.12-release/apache-rat-core/src/test/java/org/apache/rat/report/xml/XmlUtils.java
+++ /dev/null
@@ -1,80 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one   *
- * or more contributor license agreements.  See the NOTICE file *
- * distributed with this work for additional information        *
- * regarding copyright ownership.  The ASF licenses this file   *
- * to you under the Apache License, Version 2.0 (the            *
- * "License"); you may not use this file except in compliance   *
- * with the License.  You may obtain a copy of the License at   *
- *                                                              *
- *   http://www.apache.org/licenses/LICENSE-2.0                 *
- *                                                              *
- * Unless required by applicable law or agreed to in writing,   *
- * software distributed under the License is distributed on an  *
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY       *
- * KIND, either express or implied.  See the License for the    *
- * specific language governing permissions and limitations      *
- * under the License.                                           *
- */ 
-package org.apache.rat.report.xml;
-
-import org.w3c.dom.Document;
-import org.xml.sax.InputSource;
-import org.xml.sax.SAXException;
-import org.xml.sax.XMLReader;
-
-import javax.xml.parsers.DocumentBuilder;
-import javax.xml.parsers.DocumentBuilderFactory;
-import javax.xml.parsers.FactoryConfigurationError;
-import javax.xml.parsers.ParserConfigurationException;
-import javax.xml.parsers.SAXParserFactory;
-import java.io.IOException;
-import java.io.InputStream;
-import java.io.StringReader;
-import java.lang.reflect.UndeclaredThrowableException;
-
-public final class XmlUtils {
-    /**
-     * Private constructor, to prevent accidental instantiation.
-     */
-    private XmlUtils() {
-        // Does nothing
-    }
-
-    public static final boolean isWellFormedXml(final String string) throws Exception {
-        return isWellFormedXml(new InputSource(new StringReader(string)));
-    }
-
-    public static final XMLReader newXMLReader() throws SAXException, ParserConfigurationException {
-        final SAXParserFactory spf = SAXParserFactory.newInstance();
-        spf.setValidating(false);
-        spf.setNamespaceAware(true);
-        return spf.newSAXParser().getXMLReader();
-    }
-
-    public static final boolean isWellFormedXml(final InputSource isource) {
-        try {
-            newXMLReader().parse(isource);
-            return true;
-        } catch (SAXException e) {
-            System.out.println(e);
-            e.printStackTrace();
-            return false;
-        } catch (IOException e) {
-            throw new UndeclaredThrowableException(e);
-        } catch (ParserConfigurationException e) {
-            throw new UndeclaredThrowableException(e);
-        }
-    }
-
-    public static final boolean isWellFormedXml(final InputStream in) throws Exception {
-        return isWellFormedXml(new InputSource(in));
-    }
-    
-    public static final Document toDom(final InputStream in) throws SAXException, IOException, ParserConfigurationException, FactoryConfigurationError {
-        final DocumentBuilder builder = DocumentBuilderFactory.newInstance().newDocumentBuilder();
-        Document result;
-        result = builder.parse(in);
-        return result;
-    }
-}
diff --git a/0.12-release/apache-rat-core/src/test/java/org/apache/rat/report/xml/writer/XmlWriterUtilsTest.java b/0.12-release/apache-rat-core/src/test/java/org/apache/rat/report/xml/writer/XmlWriterUtilsTest.java
deleted file mode 100644
index 69ef2c4..0000000
--- a/0.12-release/apache-rat-core/src/test/java/org/apache/rat/report/xml/writer/XmlWriterUtilsTest.java
+++ /dev/null
@@ -1,52 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one   *
- * or more contributor license agreements.  See the NOTICE file *
- * distributed with this work for additional information        *
- * regarding copyright ownership.  The ASF licenses this file   *
- * to you under the Apache License, Version 2.0 (the            *
- * "License"); you may not use this file except in compliance   *
- * with the License.  You may obtain a copy of the License at   *
- *                                                              *
- *   http://www.apache.org/licenses/LICENSE-2.0                 *
- *                                                              *
- * Unless required by applicable law or agreed to in writing,   *
- * software distributed under the License is distributed on an  *
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY       *
- * KIND, either express or implied.  See the License for the    *
- * specific language governing permissions and limitations      *
- * under the License.                                           *
- */ 
-package org.apache.rat.report.xml.writer;
-
-import org.apache.rat.report.xml.writer.impl.base.XmlWriter;
-import org.junit.Before;
-import org.junit.Test;
-
-import java.io.StringWriter;
-
-import static org.junit.Assert.assertEquals;
-
-public class XmlWriterUtilsTest {
-
-    private StringWriter out;
-    private IXmlWriter writer;
-
-    @Before
-    public void setUp() throws Exception {
-        out = new StringWriter();
-        writer = new XmlWriter(out);
-        writer.openElement("alpha");
-    }
-
-    @Test
-    public void writeTrue() throws Exception {
-        XmlWriterUtils.writeAttribute(writer, "name", true);
-        assertEquals("Attribute written as True", "<alpha name='true'", out.toString());
-    }
-
-    @Test
-    public void writeFalse() throws Exception {
-        XmlWriterUtils.writeAttribute(writer, "name", false);
-        assertEquals("Attribute written as False", "<alpha name='false'", out.toString());
-    }
-}
diff --git a/0.12-release/apache-rat-core/src/test/java/org/apache/rat/report/xml/writer/impl/base/XmlWriterTest.java b/0.12-release/apache-rat-core/src/test/java/org/apache/rat/report/xml/writer/impl/base/XmlWriterTest.java
deleted file mode 100644
index 6c86118..0000000
--- a/0.12-release/apache-rat-core/src/test/java/org/apache/rat/report/xml/writer/impl/base/XmlWriterTest.java
+++ /dev/null
@@ -1,483 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one   *
- * or more contributor license agreements.  See the NOTICE file *
- * distributed with this work for additional information        *
- * regarding copyright ownership.  The ASF licenses this file   *
- * to you under the Apache License, Version 2.0 (the            *
- * "License"); you may not use this file except in compliance   *
- * with the License.  You may obtain a copy of the License at   *
- *                                                              *
- *   http://www.apache.org/licenses/LICENSE-2.0                 *
- *                                                              *
- * Unless required by applicable law or agreed to in writing,   *
- * software distributed under the License is distributed on an  *
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY       *
- * KIND, either express or implied.  See the License for the    *
- * specific language governing permissions and limitations      *
- * under the License.                                           *
- */ 
-package org.apache.rat.report.xml.writer.impl.base;
-
-import org.apache.rat.report.xml.writer.InvalidXmlException;
-import org.apache.rat.report.xml.writer.OperationNotAllowedException;
-import org.junit.Before;
-import org.junit.Test;
-
-import java.io.StringWriter;
-
-import static org.junit.Assert.assertEquals;
-import static org.junit.Assert.assertFalse;
-import static org.junit.Assert.assertTrue;
-import static org.junit.Assert.fail;
-
-public class XmlWriterTest {
-
-    private static final char[] ZERO_CHAR = {(char)0};
-    
-    private XmlWriter writer;
-    private StringWriter out;
-    
-    @Before
-    public void setUp() throws Exception {
-        out = new StringWriter();
-        writer = new XmlWriter(out);
-    }
-
-    @Test
-    public void returnValues() throws Exception {
-        assertEquals("XmlWriters should always return themselves", 
-                writer, writer.openElement("alpha"));
-        assertEquals("XmlWriters should always return themselves", 
-                writer, writer.attribute("beta", "b"));
-        assertEquals("XmlWriters should always return themselves", 
-                writer, writer.content("gamma"));
-        assertEquals("XmlWriters should always return themselves", 
-                writer, writer.closeElement());
-    }
-
-    @Test
-    public void openElement() throws Exception {
-        assertEquals("XmlWriters should always return themselves", 
-                writer, writer.openElement("alpha"));
-        assertEquals("Alpha element started", "<alpha", out.toString());
-        assertEquals("XmlWriters should always return themselves", 
-                writer, writer.openElement("beta"));
-        assertEquals("Alpha element tag closed and beta started", "<alpha><beta", out.toString());
-        assertEquals("XmlWriters should always return themselves", 
-                writer, writer.closeElement());
-        assertEquals("Beta tag ended", "<alpha><beta/>", out.toString());
-        assertEquals("XmlWriters should always return themselves", 
-                writer, writer.openElement("gamma"));
-        assertEquals("Gamma tag started", "<alpha><beta/><gamma", out.toString());
-    }
-    
-    @Test
-    public void invalidElementName() throws Exception {
-        assertTrue("All strings ok", isValidElementName("alpha"));
-        assertTrue("Strings and digits ok", isValidElementName("alpha77"));
-        assertFalse("Must no start with digit", isValidElementName("5alpha77"));
-        assertFalse("Greater than not ok", isValidElementName("alph<a77"));
-        assertFalse("Less than not ok", isValidElementName("alph<a77"));
-        assertFalse("Quote not ok", isValidElementName("alph'a77"));
-        assertTrue("Dash ok", isValidElementName("alph-a77"));
-        assertTrue("Underscore ok", isValidElementName("alph_a77"));
-        assertTrue("Dot ok", isValidElementName("alph.a77"));
-        assertTrue("Colon ok", isValidElementName("alpha:77"));
-        assertFalse("Start with dash not ok", isValidElementName("-a77"));
-        assertTrue("Start with underscore ok", isValidElementName("_a77"));
-        assertFalse("Start with dot not ok", isValidElementName(".a77"));
-        assertTrue("Start with colon ok", isValidElementName(":a77"));
-    }
-    
-    private boolean isValidElementName(String elementName) throws Exception {
-        boolean result = true;
-        try {
-            writer.openElement(elementName);
-        } catch (InvalidXmlException e) {
-            result = false;
-        }
-        return result;
-    }
-
-    @Test
-    public void callOpenElementAfterLastElementClosed() throws Exception {
-        assertEquals("XmlWriters should always return themselves", 
-                writer, writer.openElement("alpha"));
-        assertEquals("Alpha element started", "<alpha", out.toString());
-        assertEquals("XmlWriters should always return themselves", 
-                writer, writer.closeElement());
-        assertEquals("Element alpha is closed", "<alpha/>", out.toString());
-        try {
-            writer.openElement("delta");
-            fail("Cannot open new elements once the first element has been closed");
-        } catch (OperationNotAllowedException e) {
-            // Cannot open new elements once the first element has been closed
-        }
-    }    
-
-    @Test
-    public void callCloseElementAfterLastElementClosed() throws Exception {
-        assertEquals("XmlWriters should always return themselves", 
-                writer, writer.openElement("alpha"));
-        assertEquals("Alpha element started", "<alpha", out.toString());
-        assertEquals("XmlWriters should always return themselves", 
-                writer, writer.closeElement());
-        assertEquals("Element alpha is closed", "<alpha/>", out.toString());
-        try {
-            writer.closeElement();
-            fail("Cannot close elements once the first element has been closed");
-        } catch (OperationNotAllowedException e) {
-            // Cannot open new elements once the first element has been closed
-        }
-    }
-
-    @Test
-    public void closeFirstElement() throws Exception {
-        assertEquals("XmlWriters should always return themselves", 
-                writer, writer.openElement("alpha"));
-        assertEquals("Alpha element started", "<alpha", out.toString());
-        assertEquals("XmlWriters should always return themselves", 
-                writer, writer.closeElement());
-        assertEquals("Element alpha is closed", "<alpha/>", out.toString());
-    }
-    
-    @Test
-    public void closeElementWithContent() throws Exception {
-        assertEquals("XmlWriters should always return themselves", 
-                writer, writer.openElement("alpha"));
-        assertEquals("Alpha element started", "<alpha", out.toString());
-        assertEquals("XmlWriters should always return themselves", 
-                writer, writer.openElement("beta"));
-        assertEquals("Beta element started", "<alpha><beta", out.toString());
-        assertEquals("XmlWriters should always return themselves", 
-                writer, writer.closeElement());
-        assertEquals("Element beta is closed", "<alpha><beta/>", out.toString());
-        assertEquals("XmlWriters should always return themselves", 
-                writer, writer.closeElement());
-        assertEquals("Element beta is closed", "<alpha><beta/></alpha>", out.toString());
-        try {
-            writer.closeElement();
-            fail("Cannot close elements once the first element has been closed");
-        } catch (OperationNotAllowedException e) {
-            // Cannot open new elements once the first element has been closed
-        }
-    }
-    
-    @Test
-    public void closeElementBeforeFirstElement() throws Exception {
-        try {
-            writer.closeElement();
-            fail("Cannot close elements before the first element has been closed");
-        } catch (OperationNotAllowedException e) {
-            // Cannot open new elements before the first element has been closed
-        }
-    }
-    
-    @Test
-    public void contentAfterElement() throws Exception {
-        assertEquals("XmlWriters should always return themselves", 
-                writer, writer.openElement("alpha"));
-        assertEquals("Alpha element started", "<alpha", out.toString());
-        assertEquals("XmlWriters should always return themselves", 
-                writer, writer.content("foo bar"));
-        assertEquals("Alpha tag closed. Content written", "<alpha>foo bar", out.toString());
-        assertEquals("XmlWriters should always return themselves", 
-                writer, writer.content(" and more foo bar"));
-        assertEquals("Alpha tag closed. Content written", "<alpha>foo bar and more foo bar", out.toString());
-        assertEquals("XmlWriters should always return themselves", 
-                writer, writer.openElement("beta"));
-        assertEquals("Beta element started", "<alpha>foo bar and more foo bar<beta", out.toString());
-        assertEquals("XmlWriters should always return themselves", 
-                writer, writer.closeElement());
-        assertEquals("Element beta is closed", "<alpha>foo bar and more foo bar<beta/>", out.toString());
-        assertEquals("XmlWriters should always return themselves", 
-                writer, writer.closeElement());
-        assertEquals("Element beta is closed", "<alpha>foo bar and more foo bar<beta/></alpha>", out.toString());
-        try {
-            writer.content("A Sentence Too far");
-            fail("Cannot write content once the first element has been closed");
-        } catch (OperationNotAllowedException e) {
-            // Cannot open new elements once the first element has been closed
-        }
-    }
-
-    @Test
-    public void contentAfterLastElement() throws Exception {
-        assertEquals("XmlWriters should always return themselves", 
-                writer, writer.openElement("alpha"));
-        assertEquals("Alpha element started", "<alpha", out.toString());
-        assertEquals("XmlWriters should always return themselves", 
-                writer, writer.closeElement());
-        assertEquals("Element beta is closed", "<alpha/>", out.toString());
-        try {
-            writer.content("A Sentence Too far");
-            fail("Cannot write content once the first element has been closed");
-        } catch (OperationNotAllowedException e) {
-            // Cannot open new elements once the first element has been closed
-        }
-    }
-    
-    @Test
-    public void writeContentBeforeFirstElement() throws Exception {
-        try {
-            writer.content("Too early");
-            fail("Cannot close elements before the first element has been closed");
-        } catch (OperationNotAllowedException e) {
-            // Cannot open new elements before the first element has been closed
-        }
-    }
-    
-    @Test
-    public void contentEscaping() throws Exception {
-        assertEquals("XmlWriters should always return themselves", 
-                writer, writer.openElement("alpha"));
-        assertEquals("Alpha element started", "<alpha", out.toString());
-        assertEquals("XmlWriters should always return themselves", 
-                writer, writer.content("this&that"));
-        assertEquals("Amphersands must be escaped", "<alpha>this&amp;that", out.toString());
-        assertEquals("XmlWriters should always return themselves", 
-                writer, writer.content("small<large"));
-        assertEquals("Left angle brackets must be escaped", "<alpha>this&amp;thatsmall&lt;large", out.toString());
-        assertEquals("XmlWriters should always return themselves", 
-                writer, writer.content("12>1"));
-        assertEquals("Choose to escape right angle brackets", "<alpha>this&amp;thatsmall&lt;large12&gt;1", out.toString());
-
-    }
-
-    @Test
-    public void attributeAfterLastElement() throws Exception {
-        assertEquals("XmlWriters should always return themselves", 
-                writer, writer.openElement("alpha"));
-        assertEquals("Alpha element started", "<alpha", out.toString());
-        assertEquals("XmlWriters should always return themselves", 
-                writer, writer.closeElement());
-        assertEquals("Element beta is closed", "<alpha/>", out.toString());
-        try {
-            writer.attribute("foo", "bar");
-            fail("Cannot write content once the first element has been closed");
-        } catch (OperationNotAllowedException e) {
-            // Cannot open new elements once the first element has been closed
-        }
-    }
-    
-    @Test
-    public void attributeContentBeforeFirstElement() throws Exception {
-        try {
-            writer.attribute("foo", "bar");
-            fail("Cannot close elements before the first element has been closed");
-        } catch (OperationNotAllowedException e) {
-            // Cannot open new elements before the first element has been closed
-        }
-    }
-    
-    @Test
-    public void invalidAttributeName() throws Exception {
-        writer.openElement("alpha");
-        assertTrue("All strings ok", isValidAttributeName("alpha"));
-        assertTrue("Strings and digits ok", isValidAttributeName("alpha77"));
-        assertFalse("Must not start with digit", isValidAttributeName("5alpha77"));
-        assertTrue("Colon ok", isValidAttributeName("alpha:77"));
-        assertFalse("Greater than not ok", isValidAttributeName("alph<a77"));
-        assertFalse("Less than not ok", isValidAttributeName("alph<a77"));
-        assertFalse("Quote not ok", isValidAttributeName("alph'a77"));
-    }
-    
-    private boolean isValidAttributeName(String name) throws Exception {
-        boolean result = true;
-        try {
-            writer.attribute(name, "");
-        } catch (InvalidXmlException e) {
-            result = false;
-        }
-        return result;
-    }
-    
-    @Test
-    public void escapeAttributeContent() throws Exception {
-        assertEquals("XmlWriters should always return themselves", 
-                writer, writer.openElement("alpha"));
-        assertEquals("Alpha element started", "<alpha", out.toString());
-        assertEquals("XmlWriters should always return themselves", 
-                writer, writer.attribute("one", "this&that"));
-        assertEquals("Amphersands must be escaped", "<alpha one='this&amp;that'", out.toString());
-        assertEquals("XmlWriters should always return themselves", 
-                writer, writer.attribute("two", "small<large"));
-        assertEquals("Left angle brackets must be escaped", "<alpha one='this&amp;that' two='small&lt;large'", out.toString());
-        assertEquals("XmlWriters should always return themselves", 
-                writer, writer.attribute("three", "12>1"));
-        assertEquals("Choose to escape right angle brackets", "<alpha one='this&amp;that' two='small&lt;large' three='12&gt;1'", out.toString());
-        assertEquals("XmlWriters should always return themselves", 
-                writer, writer.attribute("four", "'quote'"));
-        assertEquals("Apostrophes must be escape", "<alpha one='this&amp;that' two='small&lt;large' three='12&gt;1' four='&apos;quote&apos;'", out.toString());
-        assertEquals("XmlWriters should always return themselves", 
-                writer, writer.attribute("five", "\"quote\""));
-        assertEquals("Double quotes must be escape", "<alpha one='this&amp;that' two='small&lt;large' three='12&gt;1' four='&apos;quote&apos;' five='&quot;quote&quot;'", out.toString());
-
-    }
-    
-    @Test
-    public void attributeInContent() throws Exception {
-        assertEquals("XmlWriters should always return themselves", 
-                writer, writer.openElement("alpha"));
-        assertEquals("Alpha element started", "<alpha", out.toString());
-        assertEquals("XmlWriters should always return themselves", 
-                writer, writer.content("foo bar"));
-        try {
-            writer.attribute("name", "value");
-            fail("attributes after body content are not allowed");
-        } catch (InvalidXmlException e) {
-            // attributes after body content are not allowed
-        }
-    }
-  
-    @Test
-    public void outOfRangeCharacter() throws Exception {
-        assertEquals("XmlWriters should always return themselves", 
-                writer, writer.openElement("alpha"));
-        assertEquals("Alpha element started", "<alpha", out.toString());
-        assertEquals("XmlWriters should always return themselves", 
-                writer, writer.content(new String(ZERO_CHAR)));
-        String out = this.out.toString();
-        assertEquals("Replace illegal characters with question marks", "<alpha>?", out);
-    }
-    
-    @Test
-    public void attributeAfterElementClosed() throws Exception {
-        assertEquals("XmlWriters should always return themselves", 
-                writer, writer.openElement("alpha"));
-        assertEquals("Alpha element started", "<alpha", out.toString());
-        assertEquals("XmlWriters should always return themselves", 
-                writer, writer.openElement("beta"));
-        assertEquals("Beta element started", "<alpha><beta", out.toString());
-        assertEquals("XmlWriters should always return themselves", 
-                writer, writer.closeElement());
-        assertEquals("Beta element closed", "<alpha><beta/>", out.toString());
-        try {
-            writer.attribute("name", "value");
-            fail("attributes after closed element are not allowed");
-        } catch (InvalidXmlException e) {
-            // attributes after body content are not allowed
-        }
-    }
-    
-    @Test
-    public void closeDocumentBeforeOpen() throws Exception {
-        try {
-            writer.closeDocument();
-            fail("Cannot close document before the first element has been opened");
-        } catch (OperationNotAllowedException e) {
-            // Cannot open new elements before the first element has been opened
-        }
-    }
-    
-    @Test
-    public void closeDocumentAfterRootElementClosed() throws Exception {
-        assertEquals("XmlWriters should always return themselves", 
-                writer, writer.openElement("alpha"));
-        assertEquals("Alpha element started", "<alpha", out.toString());
-        assertEquals("XmlWriters should always return themselves", 
-                writer, writer.closeElement());
-        assertEquals("Beta element started", "<alpha/>", out.toString());
-        try {
-            writer.closeDocument();
-        } catch (OperationNotAllowedException e) {
-            fail("No exception should be thrown when called after the root element is closed.");
-        }
-    }   
-    
-    @Test
-    public void closeSimpleDocument() throws Exception {
-        assertEquals("XmlWriters should always return themselves", 
-                writer, writer.openElement("alpha"));
-        assertEquals("Alpha element started", "<alpha", out.toString());
-        assertEquals("XmlWriters should always return themselves", 
-                writer, writer.openElement("beta"));
-        assertEquals("Beta element started", "<alpha><beta", out.toString());
-        assertEquals("XmlWriters should always return themselves", 
-                writer, writer.closeDocument());
-        assertEquals("Beta element started", "<alpha><beta/></alpha>", out.toString());
-    }
-    
-    @Test
-    public void closeComplexDocument() throws Exception {
-        assertEquals("XmlWriters should always return themselves", 
-                writer, writer.openElement("alpha"));
-        assertEquals("Alpha element started", "<alpha", out.toString());
-        assertEquals("XmlWriters should always return themselves", 
-                writer, writer.openElement("beta"));
-        assertEquals("Beta element started", "<alpha><beta", out.toString());
-        assertEquals("XmlWriters should always return themselves", 
-                writer, writer.attribute("name", "value"));
-        assertEquals("Beta element started", "<alpha><beta name='value'", out.toString());
-        assertEquals("XmlWriters should always return themselves", 
-                writer, writer.closeElement());
-        assertEquals("Beta element started", "<alpha><beta name='value'/>", out.toString());
-        assertEquals("XmlWriters should always return themselves", 
-                writer, writer.openElement("beta"));
-        assertEquals("Beta element started", "<alpha><beta name='value'/><beta", out.toString());
-        assertEquals("XmlWriters should always return themselves", 
-                writer, writer.attribute("name", "value"));
-        assertEquals("Beta element started", "<alpha><beta name='value'/><beta name='value'", out.toString());
-        assertEquals("XmlWriters should always return themselves", 
-                writer, writer.openElement("gamma"));
-        assertEquals("Beta element started", "<alpha><beta name='value'/><beta name='value'><gamma", out.toString());
-        assertEquals("XmlWriters should always return themselves", 
-                writer, writer.closeDocument());
-        assertEquals("Beta element started", "<alpha><beta name='value'/><beta name='value'><gamma/></beta></alpha>", out.toString());
-    }
-    
-    @Test
-    public void writeProlog() throws Exception {
-        assertEquals("XmlWriters should always return themselves", 
-                writer, writer.startDocument());
-        assertEquals("Prolog written", "<?xml version='1.0'?>", out.toString());
-    }
-    
-    @Test
-    public void writeAfterElement() throws Exception {
-        assertEquals("XmlWriters should always return themselves", 
-                writer, writer.openElement("alpha"));
-        assertEquals("Alpha element started", "<alpha", out.toString());
-        try {
-            writer.startDocument();
-            fail("Operation not allowed once an element has been written");
-        } catch (OperationNotAllowedException e) {
-            // Operation not allowed once an element has been written
-        }
-    }
-    
-    @Test
-    public void writePrologTwo() throws Exception {
-        assertEquals("XmlWriters should always return themselves", 
-                writer, writer.startDocument());
-        assertEquals("Prolog written", "<?xml version='1.0'?>", out.toString());
-        try {
-            writer.startDocument();
-            fail("Operation not allow once a prolog has been written");
-        } catch (OperationNotAllowedException e) {
-            // Operation not allowed once an prolog has been written
-        }
-    }
-    
-    @Test
-    public void duplicateAttributes() throws Exception {
-        assertEquals("XmlWriters should always return themselves", 
-                writer, writer.openElement("alpha"));
-        assertEquals("Alpha element started", "<alpha", out.toString());
-        assertEquals("XmlWriters should always return themselves", 
-                writer, writer.attribute("one", "1"));
-        assertEquals("Attribute written", "<alpha one='1'", out.toString());
-        assertEquals("XmlWriters should always return themselves", 
-                writer, writer.openElement("beta"));
-        assertEquals("Beta element started", "<alpha one='1'><beta", out.toString());
-        assertEquals("XmlWriters should always return themselves", 
-                writer, writer.attribute("one", "1"));
-        assertEquals("Beta element started", "<alpha one='1'><beta one='1'", out.toString());
-        try {
-            writer.attribute("one", "2");
-            fail("Each attribute may only be written once");
-        } catch (InvalidXmlException e) {
-            // Each attribute may only be written once
-        }
-    }
-}
diff --git a/0.12-release/apache-rat-core/src/test/java/org/apache/rat/test/utils/Resources.java b/0.12-release/apache-rat-core/src/test/java/org/apache/rat/test/utils/Resources.java
deleted file mode 100644
index 52968a5..0000000
--- a/0.12-release/apache-rat-core/src/test/java/org/apache/rat/test/utils/Resources.java
+++ /dev/null
@@ -1,130 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one   *
- * or more contributor license agreements.  See the NOTICE file *
- * distributed with this work for additional information        *
- * regarding copyright ownership.  The ASF licenses this file   *
- * to you under the Apache License, Version 2.0 (the            *
- * "License"); you may not use this file except in compliance   *
- * with the License.  You may obtain a copy of the License at   *
- *                                                              *
- *   http://www.apache.org/licenses/LICENSE-2.0                 *
- *                                                              *
- * Unless required by applicable law or agreed to in writing,   *
- * software distributed under the License is distributed on an  *
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY       *
- * KIND, either express or implied.  See the License for the    *
- * specific language governing permissions and limitations      *
- * under the License.                                           *
- */
-package org.apache.rat.test.utils;
-
-import org.apache.rat.document.impl.DocumentImplUtils;
-
-import java.io.BufferedReader;
-import java.io.File;
-import java.io.FileFilter;
-import java.io.FileInputStream;
-import java.io.FileNotFoundException;
-import java.io.IOException;
-import java.io.InputStream;
-import java.io.InputStreamReader;
-import java.io.Reader;
-
-
-/**
- * Utility class, which provides static methods for creating
- * test cases.
- */
-public class Resources {
-    /**
-     * Private constructor, to prevent accidental instantiation.
-     */
-    private Resources() {
-        // Does nothing
-    }
-
-    public static final String SRC_TEST_RESOURCES = "src/test/resources";
-    public static final String SRC_MAIN_RESOURCES = "src/main/resources";
-    private static File TEST_RESOURCE_BASE_PATH = new File(SRC_TEST_RESOURCES);
-    private static File RESOURCE_BASE_PATH = new File(SRC_MAIN_RESOURCES);
-
-    /**
-     * Locates a test resource file in the class path.
-     */
-    public static File getResourceFile(String pResource) throws IOException {
-        return getResourceFromBase(TEST_RESOURCE_BASE_PATH, pResource);
-    }
-
-    /**
-     * Locates a main resource file in the class path.
-     */
-    public static File getMainResourceFile(String pResource) throws IOException {
-        return getResourceFromBase(RESOURCE_BASE_PATH, pResource);
-    }
-
-    /**
-     * Try to to load the given file from baseDir, in case of errors try to add module names to fix behaviour from within IntelliJ.
-     */
-    private static File getResourceFromBase(File baseDir, String pResource) throws IOException {
-        File f = new File(baseDir, pResource);
-        if (!f.isFile()) {
-            throw new FileNotFoundException("Unable to locate resource file: " + pResource);
-        }
-        return f;
-    }
-
-    /**
-     * Locates a set of resource files in the class path.
-     * In case of errors try to add module names to fix behaviour from within IntelliJ.
-     */
-    public static File[] getResourceFiles(String pResource) throws IOException {
-        File f = new File(TEST_RESOURCE_BASE_PATH, pResource);
-        if (!f.isDirectory()) {
-            throw new FileNotFoundException("Unable to locate resource directory: " + pResource);
-        }
-
-        return f.listFiles(new FileFilter() {
-            public boolean accept(File pathname) {
-                return pathname.isFile();
-            }
-        });
-    }
-
-    /**
-     * Locates a resource file in the class path and returns an {@link InputStream}.
-     */
-    public static InputStream getResourceStream(String pResource) throws IOException {
-        return new FileInputStream(getResourceFile(pResource));
-    }
-
-    /**
-     * Locates a resource file in the class path and returns a {@link Reader}.
-     */
-    public static Reader getResourceReader(String pResource) throws IOException {
-        return new InputStreamReader(getResourceStream(pResource), "UTF-8");
-    }
-
-    /**
-     * Locates a resource file in the class path and returns a {@link BufferedReader}.
-     */
-    public static BufferedReader getBufferedResourceReader(String pResource) throws IOException {
-        return new BufferedReader(getResourceReader(pResource));
-    }
-
-    /**
-     * Locates a resource file in the class path and returns a {@link BufferedReader}.
-     */
-    public static BufferedReader getBufferedReader(File file) throws IOException {
-        return new BufferedReader(new InputStreamReader(new FileInputStream(file), "UTF-8"));
-    }
-
-    /**
-     * Locates the name of a directory, which contains the given
-     * resource file.
-     */
-    public static String getResourceDirectory(String pResource) throws IOException {
-        final File resource = getResourceFile(pResource);
-        final File dir = resource.getParentFile();
-        return DocumentImplUtils.toName(dir);
-    }
-}
diff --git a/0.12-release/apache-rat-core/src/test/java/org/apache/rat/walker/FileNameComparatorTest.java b/0.12-release/apache-rat-core/src/test/java/org/apache/rat/walker/FileNameComparatorTest.java
deleted file mode 100644
index 5ac932d..0000000
--- a/0.12-release/apache-rat-core/src/test/java/org/apache/rat/walker/FileNameComparatorTest.java
+++ /dev/null
@@ -1,38 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one   *
- * or more contributor license agreements.  See the NOTICE file *
- * distributed with this work for additional information        *
- * regarding copyright ownership.  The ASF licenses this file   *
- * to you under the Apache License, Version 2.0 (the            *
- * "License"); you may not use this file except in compliance   *
- * with the License.  You may obtain a copy of the License at   *
- *                                                              *
- *   http://www.apache.org/licenses/LICENSE-2.0                 *
- *                                                              *
- * Unless required by applicable law or agreed to in writing,   *
- * software distributed under the License is distributed on an  *
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY       *
- * KIND, either express or implied.  See the License for the    *
- * specific language governing permissions and limitations      *
- * under the License.                                           *
- */ 
-package org.apache.rat.walker;
-
-import org.apache.rat.test.utils.Resources;
-import org.junit.Test;
-
-import java.io.IOException;
-
-import static org.junit.Assert.assertNotNull;
-import static org.junit.Assert.assertTrue;
-
-public class FileNameComparatorTest {
-
-    @Test
-    public void compare() throws IOException {
-        FileNameComparator comparator = new FileNameComparator();
-        assertNotNull(comparator);
-        final int compare = comparator.compare(Resources.getResourceFile("elements/LICENSE"), Resources.getResourceFile("elements/NOTICE"));
-        assertTrue("LICENSE is before NOTICE", compare < 0);
-    }
-}
diff --git a/0.12-release/apache-rat-core/src/test/resources/appliedAL20/bad/aal20bad1.txt b/0.12-release/apache-rat-core/src/test/resources/appliedAL20/bad/aal20bad1.txt
deleted file mode 100644
index 0a1af5e..0000000
--- a/0.12-release/apache-rat-core/src/test/resources/appliedAL20/bad/aal20bad1.txt
+++ /dev/null
@@ -1,17 +0,0 @@
-/*
- * Copyright 2012-2013 BarFoo. All Rights Reserved.
- *
- *  Licensed under the Apache License, Version 2.0 (the \"License\");
- *  you may not use this file except in compliance with the License.
- *
- *  You may obtain a copy of the License at
- *       http://www.apache.org/licenses/LICENSE-2.0
- *
- *  Unless required by applicable law or agreed to in writing, software
- *  distributed under the License is distributed on an \"AS IS\" BASIS,
- *  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- *  See the License for the specific language governing permissions and
- *  limitations under the License.
- */ 
-
- Wrong copyright holder
\ No newline at end of file
diff --git a/0.12-release/apache-rat-core/src/test/resources/appliedAL20/bad/aal20bad2.txt b/0.12-release/apache-rat-core/src/test/resources/appliedAL20/bad/aal20bad2.txt
deleted file mode 100644
index fcc61d2..0000000
--- a/0.12-release/apache-rat-core/src/test/resources/appliedAL20/bad/aal20bad2.txt
+++ /dev/null
@@ -1,5553 +0,0 @@
-<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
-<!-- NewPage -->
-<html lang="en">
-<!-- This file causes RAT 0.9 to run very slowly: see RAT-138 -->
-Copyright 2012-2013 FooBar. All Rights Reserved.
-<head>
-<meta http-equiv="Content-Type" content="text/html" charset="iso-8859-1">
-<title>Index (Commons IO 2.5-SNAPSHOT API)</title>
-<link rel="stylesheet" type="text/css" href="./stylesheet.css" title="Style">
-</head>
-<body>
-<script type="text/javascript"><!--
-    if (location.href.indexOf('is-external=true') == -1) {
-        parent.document.title="Index (Commons IO 2.5-SNAPSHOT API)";
-    }
-//-->
-</script>
-<noscript>
-<div>JavaScript is disabled on your browser.</div>
-</noscript>
-<!-- ========= START OF TOP NAVBAR ======= -->
-<div class="topNav"><a name="navbar_top">
-<!--   -->
-</a><a href="#skip-navbar_top" title="Skip navigation links"></a><a name="navbar_top_firstrow">
-<!--   -->
-</a>
-<ul class="navList" title="Navigation">
-<li><a href="./overview-summary.html">Overview</a></li>
-<li>Package</li>
-<li>Class</li>
-<li>Use</li>
-<li><a href="./overview-tree.html">Tree</a></li>
-<li><a href="./deprecated-list.html">Deprecated</a></li>
-<li class="navBarCell1Rev">Index</li>
-<li><a href="./help-doc.html">Help</a></li>
-</ul>
-</div>
-<div class="subNav">
-<ul class="navList">
-<li>Prev</li>
-<li>Next</li>
-</ul>
-<ul class="navList">
-<li><a href="./index.html?index-all.html" target="_top">Frames</a></li>
-<li><a href="index-all.html" target="_top">No Frames</a></li>
-</ul>
-<ul class="navList" id="allclasses_navbar_top">
-<li><a href="./allclasses-noframe.html">All Classes</a></li>
-</ul>
-<div>
-<script type="text/javascript"><!--
-  allClassesLink = document.getElementById("allclasses_navbar_top");
-  if(window==top) {
-    allClassesLink.style.display = "block";
-  }
-  else {
-    allClassesLink.style.display = "none";
-  }
-  //-->
-</script>
-</div>
-<a name="skip-navbar_top">
-<!--   -->
-</a></div>
-<!-- ========= END OF TOP NAVBAR ========= -->
-<div class="contentContainer"><a href="#_A_">A</a>&nbsp;<a href="#_B_">B</a>&nbsp;<a href="#_C_">C</a>&nbsp;<a href="#_D_">D</a>&nbsp;<a href="#_E_">E</a>&nbsp;<a href="#_F_">F</a>&nbsp;<a href="#_G_">G</a>&nbsp;<a href="#_H_">H</a>&nbsp;<a href="#_I_">I</a>&nbsp;<a href="#_L_">L</a>&nbsp;<a href="#_M_">M</a>&nbsp;<a href="#_N_">N</a>&nbsp;<a href="#_O_">O</a>&nbsp;<a href="#_P_">P</a>&nbsp;<a href="#_R_">R</a>&nbsp;<a href="#_S_">S</a>&nbsp;<a href="#_T_">T</a>&nbsp;<a href="#_U_">U</a>&nbsp;<a href="#_V_">V</a>&nbsp;<a href="#_W_">W</a>&nbsp;<a href="#_X_">X</a>&nbsp;<a name="_A_">
-<!--   -->
-</a>
-<h2 class="title">A</h2>
-<dl>
-<dt><a href="./org/apache/commons/io/filefilter/AbstractFileFilter.html" title="class in org.apache.commons.io.filefilter"><span class="strong">AbstractFileFilter</span></a> - Class in <a href="./org/apache/commons/io/filefilter/package-summary.html">org.apache.commons.io.filefilter</a></dt>
-<dd>
-<div class="block">An abstract class which implements the Java FileFilter and FilenameFilter 
- interfaces via the IOFileFilter interface.</div>
-</dd>
-<dt><span class="strong"><a href="./org/apache/commons/io/filefilter/AbstractFileFilter.html#AbstractFileFilter()">AbstractFileFilter()</a></span> - Constructor for class org.apache.commons.io.filefilter.<a href="./org/apache/commons/io/filefilter/AbstractFileFilter.html" title="class in org.apache.commons.io.filefilter">AbstractFileFilter</a></dt>
-<dd>&nbsp;</dd>
-<dt><span class="strong"><a href="./org/apache/commons/io/filefilter/AbstractFileFilter.html#accept(java.io.File)">accept(File)</a></span> - Method in class org.apache.commons.io.filefilter.<a href="./org/apache/commons/io/filefilter/AbstractFileFilter.html" title="class in org.apache.commons.io.filefilter">AbstractFileFilter</a></dt>
-<dd>
-<div class="block">Checks to see if the File should be accepted by this filter.</div>
-</dd>
-<dt><span class="strong"><a href="./org/apache/commons/io/filefilter/AbstractFileFilter.html#accept(java.io.File, java.lang.String)">accept(File, String)</a></span> - Method in class org.apache.commons.io.filefilter.<a href="./org/apache/commons/io/filefilter/AbstractFileFilter.html" title="class in org.apache.commons.io.filefilter">AbstractFileFilter</a></dt>
-<dd>
-<div class="block">Checks to see if the File should be accepted by this filter.</div>
-</dd>
-<dt><span class="strong"><a href="./org/apache/commons/io/filefilter/AgeFileFilter.html#accept(java.io.File)">accept(File)</a></span> - Method in class org.apache.commons.io.filefilter.<a href="./org/apache/commons/io/filefilter/AgeFileFilter.html" title="class in org.apache.commons.io.filefilter">AgeFileFilter</a></dt>
-<dd>
-<div class="block">Checks to see if the last modification of the file matches cutoff
- favorably.</div>
-</dd>
-<dt><span class="strong"><a href="./org/apache/commons/io/filefilter/AndFileFilter.html#accept(java.io.File)">accept(File)</a></span> - Method in class org.apache.commons.io.filefilter.<a href="./org/apache/commons/io/filefilter/AndFileFilter.html" title="class in org.apache.commons.io.filefilter">AndFileFilter</a></dt>
-<dd>
-<div class="block">Checks to see if the File should be accepted by this filter.</div>
-</dd>
-<dt><span class="strong"><a href="./org/apache/commons/io/filefilter/AndFileFilter.html#accept(java.io.File, java.lang.String)">accept(File, String)</a></span> - Method in class org.apache.commons.io.filefilter.<a href="./org/apache/commons/io/filefilter/AndFileFilter.html" title="class in org.apache.commons.io.filefilter">AndFileFilter</a></dt>
-<dd>
-<div class="block">Checks to see if the File should be accepted by this filter.</div>
-</dd>
-<dt><span class="strong"><a href="./org/apache/commons/io/filefilter/CanReadFileFilter.html#accept(java.io.File)">accept(File)</a></span> - Method in class org.apache.commons.io.filefilter.<a href="./org/apache/commons/io/filefilter/CanReadFileFilter.html" title="class in org.apache.commons.io.filefilter">CanReadFileFilter</a></dt>
-<dd>
-<div class="block">Checks to see if the file can be read.</div>
-</dd>
-<dt><span class="strong"><a href="./org/apache/commons/io/filefilter/CanWriteFileFilter.html#accept(java.io.File)">accept(File)</a></span> - Method in class org.apache.commons.io.filefilter.<a href="./org/apache/commons/io/filefilter/CanWriteFileFilter.html" title="class in org.apache.commons.io.filefilter">CanWriteFileFilter</a></dt>
-<dd>
-<div class="block">Checks to see if the file can be written to.</div>
-</dd>
-<dt><span class="strong"><a href="./org/apache/commons/io/filefilter/DelegateFileFilter.html#accept(java.io.File)">accept(File)</a></span> - Method in class org.apache.commons.io.filefilter.<a href="./org/apache/commons/io/filefilter/DelegateFileFilter.html" title="class in org.apache.commons.io.filefilter">DelegateFileFilter</a></dt>
-<dd>
-<div class="block">Checks the filter.</div>
-</dd>
-<dt><span class="strong"><a href="./org/apache/commons/io/filefilter/DelegateFileFilter.html#accept(java.io.File, java.lang.String)">accept(File, String)</a></span> - Method in class org.apache.commons.io.filefilter.<a href="./org/apache/commons/io/filefilter/DelegateFileFilter.html" title="class in org.apache.commons.io.filefilter">DelegateFileFilter</a></dt>
-<dd>
-<div class="block">Checks the filter.</div>
-</dd>
-<dt><span class="strong"><a href="./org/apache/commons/io/filefilter/DirectoryFileFilter.html#accept(java.io.File)">accept(File)</a></span> - Method in class org.apache.commons.io.filefilter.<a href="./org/apache/commons/io/filefilter/DirectoryFileFilter.html" title="class in org.apache.commons.io.filefilter">DirectoryFileFilter</a></dt>
-<dd>
-<div class="block">Checks to see if the file is a directory.</div>
-</dd>
-<dt><span class="strong"><a href="./org/apache/commons/io/filefilter/EmptyFileFilter.html#accept(java.io.File)">accept(File)</a></span> - Method in class org.apache.commons.io.filefilter.<a href="./org/apache/commons/io/filefilter/EmptyFileFilter.html" title="class in org.apache.commons.io.filefilter">EmptyFileFilter</a></dt>
-<dd>
-<div class="block">Checks to see if the file is empty.</div>
-</dd>
-<dt><span class="strong"><a href="./org/apache/commons/io/filefilter/FalseFileFilter.html#accept(java.io.File)">accept(File)</a></span> - Method in class org.apache.commons.io.filefilter.<a href="./org/apache/commons/io/filefilter/FalseFileFilter.html" title="class in org.apache.commons.io.filefilter">FalseFileFilter</a></dt>
-<dd>
-<div class="block">Returns false.</div>
-</dd>
-<dt><span class="strong"><a href="./org/apache/commons/io/filefilter/FalseFileFilter.html#accept(java.io.File, java.lang.String)">accept(File, String)</a></span> - Method in class org.apache.commons.io.filefilter.<a href="./org/apache/commons/io/filefilter/FalseFileFilter.html" title="class in org.apache.commons.io.filefilter">FalseFileFilter</a></dt>
-<dd>
-<div class="block">Returns false.</div>
-</dd>
-<dt><span class="strong"><a href="./org/apache/commons/io/filefilter/FileFileFilter.html#accept(java.io.File)">accept(File)</a></span> - Method in class org.apache.commons.io.filefilter.<a href="./org/apache/commons/io/filefilter/FileFileFilter.html" title="class in org.apache.commons.io.filefilter">FileFileFilter</a></dt>
-<dd>
-<div class="block">Checks to see if the file is a file.</div>
-</dd>
-<dt><span class="strong"><a href="./org/apache/commons/io/filefilter/HiddenFileFilter.html#accept(java.io.File)">accept(File)</a></span> - Method in class org.apache.commons.io.filefilter.<a href="./org/apache/commons/io/filefilter/HiddenFileFilter.html" title="class in org.apache.commons.io.filefilter">HiddenFileFilter</a></dt>
-<dd>
-<div class="block">Checks to see if the file is hidden.</div>
-</dd>
-<dt><span class="strong"><a href="./org/apache/commons/io/filefilter/IOFileFilter.html#accept(java.io.File)">accept(File)</a></span> - Method in interface org.apache.commons.io.filefilter.<a href="./org/apache/commons/io/filefilter/IOFileFilter.html" title="interface in org.apache.commons.io.filefilter">IOFileFilter</a></dt>
-<dd>
-<div class="block">Checks to see if the File should be accepted by this filter.</div>
-</dd>
-<dt><span class="strong"><a href="./org/apache/commons/io/filefilter/IOFileFilter.html#accept(java.io.File, java.lang.String)">accept(File, String)</a></span> - Method in interface org.apache.commons.io.filefilter.<a href="./org/apache/commons/io/filefilter/IOFileFilter.html" title="interface in org.apache.commons.io.filefilter">IOFileFilter</a></dt>
-<dd>
-<div class="block">Checks to see if the File should be accepted by this filter.</div>
-</dd>
-<dt><span class="strong"><a href="./org/apache/commons/io/filefilter/MagicNumberFileFilter.html#accept(java.io.File)">accept(File)</a></span> - Method in class org.apache.commons.io.filefilter.<a href="./org/apache/commons/io/filefilter/MagicNumberFileFilter.html" title="class in org.apache.commons.io.filefilter">MagicNumberFileFilter</a></dt>
-<dd>
-<div class="block">
- Accepts the provided file if the file contains the file filter's magic
- number at the specified offset.</div>
-</dd>
-<dt><span class="strong"><a href="./org/apache/commons/io/filefilter/NameFileFilter.html#accept(java.io.File)">accept(File)</a></span> - Method in class org.apache.commons.io.filefilter.<a href="./org/apache/commons/io/filefilter/NameFileFilter.html" title="class in org.apache.commons.io.filefilter">NameFileFilter</a></dt>
-<dd>
-<div class="block">Checks to see if the filename matches.</div>
-</dd>
-<dt><span class="strong"><a href="./org/apache/commons/io/filefilter/NameFileFilter.html#accept(java.io.File, java.lang.String)">accept(File, String)</a></span> - Method in class org.apache.commons.io.filefilter.<a href="./org/apache/commons/io/filefilter/NameFileFilter.html" title="class in org.apache.commons.io.filefilter">NameFileFilter</a></dt>
-<dd>
-<div class="block">Checks to see if the filename matches.</div>
-</dd>
-<dt><span class="strong"><a href="./org/apache/commons/io/filefilter/NotFileFilter.html#accept(java.io.File)">accept(File)</a></span> - Method in class org.apache.commons.io.filefilter.<a href="./org/apache/commons/io/filefilter/NotFileFilter.html" title="class in org.apache.commons.io.filefilter">NotFileFilter</a></dt>
-<dd>
-<div class="block">Returns the logical NOT of the underlying filter's return value for the same File.</div>
-</dd>
-<dt><span class="strong"><a href="./org/apache/commons/io/filefilter/NotFileFilter.html#accept(java.io.File, java.lang.String)">accept(File, String)</a></span> - Method in class org.apache.commons.io.filefilter.<a href="./org/apache/commons/io/filefilter/NotFileFilter.html" title="class in org.apache.commons.io.filefilter">NotFileFilter</a></dt>
-<dd>
-<div class="block">Returns the logical NOT of the underlying filter's return value for the same arguments.</div>
-</dd>
-<dt><span class="strong"><a href="./org/apache/commons/io/filefilter/OrFileFilter.html#accept(java.io.File)">accept(File)</a></span> - Method in class org.apache.commons.io.filefilter.<a href="./org/apache/commons/io/filefilter/OrFileFilter.html" title="class in org.apache.commons.io.filefilter">OrFileFilter</a></dt>
-<dd>
-<div class="block">Checks to see if the File should be accepted by this filter.</div>
-</dd>
-<dt><span class="strong"><a href="./org/apache/commons/io/filefilter/OrFileFilter.html#accept(java.io.File, java.lang.String)">accept(File, String)</a></span> - Method in class org.apache.commons.io.filefilter.<a href="./org/apache/commons/io/filefilter/OrFileFilter.html" title="class in org.apache.commons.io.filefilter">OrFileFilter</a></dt>
-<dd>
-<div class="block">Checks to see if the File should be accepted by this filter.</div>
-</dd>
-<dt><span class="strong"><a href="./org/apache/commons/io/filefilter/PrefixFileFilter.html#accept(java.io.File)">accept(File)</a></span> - Method in class org.apache.commons.io.filefilter.<a href="./org/apache/commons/io/filefilter/PrefixFileFilter.html" title="class in org.apache.commons.io.filefilter">PrefixFileFilter</a></dt>
-<dd>
-<div class="block">Checks to see if the filename starts with the prefix.</div>
-</dd>
-<dt><span class="strong"><a href="./org/apache/commons/io/filefilter/PrefixFileFilter.html#accept(java.io.File, java.lang.String)">accept(File, String)</a></span> - Method in class org.apache.commons.io.filefilter.<a href="./org/apache/commons/io/filefilter/PrefixFileFilter.html" title="class in org.apache.commons.io.filefilter">PrefixFileFilter</a></dt>
-<dd>
-<div class="block">Checks to see if the filename starts with the prefix.</div>
-</dd>
-<dt><span class="strong"><a href="./org/apache/commons/io/filefilter/RegexFileFilter.html#accept(java.io.File, java.lang.String)">accept(File, String)</a></span> - Method in class org.apache.commons.io.filefilter.<a href="./org/apache/commons/io/filefilter/RegexFileFilter.html" title="class in org.apache.commons.io.filefilter">RegexFileFilter</a></dt>
-<dd>
-<div class="block">Checks to see if the filename matches one of the regular expressions.</div>
-</dd>
-<dt><span class="strong"><a href="./org/apache/commons/io/filefilter/SizeFileFilter.html#accept(java.io.File)">accept(File)</a></span> - Method in class org.apache.commons.io.filefilter.<a href="./org/apache/commons/io/filefilter/SizeFileFilter.html" title="class in org.apache.commons.io.filefilter">SizeFileFilter</a></dt>
-<dd>
-<div class="block">Checks to see if the size of the file is favorable.</div>
-</dd>
-<dt><span class="strong"><a href="./org/apache/commons/io/filefilter/SuffixFileFilter.html#accept(java.io.File)">accept(File)</a></span> - Method in class org.apache.commons.io.filefilter.<a href="./org/apache/commons/io/filefilter/SuffixFileFilter.html" title="class in org.apache.commons.io.filefilter">SuffixFileFilter</a></dt>
-<dd>
-<div class="block">Checks to see if the filename ends with the suffix.</div>
-</dd>
-<dt><span class="strong"><a href="./org/apache/commons/io/filefilter/SuffixFileFilter.html#accept(java.io.File, java.lang.String)">accept(File, String)</a></span> - Method in class org.apache.commons.io.filefilter.<a href="./org/apache/commons/io/filefilter/SuffixFileFilter.html" title="class in org.apache.commons.io.filefilter">SuffixFileFilter</a></dt>
-<dd>
-<div class="block">Checks to see if the filename ends with the suffix.</div>
-</dd>
-<dt><span class="strong"><a href="./org/apache/commons/io/filefilter/TrueFileFilter.html#accept(java.io.File)">accept(File)</a></span> - Method in class org.apache.commons.io.filefilter.<a href="./org/apache/commons/io/filefilter/TrueFileFilter.html" title="class in org.apache.commons.io.filefilter">TrueFileFilter</a></dt>
-<dd>
-<div class="block">Returns true.</div>
-</dd>
-<dt><span class="strong"><a href="./org/apache/commons/io/filefilter/TrueFileFilter.html#accept(java.io.File, java.lang.String)">accept(File, String)</a></span> - Method in class org.apache.commons.io.filefilter.<a href="./org/apache/commons/io/filefilter/TrueFileFilter.html" title="class in org.apache.commons.io.filefilter">TrueFileFilter</a></dt>
-<dd>
-<div class="block">Returns true.</div>
-</dd>
-<dt><span class="strong"><a href="./org/apache/commons/io/filefilter/WildcardFileFilter.html#accept(java.io.File, java.lang.String)">accept(File, String)</a></span> - Method in class org.apache.commons.io.filefilter.<a href="./org/apache/commons/io/filefilter/WildcardFileFilter.html" title="class in org.apache.commons.io.filefilter">WildcardFileFilter</a></dt>
-<dd>
-<div class="block">Checks to see if the filename matches one of the wildcards.</div>
-</dd>
-<dt><span class="strong"><a href="./org/apache/commons/io/filefilter/WildcardFileFilter.html#accept(java.io.File)">accept(File)</a></span> - Method in class org.apache.commons.io.filefilter.<a href="./org/apache/commons/io/filefilter/WildcardFileFilter.html" title="class in org.apache.commons.io.filefilter">WildcardFileFilter</a></dt>
-<dd>
-<div class="block">Checks to see if the filename matches one of the wildcards.</div>
-</dd>
-<dt><span class="strong"><a href="./org/apache/commons/io/filefilter/WildcardFilter.html#accept(java.io.File, java.lang.String)">accept(File, String)</a></span> - Method in class org.apache.commons.io.filefilter.<a href="./org/apache/commons/io/filefilter/WildcardFilter.html" title="class in org.apache.commons.io.filefilter">WildcardFilter</a></dt>
-<dd>
-<div class="block"><span class="strong">Deprecated.</span></div>
-<div class="block">Checks to see if the filename matches one of the wildcards.</div>
-</dd>
-<dt><span class="strong"><a href="./org/apache/commons/io/filefilter/WildcardFilter.html#accept(java.io.File)">accept(File)</a></span> - Method in class org.apache.commons.io.filefilter.<a href="./org/apache/commons/io/filefilter/WildcardFilter.html" title="class in org.apache.commons.io.filefilter">WildcardFilter</a></dt>
-<dd>
-<div class="block"><span class="strong">Deprecated.</span></div>
-<div class="block">Checks to see if the filename matches one of the wildcards.</div>
-</dd>
-<dt><span class="strong"><a href="./org/apache/commons/io/filefilter/AndFileFilter.html#addFileFilter(org.apache.commons.io.filefilter.IOFileFilter)">addFileFilter(IOFileFilter)</a></span> - Method in class org.apache.commons.io.filefilter.<a href="./org/apache/commons/io/filefilter/AndFileFilter.html" title="class in org.apache.commons.io.filefilter">AndFileFilter</a></dt>
-<dd>
-<div class="block">Adds the specified file filter to the list of file filters at the end of
- the list.</div>
-</dd>
-<dt><span class="strong"><a href="./org/apache/commons/io/filefilter/ConditionalFileFilter.html#addFileFilter(org.apache.commons.io.filefilter.IOFileFilter)">addFileFilter(IOFileFilter)</a></span> - Method in interface org.apache.commons.io.filefilter.<a href="./org/apache/commons/io/filefilter/ConditionalFileFilter.html" title="interface in org.apache.commons.io.filefilter">ConditionalFileFilter</a></dt>
-<dd>
-<div class="block">Adds the specified file filter to the list of file filters at the end of
- the list.</div>
-</dd>
-<dt><span class="strong"><a href="./org/apache/commons/io/filefilter/OrFileFilter.html#addFileFilter(org.apache.commons.io.filefilter.IOFileFilter)">addFileFilter(IOFileFilter)</a></span> - Method in class org.apache.commons.io.filefilter.<a href="./org/apache/commons/io/filefilter/OrFileFilter.html" title="class in org.apache.commons.io.filefilter">OrFileFilter</a></dt>
-<dd>
-<div class="block">Adds the specified file filter to the list of file filters at the end of
- the list.</div>
-</dd>
-<dt><span class="strong"><a href="./org/apache/commons/io/monitor/FileAlterationObserver.html#addListener(org.apache.commons.io.monitor.FileAlterationListener)">addListener(FileAlterationListener)</a></span> - Method in class org.apache.commons.io.monitor.<a href="./org/apache/commons/io/monitor/FileAlterationObserver.html" title="class in org.apache.commons.io.monitor">FileAlterationObserver</a></dt>
-<dd>
-<div class="block">Add a file system listener.</div>
-</dd>
-<dt><span class="strong"><a href="./org/apache/commons/io/monitor/FileAlterationMonitor.html#addObserver(org.apache.commons.io.monitor.FileAlterationObserver)">addObserver(FileAlterationObserver)</a></span> - Method in class org.apache.commons.io.monitor.<a href="./org/apache/commons/io/monitor/FileAlterationMonitor.html" title="class in org.apache.commons.io.monitor">FileAlterationMonitor</a></dt>
-<dd>
-<div class="block">Add a file system observer to this monitor.</div>
-</dd>
-<dt><span class="strong"><a href="./org/apache/commons/io/input/AutoCloseInputStream.html#afterRead(int)">afterRead(int)</a></span> - Method in class org.apache.commons.io.input.<a href="./org/apache/commons/io/input/AutoCloseInputStream.html" title="class in org.apache.commons.io.input">AutoCloseInputStream</a></dt>
-<dd>
-<div class="block">Automatically closes the stream if the end of stream was reached.</div>
-</dd>
-<dt><span class="strong"><a href="./org/apache/commons/io/input/CountingInputStream.html#afterRead(int)">afterRead(int)</a></span> - Method in class org.apache.commons.io.input.<a href="./org/apache/commons/io/input/CountingInputStream.html" title="class in org.apache.commons.io.input">CountingInputStream</a></dt>
-<dd>
-<div class="block">Adds the number of read bytes to the count.</div>
-</dd>
-<dt><span class="strong"><a href="./org/apache/commons/io/input/ProxyInputStream.html#afterRead(int)">afterRead(int)</a></span> - Method in class org.apache.commons.io.input.<a href="./org/apache/commons/io/input/ProxyInputStream.html" title="class in org.apache.commons.io.input">ProxyInputStream</a></dt>
-<dd>
-<div class="block">Invoked by the read methods after the proxied call has returned
- successfully.</div>
-</dd>
-<dt><span class="strong"><a href="./org/apache/commons/io/input/ProxyReader.html#afterRead(int)">afterRead(int)</a></span> - Method in class org.apache.commons.io.input.<a href="./org/apache/commons/io/input/ProxyReader.html" title="class in org.apache.commons.io.input">ProxyReader</a></dt>
-<dd>
-<div class="block">Invoked by the read methods after the proxied call has returned
- successfully.</div>
-</dd>
-<dt><span class="strong"><a href="./org/apache/commons/io/output/ProxyOutputStream.html#afterWrite(int)">afterWrite(int)</a></span> - Method in class org.apache.commons.io.output.<a href="./org/apache/commons/io/output/ProxyOutputStream.html" title="class in org.apache.commons.io.output">ProxyOutputStream</a></dt>
-<dd>
-<div class="block">Invoked by the write methods after the proxied call has returned
- successfully.</div>
-</dd>
-<dt><span class="strong"><a href="./org/apache/commons/io/output/ProxyWriter.html#afterWrite(int)">afterWrite(int)</a></span> - Method in class org.apache.commons.io.output.<a href="./org/apache/commons/io/output/ProxyWriter.html" title="class in org.apache.commons.io.output">ProxyWriter</a></dt>
-<dd>
-<div class="block">Invoked by the write methods after the proxied call has returned
- successfully.</div>
-</dd>
-<dt><a href="./org/apache/commons/io/filefilter/AgeFileFilter.html" title="class in org.apache.commons.io.filefilter"><span class="strong">AgeFileFilter</span></a> - Class in <a href="./org/apache/commons/io/filefilter/package-summary.html">org.apache.commons.io.filefilter</a></dt>
-<dd>
-<div class="block">Filters files based on a cutoff time, can filter either newer
- files or files equal to or older.</div>
-</dd>
-<dt><span class="strong"><a href="./org/apache/commons/io/filefilter/AgeFileFilter.html#AgeFileFilter(long)">AgeFileFilter(long)</a></span> - Constructor for class org.apache.commons.io.filefilter.<a href="./org/apache/commons/io/filefilter/AgeFileFilter.html" title="class in org.apache.commons.io.filefilter">AgeFileFilter</a></dt>
-<dd>
-<div class="block">Constructs a new age file filter for files equal to or older than
- a certain cutoff</div>
-</dd>
-<dt><span class="strong"><a href="./org/apache/commons/io/filefilter/AgeFileFilter.html#AgeFileFilter(long, boolean)">AgeFileFilter(long, boolean)</a></span> - Constructor for class org.apache.commons.io.filefilter.<a href="./org/apache/commons/io/filefilter/AgeFileFilter.html" title="class in org.apache.commons.io.filefilter">AgeFileFilter</a></dt>
-<dd>
-<div class="block">Constructs a new age file filter for files on any one side
- of a certain cutoff.</div>
-</dd>
-<dt><span class="strong"><a href="./org/apache/commons/io/filefilter/AgeFileFilter.html#AgeFileFilter(java.util.Date)">AgeFileFilter(Date)</a></span> - Constructor for class org.apache.commons.io.filefilter.<a href="./org/apache/commons/io/filefilter/AgeFileFilter.html" title="class in org.apache.commons.io.filefilter">AgeFileFilter</a></dt>
-<dd>
-<div class="block">Constructs a new age file filter for files older than (at or before)
- a certain cutoff date.</div>
-</dd>
-<dt><span class="strong"><a href="./org/apache/commons/io/filefilter/AgeFileFilter.html#AgeFileFilter(java.util.Date, boolean)">AgeFileFilter(Date, boolean)</a></span> - Constructor for class org.apache.commons.io.filefilter.<a href="./org/apache/commons/io/filefilter/AgeFileFilter.html" title="class in org.apache.commons.io.filefilter">AgeFileFilter</a></dt>
-<dd>
-<div class="block">Constructs a new age file filter for files on any one side
- of a certain cutoff date.</div>
-</dd>
-<dt><span class="strong"><a href="./org/apache/commons/io/filefilter/AgeFileFilter.html#AgeFileFilter(java.io.File)">AgeFileFilter(File)</a></span> - Constructor for class org.apache.commons.io.filefilter.<a href="./org/apache/commons/io/filefilter/AgeFileFilter.html" title="class in org.apache.commons.io.filefilter">AgeFileFilter</a></dt>
-<dd>
-<div class="block">Constructs a new age file filter for files older than (at or before)
- a certain File (whose last modification time will be used as reference).</div>
-</dd>
-<dt><span class="strong"><a href="./org/apache/commons/io/filefilter/AgeFileFilter.html#AgeFileFilter(java.io.File, boolean)">AgeFileFilter(File, boolean)</a></span> - Constructor for class org.apache.commons.io.filefilter.<a href="./org/apache/commons/io/filefilter/AgeFileFilter.html" title="class in org.apache.commons.io.filefilter">AgeFileFilter</a></dt>
-<dd>
-<div class="block">Constructs a new age file filter for files on any one side
- of a certain File (whose last modification time will be used as
- reference).</div>
-</dd>
-<dt><span class="strong"><a href="./org/apache/commons/io/filefilter/FileFilterUtils.html#ageFileFilter(long)">ageFileFilter(long)</a></span> - Static method in class org.apache.commons.io.filefilter.<a href="./org/apache/commons/io/filefilter/FileFilterUtils.html" title="class in org.apache.commons.io.filefilter">FileFilterUtils</a></dt>
-<dd>
-<div class="block">Returns a filter that returns true if the file was last modified after
- the specified cutoff time.</div>
-</dd>
-<dt><span class="strong"><a href="./org/apache/commons/io/filefilter/FileFilterUtils.html#ageFileFilter(long, boolean)">ageFileFilter(long, boolean)</a></span> - Static method in class org.apache.commons.io.filefilter.<a href="./org/apache/commons/io/filefilter/FileFilterUtils.html" title="class in org.apache.commons.io.filefilter">FileFilterUtils</a></dt>
-<dd>
-<div class="block">Returns a filter that filters files based on a cutoff time.</div>
-</dd>
-<dt><span class="strong"><a href="./org/apache/commons/io/filefilter/FileFilterUtils.html#ageFileFilter(java.util.Date)">ageFileFilter(Date)</a></span> - Static method in class org.apache.commons.io.filefilter.<a href="./org/apache/commons/io/filefilter/FileFilterUtils.html" title="class in org.apache.commons.io.filefilter">FileFilterUtils</a></dt>
-<dd>
-<div class="block">Returns a filter that returns true if the file was last modified after
- the specified cutoff date.</div>
-</dd>
-<dt><span class="strong"><a href="./org/apache/commons/io/filefilter/FileFilterUtils.html#ageFileFilter(java.util.Date, boolean)">ageFileFilter(Date, boolean)</a></span> - Static method in class org.apache.commons.io.filefilter.<a href="./org/apache/commons/io/filefilter/FileFilterUtils.html" title="class in org.apache.commons.io.filefilter">FileFilterUtils</a></dt>
-<dd>
-<div class="block">Returns a filter that filters files based on a cutoff date.</div>
-</dd>
-<dt><span class="strong"><a href="./org/apache/commons/io/filefilter/FileFilterUtils.html#ageFileFilter(java.io.File)">ageFileFilter(File)</a></span> - Static method in class org.apache.commons.io.filefilter.<a href="./org/apache/commons/io/filefilter/FileFilterUtils.html" title="class in org.apache.commons.io.filefilter">FileFilterUtils</a></dt>
-<dd>
-<div class="block">Returns a filter that returns true if the file was last modified after
- the specified reference file.</div>
-</dd>
-<dt><span class="strong"><a href="./org/apache/commons/io/filefilter/FileFilterUtils.html#ageFileFilter(java.io.File, boolean)">ageFileFilter(File, boolean)</a></span> - Static method in class org.apache.commons.io.filefilter.<a href="./org/apache/commons/io/filefilter/FileFilterUtils.html" title="class in org.apache.commons.io.filefilter">FileFilterUtils</a></dt>
-<dd>
-<div class="block">Returns a filter that filters files based on a cutoff reference file.</div>
-</dd>
-<dt><span class="strong"><a href="./org/apache/commons/io/filefilter/FileFilterUtils.html#and(org.apache.commons.io.filefilter.IOFileFilter...)">and(IOFileFilter...)</a></span> - Static method in class org.apache.commons.io.filefilter.<a href="./org/apache/commons/io/filefilter/FileFilterUtils.html" title="class in org.apache.commons.io.filefilter">FileFilterUtils</a></dt>
-<dd>
-<div class="block">Returns a filter that ANDs the specified filters.</div>
-</dd>
-<dt><a href="./org/apache/commons/io/filefilter/AndFileFilter.html" title="class in org.apache.commons.io.filefilter"><span class="strong">AndFileFilter</span></a> - Class in <a href="./org/apache/commons/io/filefilter/package-summary.html">org.apache.commons.io.filefilter</a></dt>
-<dd>
-<div class="block">A <a href="http://download.oracle.com/javase/6/docs/api/java/io/FileFilter.html?is-external=true" title="class or interface in java.io"><code>FileFilter</code></a> providing conditional AND logic across a list of
- file filters.</div>
-</dd>
-<dt><span class="strong"><a href="./org/apache/commons/io/filefilter/AndFileFilter.html#AndFileFilter()">AndFileFilter()</a></span> - Constructor for class org.apache.commons.io.filefilter.<a href="./org/apache/commons/io/filefilter/AndFileFilter.html" title="class in org.apache.commons.io.filefilter">AndFileFilter</a></dt>
-<dd>
-<div class="block">Constructs a new instance of <code>AndFileFilter</code>.</div>
-</dd>
-<dt><span class="strong"><a href="./org/apache/commons/io/filefilter/AndFileFilter.html#AndFileFilter(java.util.List)">AndFileFilter(List&lt;IOFileFilter&gt;)</a></span> - Constructor for class org.apache.commons.io.filefilter.<a href="./org/apache/commons/io/filefilter/AndFileFilter.html" title="class in org.apache.commons.io.filefilter">AndFileFilter</a></dt>
-<dd>
-<div class="block">Constructs a new instance of <code>AndFileFilter</code>
- with the specified list of filters.</div>
-</dd>
-<dt><span class="strong"><a href="./org/apache/commons/io/filefilter/AndFileFilter.html#AndFileFilter(org.apache.commons.io.filefilter.IOFileFilter, org.apache.commons.io.filefilter.IOFileFilter)">AndFileFilter(IOFileFilter, IOFileFilter)</a></span> - Constructor for class org.apache.commons.io.filefilter.<a href="./org/apache/commons/io/filefilter/AndFileFilter.html" title="class in org.apache.commons.io.filefilter">AndFileFilter</a></dt>
-<dd>
-<div class="block">Constructs a new file filter that ANDs the result of two other filters.</div>
-</dd>
-<dt><span class="strong"><a href="./org/apache/commons/io/filefilter/FileFilterUtils.html#andFileFilter(org.apache.commons.io.filefilter.IOFileFilter, org.apache.commons.io.filefilter.IOFileFilter)">andFileFilter(IOFileFilter, IOFileFilter)</a></span> - Static method in class org.apache.commons.io.filefilter.<a href="./org/apache/commons/io/filefilter/FileFilterUtils.html" title="class in org.apache.commons.io.filefilter">FileFilterUtils</a></dt>
-<dd>
-<div class="block"><span class="strong">Deprecated.</span>
-<div class="block"><i>use <a href="./org/apache/commons/io/filefilter/FileFilterUtils.html#and(org.apache.commons.io.filefilter.IOFileFilter...)"><code>FileFilterUtils.and(IOFileFilter...)</code></a></i></div>
-</div>
-</dd>
-<dt><span class="strong"><a href="./org/apache/commons/io/output/NullWriter.html#append(char)">append(char)</a></span> - Method in class org.apache.commons.io.output.<a href="./org/apache/commons/io/output/NullWriter.html" title="class in org.apache.commons.io.output">NullWriter</a></dt>
-<dd>
-<div class="block">Does nothing - output to <code>/dev/null</code>.</div>
-</dd>
-<dt><span class="strong"><a href="./org/apache/commons/io/output/NullWriter.html#append(java.lang.CharSequence, int, int)">append(CharSequence, int, int)</a></span> - Method in class org.apache.commons.io.output.<a href="./org/apache/commons/io/output/NullWriter.html" title="class in org.apache.commons.io.output">NullWriter</a></dt>
-<dd>
-<div class="block">Does nothing - output to <code>/dev/null</code>.</div>
-</dd>
-<dt><span class="strong"><a href="./org/apache/commons/io/output/NullWriter.html#append(java.lang.CharSequence)">append(CharSequence)</a></span> - Method in class org.apache.commons.io.output.<a href="./org/apache/commons/io/output/NullWriter.html" title="class in org.apache.commons.io.output">NullWriter</a></dt>
-<dd>
-<div class="block">Does nothing - output to <code>/dev/null</code>.</div>
-</dd>
-<dt><span class="strong"><a href="./org/apache/commons/io/output/ProxyWriter.html#append(char)">append(char)</a></span> - Method in class org.apache.commons.io.output.<a href="./org/apache/commons/io/output/ProxyWriter.html" title="class in org.apache.commons.io.output">ProxyWriter</a></dt>
-<dd>
-<div class="block">Invokes the delegate's <code>append(char)</code> method.</div>
-</dd>
-<dt><span class="strong"><a href="./org/apache/commons/io/output/ProxyWriter.html#append(java.lang.CharSequence, int, int)">append(CharSequence, int, int)</a></span> - Method in class org.apache.commons.io.output.<a href="./org/apache/commons/io/output/ProxyWriter.html" title="class in org.apache.commons.io.output">ProxyWriter</a></dt>
-<dd>
-<div class="block">Invokes the delegate's <code>append(CharSequence, int, int)</code> method.</div>
-</dd>
-<dt><span class="strong"><a href="./org/apache/commons/io/output/ProxyWriter.html#append(java.lang.CharSequence)">append(CharSequence)</a></span> - Method in class org.apache.commons.io.output.<a href="./org/apache/commons/io/output/ProxyWriter.html" title="class in org.apache.commons.io.output">ProxyWriter</a></dt>
-<dd>
-<div class="block">Invokes the delegate's <code>append(CharSequence)</code> method.</div>
-</dd>
-<dt><span class="strong"><a href="./org/apache/commons/io/output/StringBuilderWriter.html#append(char)">append(char)</a></span> - Method in class org.apache.commons.io.output.<a href="./org/apache/commons/io/output/StringBuilderWriter.html" title="class in org.apache.commons.io.output">StringBuilderWriter</a></dt>
-<dd>
-<div class="block">Append a single character to this Writer.</div>
-</dd>
-<dt><span class="strong"><a href="./org/apache/commons/io/output/StringBuilderWriter.html#append(java.lang.CharSequence)">append(CharSequence)</a></span> - Method in class org.apache.commons.io.output.<a href="./org/apache/commons/io/output/StringBuilderWriter.html" title="class in org.apache.commons.io.output">StringBuilderWriter</a></dt>
-<dd>
-<div class="block">Append a character sequence to this Writer.</div>
-</dd>
-<dt><span class="strong"><a href="./org/apache/commons/io/output/StringBuilderWriter.html#append(java.lang.CharSequence, int, int)">append(CharSequence, int, int)</a></span> - Method in class org.apache.commons.io.output.<a href="./org/apache/commons/io/output/StringBuilderWriter.html" title="class in org.apache.commons.io.output">StringBuilderWriter</a></dt>
-<dd>
-<div class="block">Append a portion of a character sequence to the <a href="http://download.oracle.com/javase/6/docs/api/java/lang/StringBuilder.html?is-external=true" title="class or interface in java.lang"><code>StringBuilder</code></a>.</div>
-</dd>
-<dt><span class="strong"><a href="./org/apache/commons/io/IOUtils.html#asBufferedInputStream(java.io.InputStream)">asBufferedInputStream(InputStream)</a></span> - Static method in class org.apache.commons.io.<a href="./org/apache/commons/io/IOUtils.html" title="class in org.apache.commons.io">IOUtils</a></dt>
-<dd>
-<div class="block">Returns the given InputStream if it is already a <a href="http://download.oracle.com/javase/6/docs/api/java/io/BufferedInputStream.html?is-external=true" title="class or interface in java.io"><code>BufferedInputStream</code></a>, otherwise creates a BufferedInputStream from the given
- InputStream.</div>
-</dd>
-<dt><span class="strong"><a href="./org/apache/commons/io/IOUtils.html#asBufferedOutputStream(java.io.OutputStream)">asBufferedOutputStream(OutputStream)</a></span> - Static method in class org.apache.commons.io.<a href="./org/apache/commons/io/IOUtils.html" title="class in org.apache.commons.io">IOUtils</a></dt>
-<dd>
-<div class="block">Returns the given OutputStream if it is already a <a href="http://download.oracle.com/javase/6/docs/api/java/io/BufferedOutputStream.html?is-external=true" title="class or interface in java.io"><code>BufferedOutputStream</code></a>, otherwise creates a BufferedOutputStream from the given
- OutputStream.</div>
-</dd>
-<dt><span class="strong"><a href="./org/apache/commons/io/IOUtils.html#asBufferedReader(java.io.Reader)">asBufferedReader(Reader)</a></span> - Static method in class org.apache.commons.io.<a href="./org/apache/commons/io/IOUtils.html" title="class in org.apache.commons.io">IOUtils</a></dt>
-<dd>
-<div class="block">Returns the given reader if it is already a <a href="http://download.oracle.com/javase/6/docs/api/java/io/BufferedReader.html?is-external=true" title="class or interface in java.io"><code>BufferedReader</code></a>, otherwise creates a BufferedReader from the given
- reader.</div>
-</dd>
-<dt><span class="strong"><a href="./org/apache/commons/io/IOUtils.html#asBufferedWriter(java.io.Writer)">asBufferedWriter(Writer)</a></span> - Static method in class org.apache.commons.io.<a href="./org/apache/commons/io/IOUtils.html" title="class in org.apache.commons.io">IOUtils</a></dt>
-<dd>
-<div class="block">Returns the given Writer if it is already a <a href="http://download.oracle.com/javase/6/docs/api/java/io/BufferedWriter.html?is-external=true" title="class or interface in java.io"><code>BufferedWriter</code></a>, otherwise creates a BufferedWriter from the given
- Writer.</div>
-</dd>
-<dt><span class="strong"><a href="./org/apache/commons/io/filefilter/FileFilterUtils.html#asFileFilter(java.io.FileFilter)">asFileFilter(FileFilter)</a></span> - Static method in class org.apache.commons.io.filefilter.<a href="./org/apache/commons/io/filefilter/FileFilterUtils.html" title="class in org.apache.commons.io.filefilter">FileFilterUtils</a></dt>
-<dd>
-<div class="block">Returns an <code>IOFileFilter</code> that wraps the
- <code>FileFilter</code> instance.</div>
-</dd>
-<dt><span class="strong"><a href="./org/apache/commons/io/filefilter/FileFilterUtils.html#asFileFilter(java.io.FilenameFilter)">asFileFilter(FilenameFilter)</a></span> - Static method in class org.apache.commons.io.filefilter.<a href="./org/apache/commons/io/filefilter/FileFilterUtils.html" title="class in org.apache.commons.io.filefilter">FileFilterUtils</a></dt>
-<dd>
-<div class="block">Returns an <code>IOFileFilter</code> that wraps the
- <code>FilenameFilter</code> instance.</div>
-</dd>
-<dt><a href="./org/apache/commons/io/input/AutoCloseInputStream.html" title="class in org.apache.commons.io.input"><span class="strong">AutoCloseInputStream</span></a> - Class in <a href="./org/apache/commons/io/input/package-summary.html">org.apache.commons.io.input</a></dt>
-<dd>
-<div class="block">Proxy stream that closes and discards the underlying stream as soon as the
- end of input has been reached or when the stream is explicitly closed.</div>
-</dd>
-<dt><span class="strong"><a href="./org/apache/commons/io/input/AutoCloseInputStream.html#AutoCloseInputStream(java.io.InputStream)">AutoCloseInputStream(InputStream)</a></span> - Constructor for class org.apache.commons.io.input.<a href="./org/apache/commons/io/input/AutoCloseInputStream.html" title="class in org.apache.commons.io.input">AutoCloseInputStream</a></dt>
-<dd>
-<div class="block">Creates an automatically closing proxy for the given input stream.</div>
-</dd>
-<dt><span class="strong"><a href="./org/apache/commons/io/input/BoundedInputStream.html#available()">available()</a></span> - Method in class org.apache.commons.io.input.<a href="./org/apache/commons/io/input/BoundedInputStream.html" title="class in org.apache.commons.io.input">BoundedInputStream</a></dt>
-<dt><span class="strong"><a href="./org/apache/commons/io/input/BrokenInputStream.html#available()">available()</a></span> - Method in class org.apache.commons.io.input.<a href="./org/apache/commons/io/input/BrokenInputStream.html" title="class in org.apache.commons.io.input">BrokenInputStream</a></dt>
-<dd>
-<div class="block">Throws the configured exception.</div>
-</dd>
-<dt><span class="strong"><a href="./org/apache/commons/io/input/CharSequenceInputStream.html#available()">available()</a></span> - Method in class org.apache.commons.io.input.<a href="./org/apache/commons/io/input/CharSequenceInputStream.html" title="class in org.apache.commons.io.input">CharSequenceInputStream</a></dt>
-<dd>
-<div class="block">Return an estimate of the number of bytes remaining in the byte stream.</div>
-</dd>
-<dt><span class="strong"><a href="./org/apache/commons/io/input/NullInputStream.html#available()">available()</a></span> - Method in class org.apache.commons.io.input.<a href="./org/apache/commons/io/input/NullInputStream.html" title="class in org.apache.commons.io.input">NullInputStream</a></dt>
-<dd>
-<div class="block">Return the number of bytes that can be read.</div>
-</dd>
-<dt><span class="strong"><a href="./org/apache/commons/io/input/ProxyInputStream.html#available()">available()</a></span> - Method in class org.apache.commons.io.input.<a href="./org/apache/commons/io/input/ProxyInputStream.html" title="class in org.apache.commons.io.input">ProxyInputStream</a></dt>
-<dd>
-<div class="block">Invokes the delegate's <code>available()</code> method.</div>
-</dd>
-</dl>
-<a name="_B_">
-<!--   -->
-</a>
-<h2 class="title">B</h2>
-<dl>
-<dt><span class="strong"><a href="./org/apache/commons/io/input/ProxyInputStream.html#beforeRead(int)">beforeRead(int)</a></span> - Method in class org.apache.commons.io.input.<a href="./org/apache/commons/io/input/ProxyInputStream.html" title="class in org.apache.commons.io.input">ProxyInputStream</a></dt>
-<dd>
-<div class="block">Invoked by the read methods before the call is proxied.</div>
-</dd>
-<dt><span class="strong"><a href="./org/apache/commons/io/input/ProxyReader.html#beforeRead(int)">beforeRead(int)</a></span> - Method in class org.apache.commons.io.input.<a href="./org/apache/commons/io/input/ProxyReader.html" title="class in org.apache.commons.io.input">ProxyReader</a></dt>
-<dd>
-<div class="block">Invoked by the read methods before the call is proxied.</div>
-</dd>
-<dt><span class="strong"><a href="./org/apache/commons/io/output/CountingOutputStream.html#beforeWrite(int)">beforeWrite(int)</a></span> - Method in class org.apache.commons.io.output.<a href="./org/apache/commons/io/output/CountingOutputStream.html" title="class in org.apache.commons.io.output">CountingOutputStream</a></dt>
-<dd>
-<div class="block">Updates the count with the number of bytes that are being written.</div>
-</dd>
-<dt><span class="strong"><a href="./org/apache/commons/io/output/ProxyOutputStream.html#beforeWrite(int)">beforeWrite(int)</a></span> - Method in class org.apache.commons.io.output.<a href="./org/apache/commons/io/output/ProxyOutputStream.html" title="class in org.apache.commons.io.output">ProxyOutputStream</a></dt>
-<dd>
-<div class="block">Invoked by the write methods before the call is proxied.</div>
-</dd>
-<dt><span class="strong"><a href="./org/apache/commons/io/output/ProxyWriter.html#beforeWrite(int)">beforeWrite(int)</a></span> - Method in class org.apache.commons.io.output.<a href="./org/apache/commons/io/output/ProxyWriter.html" title="class in org.apache.commons.io.output">ProxyWriter</a></dt>
-<dd>
-<div class="block">Invoked by the write methods before the call is proxied.</div>
-</dd>
-<dt><span class="strong"><a href="./org/apache/commons/io/input/DemuxInputStream.html#bindStream(java.io.InputStream)">bindStream(InputStream)</a></span> - Method in class org.apache.commons.io.input.<a href="./org/apache/commons/io/input/DemuxInputStream.html" title="class in org.apache.commons.io.input">DemuxInputStream</a></dt>
-<dd>
-<div class="block">Bind the specified stream to the current thread.</div>
-</dd>
-<dt><span class="strong"><a href="./org/apache/commons/io/output/DemuxOutputStream.html#bindStream(java.io.OutputStream)">bindStream(OutputStream)</a></span> - Method in class org.apache.commons.io.output.<a href="./org/apache/commons/io/output/DemuxOutputStream.html" title="class in org.apache.commons.io.output">DemuxOutputStream</a></dt>
-<dd>
-<div class="block">Bind the specified stream to the current thread.</div>
-</dd>
-<dt><a href="./org/apache/commons/io/input/BOMInputStream.html" title="class in org.apache.commons.io.input"><span class="strong">BOMInputStream</span></a> - Class in <a href="./org/apache/commons/io/input/package-summary.html">org.apache.commons.io.input</a></dt>
-<dd>
-<div class="block">This class is used to wrap a stream that includes an encoded <a href="./org/apache/commons/io/ByteOrderMark.html" title="class in org.apache.commons.io"><code>ByteOrderMark</code></a> as its first bytes.</div>
-</dd>
-<dt><span class="strong"><a href="./org/apache/commons/io/input/BOMInputStream.html#BOMInputStream(java.io.InputStream)">BOMInputStream(InputStream)</a></span> - Constructor for class org.apache.commons.io.input.<a href="./org/apache/commons/io/input/BOMInputStream.html" title="class in org.apache.commons.io.input">BOMInputStream</a></dt>
-<dd>
-<div class="block">Constructs a new BOM InputStream that excludes a <a href="./org/apache/commons/io/ByteOrderMark.html#UTF_8"><code>ByteOrderMark.UTF_8</code></a> BOM.</div>
-</dd>
-<dt><span class="strong"><a href="./org/apache/commons/io/input/BOMInputStream.html#BOMInputStream(java.io.InputStream, boolean)">BOMInputStream(InputStream, boolean)</a></span> - Constructor for class org.apache.commons.io.input.<a href="./org/apache/commons/io/input/BOMInputStream.html" title="class in org.apache.commons.io.input">BOMInputStream</a></dt>
-<dd>
-<div class="block">Constructs a new BOM InputStream that detects a a <a href="./org/apache/commons/io/ByteOrderMark.html#UTF_8"><code>ByteOrderMark.UTF_8</code></a> and optionally includes it.</div>
-</dd>
-<dt><span class="strong"><a href="./org/apache/commons/io/input/BOMInputStream.html#BOMInputStream(java.io.InputStream, org.apache.commons.io.ByteOrderMark...)">BOMInputStream(InputStream, ByteOrderMark...)</a></span> - Constructor for class org.apache.commons.io.input.<a href="./org/apache/commons/io/input/BOMInputStream.html" title="class in org.apache.commons.io.input">BOMInputStream</a></dt>
-<dd>
-<div class="block">Constructs a new BOM InputStream that excludes the specified BOMs.</div>
-</dd>
-<dt><span class="strong"><a href="./org/apache/commons/io/input/BOMInputStream.html#BOMInputStream(java.io.InputStream, boolean, org.apache.commons.io.ByteOrderMark...)">BOMInputStream(InputStream, boolean, ByteOrderMark...)</a></span> - Constructor for class org.apache.commons.io.input.<a href="./org/apache/commons/io/input/BOMInputStream.html" title="class in org.apache.commons.io.input">BOMInputStream</a></dt>
-<dd>
-<div class="block">Constructs a new BOM InputStream that detects the specified BOMs and optionally includes them.</div>
-</dd>
-<dt><a href="./org/apache/commons/io/input/BoundedInputStream.html" title="class in org.apache.commons.io.input"><span class="strong">BoundedInputStream</span></a> - Class in <a href="./org/apache/commons/io/input/package-summary.html">org.apache.commons.io.input</a></dt>
-<dd>
-<div class="block">This is a stream that will only supply bytes up to a certain length - if its
- position goes above that, it will stop.</div>
-</dd>
-<dt><span class="strong"><a href="./org/apache/commons/io/input/BoundedInputStream.html#BoundedInputStream(java.io.InputStream, long)">BoundedInputStream(InputStream, long)</a></span> - Constructor for class org.apache.commons.io.input.<a href="./org/apache/commons/io/input/BoundedInputStream.html" title="class in org.apache.commons.io.input">BoundedInputStream</a></dt>
-<dd>
-<div class="block">Creates a new <code>BoundedInputStream</code> that wraps the given input
- stream and limits it to a certain size.</div>
-</dd>
-<dt><span class="strong"><a href="./org/apache/commons/io/input/BoundedInputStream.html#BoundedInputStream(java.io.InputStream)">BoundedInputStream(InputStream)</a></span> - Constructor for class org.apache.commons.io.input.<a href="./org/apache/commons/io/input/BoundedInputStream.html" title="class in org.apache.commons.io.input">BoundedInputStream</a></dt>
-<dd>
-<div class="block">Creates a new <code>BoundedInputStream</code> that wraps the given input
- stream and is unlimited.</div>
-</dd>
-<dt><span class="strong"><a href="./org/apache/commons/io/output/TeeOutputStream.html#branch">branch</a></span> - Variable in class org.apache.commons.io.output.<a href="./org/apache/commons/io/output/TeeOutputStream.html" title="class in org.apache.commons.io.output">TeeOutputStream</a></dt>
-<dd>
-<div class="block">the second OutputStream to write to</div>
-</dd>
-<dt><a href="./org/apache/commons/io/input/BrokenInputStream.html" title="class in org.apache.commons.io.input"><span class="strong">BrokenInputStream</span></a> - Class in <a href="./org/apache/commons/io/input/package-summary.html">org.apache.commons.io.input</a></dt>
-<dd>
-<div class="block">Broken input stream.</div>
-</dd>
-<dt><span class="strong"><a href="./org/apache/commons/io/input/BrokenInputStream.html#BrokenInputStream(java.io.IOException)">BrokenInputStream(IOException)</a></span> - Constructor for class org.apache.commons.io.input.<a href="./org/apache/commons/io/input/BrokenInputStream.html" title="class in org.apache.commons.io.input">BrokenInputStream</a></dt>
-<dd>
-<div class="block">Creates a new stream that always throws the given exception.</div>
-</dd>
-<dt><span class="strong"><a href="./org/apache/commons/io/input/BrokenInputStream.html#BrokenInputStream()">BrokenInputStream()</a></span> - Constructor for class org.apache.commons.io.input.<a href="./org/apache/commons/io/input/BrokenInputStream.html" title="class in org.apache.commons.io.input">BrokenInputStream</a></dt>
-<dd>
-<div class="block">Creates a new stream that always throws an <a href="http://download.oracle.com/javase/6/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io"><code>IOException</code></a></div>
-</dd>
-<dt><a href="./org/apache/commons/io/output/BrokenOutputStream.html" title="class in org.apache.commons.io.output"><span class="strong">BrokenOutputStream</span></a> - Class in <a href="./org/apache/commons/io/output/package-summary.html">org.apache.commons.io.output</a></dt>
-<dd>
-<div class="block">Broken output stream.</div>
-</dd>
-<dt><span class="strong"><a href="./org/apache/commons/io/output/BrokenOutputStream.html#BrokenOutputStream(java.io.IOException)">BrokenOutputStream(IOException)</a></span> - Constructor for class org.apache.commons.io.output.<a href="./org/apache/commons/io/output/BrokenOutputStream.html" title="class in org.apache.commons.io.output">BrokenOutputStream</a></dt>
-<dd>
-<div class="block">Creates a new stream that always throws the given exception.</div>
-</dd>
-<dt><span class="strong"><a href="./org/apache/commons/io/output/BrokenOutputStream.html#BrokenOutputStream()">BrokenOutputStream()</a></span> - Constructor for class org.apache.commons.io.output.<a href="./org/apache/commons/io/output/BrokenOutputStream.html" title="class in org.apache.commons.io.output">BrokenOutputStream</a></dt>
-<dd>
-<div class="block">Creates a new stream that always throws an <a href="http://download.oracle.com/javase/6/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io"><code>IOException</code></a></div>
-</dd>
-<dt><a href="./org/apache/commons/io/output/ByteArrayOutputStream.html" title="class in org.apache.commons.io.output"><span class="strong">ByteArrayOutputStream</span></a> - Class in <a href="./org/apache/commons/io/output/package-summary.html">org.apache.commons.io.output</a></dt>
-<dd>
-<div class="block">This class implements an output stream in which the data is
- written into a byte array.</div>
-</dd>
-<dt><span class="strong"><a href="./org/apache/commons/io/output/ByteArrayOutputStream.html#ByteArrayOutputStream()">ByteArrayOutputStream()</a></span> - Constructor for class org.apache.commons.io.output.<a href="./org/apache/commons/io/output/ByteArrayOutputStream.html" title="class in org.apache.commons.io.output">ByteArrayOutputStream</a></dt>
-<dd>
-<div class="block">Creates a new byte array output stream.</div>
-</dd>
-<dt><span class="strong"><a href="./org/apache/commons/io/output/ByteArrayOutputStream.html#ByteArrayOutputStream(int)">ByteArrayOutputStream(int)</a></span> - Constructor for class org.apache.commons.io.output.<a href="./org/apache/commons/io/output/ByteArrayOutputStream.html" title="class in org.apache.commons.io.output">ByteArrayOutputStream</a></dt>
-<dd>
-<div class="block">Creates a new byte array output stream, with a buffer capacity of
- the specified size, in bytes.</div>
-</dd>
-<dt><span class="strong"><a href="./org/apache/commons/io/FileUtils.html#byteCountToDisplaySize(java.math.BigInteger)">byteCountToDisplaySize(BigInteger)</a></span> - Static method in class org.apache.commons.io.<a href="./org/apache/commons/io/FileUtils.html" title="class in org.apache.commons.io">FileUtils</a></dt>
-<dd>
-<div class="block">Returns a human-readable version of the file size, where the input represents a specific number of bytes.</div>
-</dd>
-<dt><span class="strong"><a href="./org/apache/commons/io/FileUtils.html#byteCountToDisplaySize(long)">byteCountToDisplaySize(long)</a></span> - Static method in class org.apache.commons.io.<a href="./org/apache/commons/io/FileUtils.html" title="class in org.apache.commons.io">FileUtils</a></dt>
-<dd>
-<div class="block">Returns a human-readable version of the file size, where the input represents a specific number of bytes.</div>
-</dd>
-<dt><a href="./org/apache/commons/io/ByteOrderMark.html" title="class in org.apache.commons.io"><span class="strong">ByteOrderMark</span></a> - Class in <a href="./org/apache/commons/io/package-summary.html">org.apache.commons.io</a></dt>
-<dd>
-<div class="block">Byte Order Mark (BOM) representation - see <a href="./org/apache/commons/io/input/BOMInputStream.html" title="class in org.apache.commons.io.input"><code>BOMInputStream</code></a>.</div>
-</dd>
-<dt><span class="strong"><a href="./org/apache/commons/io/ByteOrderMark.html#ByteOrderMark(java.lang.String, int...)">ByteOrderMark(String, int...)</a></span> - Constructor for class org.apache.commons.io.<a href="./org/apache/commons/io/ByteOrderMark.html" title="class in org.apache.commons.io">ByteOrderMark</a></dt>
-<dd>
-<div class="block">Construct a new BOM.</div>
-</dd>
-</dl>
-<a name="_C_">
-<!--   -->
-</a>
-<h2 class="title">C</h2>
-<dl>
-<dt><span class="strong"><a href="./org/apache/commons/io/filefilter/CanReadFileFilter.html#CAN_READ">CAN_READ</a></span> - Static variable in class org.apache.commons.io.filefilter.<a href="./org/apache/commons/io/filefilter/CanReadFileFilter.html" title="class in org.apache.commons.io.filefilter">CanReadFileFilter</a></dt>
-<dd>
-<div class="block">Singleton instance of <i>readable</i> filter</div>
-</dd>
-<dt><span class="strong"><a href="./org/apache/commons/io/filefilter/CanWriteFileFilter.html#CAN_WRITE">CAN_WRITE</a></span> - Static variable in class org.apache.commons.io.filefilter.<a href="./org/apache/commons/io/filefilter/CanWriteFileFilter.html" title="class in org.apache.commons.io.filefilter">CanWriteFileFilter</a></dt>
-<dd>
-<div class="block">Singleton instance of <i>writable</i> filter</div>
-</dd>
-<dt><span class="strong"><a href="./org/apache/commons/io/filefilter/CanReadFileFilter.html#CANNOT_READ">CANNOT_READ</a></span> - Static variable in class org.apache.commons.io.filefilter.<a href="./org/apache/commons/io/filefilter/CanReadFileFilter.html" title="class in org.apache.commons.io.filefilter">CanReadFileFilter</a></dt>
-<dd>
-<div class="block">Singleton instance of not <i>readable</i> filter</div>
-</dd>
-<dt><span class="strong"><a href="./org/apache/commons/io/filefilter/CanWriteFileFilter.html#CANNOT_WRITE">CANNOT_WRITE</a></span> - Static variable in class org.apache.commons.io.filefilter.<a href="./org/apache/commons/io/filefilter/CanWriteFileFilter.html" title="class in org.apache.commons.io.filefilter">CanWriteFileFilter</a></dt>
-<dd>
-<div class="block">Singleton instance of not <i>writable</i> filter</div>
-</dd>
-<dt><a href="./org/apache/commons/io/filefilter/CanReadFileFilter.html" title="class in org.apache.commons.io.filefilter"><span class="strong">CanReadFileFilter</span></a> - Class in <a href="./org/apache/commons/io/filefilter/package-summary.html">org.apache.commons.io.filefilter</a></dt>
-<dd>
-<div class="block">This filter accepts <code>File</code>s that can be read.</div>
-</dd>
-<dt><span class="strong"><a href="./org/apache/commons/io/filefilter/CanReadFileFilter.html#CanReadFileFilter()">CanReadFileFilter()</a></span> - Constructor for class org.apache.commons.io.filefilter.<a href="./org/apache/commons/io/filefilter/CanReadFileFilter.html" title="class in org.apache.commons.io.filefilter">CanReadFileFilter</a></dt>
-<dd>
-<div class="block">Restrictive consructor.</div>
-</dd>
-<dt><a href="./org/apache/commons/io/filefilter/CanWriteFileFilter.html" title="class in org.apache.commons.io.filefilter"><span class="strong">CanWriteFileFilter</span></a> - Class in <a href="./org/apache/commons/io/filefilter/package-summary.html">org.apache.commons.io.filefilter</a></dt>
-<dd>
-<div class="block">This filter accepts <code>File</code>s that can be written to.</div>
-</dd>
-<dt><span class="strong"><a href="./org/apache/commons/io/filefilter/CanWriteFileFilter.html#CanWriteFileFilter()">CanWriteFileFilter()</a></span> - Constructor for class org.apache.commons.io.filefilter.<a href="./org/apache/commons/io/filefilter/CanWriteFileFilter.html" title="class in org.apache.commons.io.filefilter">CanWriteFileFilter</a></dt>
-<dd>
-<div class="block">Restrictive consructor.</div>
-</dd>
-<dt><a href="./org/apache/commons/io/input/CharSequenceInputStream.html" title="class in org.apache.commons.io.input"><span class="strong">CharSequenceInputStream</span></a> - Class in <a href="./org/apache/commons/io/input/package-summary.html">org.apache.commons.io.input</a></dt>
-<dd>
-<div class="block"><a href="http://download.oracle.com/javase/6/docs/api/java/io/InputStream.html?is-external=true" title="class or interface in java.io"><code>InputStream</code></a> implementation that can read from String, StringBuffer,
- StringBuilder or CharBuffer.</div>
-</dd>
-<dt><span class="strong"><a href="./org/apache/commons/io/input/CharSequenceInputStream.html#CharSequenceInputStream(java.lang.CharSequence, java.nio.charset.Charset, int)">CharSequenceInputStream(CharSequence, Charset, int)</a></span> - Constructor for class org.apache.commons.io.input.<a href="./org/apache/commons/io/input/CharSequenceInputStream.html" title="class in org.apache.commons.io.input">CharSequenceInputStream</a></dt>
-<dd>
-<div class="block">Constructor.</div>
-</dd>
-<dt><span class="strong"><a href="./org/apache/commons/io/input/CharSequenceInputStream.html#CharSequenceInputStream(java.lang.CharSequence, java.lang.String, int)">CharSequenceInputStream(CharSequence, String, int)</a></span> - Constructor for class org.apache.commons.io.input.<a href="./org/apache/commons/io/input/CharSequenceInputStream.html" title="class in org.apache.commons.io.input">CharSequenceInputStream</a></dt>
-<dd>
-<div class="block">Constructor, calls <a href="./org/apache/commons/io/input/CharSequenceInputStream.html#CharSequenceInputStream(java.lang.CharSequence, java.nio.charset.Charset, int)"><code>CharSequenceInputStream.CharSequenceInputStream(CharSequence, Charset, int)</code></a>.</div>
-</dd>
-<dt><span class="strong"><a href="./org/apache/commons/io/input/CharSequenceInputStream.html#CharSequenceInputStream(java.lang.CharSequence, java.nio.charset.Charset)">CharSequenceInputStream(CharSequence, Charset)</a></span> - Constructor for class org.apache.commons.io.input.<a href="./org/apache/commons/io/input/CharSequenceInputStream.html" title="class in org.apache.commons.io.input">CharSequenceInputStream</a></dt>
-<dd>
-<div class="block">Constructor, calls <a href="./org/apache/commons/io/input/CharSequenceInputStream.html#CharSequenceInputStream(java.lang.CharSequence, java.nio.charset.Charset, int)"><code>CharSequenceInputStream.CharSequenceInputStream(CharSequence, Charset, int)</code></a>
- with a buffer size of 2048.</div>
-</dd>
-<dt><span class="strong"><a href="./org/apache/commons/io/input/CharSequenceInputStream.html#CharSequenceInputStream(java.lang.CharSequence, java.lang.String)">CharSequenceInputStream(CharSequence, String)</a></span> - Constructor for class org.apache.commons.io.input.<a href="./org/apache/commons/io/input/CharSequenceInputStream.html" title="class in org.apache.commons.io.input">CharSequenceInputStream</a></dt>
-<dd>
-<div class="block">Constructor, calls <a href="./org/apache/commons/io/input/CharSequenceInputStream.html#CharSequenceInputStream(java.lang.CharSequence, java.lang.String, int)"><code>CharSequenceInputStream.CharSequenceInputStream(CharSequence, String, int)</code></a>
- with a buffer size of 2048.</div>
-</dd>
-<dt><a href="./org/apache/commons/io/input/CharSequenceReader.html" title="class in org.apache.commons.io.input"><span class="strong">CharSequenceReader</span></a> - Class in <a href="./org/apache/commons/io/input/package-summary.html">org.apache.commons.io.input</a></dt>
-<dd>
-<div class="block"><a href="http://download.oracle.com/javase/6/docs/api/java/io/Reader.html?is-external=true" title="class or interface in java.io"><code>Reader</code></a> implementation that can read from String, StringBuffer,
- StringBuilder or CharBuffer.</div>
-</dd>
-<dt><span class="strong"><a href="./org/apache/commons/io/input/CharSequenceReader.html#CharSequenceReader(java.lang.CharSequence)">CharSequenceReader(CharSequence)</a></span> - Constructor for class org.apache.commons.io.input.<a href="./org/apache/commons/io/input/CharSequenceReader.html" title="class in org.apache.commons.io.input">CharSequenceReader</a></dt>
-<dd>
-<div class="block">Construct a new instance with the specified character sequence.</div>
-</dd>
-<dt><a href="./org/apache/commons/io/Charsets.html" title="class in org.apache.commons.io"><span class="strong">Charsets</span></a> - Class in <a href="./org/apache/commons/io/package-summary.html">org.apache.commons.io</a></dt>
-<dd>
-<div class="block">Charsets required of every implementation of the Java platform.</div>
-</dd>
-<dt><span class="strong"><a href="./org/apache/commons/io/Charsets.html#Charsets()">Charsets()</a></span> - Constructor for class org.apache.commons.io.<a href="./org/apache/commons/io/Charsets.html" title="class in org.apache.commons.io">Charsets</a></dt>
-<dd>&nbsp;</dd>
-<dt><span class="strong"><a href="./org/apache/commons/io/monitor/FileAlterationObserver.html#checkAndNotify()">checkAndNotify()</a></span> - Method in class org.apache.commons.io.monitor.<a href="./org/apache/commons/io/monitor/FileAlterationObserver.html" title="class in org.apache.commons.io.monitor">FileAlterationObserver</a></dt>
-<dd>
-<div class="block">Check whether the file and its chlidren have been created, modified or deleted.</div>
-</dd>
-<dt><span class="strong"><a href="./org/apache/commons/io/IOCase.html#checkCompareTo(java.lang.String, java.lang.String)">checkCompareTo(String, String)</a></span> - Method in class org.apache.commons.io.<a href="./org/apache/commons/io/IOCase.html" title="class in org.apache.commons.io">IOCase</a></dt>
-<dd>
-<div class="block">Compares two strings using the case-sensitivity rule.</div>
-</dd>
-<dt><span class="strong"><a href="./org/apache/commons/io/IOCase.html#checkEndsWith(java.lang.String, java.lang.String)">checkEndsWith(String, String)</a></span> - Method in class org.apache.commons.io.<a href="./org/apache/commons/io/IOCase.html" title="class in org.apache.commons.io">IOCase</a></dt>
-<dd>
-<div class="block">Checks if one string ends with another using the case-sensitivity rule.</div>
-</dd>
-<dt><span class="strong"><a href="./org/apache/commons/io/IOCase.html#checkEquals(java.lang.String, java.lang.String)">checkEquals(String, String)</a></span> - Method in class org.apache.commons.io.<a href="./org/apache/commons/io/IOCase.html" title="class in org.apache.commons.io">IOCase</a></dt>
-<dd>
-<div class="block">Compares two strings using the case-sensitivity rule.</div>
-</dd>
-<dt><span class="strong"><a href="./org/apache/commons/io/DirectoryWalker.html#checkIfCancelled(java.io.File, int, java.util.Collection)">checkIfCancelled(File, int, Collection&lt;T&gt;)</a></span> - Method in class org.apache.commons.io.<a href="./org/apache/commons/io/DirectoryWalker.html" title="class in org.apache.commons.io">DirectoryWalker</a></dt>
-<dd>
-<div class="block">Checks whether the walk has been cancelled by calling <a href="./org/apache/commons/io/DirectoryWalker.html#handleIsCancelled(java.io.File, int, java.util.Collection)"><code>DirectoryWalker.handleIsCancelled(java.io.File, int, java.util.Collection&lt;T&gt;)</code></a>,
- throwing a <code>CancelException</code> if it has.</div>
-</dd>
-<dt><span class="strong"><a href="./org/apache/commons/io/IOCase.html#checkIndexOf(java.lang.String, int, java.lang.String)">checkIndexOf(String, int, String)</a></span> - Method in class org.apache.commons.io.<a href="./org/apache/commons/io/IOCase.html" title="class in org.apache.commons.io">IOCase</a></dt>
-<dd>
-<div class="block">Checks if one string contains another starting at a specific index using the
- case-sensitivity rule.</div>
-</dd>
-<dt><span class="strong"><a href="./org/apache/commons/io/IOCase.html#checkRegionMatches(java.lang.String, int, java.lang.String)">checkRegionMatches(String, int, String)</a></span> - Method in class org.apache.commons.io.<a href="./org/apache/commons/io/IOCase.html" title="class in org.apache.commons.io">IOCase</a></dt>
-<dd>
-<div class="block">Checks if one string contains another at a specific index using the case-sensitivity rule.</div>
-</dd>
-<dt><span class="strong"><a href="./org/apache/commons/io/IOCase.html#checkStartsWith(java.lang.String, java.lang.String)">checkStartsWith(String, String)</a></span> - Method in class org.apache.commons.io.<a href="./org/apache/commons/io/IOCase.html" title="class in org.apache.commons.io">IOCase</a></dt>
-<dd>
-<div class="block">Checks if one string starts with another using the case-sensitivity rule.</div>
-</dd>
-<dt><span class="strong"><a href="./org/apache/commons/io/FileUtils.html#checksum(java.io.File, java.util.zip.Checksum)">checksum(File, Checksum)</a></span> - Static method in class org.apache.commons.io.<a href="./org/apache/commons/io/FileUtils.html" title="class in org.apache.commons.io">FileUtils</a></dt>
-<dd>
-<div class="block">Computes the checksum of a file using the specified checksum object.</div>
-</dd>
-<dt><span class="strong"><a href="./org/apache/commons/io/FileUtils.html#checksumCRC32(java.io.File)">checksumCRC32(File)</a></span> - Static method in class org.apache.commons.io.<a href="./org/apache/commons/io/FileUtils.html" title="class in org.apache.commons.io">FileUtils</a></dt>
-<dd>
-<div class="block">Computes the checksum of a file using the CRC32 checksum routine.</div>
-</dd>
-<dt><span class="strong"><a href="./org/apache/commons/io/output/ThresholdingOutputStream.html#checkThreshold(int)">checkThreshold(int)</a></span> - Method in class org.apache.commons.io.output.<a href="./org/apache/commons/io/output/ThresholdingOutputStream.html" title="class in org.apache.commons.io.output">ThresholdingOutputStream</a></dt>
-<dd>
-<div class="block">Checks to see if writing the specified number of bytes would cause the
- configured threshold to be exceeded.</div>
-</dd>
-<dt><a href="./org/apache/commons/io/input/ClassLoaderObjectInputStream.html" title="class in org.apache.commons.io.input"><span class="strong">ClassLoaderObjectInputStream</span></a> - Class in <a href="./org/apache/commons/io/input/package-summary.html">org.apache.commons.io.input</a></dt>
-<dd>
-<div class="block">A special ObjectInputStream that loads a class based on a specified
- <code>ClassLoader</code> rather than the system default.</div>
-</dd>
-<dt><span class="strong"><a href="./org/apache/commons/io/input/ClassLoaderObjectInputStream.html#ClassLoaderObjectInputStream(java.lang.ClassLoader, java.io.InputStream)">ClassLoaderObjectInputStream(ClassLoader, InputStream)</a></span> - Constructor for class org.apache.commons.io.input.<a href="./org/apache/commons/io/input/ClassLoaderObjectInputStream.html" title="class in org.apache.commons.io.input">ClassLoaderObjectInputStream</a></dt>
-<dd>
-<div class="block">Constructs a new ClassLoaderObjectInputStream.</div>
-</dd>
-<dt><span class="strong"><a href="./org/apache/commons/io/FileUtils.html#cleanDirectory(java.io.File)">cleanDirectory(File)</a></span> - Static method in class org.apache.commons.io.<a href="./org/apache/commons/io/FileUtils.html" title="class in org.apache.commons.io">FileUtils</a></dt>
-<dd>
-<div class="block">Cleans a directory without deleting it.</div>
-</dd>
-<dt><span class="strong"><a href="./org/apache/commons/io/input/AutoCloseInputStream.html#close()">close()</a></span> - Method in class org.apache.commons.io.input.<a href="./org/apache/commons/io/input/AutoCloseInputStream.html" title="class in org.apache.commons.io.input">AutoCloseInputStream</a></dt>
-<dd>
-<div class="block">Closes the underlying input stream and replaces the reference to it
- with a <a href="./org/apache/commons/io/input/ClosedInputStream.html" title="class in org.apache.commons.io.input"><code>ClosedInputStream</code></a> instance.</div>
-</dd>
-<dt><span class="strong"><a href="./org/apache/commons/io/input/BoundedInputStream.html#close()">close()</a></span> - Method in class org.apache.commons.io.input.<a href="./org/apache/commons/io/input/BoundedInputStream.html" title="class in org.apache.commons.io.input">BoundedInputStream</a></dt>
-<dd>
-<div class="block">Invokes the delegate's <code>close()</code> method
- if <a href="./org/apache/commons/io/input/BoundedInputStream.html#isPropagateClose()"><code>BoundedInputStream.isPropagateClose()</code></a> is <code>true</code>.</div>
-</dd>
-<dt><span class="strong"><a href="./org/apache/commons/io/input/BrokenInputStream.html#close()">close()</a></span> - Method in class org.apache.commons.io.input.<a href="./org/apache/commons/io/input/BrokenInputStream.html" title="class in org.apache.commons.io.input">BrokenInputStream</a></dt>
-<dd>
-<div class="block">Throws the configured exception.</div>
-</dd>
-<dt><span class="strong"><a href="./org/apache/commons/io/input/CharSequenceInputStream.html#close()">close()</a></span> - Method in class org.apache.commons.io.input.<a href="./org/apache/commons/io/input/CharSequenceInputStream.html" title="class in org.apache.commons.io.input">CharSequenceInputStream</a></dt>
-<dd>&nbsp;</dd>
-<dt><span class="strong"><a href="./org/apache/commons/io/input/CharSequenceReader.html#close()">close()</a></span> - Method in class org.apache.commons.io.input.<a href="./org/apache/commons/io/input/CharSequenceReader.html" title="class in org.apache.commons.io.input">CharSequenceReader</a></dt>
-<dd>
-<div class="block">Close resets the file back to the start and removes any marked position.</div>
-</dd>
-<dt><span class="strong"><a href="./org/apache/commons/io/input/CloseShieldInputStream.html#close()">close()</a></span> - Method in class org.apache.commons.io.input.<a href="./org/apache/commons/io/input/CloseShieldInputStream.html" title="class in org.apache.commons.io.input">CloseShieldInputStream</a></dt>
-<dd>
-<div class="block">Replaces the underlying input stream with a <a href="./org/apache/commons/io/input/ClosedInputStream.html" title="class in org.apache.commons.io.input"><code>ClosedInputStream</code></a>
- sentinel.</div>
-</dd>
-<dt><span class="strong"><a href="./org/apache/commons/io/input/DemuxInputStream.html#close()">close()</a></span> - Method in class org.apache.commons.io.input.<a href="./org/apache/commons/io/input/DemuxInputStream.html" title="class in org.apache.commons.io.input">DemuxInputStream</a></dt>
-<dd>
-<div class="block">Closes stream associated with current thread.</div>
-</dd>
-<dt><span class="strong"><a href="./org/apache/commons/io/input/NullInputStream.html#close()">close()</a></span> - Method in class org.apache.commons.io.input.<a href="./org/apache/commons/io/input/NullInputStream.html" title="class in org.apache.commons.io.input">NullInputStream</a></dt>
-<dd>
-<div class="block">Close this input stream - resets the internal state to
- the initial values.</div>
-</dd>
-<dt><span class="strong"><a href="./org/apache/commons/io/input/NullReader.html#close()">close()</a></span> - Method in class org.apache.commons.io.input.<a href="./org/apache/commons/io/input/NullReader.html" title="class in org.apache.commons.io.input">NullReader</a></dt>
-<dd>
-<div class="block">Close this Reader - resets the internal state to
- the initial values.</div>
-</dd>
-<dt><span class="strong"><a href="./org/apache/commons/io/input/ProxyInputStream.html#close()">close()</a></span> - Method in class org.apache.commons.io.input.<a href="./org/apache/commons/io/input/ProxyInputStream.html" title="class in org.apache.commons.io.input">ProxyInputStream</a></dt>
-<dd>
-<div class="block">Invokes the delegate's <code>close()</code> method.</div>
-</dd>
-<dt><span class="strong"><a href="./org/apache/commons/io/input/ProxyReader.html#close()">close()</a></span> - Method in class org.apache.commons.io.input.<a href="./org/apache/commons/io/input/ProxyReader.html" title="class in org.apache.commons.io.input">ProxyReader</a></dt>
-<dd>
-<div class="block">Invokes the delegate's <code>close()</code> method.</div>
-</dd>
-<dt><span class="strong"><a href="./org/apache/commons/io/input/ReaderInputStream.html#close()">close()</a></span> - Method in class org.apache.commons.io.input.<a href="./org/apache/commons/io/input/ReaderInputStream.html" title="class in org.apache.commons.io.input">ReaderInputStream</a></dt>
-<dd>
-<div class="block">Close the stream.</div>
-</dd>
-<dt><span class="strong"><a href="./org/apache/commons/io/input/ReversedLinesFileReader.html#close()">close()</a></span> - Method in class org.apache.commons.io.input.<a href="./org/apache/commons/io/input/ReversedLinesFileReader.html" title="class in org.apache.commons.io.input">ReversedLinesFileReader</a></dt>
-<dd>
-<div class="block">Closes underlying resources.</div>
-</dd>
-<dt><span class="strong"><a href="./org/apache/commons/io/input/TeeInputStream.html#close()">close()</a></span> - Method in class org.apache.commons.io.input.<a href="./org/apache/commons/io/input/TeeInputStream.html" title="class in org.apache.commons.io.input">TeeInputStream</a></dt>
-<dd>
-<div class="block">Closes the proxied input stream and, if so configured, the associated
- output stream.</div>
-</dd>
-<dt><span class="strong"><a href="./org/apache/commons/io/input/XmlStreamReader.html#close()">close()</a></span> - Method in class org.apache.commons.io.input.<a href="./org/apache/commons/io/input/XmlStreamReader.html" title="class in org.apache.commons.io.input">XmlStreamReader</a></dt>
-<dd>
-<div class="block">Closes the XmlStreamReader stream.</div>
-</dd>
-<dt><span class="strong"><a href="./org/apache/commons/io/IOUtils.html#close(java.net.URLConnection)">close(URLConnection)</a></span> - Static method in class org.apache.commons.io.<a href="./org/apache/commons/io/IOUtils.html" title="class in org.apache.commons.io">IOUtils</a></dt>
-<dd>
-<div class="block">Closes a URLConnection.</div>
-</dd>
-<dt><span class="strong"><a href="./org/apache/commons/io/LineIterator.html#close()">close()</a></span> - Method in class org.apache.commons.io.<a href="./org/apache/commons/io/LineIterator.html" title="class in org.apache.commons.io">LineIterator</a></dt>
-<dd>
-<div class="block">Closes the underlying <code>Reader</code> quietly.</div>
-</dd>
-<dt><span class="strong"><a href="./org/apache/commons/io/output/BrokenOutputStream.html#close()">close()</a></span> - Method in class org.apache.commons.io.output.<a href="./org/apache/commons/io/output/BrokenOutputStream.html" title="class in org.apache.commons.io.output">BrokenOutputStream</a></dt>
-<dd>
-<div class="block">Throws the configured exception.</div>
-</dd>
-<dt><span class="strong"><a href="./org/apache/commons/io/output/ByteArrayOutputStream.html#close()">close()</a></span> - Method in class org.apache.commons.io.output.<a href="./org/apache/commons/io/output/ByteArrayOutputStream.html" title="class in org.apache.commons.io.output">ByteArrayOutputStream</a></dt>
-<dd>
-<div class="block">Closing a <tt>ByteArrayOutputStream</tt> has no effect.</div>
-</dd>
-<dt><span class="strong"><a href="./org/apache/commons/io/output/CloseShieldOutputStream.html#close()">close()</a></span> - Method in class org.apache.commons.io.output.<a href="./org/apache/commons/io/output/CloseShieldOutputStream.html" title="class in org.apache.commons.io.output">CloseShieldOutputStream</a></dt>
-<dd>
-<div class="block">Replaces the underlying output stream with a <a href="./org/apache/commons/io/output/ClosedOutputStream.html" title="class in org.apache.commons.io.output"><code>ClosedOutputStream</code></a>
- sentinel.</div>
-</dd>
-<dt><span class="strong"><a href="./org/apache/commons/io/output/DeferredFileOutputStream.html#close()">close()</a></span> - Method in class org.apache.commons.io.output.<a href="./org/apache/commons/io/output/DeferredFileOutputStream.html" title="class in org.apache.commons.io.output">DeferredFileOutputStream</a></dt>
-<dd>
-<div class="block">Closes underlying output stream, and mark this as closed</div>
-</dd>
-<dt><span class="strong"><a href="./org/apache/commons/io/output/DemuxOutputStream.html#close()">close()</a></span> - Method in class org.apache.commons.io.output.<a href="./org/apache/commons/io/output/DemuxOutputStream.html" title="class in org.apache.commons.io.output">DemuxOutputStream</a></dt>
-<dd>
-<div class="block">Closes stream associated with current thread.</div>
-</dd>
-<dt><span class="strong"><a href="./org/apache/commons/io/output/FileWriterWithEncoding.html#close()">close()</a></span> - Method in class org.apache.commons.io.output.<a href="./org/apache/commons/io/output/FileWriterWithEncoding.html" title="class in org.apache.commons.io.output">FileWriterWithEncoding</a></dt>
-<dd>
-<div class="block">Close the stream.</div>
-</dd>
-<dt><span class="strong"><a href="./org/apache/commons/io/output/LockableFileWriter.html#close()">close()</a></span> - Method in class org.apache.commons.io.output.<a href="./org/apache/commons/io/output/LockableFileWriter.html" title="class in org.apache.commons.io.output">LockableFileWriter</a></dt>
-<dd>
-<div class="block">Closes the file writer and deletes the lockfile (if possible).</div>
-</dd>
-<dt><span class="strong"><a href="./org/apache/commons/io/output/NullWriter.html#close()">close()</a></span> - Method in class org.apache.commons.io.output.<a href="./org/apache/commons/io/output/NullWriter.html" title="class in org.apache.commons.io.output">NullWriter</a></dt>
-<dd>&nbsp;</dd>
-<dt><span class="strong"><a href="./org/apache/commons/io/output/ProxyOutputStream.html#close()">close()</a></span> - Method in class org.apache.commons.io.output.<a href="./org/apache/commons/io/output/ProxyOutputStream.html" title="class in org.apache.commons.io.output">ProxyOutputStream</a></dt>
-<dd>
-<div class="block">Invokes the delegate's <code>close()</code> method.</div>
-</dd>
-<dt><span class="strong"><a href="./org/apache/commons/io/output/ProxyWriter.html#close()">close()</a></span> - Method in class org.apache.commons.io.output.<a href="./org/apache/commons/io/output/ProxyWriter.html" title="class in org.apache.commons.io.output">ProxyWriter</a></dt>
-<dd>
-<div class="block">Invokes the delegate's <code>close()</code> method.</div>
-</dd>
-<dt><span class="strong"><a href="./org/apache/commons/io/output/StringBuilderWriter.html#close()">close()</a></span> - Method in class org.apache.commons.io.output.<a href="./org/apache/commons/io/output/StringBuilderWriter.html" title="class in org.apache.commons.io.output">StringBuilderWriter</a></dt>
-<dd>
-<div class="block">Closing this writer has no effect.</div>
-</dd>
-<dt><span class="strong"><a href="./org/apache/commons/io/output/TeeOutputStream.html#close()">close()</a></span> - Method in class org.apache.commons.io.output.<a href="./org/apache/commons/io/output/TeeOutputStream.html" title="class in org.apache.commons.io.output">TeeOutputStream</a></dt>
-<dd>
-<div class="block">Closes both output streams.</div>
-</dd>
-<dt><span class="strong"><a href="./org/apache/commons/io/output/ThresholdingOutputStream.html#close()">close()</a></span> - Method in class org.apache.commons.io.output.<a href="./org/apache/commons/io/output/ThresholdingOutputStream.html" title="class in org.apache.commons.io.output">ThresholdingOutputStream</a></dt>
-<dd>
-<div class="block">Closes this output stream and releases any system resources associated
- with this stream.</div>
-</dd>
-<dt><span class="strong"><a href="./org/apache/commons/io/output/WriterOutputStream.html#close()">close()</a></span> - Method in class org.apache.commons.io.output.<a href="./org/apache/commons/io/output/WriterOutputStream.html" title="class in org.apache.commons.io.output">WriterOutputStream</a></dt>
-<dd>
-<div class="block">Close the stream.</div>
-</dd>
-<dt><span class="strong"><a href="./org/apache/commons/io/output/XmlStreamWriter.html#close()">close()</a></span> - Method in class org.apache.commons.io.output.<a href="./org/apache/commons/io/output/XmlStreamWriter.html" title="class in org.apache.commons.io.output">XmlStreamWriter</a></dt>
-<dd>
-<div class="block">Close the underlying writer.</div>
-</dd>
-<dt><span class="strong"><a href="./org/apache/commons/io/input/ClosedInputStream.html#CLOSED_INPUT_STREAM">CLOSED_INPUT_STREAM</a></span> - Static variable in class org.apache.commons.io.input.<a href="./org/apache/commons/io/input/ClosedInputStream.html" title="class in org.apache.commons.io.input">ClosedInputStream</a></dt>
-<dd>
-<div class="block">A singleton.</div>
-</dd>
-<dt><span class="strong"><a href="./org/apache/commons/io/output/ClosedOutputStream.html#CLOSED_OUTPUT_STREAM">CLOSED_OUTPUT_STREAM</a></span> - Static variable in class org.apache.commons.io.output.<a href="./org/apache/commons/io/output/ClosedOutputStream.html" title="class in org.apache.commons.io.output">ClosedOutputStream</a></dt>
-<dd>
-<div class="block">A singleton.</div>
-</dd>
-<dt><a href="./org/apache/commons/io/input/ClosedInputStream.html" title="class in org.apache.commons.io.input"><span class="strong">ClosedInputStream</span></a> - Class in <a href="./org/apache/commons/io/input/package-summary.html">org.apache.commons.io.input</a></dt>
-<dd>
-<div class="block">Closed input stream.</div>
-</dd>
-<dt><span class="strong"><a href="./org/apache/commons/io/input/ClosedInputStream.html#ClosedInputStream()">ClosedInputStream()</a></span> - Constructor for class org.apache.commons.io.input.<a href="./org/apache/commons/io/input/ClosedInputStream.html" title="class in org.apache.commons.io.input">ClosedInputStream</a></dt>
-<dd>&nbsp;</dd>
-<dt><a href="./org/apache/commons/io/output/ClosedOutputStream.html" title="class in org.apache.commons.io.output"><span class="strong">ClosedOutputStream</span></a> - Class in <a href="./org/apache/commons/io/output/package-summary.html">org.apache.commons.io.output</a></dt>
-<dd>
-<div class="block">Closed output stream.</div>
-</dd>
-<dt><span class="strong"><a href="./org/apache/commons/io/output/ClosedOutputStream.html#ClosedOutputStream()">ClosedOutputStream()</a></span> - Constructor for class org.apache.commons.io.output.<a href="./org/apache/commons/io/output/ClosedOutputStream.html" title="class in org.apache.commons.io.output">ClosedOutputStream</a></dt>
-<dd>&nbsp;</dd>
-<dt><span class="strong"><a href="./org/apache/commons/io/IOUtils.html#closeQuietly(java.io.Reader)">closeQuietly(Reader)</a></span> - Static method in class org.apache.commons.io.<a href="./org/apache/commons/io/IOUtils.html" title="class in org.apache.commons.io">IOUtils</a></dt>
-<dd>
-<div class="block">Closes an <code>Reader</code> unconditionally.</div>
-</dd>
-<dt><span class="strong"><a href="./org/apache/commons/io/IOUtils.html#closeQuietly(java.io.Writer)">closeQuietly(Writer)</a></span> - Static method in class org.apache.commons.io.<a href="./org/apache/commons/io/IOUtils.html" title="class in org.apache.commons.io">IOUtils</a></dt>
-<dd>
-<div class="block">Closes an <code>Writer</code> unconditionally.</div>
-</dd>
-<dt><span class="strong"><a href="./org/apache/commons/io/IOUtils.html#closeQuietly(java.io.InputStream)">closeQuietly(InputStream)</a></span> - Static method in class org.apache.commons.io.<a href="./org/apache/commons/io/IOUtils.html" title="class in org.apache.commons.io">IOUtils</a></dt>
-<dd>
-<div class="block">Closes an <code>InputStream</code> unconditionally.</div>
-</dd>
-<dt><span class="strong"><a href="./org/apache/commons/io/IOUtils.html#closeQuietly(java.io.OutputStream)">closeQuietly(OutputStream)</a></span> - Static method in class org.apache.commons.io.<a href="./org/apache/commons/io/IOUtils.html" title="class in org.apache.commons.io">IOUtils</a></dt>
-<dd>
-<div class="block">Closes an <code>OutputStream</code> unconditionally.</div>
-</dd>
-<dt><span class="strong"><a href="./org/apache/commons/io/IOUtils.html#closeQuietly(java.io.Closeable)">closeQuietly(Closeable)</a></span> - Static method in class org.apache.commons.io.<a href="./org/apache/commons/io/IOUtils.html" title="class in org.apache.commons.io">IOUtils</a></dt>
-<dd>
-<div class="block">Closes a <code>Closeable</code> unconditionally.</div>
-</dd>
-<dt><span class="strong"><a href="./org/apache/commons/io/IOUtils.html#closeQuietly(java.net.Socket)">closeQuietly(Socket)</a></span> - Static method in class org.apache.commons.io.<a href="./org/apache/commons/io/IOUtils.html" title="class in org.apache.commons.io">IOUtils</a></dt>
-<dd>
-<div class="block">Closes a <code>Socket</code> unconditionally.</div>
-</dd>
-<dt><span class="strong"><a href="./org/apache/commons/io/IOUtils.html#closeQuietly(java.nio.channels.Selector)">closeQuietly(Selector)</a></span> - Static method in class org.apache.commons.io.<a href="./org/apache/commons/io/IOUtils.html" title="class in org.apache.commons.io">IOUtils</a></dt>
-<dd>
-<div class="block">Closes a <code>Selector</code> unconditionally.</div>
-</dd>
-<dt><span class="strong"><a href="./org/apache/commons/io/IOUtils.html#closeQuietly(java.net.ServerSocket)">closeQuietly(ServerSocket)</a></span> - Static method in class org.apache.commons.io.<a href="./org/apache/commons/io/IOUtils.html" title="class in org.apache.commons.io">IOUtils</a></dt>
-<dd>
-<div class="block">Closes a <code>ServerSocket</code> unconditionally.</div>
-</dd>
-<dt><span class="strong"><a href="./org/apache/commons/io/LineIterator.html#closeQuietly(org.apache.commons.io.LineIterator)">closeQuietly(LineIterator)</a></span> - Static method in class org.apache.commons.io.<a href="./org/apache/commons/io/LineIterator.html" title="class in org.apache.commons.io">LineIterator</a></dt>
-<dd>
-<div class="block">Closes the iterator, handling null and ignoring exceptions.</div>
-</dd>
-<dt><a href="./org/apache/commons/io/input/CloseShieldInputStream.html" title="class in org.apache.commons.io.input"><span class="strong">CloseShieldInputStream</span></a> - Class in <a href="./org/apache/commons/io/input/package-summary.html">org.apache.commons.io.input</a></dt>
-<dd>
-<div class="block">Proxy stream that prevents the underlying input stream from being closed.</div>
-</dd>
-<dt><span class="strong"><a href="./org/apache/commons/io/input/CloseShieldInputStream.html#CloseShieldInputStream(java.io.InputStream)">CloseShieldInputStream(InputStream)</a></span> - Constructor for class org.apache.commons.io.input.<a href="./org/apache/commons/io/input/CloseShieldInputStream.html" title="class in org.apache.commons.io.input">CloseShieldInputStream</a></dt>
-<dd>
-<div class="block">Creates a proxy that shields the given input stream from being
- closed.</div>
-</dd>
-<dt><a href="./org/apache/commons/io/output/CloseShieldOutputStream.html" title="class in org.apache.commons.io.output"><span class="strong">CloseShieldOutputStream</span></a> - Class in <a href="./org/apache/commons/io/output/package-summary.html">org.apache.commons.io.output</a></dt>
-<dd>
-<div class="block">Proxy stream that prevents the underlying output stream from being closed.</div>
-</dd>
-<dt><span class="strong"><a href="./org/apache/commons/io/output/CloseShieldOutputStream.html#CloseShieldOutputStream(java.io.OutputStream)">CloseShieldOutputStream(OutputStream)</a></span> - Constructor for class org.apache.commons.io.output.<a href="./org/apache/commons/io/output/CloseShieldOutputStream.html" title="class in org.apache.commons.io.output">CloseShieldOutputStream</a></dt>
-<dd>
-<div class="block">Creates a proxy that shields the given output stream from being
- closed.</div>
-</dd>
-<dt><span class="strong"><a href="./org/apache/commons/io/comparator/CompositeFileComparator.html#compare(java.io.File, java.io.File)">compare(File, File)</a></span> - Method in class org.apache.commons.io.comparator.<a href="./org/apache/commons/io/comparator/CompositeFileComparator.html" title="class in org.apache.commons.io.comparator">CompositeFileComparator</a></dt>
-<dd>
-<div class="block">Compare the two files using delegate comparators.</div>
-</dd>
-<dt><span class="strong"><a href="./org/apache/commons/io/comparator/DefaultFileComparator.html#compare(java.io.File, java.io.File)">compare(File, File)</a></span> - Method in class org.apache.commons.io.comparator.<a href="./org/apache/commons/io/comparator/DefaultFileComparator.html" title="class in org.apache.commons.io.comparator">DefaultFileComparator</a></dt>
-<dd>
-<div class="block">Compare the two files using the <a href="http://download.oracle.com/javase/6/docs/api/java/io/File.html?is-external=true#compareTo(java.io.File)" title="class or interface in java.io"><code>File.compareTo(File)</code></a> method.</div>
-</dd>
-<dt><span class="strong"><a href="./org/apache/commons/io/comparator/DirectoryFileComparator.html#compare(java.io.File, java.io.File)">compare(File, File)</a></span> - Method in class org.apache.commons.io.comparator.<a href="./org/apache/commons/io/comparator/DirectoryFileComparator.html" title="class in org.apache.commons.io.comparator">DirectoryFileComparator</a></dt>
-<dd>
-<div class="block">Compare the two files using the <a href="http://download.oracle.com/javase/6/docs/api/java/io/File.html?is-external=true#isDirectory()" title="class or interface in java.io"><code>File.isDirectory()</code></a> method.</div>
-</dd>
-<dt><span class="strong"><a href="./org/apache/commons/io/comparator/ExtensionFileComparator.html#compare(java.io.File, java.io.File)">compare(File, File)</a></span> - Method in class org.apache.commons.io.comparator.<a href="./org/apache/commons/io/comparator/ExtensionFileComparator.html" title="class in org.apache.commons.io.comparator">ExtensionFileComparator</a></dt>
-<dd>
-<div class="block">Compare the extensions of two files the specified case sensitivity.</div>
-</dd>
-<dt><span class="strong"><a href="./org/apache/commons/io/comparator/LastModifiedFileComparator.html#compare(java.io.File, java.io.File)">compare(File, File)</a></span> - Method in class org.apache.commons.io.comparator.<a href="./org/apache/commons/io/comparator/LastModifiedFileComparator.html" title="class in org.apache.commons.io.comparator">LastModifiedFileComparator</a></dt>
-<dd>
-<div class="block">Compare the last the last modified date/time of two files.</div>
-</dd>
-<dt><span class="strong"><a href="./org/apache/commons/io/comparator/NameFileComparator.html#compare(java.io.File, java.io.File)">compare(File, File)</a></span> - Method in class org.apache.commons.io.comparator.<a href="./org/apache/commons/io/comparator/NameFileComparator.html" title="class in org.apache.commons.io.comparator">NameFileComparator</a></dt>
-<dd>
-<div class="block">Compare the names of two files with the specified case sensitivity.</div>
-</dd>
-<dt><span class="strong"><a href="./org/apache/commons/io/comparator/PathFileComparator.html#compare(java.io.File, java.io.File)">compare(File, File)</a></span> - Method in class org.apache.commons.io.comparator.<a href="./org/apache/commons/io/comparator/PathFileComparator.html" title="class in org.apache.commons.io.comparator">PathFileComparator</a></dt>
-<dd>
-<div class="block">Compare the paths of two files the specified case sensitivity.</div>
-</dd>
-<dt><span class="strong"><a href="./org/apache/commons/io/comparator/SizeFileComparator.html#compare(java.io.File, java.io.File)">compare(File, File)</a></span> - Method in class org.apache.commons.io.comparator.<a href="./org/apache/commons/io/comparator/SizeFileComparator.html" title="class in org.apache.commons.io.comparator">SizeFileComparator</a></dt>
-<dd>
-<div class="block">Compare the length of two files.</div>
-</dd>
-<dt><a href="./org/apache/commons/io/comparator/CompositeFileComparator.html" title="class in org.apache.commons.io.comparator"><span class="strong">CompositeFileComparator</span></a> - Class in <a href="./org/apache/commons/io/comparator/package-summary.html">org.apache.commons.io.comparator</a></dt>
-<dd>
-<div class="block">Compare two files using a set of delegate file <a href="http://download.oracle.com/javase/6/docs/api/java/util/Comparator.html?is-external=true" title="class or interface in java.util"><code>Comparator</code></a>.</div>
-</dd>
-<dt><span class="strong"><a href="./org/apache/commons/io/comparator/CompositeFileComparator.html#CompositeFileComparator(java.util.Comparator...)">CompositeFileComparator(Comparator&lt;File&gt;...)</a></span> - Constructor for class org.apache.commons.io.comparator.<a href="./org/apache/commons/io/comparator/CompositeFileComparator.html" title="class in org.apache.commons.io.comparator">CompositeFileComparator</a></dt>
-<dd>
-<div class="block">Create a composite comparator for the set of delegate comparators.</div>
-</dd>
-<dt><span class="strong"><a href="./org/apache/commons/io/comparator/CompositeFileComparator.html#CompositeFileComparator(java.lang.Iterable)">CompositeFileComparator(Iterable&lt;Comparator&lt;File&gt;&gt;)</a></span> - Constructor for class org.apache.commons.io.comparator.<a href="./org/apache/commons/io/comparator/CompositeFileComparator.html" title="class in org.apache.commons.io.comparator">CompositeFileComparator</a></dt>
-<dd>
-<div class="block">Create a composite comparator for the set of delegate comparators.</div>
-</dd>
-<dt><span class="strong"><a href="./org/apache/commons/io/FilenameUtils.html#concat(java.lang.String, java.lang.String)">concat(String, String)</a></span> - Static method in class org.apache.commons.io.<a href="./org/apache/commons/io/FilenameUtils.html" title="class in org.apache.commons.io">FilenameUtils</a></dt>
-<dd>
-<div class="block">Concatenates a filename to a base path using normal command line style rules.</div>
-</dd>
-<dt><a href="./org/apache/commons/io/filefilter/ConditionalFileFilter.html" title="interface in org.apache.commons.io.filefilter"><span class="strong">ConditionalFileFilter</span></a> - Interface in <a href="./org/apache/commons/io/filefilter/package-summary.html">org.apache.commons.io.filefilter</a></dt>
-<dd>
-<div class="block">Defines operations for conditional file filters.</div>
-</dd>
-<dt><span class="strong"><a href="./org/apache/commons/io/FileUtils.html#contentEquals(java.io.File, java.io.File)">contentEquals(File, File)</a></span> - Static method in class org.apache.commons.io.<a href="./org/apache/commons/io/FileUtils.html" title="class in org.apache.commons.io">FileUtils</a></dt>
-<dd>
-<div class="block">Compares the contents of two files to determine if they are equal or not.</div>
-</dd>
-<dt><span class="strong"><a href="./org/apache/commons/io/IOUtils.html#contentEquals(java.io.InputStream, java.io.InputStream)">contentEquals(InputStream, InputStream)</a></span> - Static method in class org.apache.commons.io.<a href="./org/apache/commons/io/IOUtils.html" title="class in org.apache.commons.io">IOUtils</a></dt>
-<dd>
-<div class="block">Compares the contents of two Streams to determine if they are equal or
- not.</div>
-</dd>
-<dt><span class="strong"><a href="./org/apache/commons/io/IOUtils.html#contentEquals(java.io.Reader, java.io.Reader)">contentEquals(Reader, Reader)</a></span> - Static method in class org.apache.commons.io.<a href="./org/apache/commons/io/IOUtils.html" title="class in org.apache.commons.io">IOUtils</a></dt>
-<dd>
-<div class="block">Compares the contents of two Readers to determine if they are equal or
- not.</div>
-</dd>
-<dt><span class="strong"><a href="./org/apache/commons/io/FileUtils.html#contentEqualsIgnoreEOL(java.io.File, java.io.File, java.lang.String)">contentEqualsIgnoreEOL(File, File, String)</a></span> - Static method in class org.apache.commons.io.<a href="./org/apache/commons/io/FileUtils.html" title="class in org.apache.commons.io">FileUtils</a></dt>
-<dd>
-<div class="block">Compares the contents of two files to determine if they are equal or not.</div>
-</dd>
-<dt><span class="strong"><a href="./org/apache/commons/io/IOUtils.html#contentEqualsIgnoreEOL(java.io.Reader, java.io.Reader)">contentEqualsIgnoreEOL(Reader, Reader)</a></span> - Static method in class org.apache.commons.io.<a href="./org/apache/commons/io/IOUtils.html" title="class in org.apache.commons.io">IOUtils</a></dt>
-<dd>
-<div class="block">Compares the contents of two Readers to determine if they are equal or
- not, ignoring EOL characters.</div>
-</dd>
-<dt><span class="strong"><a href="./org/apache/commons/io/FileUtils.html#convertFileCollectionToFileArray(java.util.Collection)">convertFileCollectionToFileArray(Collection&lt;File&gt;)</a></span> - Static method in class org.apache.commons.io.<a href="./org/apache/commons/io/FileUtils.html" title="class in org.apache.commons.io">FileUtils</a></dt>
-<dd>
-<div class="block">Converts a Collection containing java.io.File instanced into array
- representation.</div>
-</dd>
-<dt><span class="strong"><a href="./org/apache/commons/io/CopyUtils.html#copy(byte[], java.io.OutputStream)">copy(byte[], OutputStream)</a></span> - Static method in class org.apache.commons.io.<a href="./org/apache/commons/io/CopyUtils.html" title="class in org.apache.commons.io">CopyUtils</a></dt>
-<dd>
-<div class="block"><span class="strong">Deprecated.</span></div>
-<div class="block">Copy bytes from a <code>byte[]</code> to an <code>OutputStream</code>.</div>
-</dd>
-<dt><span class="strong"><a href="./org/apache/commons/io/CopyUtils.html#copy(byte[], java.io.Writer)">copy(byte[], Writer)</a></span> - Static method in class org.apache.commons.io.<a href="./org/apache/commons/io/CopyUtils.html" title="class in org.apache.commons.io">CopyUtils</a></dt>
-<dd>
-<div class="block"><span class="strong">Deprecated.</span>
-<div class="block"><i>2.5 use <a href="./org/apache/commons/io/CopyUtils.html#copy(byte[], java.io.Writer, java.lang.String)"><code>CopyUtils.copy(byte[], Writer, String)</code></a> instead</i></div>
-</div>
-</dd>
-<dt><span class="strong"><a href="./org/apache/commons/io/CopyUtils.html#copy(byte[], java.io.Writer, java.lang.String)">copy(byte[], Writer, String)</a></span> - Static method in class org.apache.commons.io.<a href="./org/apache/commons/io/CopyUtils.html" title="class in org.apache.commons.io">CopyUtils</a></dt>
-<dd>
-<div class="block"><span class="strong">Deprecated.</span></div>
-<div class="block">Copy and convert bytes from a <code>byte[]</code> to chars on a
- <code>Writer</code>, using the specified encoding.</div>
-</dd>
-<dt><span class="strong"><a href="./org/apache/commons/io/CopyUtils.html#copy(java.io.InputStream, java.io.OutputStream)">copy(InputStream, OutputStream)</a></span> - Static method in class org.apache.commons.io.<a href="./org/apache/commons/io/CopyUtils.html" title="class in org.apache.commons.io">CopyUtils</a></dt>
-<dd>
-<div class="block"><span class="strong">Deprecated.</span></div>
-<div class="block">Copy bytes from an <code>InputStream</code> to an
- <code>OutputStream</code>.</div>
-</dd>
-<dt><span class="strong"><a href="./org/apache/commons/io/CopyUtils.html#copy(java.io.Reader, java.io.Writer)">copy(Reader, Writer)</a></span> - Static method in class org.apache.commons.io.<a href="./org/apache/commons/io/CopyUtils.html" title="class in org.apache.commons.io">CopyUtils</a></dt>
-<dd>
-<div class="block"><span class="strong">Deprecated.</span></div>
-<div class="block">Copy chars from a <code>Reader</code> to a <code>Writer</code>.</div>
-</dd>
-<dt><span class="strong"><a href="./org/apache/commons/io/CopyUtils.html#copy(java.io.InputStream, java.io.Writer)">copy(InputStream, Writer)</a></span> - Static method in class org.apache.commons.io.<a href="./org/apache/commons/io/CopyUtils.html" title="class in org.apache.commons.io">CopyUtils</a></dt>
-<dd>
-<div class="block"><span class="strong">Deprecated.</span>
-<div class="block"><i>2.5 use <a href="./org/apache/commons/io/CopyUtils.html#copy(java.io.InputStream, java.io.Writer, java.lang.String)"><code>CopyUtils.copy(InputStream, Writer, String)</code></a> instead</i></div>
-</div>
-</dd>
-<dt><span class="strong"><a href="./org/apache/commons/io/CopyUtils.html#copy(java.io.InputStream, java.io.Writer, java.lang.String)">copy(InputStream, Writer, String)</a></span> - Static method in class org.apache.commons.io.<a href="./org/apache/commons/io/CopyUtils.html" title="class in org.apache.commons.io">CopyUtils</a></dt>
-<dd>
-<div class="block"><span class="strong">Deprecated.</span></div>
-<div class="block">Copy and convert bytes from an <code>InputStream</code> to chars on a
- <code>Writer</code>, using the specified encoding.</div>
-</dd>
-<dt><span class="strong"><a href="./org/apache/commons/io/CopyUtils.html#copy(java.io.Reader, java.io.OutputStream)">copy(Reader, OutputStream)</a></span> - Static method in class org.apache.commons.io.<a href="./org/apache/commons/io/CopyUtils.html" title="class in org.apache.commons.io">CopyUtils</a></dt>
-<dd>
-<div class="block"><span class="strong">Deprecated.</span>
-<div class="block"><i>2.5 use <a href="./org/apache/commons/io/CopyUtils.html#copy(java.io.Reader, java.io.OutputStream, java.lang.String)"><code>CopyUtils.copy(Reader, OutputStream, String)</code></a> instead</i></div>
-</div>
-</dd>
-<dt><span class="strong"><a href="./org/apache/commons/io/CopyUtils.html#copy(java.io.Reader, java.io.OutputStream, java.lang.String)">copy(Reader, OutputStream, String)</a></span> - Static method in class org.apache.commons.io.<a href="./org/apache/commons/io/CopyUtils.html" title="class in org.apache.commons.io">CopyUtils</a></dt>
-<dd>
-<div class="block"><span class="strong">Deprecated.</span></div>
-<div class="block">Serialize chars from a <code>Reader</code> to bytes on an
- <code>OutputStream</code>, and flush the <code>OutputStream</code>.</div>
-</dd>
-<dt><span class="strong"><a href="./org/apache/commons/io/CopyUtils.html#copy(java.lang.String, java.io.OutputStream)">copy(String, OutputStream)</a></span> - Static method in class org.apache.commons.io.<a href="./org/apache/commons/io/CopyUtils.html" title="class in org.apache.commons.io">CopyUtils</a></dt>
-<dd>
-<div class="block"><span class="strong">Deprecated.</span>
-<div class="block"><i>2.5 use <a href="./org/apache/commons/io/CopyUtils.html#copy(java.lang.String, java.io.OutputStream, java.lang.String)"><code>CopyUtils.copy(String, OutputStream, String)</code></a> instead</i></div>
-</div>
-</dd>
-<dt><span class="strong"><a href="./org/apache/commons/io/CopyUtils.html#copy(java.lang.String, java.io.OutputStream, java.lang.String)">copy(String, OutputStream, String)</a></span> - Static method in class org.apache.commons.io.<a href="./org/apache/commons/io/CopyUtils.html" title="class in org.apache.commons.io">CopyUtils</a></dt>
-<dd>
-<div class="block"><span class="strong">Deprecated.</span></div>
-<div class="block">Serialize chars from a <code>String</code> to bytes on an
- <code>OutputStream</code>, and
- flush the <code>OutputStream</code>.</div>
-</dd>
-<dt><span class="strong"><a href="./org/apache/commons/io/CopyUtils.html#copy(java.lang.String, java.io.Writer)">copy(String, Writer)</a></span> - Static method in class org.apache.commons.io.<a href="./org/apache/commons/io/CopyUtils.html" title="class in org.apache.commons.io">CopyUtils</a></dt>
-<dd>
-<div class="block"><span class="strong">Deprecated.</span></div>
-<div class="block">Copy chars from a <code>String</code> to a <code>Writer</code>.</div>
-</dd>
-<dt><span class="strong"><a href="./org/apache/commons/io/IOUtils.html#copy(java.io.InputStream, java.io.OutputStream)">copy(InputStream, OutputStream)</a></span> - Static method in class org.apache.commons.io.<a href="./org/apache/commons/io/IOUtils.html" title="class in org.apache.commons.io">IOUtils</a></dt>
-<dd>
-<div class="block">Copies bytes from an <code>InputStream</code> to an
- <code>OutputStream</code>.</div>
-</dd>
-<dt><span class="strong"><a href="./org/apache/commons/io/IOUtils.html#copy(java.io.InputStream, java.io.OutputStream, int)">copy(InputStream, OutputStream, int)</a></span> - Static method in class org.apache.commons.io.<a href="./org/apache/commons/io/IOUtils.html" title="class in org.apache.commons.io">IOUtils</a></dt>
-<dd>
-<div class="block">Copies bytes from an <code>InputStream</code> to an <code>OutputStream</code> using an internal buffer of the
- given size.</div>
-</dd>
-<dt><span class="strong"><a href="./org/apache/commons/io/IOUtils.html#copy(java.io.InputStream, java.io.Writer)">copy(InputStream, Writer)</a></span> - Static method in class org.apache.commons.io.<a href="./org/apache/commons/io/IOUtils.html" title="class in org.apache.commons.io">IOUtils</a></dt>
-<dd>
-<div class="block"><span class="strong">Deprecated.</span>
-<div class="block"><i>2.5 use <a href="./org/apache/commons/io/IOUtils.html#copy(java.io.InputStream, java.io.Writer, java.nio.charset.Charset)"><code>IOUtils.copy(InputStream, Writer, Charset)</code></a> instead</i></div>
-</div>
-</dd>
-<dt><span class="strong"><a href="./org/apache/commons/io/IOUtils.html#copy(java.io.InputStream, java.io.Writer, java.nio.charset.Charset)">copy(InputStream, Writer, Charset)</a></span> - Static method in class org.apache.commons.io.<a href="./org/apache/commons/io/IOUtils.html" title="class in org.apache.commons.io">IOUtils</a></dt>
-<dd>
-<div class="block">Copies bytes from an <code>InputStream</code> to chars on a
- <code>Writer</code> using the specified character encoding.</div>
-</dd>
-<dt><span class="strong"><a href="./org/apache/commons/io/IOUtils.html#copy(java.io.InputStream, java.io.Writer, java.lang.String)">copy(InputStream, Writer, String)</a></span> - Static method in class org.apache.commons.io.<a href="./org/apache/commons/io/IOUtils.html" title="class in org.apache.commons.io">IOUtils</a></dt>
-<dd>
-<div class="block">Copies bytes from an <code>InputStream</code> to chars on a
- <code>Writer</code> using the specified character encoding.</div>
-</dd>
-<dt><span class="strong"><a href="./org/apache/commons/io/IOUtils.html#copy(java.io.Reader, java.io.Writer)">copy(Reader, Writer)</a></span> - Static method in class org.apache.commons.io.<a href="./org/apache/commons/io/IOUtils.html" title="class in org.apache.commons.io">IOUtils</a></dt>
-<dd>
-<div class="block">Copies chars from a <code>Reader</code> to a <code>Writer</code>.</div>
-</dd>
-<dt><span class="strong"><a href="./org/apache/commons/io/IOUtils.html#copy(java.io.Reader, java.io.OutputStream)">copy(Reader, OutputStream)</a></span> - Static method in class org.apache.commons.io.<a href="./org/apache/commons/io/IOUtils.html" title="class in org.apache.commons.io">IOUtils</a></dt>
-<dd>
-<div class="block"><span class="strong">Deprecated.</span>
-<div class="block"><i>2.5 use <a href="./org/apache/commons/io/IOUtils.html#copy(java.io.Reader, java.io.OutputStream, java.nio.charset.Charset)"><code>IOUtils.copy(Reader, OutputStream, Charset)</code></a> instead</i></div>
-</div>
-</dd>
-<dt><span class="strong"><a href="./org/apache/commons/io/IOUtils.html#copy(java.io.Reader, java.io.OutputStream, java.nio.charset.Charset)">copy(Reader, OutputStream, Charset)</a></span> - Static method in class org.apache.commons.io.<a href="./org/apache/commons/io/IOUtils.html" title="class in org.apache.commons.io">IOUtils</a></dt>
-<dd>
-<div class="block">Copies chars from a <code>Reader</code> to bytes on an
- <code>OutputStream</code> using the specified character encoding, and
- calling flush.</div>
-</dd>
-<dt><span class="strong"><a href="./org/apache/commons/io/IOUtils.html#copy(java.io.Reader, java.io.OutputStream, java.lang.String)">copy(Reader, OutputStream, String)</a></span> - Static method in class org.apache.commons.io.<a href="./org/apache/commons/io/IOUtils.html" title="class in org.apache.commons.io">IOUtils</a></dt>
-<dd>
-<div class="block">Copies chars from a <code>Reader</code> to bytes on an
- <code>OutputStream</code> using the specified character encoding, and
- calling flush.</div>
-</dd>
-<dt><span class="strong"><a href="./org/apache/commons/io/FileUtils.html#copyDirectory(java.io.File, java.io.File)">copyDirectory(File, File)</a></span> - Static method in class org.apache.commons.io.<a href="./org/apache/commons/io/FileUtils.html" title="class in org.apache.commons.io">FileUtils</a></dt>
-<dd>
-<div class="block">Copies a whole directory to a new location preserving the file dates.</div>
-</dd>
-<dt><span class="strong"><a href="./org/apache/commons/io/FileUtils.html#copyDirectory(java.io.File, java.io.File, boolean)">copyDirectory(File, File, boolean)</a></span> - Static method in class org.apache.commons.io.<a href="./org/apache/commons/io/FileUtils.html" title="class in org.apache.commons.io">FileUtils</a></dt>
-<dd>
-<div class="block">Copies a whole directory to a new location.</div>
-</dd>
-<dt><span class="strong"><a href="./org/apache/commons/io/FileUtils.html#copyDirectory(java.io.File, java.io.File, java.io.FileFilter)">copyDirectory(File, File, FileFilter)</a></span> - Static method in class org.apache.commons.io.<a href="./org/apache/commons/io/FileUtils.html" title="class in org.apache.commons.io">FileUtils</a></dt>
-<dd>
-<div class="block">Copies a filtered directory to a new location preserving the file dates.</div>
-</dd>
-<dt><span class="strong"><a href="./org/apache/commons/io/FileUtils.html#copyDirectory(java.io.File, java.io.File, java.io.FileFilter, boolean)">copyDirectory(File, File, FileFilter, boolean)</a></span> - Static method in class org.apache.commons.io.<a href="./org/apache/commons/io/FileUtils.html" title="class in org.apache.commons.io">FileUtils</a></dt>
-<dd>
-<div class="block">Copies a filtered directory to a new location.</div>
-</dd>
-<dt><span class="strong"><a href="./org/apache/commons/io/FileUtils.html#copyDirectoryToDirectory(java.io.File, java.io.File)">copyDirectoryToDirectory(File, File)</a></span> - Static method in class org.apache.commons.io.<a href="./org/apache/commons/io/FileUtils.html" title="class in org.apache.commons.io">FileUtils</a></dt>
-<dd>
-<div class="block">Copies a directory to within another directory preserving the file dates.</div>
-</dd>
-<dt><span class="strong"><a href="./org/apache/commons/io/FileUtils.html#copyFile(java.io.File, java.io.File)">copyFile(File, File)</a></span> - Static method in class org.apache.commons.io.<a href="./org/apache/commons/io/FileUtils.html" title="class in org.apache.commons.io">FileUtils</a></dt>
-<dd>
-<div class="block">Copies a file to a new location preserving the file date.</div>
-</dd>
-<dt><span class="strong"><a href="./org/apache/commons/io/FileUtils.html#copyFile(java.io.File, java.io.File, boolean)">copyFile(File, File, boolean)</a></span> - Static method in class org.apache.commons.io.<a href="./org/apache/commons/io/FileUtils.html" title="class in org.apache.commons.io">FileUtils</a></dt>
-<dd>
-<div class="block">Copies a file to a new location.</div>
-</dd>
-<dt><span class="strong"><a href="./org/apache/commons/io/FileUtils.html#copyFile(java.io.File, java.io.OutputStream)">copyFile(File, OutputStream)</a></span> - Static method in class org.apache.commons.io.<a href="./org/apache/commons/io/FileUtils.html" title="class in org.apache.commons.io">FileUtils</a></dt>
-<dd>
-<div class="block">Copy bytes from a <code>File</code> to an <code>OutputStream</code>.</div>
-</dd>
-<dt><span class="strong"><a href="./org/apache/commons/io/FileUtils.html#copyFileToDirectory(java.io.File, java.io.File)">copyFileToDirectory(File, File)</a></span> - Static method in class org.apache.commons.io.<a href="./org/apache/commons/io/FileUtils.html" title="class in org.apache.commons.io">FileUtils</a></dt>
-<dd>
-<div class="block">Copies a file to a directory preserving the file date.</div>
-</dd>
-<dt><span class="strong"><a href="./org/apache/commons/io/FileUtils.html#copyFileToDirectory(java.io.File, java.io.File, boolean)">copyFileToDirectory(File, File, boolean)</a></span> - Static method in class org.apache.commons.io.<a href="./org/apache/commons/io/FileUtils.html" title="class in org.apache.commons.io">FileUtils</a></dt>
-<dd>
-<div class="block">Copies a file to a directory optionally preserving the file date.</div>
-</dd>
-<dt><span class="strong"><a href="./org/apache/commons/io/FileUtils.html#copyInputStreamToFile(java.io.InputStream, java.io.File)">copyInputStreamToFile(InputStream, File)</a></span> - Static method in class org.apache.commons.io.<a href="./org/apache/commons/io/FileUtils.html" title="class in org.apache.commons.io">FileUtils</a></dt>
-<dd>
-<div class="block">Copies bytes from an <a href="http://download.oracle.com/javase/6/docs/api/java/io/InputStream.html?is-external=true" title="class or interface in java.io"><code>InputStream</code></a> <code>source</code> to a file
- <code>destination</code>.</div>
-</dd>
-<dt><span class="strong"><a href="./org/apache/commons/io/IOUtils.html#copyLarge(java.io.InputStream, java.io.OutputStream)">copyLarge(InputStream, OutputStream)</a></span> - Static method in class org.apache.commons.io.<a href="./org/apache/commons/io/IOUtils.html" title="class in org.apache.commons.io">IOUtils</a></dt>
-<dd>
-<div class="block">Copies bytes from a large (over 2GB) <code>InputStream</code> to an
- <code>OutputStream</code>.</div>
-</dd>
-<dt><span class="strong"><a href="./org/apache/commons/io/IOUtils.html#copyLarge(java.io.InputStream, java.io.OutputStream, byte[])">copyLarge(InputStream, OutputStream, byte[])</a></span> - Static method in class org.apache.commons.io.<a href="./org/apache/commons/io/IOUtils.html" title="class in org.apache.commons.io">IOUtils</a></dt>
-<dd>
-<div class="block">Copies bytes from a large (over 2GB) <code>InputStream</code> to an
- <code>OutputStream</code>.</div>
-</dd>
-<dt><span class="strong"><a href="./org/apache/commons/io/IOUtils.html#copyLarge(java.io.InputStream, java.io.OutputStream, long, long)">copyLarge(InputStream, OutputStream, long, long)</a></span> - Static method in class org.apache.commons.io.<a href="./org/apache/commons/io/IOUtils.html" title="class in org.apache.commons.io">IOUtils</a></dt>
-<dd>
-<div class="block">Copies some or all bytes from a large (over 2GB) <code>InputStream</code> to an
- <code>OutputStream</code>, optionally skipping input bytes.</div>
-</dd>
-<dt><span class="strong"><a href="./org/apache/commons/io/IOUtils.html#copyLarge(java.io.InputStream, java.io.OutputStream, long, long, byte[])">copyLarge(InputStream, OutputStream, long, long, byte[])</a></span> - Static method in class org.apache.commons.io.<a href="./org/apache/commons/io/IOUtils.html" title="class in org.apache.commons.io">IOUtils</a></dt>
-<dd>
-<div class="block">Copies some or all bytes from a large (over 2GB) <code>InputStream</code> to an
- <code>OutputStream</code>, optionally skipping input bytes.</div>
-</dd>
-<dt><span class="strong"><a href="./org/apache/commons/io/IOUtils.html#copyLarge(java.io.Reader, java.io.Writer)">copyLarge(Reader, Writer)</a></span> - Static method in class org.apache.commons.io.<a href="./org/apache/commons/io/IOUtils.html" title="class in org.apache.commons.io">IOUtils</a></dt>
-<dd>
-<div class="block">Copies chars from a large (over 2GB) <code>Reader</code> to a <code>Writer</code>.</div>
-</dd>
-<dt><span class="strong"><a href="./org/apache/commons/io/IOUtils.html#copyLarge(java.io.Reader, java.io.Writer, char[])">copyLarge(Reader, Writer, char[])</a></span> - Static method in class org.apache.commons.io.<a href="./org/apache/commons/io/IOUtils.html" title="class in org.apache.commons.io">IOUtils</a></dt>
-<dd>
-<div class="block">Copies chars from a large (over 2GB) <code>Reader</code> to a <code>Writer</code>.</div>
-</dd>
-<dt><span class="strong"><a href="./org/apache/commons/io/IOUtils.html#copyLarge(java.io.Reader, java.io.Writer, long, long)">copyLarge(Reader, Writer, long, long)</a></span> - Static method in class org.apache.commons.io.<a href="./org/apache/commons/io/IOUtils.html" title="class in org.apache.commons.io">IOUtils</a></dt>
-<dd>
-<div class="block">Copies some or all chars from a large (over 2GB) <code>InputStream</code> to an
- <code>OutputStream</code>, optionally skipping input chars.</div>
-</dd>
-<dt><span class="strong"><a href="./org/apache/commons/io/IOUtils.html#copyLarge(java.io.Reader, java.io.Writer, long, long, char[])">copyLarge(Reader, Writer, long, long, char[])</a></span> - Static method in class org.apache.commons.io.<a href="./org/apache/commons/io/IOUtils.html" title="class in org.apache.commons.io">IOUtils</a></dt>
-<dd>
-<div class="block">Copies some or all chars from a large (over 2GB) <code>InputStream</code> to an
- <code>OutputStream</code>, optionally skipping input chars.</div>
-</dd>
-<dt><span class="strong"><a href="./org/apache/commons/io/FileUtils.html#copyToFile(java.io.InputStream, java.io.File)">copyToFile(InputStream, File)</a></span> - Static method in class org.apache.commons.io.<a href="./org/apache/commons/io/FileUtils.html" title="class in org.apache.commons.io">FileUtils</a></dt>
-<dd>
-<div class="block">Copies bytes from an <a href="http://download.oracle.com/javase/6/docs/api/java/io/InputStream.html?is-external=true" title="class or interface in java.io"><code>InputStream</code></a> <code>source</code> to a file
- <code>destination</code>.</div>
-</dd>
-<dt><span class="strong"><a href="./org/apache/commons/io/FileUtils.html#copyURLToFile(java.net.URL, java.io.File)">copyURLToFile(URL, File)</a></span> - Static method in class org.apache.commons.io.<a href="./org/apache/commons/io/FileUtils.html" title="class in org.apache.commons.io">FileUtils</a></dt>
-<dd>
-<div class="block">Copies bytes from the URL <code>source</code> to a file
- <code>destination</code>.</div>
-</dd>
-<dt><span class="strong"><a href="./org/apache/commons/io/FileUtils.html#copyURLToFile(java.net.URL, java.io.File, int, int)">copyURLToFile(URL, File, int, int)</a></span> - Static method in class org.apache.commons.io.<a href="./org/apache/commons/io/FileUtils.html" title="class in org.apache.commons.io">FileUtils</a></dt>
-<dd>
-<div class="block">Copies bytes from the URL <code>source</code> to a file
- <code>destination</code>.</div>
-</dd>
-<dt><a href="./org/apache/commons/io/CopyUtils.html" title="class in org.apache.commons.io"><span class="strong">CopyUtils</span></a> - Class in <a href="./org/apache/commons/io/package-summary.html">org.apache.commons.io</a></dt>
-<dd>
-<div class="block"><span class="strong">Deprecated.</span>
-<div class="block"><i>Use IOUtils. Will be removed in 2.0.
-  Methods renamed to IOUtils.write() or IOUtils.copy().
-  Null handling behaviour changed in IOUtils (null data does not
-  throw NullPointerException).</i></div>
-</div>
-</dd>
-<dt><span class="strong"><a href="./org/apache/commons/io/CopyUtils.html#CopyUtils()">CopyUtils()</a></span> - Constructor for class org.apache.commons.io.<a href="./org/apache/commons/io/CopyUtils.html" title="class in org.apache.commons.io">CopyUtils</a></dt>
-<dd>
-<div class="block"><span class="strong">Deprecated.</span></div>
-<div class="block">Instances should NOT be constructed in standard programming.</div>
-</dd>
-<dt><a href="./org/apache/commons/io/input/CountingInputStream.html" title="class in org.apache.commons.io.input"><span class="strong">CountingInputStream</span></a> - Class in <a href="./org/apache/commons/io/input/package-summary.html">org.apache.commons.io.input</a></dt>
-<dd>
-<div class="block">A decorating input stream that counts the number of bytes that have passed
- through the stream so far.</div>
-</dd>
-<dt><span class="strong"><a href="./org/apache/commons/io/input/CountingInputStream.html#CountingInputStream(java.io.InputStream)">CountingInputStream(InputStream)</a></span> - Constructor for class org.apache.commons.io.input.<a href="./org/apache/commons/io/input/CountingInputStream.html" title="class in org.apache.commons.io.input">CountingInputStream</a></dt>
-<dd>
-<div class="block">Constructs a new CountingInputStream.</div>
-</dd>
-<dt><a href="./org/apache/commons/io/output/CountingOutputStream.html" title="class in org.apache.commons.io.output"><span class="strong">CountingOutputStream</span></a> - Class in <a href="./org/apache/commons/io/output/package-summary.html">org.apache.commons.io.output</a></dt>
-<dd>
-<div class="block">A decorating output stream that counts the number of bytes that have passed
- through the stream so far.</div>
-</dd>
-<dt><span class="strong"><a href="./org/apache/commons/io/output/CountingOutputStream.html#CountingOutputStream(java.io.OutputStream)">CountingOutputStream(OutputStream)</a></span> - Constructor for class org.apache.commons.io.output.<a href="./org/apache/commons/io/output/CountingOutputStream.html" title="class in org.apache.commons.io.output">CountingOutputStream</a></dt>
-<dd>
-<div class="block">Constructs a new CountingOutputStream.</div>
-</dd>
-<dt><span class="strong"><a href="./org/apache/commons/io/input/Tailer.html#create(java.io.File, org.apache.commons.io.input.TailerListener, long, boolean, int)">create(File, TailerListener, long, boolean, int)</a></span> - Static method in class org.apache.commons.io.input.<a href="./org/apache/commons/io/input/Tailer.html" title="class in org.apache.commons.io.input">Tailer</a></dt>
-<dd>
-<div class="block">Creates and starts a Tailer for the given file.</div>
-</dd>
-<dt><span class="strong"><a href="./org/apache/commons/io/input/Tailer.html#create(java.io.File, org.apache.commons.io.input.TailerListener, long, boolean, boolean, int)">create(File, TailerListener, long, boolean, boolean, int)</a></span> - Static method in class org.apache.commons.io.input.<a href="./org/apache/commons/io/input/Tailer.html" title="class in org.apache.commons.io.input">Tailer</a></dt>
-<dd>
-<div class="block">Creates and starts a Tailer for the given file.</div>
-</dd>
-<dt><span class="strong"><a href="./org/apache/commons/io/input/Tailer.html#create(java.io.File, org.apache.commons.io.input.TailerListener, long, boolean)">create(File, TailerListener, long, boolean)</a></span> - Static method in class org.apache.commons.io.input.<a href="./org/apache/commons/io/input/Tailer.html" title="class in org.apache.commons.io.input">Tailer</a></dt>
-<dd>
-<div class="block">Creates and starts a Tailer for the given file with default buffer size.</div>
-</dd>
-<dt><span class="strong"><a href="./org/apache/commons/io/input/Tailer.html#create(java.io.File, org.apache.commons.io.input.TailerListener, long, boolean, boolean)">create(File, TailerListener, long, boolean, boolean)</a></span> - Static method in class org.apache.commons.io.input.<a href="./org/apache/commons/io/input/Tailer.html" title="class in org.apache.commons.io.input">Tailer</a></dt>
-<dd>
-<div class="block">Creates and starts a Tailer for the given file with default buffer size.</div>
-</dd>
-<dt><span class="strong"><a href="./org/apache/commons/io/input/Tailer.html#create(java.io.File, org.apache.commons.io.input.TailerListener, long)">create(File, TailerListener, long)</a></span> - Static method in class org.apache.commons.io.input.<a href="./org/apache/commons/io/input/Tailer.html" title="class in org.apache.commons.io.input">Tailer</a></dt>
-<dd>
-<div class="block">Creates and starts a Tailer for the given file, starting at the beginning of the file</div>
-</dd>
-<dt><span class="strong"><a href="./org/apache/commons/io/input/Tailer.html#create(java.io.File, org.apache.commons.io.input.TailerListener)">create(File, TailerListener)</a></span> - Static method in class org.apache.commons.io.input.<a href="./org/apache/commons/io/input/Tailer.html" title="class in org.apache.commons.io.input">Tailer</a></dt>
-<dd>
-<div class="block">Creates and starts a Tailer for the given file, starting at the beginning of the file
- with the default delay of 1.0s</div>
-</dd>
-</dl>
-<a name="_D_">
-<!--   -->
-</a>
-<h2 class="title">D</h2>
-<dl>
-<dt><span class="strong"><a href="./org/apache/commons/io/comparator/DefaultFileComparator.html#DEFAULT_COMPARATOR">DEFAULT_COMPARATOR</a></span> - Static variable in class org.apache.commons.io.comparator.<a href="./org/apache/commons/io/comparator/DefaultFileComparator.html" title="class in org.apache.commons.io.comparator">DefaultFileComparator</a></dt>
-<dd>
-<div class="block">Singleton default comparator instance</div>
-</dd>
-<dt><span class="strong"><a href="./org/apache/commons/io/comparator/DefaultFileComparator.html#DEFAULT_REVERSE">DEFAULT_REVERSE</a></span> - Static variable in class org.apache.commons.io.comparator.<a href="./org/apache/commons/io/comparator/DefaultFileComparator.html" title="class in org.apache.commons.io.comparator">DefaultFileComparator</a></dt>
-<dd>
-<div class="block">Singleton reverse default comparator instance</div>
-</dd>
-<dt><a href="./org/apache/commons/io/comparator/DefaultFileComparator.html" title="class in org.apache.commons.io.comparator"><span class="strong">DefaultFileComparator</span></a> - Class in <a href="./org/apache/commons/io/comparator/package-summary.html">org.apache.commons.io.comparator</a></dt>
-<dd>
-<div class="block">Compare two files using the <b>default</b> <a href="http://download.oracle.com/javase/6/docs/api/java/io/File.html?is-external=true#compareTo(java.io.File)" title="class or interface in java.io"><code>File.compareTo(File)</code></a> method.</div>
-</dd>
-<dt><span class="strong"><a href="./org/apache/commons/io/comparator/DefaultFileComparator.html#DefaultFileComparator()">DefaultFileComparator()</a></span> - Constructor for class org.apache.commons.io.comparator.<a href="./org/apache/commons/io/comparator/DefaultFileComparator.html" title="class in org.apache.commons.io.comparator">DefaultFileComparator</a></dt>
-<dd>&nbsp;</dd>
-<dt><a href="./org/apache/commons/io/output/DeferredFileOutputStream.html" title="class in org.apache.commons.io.output"><span class="strong">DeferredFileOutputStream</span></a> - Class in <a href="./org/apache/commons/io/output/package-summary.html">org.apache.commons.io.output</a></dt>
-<dd>
-<div class="block">An output stream which will retain data in memory until a specified
- threshold is reached, and only then commit it to disk.</div>
-</dd>
-<dt><span class="strong"><a href="./org/apache/commons/io/output/DeferredFileOutputStream.html#DeferredFileOutputStream(int, java.io.File)">DeferredFileOutputStream(int, File)</a></span> - Constructor for class org.apache.commons.io.output.<a href="./org/apache/commons/io/output/DeferredFileOutputStream.html" title="class in org.apache.commons.io.output">DeferredFileOutputStream</a></dt>
-<dd>
-<div class="block">Constructs an instance of this class which will trigger an event at the
- specified threshold, and save data to a file beyond that point.</div>
-</dd>
-<dt><span class="strong"><a href="./org/apache/commons/io/output/DeferredFileOutputStream.html#DeferredFileOutputStream(int, java.lang.String, java.lang.String, java.io.File)">DeferredFileOutputStream(int, String, String, File)</a></span> - Constructor for class org.apache.commons.io.output.<a href="./org/apache/commons/io/output/DeferredFileOutputStream.html" title="class in org.apache.commons.io.output">DeferredFileOutputStream</a></dt>
-<dd>
-<div class="block">Constructs an instance of this class which will trigger an event at the
- specified threshold, and save data to a temporary file beyond that point.</div>
-</dd>
-<dt><a href="./org/apache/commons/io/filefilter/DelegateFileFilter.html" title="class in org.apache.commons.io.filefilter"><span class="strong">DelegateFileFilter</span></a> - Class in <a href="./org/apache/commons/io/filefilter/package-summary.html">org.apache.commons.io.filefilter</a></dt>
-<dd>
-<div class="block">This class turns a Java FileFilter or FilenameFilter into an IO FileFilter.</div>
-</dd>
-<dt><span class="strong"><a href="./org/apache/commons/io/filefilter/DelegateFileFilter.html#DelegateFileFilter(java.io.FilenameFilter)">DelegateFileFilter(FilenameFilter)</a></span> - Constructor for class org.apache.commons.io.filefilter.<a href="./org/apache/commons/io/filefilter/DelegateFileFilter.html" title="class in org.apache.commons.io.filefilter">DelegateFileFilter</a></dt>
-<dd>
-<div class="block">Constructs a delegate file filter around an existing FilenameFilter.</div>
-</dd>
-<dt><span class="strong"><a href="./org/apache/commons/io/filefilter/DelegateFileFilter.html#DelegateFileFilter(java.io.FileFilter)">DelegateFileFilter(FileFilter)</a></span> - Constructor for class org.apache.commons.io.filefilter.<a href="./org/apache/commons/io/filefilter/DelegateFileFilter.html" title="class in org.apache.commons.io.filefilter">DelegateFileFilter</a></dt>
-<dd>
-<div class="block">Constructs a delegate file filter around an existing FileFilter.</div>
-</dd>
-<dt><span class="strong"><a href="./org/apache/commons/io/FileDeleteStrategy.html#delete(java.io.File)">delete(File)</a></span> - Method in class org.apache.commons.io.<a href="./org/apache/commons/io/FileDeleteStrategy.html" title="class in org.apache.commons.io">FileDeleteStrategy</a></dt>
-<dd>
-<div class="block">Deletes the file object, which may be a file or a directory.</div>
-</dd>
-<dt><span class="strong"><a href="./org/apache/commons/io/FileUtils.html#deleteDirectory(java.io.File)">deleteDirectory(File)</a></span> - Static method in class org.apache.commons.io.<a href="./org/apache/commons/io/FileUtils.html" title="class in org.apache.commons.io">FileUtils</a></dt>
-<dd>
-<div class="block">Deletes a directory recursively.</div>
-</dd>
-<dt><span class="strong"><a href="./org/apache/commons/io/FileDeleteStrategy.html#deleteQuietly(java.io.File)">deleteQuietly(File)</a></span> - Method in class org.apache.commons.io.<a href="./org/apache/commons/io/FileDeleteStrategy.html" title="class in org.apache.commons.io">FileDeleteStrategy</a></dt>
-<dd>
-<div class="block">Deletes the file object, which may be a file or a directory.</div>
-</dd>
-<dt><span class="strong"><a href="./org/apache/commons/io/FileUtils.html#deleteQuietly(java.io.File)">deleteQuietly(File)</a></span> - Static method in class org.apache.commons.io.<a href="./org/apache/commons/io/FileUtils.html" title="class in org.apache.commons.io">FileUtils</a></dt>
-<dd>
-<div class="block">Deletes a file, never throwing an exception.</div>
-</dd>
-<dt><a href="./org/apache/commons/io/input/DemuxInputStream.html" title="class in org.apache.commons.io.input"><span class="strong">DemuxInputStream</span></a> - Class in <a href="./org/apache/commons/io/input/package-summary.html">org.apache.commons.io.input</a></dt>
-<dd>
-<div class="block">Data written to this stream is forwarded to a stream that has been associated
- with this thread.</div>
-</dd>
-<dt><span class="strong"><a href="./org/apache/commons/io/input/DemuxInputStream.html#DemuxInputStream()">DemuxInputStream()</a></span> - Constructor for class org.apache.commons.io.input.<a href="./org/apache/commons/io/input/DemuxInputStream.html" title="class in org.apache.commons.io.input">DemuxInputStream</a></dt>
-<dd>&nbsp;</dd>
-<dt><a href="./org/apache/commons/io/output/DemuxOutputStream.html" title="class in org.apache.commons.io.output"><span class="strong">DemuxOutputStream</span></a> - Class in <a href="./org/apache/commons/io/output/package-summary.html">org.apache.commons.io.output</a></dt>
-<dd>
-<div class="block">Data written to this stream is forwarded to a stream that has been associated
- with this thread.</div>
-</dd>
-<dt><span class="strong"><a href="./org/apache/commons/io/output/DemuxOutputStream.html#DemuxOutputStream()">DemuxOutputStream()</a></span> - Constructor for class org.apache.commons.io.output.<a href="./org/apache/commons/io/output/DemuxOutputStream.html" title="class in org.apache.commons.io.output">DemuxOutputStream</a></dt>
-<dd>&nbsp;</dd>
-<dt><span class="strong"><a href="./org/apache/commons/io/monitor/FileAlterationObserver.html#destroy()">destroy()</a></span> - Method in class org.apache.commons.io.monitor.<a href="./org/apache/commons/io/monitor/FileAlterationObserver.html" title="class in org.apache.commons.io.monitor">FileAlterationObserver</a></dt>
-<dd>
-<div class="block">Final processing.</div>
-</dd>
-<dt><span class="strong"><a href="./org/apache/commons/io/IOUtils.html#DIR_SEPARATOR">DIR_SEPARATOR</a></span> - Static variable in class org.apache.commons.io.<a href="./org/apache/commons/io/IOUtils.html" title="class in org.apache.commons.io">IOUtils</a></dt>
-<dd>
-<div class="block">The system directory separator character.</div>
-</dd>
-<dt><span class="strong"><a href="./org/apache/commons/io/IOUtils.html#DIR_SEPARATOR_UNIX">DIR_SEPARATOR_UNIX</a></span> - Static variable in class org.apache.commons.io.<a href="./org/apache/commons/io/IOUtils.html" title="class in org.apache.commons.io">IOUtils</a></dt>
-<dd>
-<div class="block">The Unix directory separator character.</div>
-</dd>
-<dt><span class="strong"><a href="./org/apache/commons/io/IOUtils.html#DIR_SEPARATOR_WINDOWS">DIR_SEPARATOR_WINDOWS</a></span> - Static variable in class org.apache.commons.io.<a href="./org/apache/commons/io/IOUtils.html" title="class in org.apache.commons.io">IOUtils</a></dt>
-<dd>
-<div class="block">The Windows directory separator character.</div>
-</dd>
-<dt><span class="strong"><a href="./org/apache/commons/io/filefilter/DirectoryFileFilter.html#DIRECTORY">DIRECTORY</a></span> - Static variable in class org.apache.commons.io.filefilter.<a href="./org/apache/commons/io/filefilter/DirectoryFileFilter.html" title="class in org.apache.commons.io.filefilter">DirectoryFileFilter</a></dt>
-<dd>
-<div class="block">Singleton instance of directory filter.</div>
-</dd>
-<dt><span class="strong"><a href="./org/apache/commons/io/comparator/DirectoryFileComparator.html#DIRECTORY_COMPARATOR">DIRECTORY_COMPARATOR</a></span> - Static variable in class org.apache.commons.io.comparator.<a href="./org/apache/commons/io/comparator/DirectoryFileComparator.html" title="class in org.apache.commons.io.comparator">DirectoryFileComparator</a></dt>
-<dd>
-<div class="block">Singleton default comparator instance</div>
-</dd>
-<dt><span class="strong"><a href="./org/apache/commons/io/comparator/DirectoryFileComparator.html#DIRECTORY_REVERSE">DIRECTORY_REVERSE</a></span> - Static variable in class org.apache.commons.io.comparator.<a href="./org/apache/commons/io/comparator/DirectoryFileComparator.html" title="class in org.apache.commons.io.comparator">DirectoryFileComparator</a></dt>
-<dd>
-<div class="block">Singleton reverse default comparator instance</div>
-</dd>
-<dt><span class="strong"><a href="./org/apache/commons/io/FilenameUtils.html#directoryContains(java.lang.String, java.lang.String)">directoryContains(String, String)</a></span> - Static method in class org.apache.commons.io.<a href="./org/apache/commons/io/FilenameUtils.html" title="class in org.apache.commons.io">FilenameUtils</a></dt>
-<dd>
-<div class="block">Determines whether the <code>parent</code> directory contains the <code>child</code> element (a file or directory).</div>
-</dd>
-<dt><span class="strong"><a href="./org/apache/commons/io/FileUtils.html#directoryContains(java.io.File, java.io.File)">directoryContains(File, File)</a></span> - Static method in class org.apache.commons.io.<a href="./org/apache/commons/io/FileUtils.html" title="class in org.apache.commons.io">FileUtils</a></dt>
-<dd>
-<div class="block">Determines whether the <code>parent</code> directory contains the <code>child</code> element (a file or directory).</div>
-</dd>
-<dt><a href="./org/apache/commons/io/comparator/DirectoryFileComparator.html" title="class in org.apache.commons.io.comparator"><span class="strong">DirectoryFileComparator</span></a> - Class in <a href="./org/apache/commons/io/comparator/package-summary.html">org.apache.commons.io.comparator</a></dt>
-<dd>
-<div class="block">Compare two files using the <a href="http://download.oracle.com/javase/6/docs/api/java/io/File.html?is-external=true#isDirectory()" title="class or interface in java.io"><code>File.isDirectory()</code></a> method.</div>
-</dd>
-<dt><span class="strong"><a href="./org/apache/commons/io/comparator/DirectoryFileComparator.html#DirectoryFileComparator()">DirectoryFileComparator()</a></span> - Constructor for class org.apache.commons.io.comparator.<a href="./org/apache/commons/io/comparator/DirectoryFileComparator.html" title="class in org.apache.commons.io.comparator">DirectoryFileComparator</a></dt>
-<dd>&nbsp;</dd>
-<dt><a href="./org/apache/commons/io/filefilter/DirectoryFileFilter.html" title="class in org.apache.commons.io.filefilter"><span class="strong">DirectoryFileFilter</span></a> - Class in <a href="./org/apache/commons/io/filefilter/package-summary.html">org.apache.commons.io.filefilter</a></dt>
-<dd>
-<div class="block">This filter accepts <code>File</code>s that are directories.</div>
-</dd>
-<dt><span class="strong"><a href="./org/apache/commons/io/filefilter/DirectoryFileFilter.html#DirectoryFileFilter()">DirectoryFileFilter()</a></span> - Constructor for class org.apache.commons.io.filefilter.<a href="./org/apache/commons/io/filefilter/DirectoryFileFilter.html" title="class in org.apache.commons.io.filefilter">DirectoryFileFilter</a></dt>
-<dd>
-<div class="block">Restrictive consructor.</div>
-</dd>
-<dt><span class="strong"><a href="./org/apache/commons/io/filefilter/FileFilterUtils.html#directoryFileFilter()">directoryFileFilter()</a></span> - Static method in class org.apache.commons.io.filefilter.<a href="./org/apache/commons/io/filefilter/FileFilterUtils.html" title="class in org.apache.commons.io.filefilter">FileFilterUtils</a></dt>
-<dd>
-<div class="block">Returns a filter that checks if the file is a directory.</div>
-</dd>
-<dt><a href="./org/apache/commons/io/DirectoryWalker.html" title="class in org.apache.commons.io"><span class="strong">DirectoryWalker</span></a>&lt;<a href="./org/apache/commons/io/DirectoryWalker.html" title="type parameter in DirectoryWalker">T</a>&gt; - Class in <a href="./org/apache/commons/io/package-summary.html">org.apache.commons.io</a></dt>
-<dd>
-<div class="block">Abstract class that walks through a directory hierarchy and provides
- subclasses with convenient hooks to add specific behaviour.</div>
-</dd>
-<dt><span class="strong"><a href="./org/apache/commons/io/DirectoryWalker.html#DirectoryWalker()">DirectoryWalker()</a></span> - Constructor for class org.apache.commons.io.<a href="./org/apache/commons/io/DirectoryWalker.html" title="class in org.apache.commons.io">DirectoryWalker</a></dt>
-<dd>
-<div class="block">Construct an instance with no filtering and unlimited <i>depth</i>.</div>
-</dd>
-<dt><span class="strong"><a href="./org/apache/commons/io/DirectoryWalker.html#DirectoryWalker(java.io.FileFilter, int)">DirectoryWalker(FileFilter, int)</a></span> - Constructor for class org.apache.commons.io.<a href="./org/apache/commons/io/DirectoryWalker.html" title="class in org.apache.commons.io">DirectoryWalker</a></dt>
-<dd>
-<div class="block">Construct an instance with a filter and limit the <i>depth</i> navigated to.</div>
-</dd>
-<dt><span class="strong"><a href="./org/apache/commons/io/DirectoryWalker.html#DirectoryWalker(org.apache.commons.io.filefilter.IOFileFilter, org.apache.commons.io.filefilter.IOFileFilter, int)">DirectoryWalker(IOFileFilter, IOFileFilter, int)</a></span> - Constructor for class org.apache.commons.io.<a href="./org/apache/commons/io/DirectoryWalker.html" title="class in org.apache.commons.io">DirectoryWalker</a></dt>
-<dd>
-<div class="block">Construct an instance with a directory and a file filter and an optional
- limit on the <i>depth</i> navigated to.</div>
-</dd>
-<dt><a href="./org/apache/commons/io/DirectoryWalker.CancelException.html" title="class in org.apache.commons.io"><span class="strong">DirectoryWalker.CancelException</span></a> - Exception in <a href="./org/apache/commons/io/package-summary.html">org.apache.commons.io</a></dt>
-<dd>
-<div class="block">CancelException is thrown in DirectoryWalker to cancel the current
- processing.</div>
-</dd>
-<dt><span class="strong"><a href="./org/apache/commons/io/DirectoryWalker.CancelException.html#DirectoryWalker.CancelException(java.io.File, int)">DirectoryWalker.CancelException(File, int)</a></span> - Constructor for exception org.apache.commons.io.<a href="./org/apache/commons/io/DirectoryWalker.CancelException.html" title="class in org.apache.commons.io">DirectoryWalker.CancelException</a></dt>
-<dd>
-<div class="block">Constructs a <code>CancelException</code> with
- the file and depth when cancellation occurred.</div>
-</dd>
-<dt><span class="strong"><a href="./org/apache/commons/io/DirectoryWalker.CancelException.html#DirectoryWalker.CancelException(java.lang.String, java.io.File, int)">DirectoryWalker.CancelException(String, File, int)</a></span> - Constructor for exception org.apache.commons.io.<a href="./org/apache/commons/io/DirectoryWalker.CancelException.html" title="class in org.apache.commons.io">DirectoryWalker.CancelException</a></dt>
-<dd>
-<div class="block">Constructs a <code>CancelException</code> with
- an appropriate message and the file and depth when
- cancellation occurred.</div>
-</dd>
-<dt><span class="strong"><a href="./org/apache/commons/io/FileDeleteStrategy.html#doDelete(java.io.File)">doDelete(File)</a></span> - Method in class org.apache.commons.io.<a href="./org/apache/commons/io/FileDeleteStrategy.html" title="class in org.apache.commons.io">FileDeleteStrategy</a></dt>
-<dd>
-<div class="block">Actually deletes the file object, which may be a file or a directory.</div>
-</dd>
-<dt><span class="strong"><a href="./org/apache/commons/io/HexDump.html#dump(byte[], long, java.io.OutputStream, int)">dump(byte[], long, OutputStream, int)</a></span> - Static method in class org.apache.commons.io.<a href="./org/apache/commons/io/HexDump.html" title="class in org.apache.commons.io">HexDump</a></dt>
-<dd>
-<div class="block">Dump an array of bytes to an OutputStream.</div>
-</dd>
-</dl>
-<a name="_E_">
-<!--   -->
-</a>
-<h2 class="title">E</h2>
-<dl>
-<dt><span class="strong"><a href="./org/apache/commons/io/filefilter/EmptyFileFilter.html#EMPTY">EMPTY</a></span> - Static variable in class org.apache.commons.io.filefilter.<a href="./org/apache/commons/io/filefilter/EmptyFileFilter.html" title="class in org.apache.commons.io.filefilter">EmptyFileFilter</a></dt>
-<dd>
-<div class="block">Singleton instance of <i>empty</i> filter</div>
-</dd>
-<dt><span class="strong"><a href="./org/apache/commons/io/FileUtils.html#EMPTY_FILE_ARRAY">EMPTY_FILE_ARRAY</a></span> - Static variable in class org.apache.commons.io.<a href="./org/apache/commons/io/FileUtils.html" title="class in org.apache.commons.io">FileUtils</a></dt>
-<dd>
-<div class="block">An empty array of type <code>File</code>.</div>
-</dd>
-<dt><a href="./org/apache/commons/io/filefilter/EmptyFileFilter.html" title="class in org.apache.commons.io.filefilter"><span class="strong">EmptyFileFilter</span></a> - Class in <a href="./org/apache/commons/io/filefilter/package-summary.html">org.apache.commons.io.filefilter</a></dt>
-<dd>
-<div class="block">This filter accepts files or directories that are empty.</div>
-</dd>
-<dt><span class="strong"><a href="./org/apache/commons/io/filefilter/EmptyFileFilter.html#EmptyFileFilter()">EmptyFileFilter()</a></span> - Constructor for class org.apache.commons.io.filefilter.<a href="./org/apache/commons/io/filefilter/EmptyFileFilter.html" title="class in org.apache.commons.io.filefilter">EmptyFileFilter</a></dt>
-<dd>
-<div class="block">Restrictive consructor.</div>
-</dd>
-<dt><span class="strong"><a href="./org/apache/commons/io/input/XmlStreamReader.html#ENCODING_PATTERN">ENCODING_PATTERN</a></span> - Static variable in class org.apache.commons.io.input.<a href="./org/apache/commons/io/input/XmlStreamReader.html" title="class in org.apache.commons.io.input">XmlStreamReader</a></dt>
-<dd>&nbsp;</dd>
-<dt><a href="./org/apache/commons/io/EndianUtils.html" title="class in org.apache.commons.io"><span class="strong">EndianUtils</span></a> - Class in <a href="./org/apache/commons/io/package-summary.html">org.apache.commons.io</a></dt>
-<dd>
-<div class="block">Utility code for dealing with different endian systems.</div>
-</dd>
-<dt><span class="strong"><a href="./org/apache/commons/io/EndianUtils.html#EndianUtils()">EndianUtils()</a></span> - Constructor for class org.apache.commons.io.<a href="./org/apache/commons/io/EndianUtils.html" title="class in org.apache.commons.io">EndianUtils</a></dt>
-<dd>
-<div class="block">Instances should NOT be constructed in standard programming.</div>
-</dd>
-<dt><span class="strong"><a href="./org/apache/commons/io/HexDump.html#EOL">EOL</a></span> - Static variable in class org.apache.commons.io.<a href="./org/apache/commons/io/HexDump.html" title="class in org.apache.commons.io">HexDump</a></dt>
-<dd>
-<div class="block">The line-separator (initializes to "line.separator" system property.</div>
-</dd>
-<dt><span class="strong"><a href="./org/apache/commons/io/ByteOrderMark.html#equals(java.lang.Object)">equals(Object)</a></span> - Method in class org.apache.commons.io.<a href="./org/apache/commons/io/ByteOrderMark.html" title="class in org.apache.commons.io">ByteOrderMark</a></dt>
-<dd>
-<div class="block">Indicates if this BOM's bytes equals another.</div>
-</dd>
-<dt><span class="strong"><a href="./org/apache/commons/io/FilenameUtils.html#equals(java.lang.String, java.lang.String)">equals(String, String)</a></span> - Static method in class org.apache.commons.io.<a href="./org/apache/commons/io/FilenameUtils.html" title="class in org.apache.commons.io">FilenameUtils</a></dt>
-<dd>
-<div class="block">Checks whether two filenames are equal exactly.</div>
-</dd>
-<dt><span class="strong"><a href="./org/apache/commons/io/FilenameUtils.html#equals(java.lang.String, java.lang.String, boolean, org.apache.commons.io.IOCase)">equals(String, String, boolean, IOCase)</a></span> - Static method in class org.apache.commons.io.<a href="./org/apache/commons/io/FilenameUtils.html" title="class in org.apache.commons.io">FilenameUtils</a></dt>
-<dd>
-<div class="block">Checks whether two filenames are equal, optionally normalizing and providing
- control over the case-sensitivity.</div>
-</dd>
-<dt><span class="strong"><a href="./org/apache/commons/io/FilenameUtils.html#equalsNormalized(java.lang.String, java.lang.String)">equalsNormalized(String, String)</a></span> - Static method in class org.apache.commons.io.<a href="./org/apache/commons/io/FilenameUtils.html" title="class in org.apache.commons.io">FilenameUtils</a></dt>
-<dd>
-<div class="block">Checks whether two filenames are equal after both have been normalized.</div>
-</dd>
-<dt><span class="strong"><a href="./org/apache/commons/io/FilenameUtils.html#equalsNormalizedOnSystem(java.lang.String, java.lang.String)">equalsNormalizedOnSystem(String, String)</a></span> - Static method in class org.apache.commons.io.<a href="./org/apache/commons/io/FilenameUtils.html" title="class in org.apache.commons.io">FilenameUtils</a></dt>
-<dd>
-<div class="block">Checks whether two filenames are equal after both have been normalized
- and using the case rules of the system.</div>
-</dd>
-<dt><span class="strong"><a href="./org/apache/commons/io/FilenameUtils.html#equalsOnSystem(java.lang.String, java.lang.String)">equalsOnSystem(String, String)</a></span> - Static method in class org.apache.commons.io.<a href="./org/apache/commons/io/FilenameUtils.html" title="class in org.apache.commons.io">FilenameUtils</a></dt>
-<dd>
-<div class="block">Checks whether two filenames are equal using the case rules of the system.</div>
-</dd>
-<dt><span class="strong"><a href="./org/apache/commons/io/FileCleaner.html#exitWhenFinished()">exitWhenFinished()</a></span> - Static method in class org.apache.commons.io.<a href="./org/apache/commons/io/FileCleaner.html" title="class in org.apache.commons.io">FileCleaner</a></dt>
-<dd>
-<div class="block"><span class="strong">Deprecated.</span>
-<div class="block"><i>Use <a href="./org/apache/commons/io/FileCleaningTracker.html#exitWhenFinished()"><code>FileCleaningTracker.exitWhenFinished()</code></a>.</i></div>
-</div>
-</dd>
-<dt><span class="strong"><a href="./org/apache/commons/io/FileCleaningTracker.html#exitWhenFinished()">exitWhenFinished()</a></span> - Method in class org.apache.commons.io.<a href="./org/apache/commons/io/FileCleaningTracker.html" title="class in org.apache.commons.io">FileCleaningTracker</a></dt>
-<dd>
-<div class="block">Call this method to cause the file cleaner thread to terminate when
- there are no more objects being tracked for deletion.</div>
-</dd>
-<dt><span class="strong"><a href="./org/apache/commons/io/comparator/ExtensionFileComparator.html#EXTENSION_COMPARATOR">EXTENSION_COMPARATOR</a></span> - Static variable in class org.apache.commons.io.comparator.<a href="./org/apache/commons/io/comparator/ExtensionFileComparator.html" title="class in org.apache.commons.io.comparator">ExtensionFileComparator</a></dt>
-<dd>
-<div class="block">Case-sensitive extension comparator instance (see <a href="./org/apache/commons/io/IOCase.html#SENSITIVE"><code>IOCase.SENSITIVE</code></a>)</div>
-</dd>
-<dt><span class="strong"><a href="./org/apache/commons/io/comparator/ExtensionFileComparator.html#EXTENSION_INSENSITIVE_COMPARATOR">EXTENSION_INSENSITIVE_COMPARATOR</a></span> - Static variable in class org.apache.commons.io.comparator.<a href="./org/apache/commons/io/comparator/ExtensionFileComparator.html" title="class in org.apache.commons.io.comparator">ExtensionFileComparator</a></dt>
-<dd>
-<div class="block">Case-insensitive extension comparator instance (see <a href="./org/apache/commons/io/IOCase.html#INSENSITIVE"><code>IOCase.INSENSITIVE</code></a>)</div>
-</dd>
-<dt><span class="strong"><a href="./org/apache/commons/io/comparator/ExtensionFileComparator.html#EXTENSION_INSENSITIVE_REVERSE">EXTENSION_INSENSITIVE_REVERSE</a></span> - Static variable in class org.apache.commons.io.comparator.<a href="./org/apache/commons/io/comparator/ExtensionFileComparator.html" title="class in org.apache.commons.io.comparator">ExtensionFileComparator</a></dt>
-<dd>
-<div class="block">Reverse case-insensitive extension comparator instance (see <a href="./org/apache/commons/io/IOCase.html#INSENSITIVE"><code>IOCase.INSENSITIVE</code></a>)</div>
-</dd>
-<dt><span class="strong"><a href="./org/apache/commons/io/comparator/ExtensionFileComparator.html#EXTENSION_REVERSE">EXTENSION_REVERSE</a></span> - Static variable in class org.apache.commons.io.comparator.<a href="./org/apache/commons/io/comparator/ExtensionFileComparator.html" title="class in org.apache.commons.io.comparator">ExtensionFileComparator</a></dt>
-<dd>
-<div class="block">Reverse case-sensitive extension comparator instance (see <a href="./org/apache/commons/io/IOCase.html#SENSITIVE"><code>IOCase.SENSITIVE</code></a>)</div>
-</dd>
-<dt><span class="strong"><a href="./org/apache/commons/io/FilenameUtils.html#EXTENSION_SEPARATOR">EXTENSION_SEPARATOR</a></span> - Static variable in class org.apache.commons.io.<a href="./org/apache/commons/io/FilenameUtils.html" title="class in org.apache.commons.io">FilenameUtils</a></dt>
-<dd>
-<div class="block">The extension separator character.</div>
-</dd>
-<dt><span class="strong"><a href="./org/apache/commons/io/FilenameUtils.html#EXTENSION_SEPARATOR_STR">EXTENSION_SEPARATOR_STR</a></span> - Static variable in class org.apache.commons.io.<a href="./org/apache/commons/io/FilenameUtils.html" title="class in org.apache.commons.io">FilenameUtils</a></dt>
-<dd>
-<div class="block">The extension separator String.</div>
-</dd>
-<dt><span class="strong"><a href="./org/apache/commons/io/comparator/ExtensionFileComparator.html#EXTENSION_SYSTEM_COMPARATOR">EXTENSION_SYSTEM_COMPARATOR</a></span> - Static variable in class org.apache.commons.io.comparator.<a href="./org/apache/commons/io/comparator/ExtensionFileComparator.html" title="class in org.apache.commons.io.comparator">ExtensionFileComparator</a></dt>
-<dd>
-<div class="block">System sensitive extension comparator instance (see <a href="./org/apache/commons/io/IOCase.html#SYSTEM"><code>IOCase.SYSTEM</code></a>)</div>
-</dd>
-<dt><span class="strong"><a href="./org/apache/commons/io/comparator/ExtensionFileComparator.html#EXTENSION_SYSTEM_REVERSE">EXTENSION_SYSTEM_REVERSE</a></span> - Static variable in class org.apache.commons.io.comparator.<a href="./org/apache/commons/io/comparator/ExtensionFileComparator.html" title="class in org.apache.commons.io.comparator">ExtensionFileComparator</a></dt>
-<dd>
-<div class="block">Reverse system sensitive path comparator instance (see <a href="./org/apache/commons/io/IOCase.html#SYSTEM"><code>IOCase.SYSTEM</code></a>)</div>
-</dd>
-<dt><a href="./org/apache/commons/io/comparator/ExtensionFileComparator.html" title="class in org.apache.commons.io.comparator"><span class="strong">ExtensionFileComparator</span></a> - Class in <a href="./org/apache/commons/io/comparator/package-summary.html">org.apache.commons.io.comparator</a></dt>
-<dd>
-<div class="block">Compare the file name <b>extensions</b> for order
- (see <a href="./org/apache/commons/io/FilenameUtils.html#getExtension(java.lang.String)"><code>FilenameUtils.getExtension(String)</code></a>).</div>
-</dd>
-<dt><span class="strong"><a href="./org/apache/commons/io/comparator/ExtensionFileComparator.html#ExtensionFileComparator()">ExtensionFileComparator()</a></span> - Constructor for class org.apache.commons.io.comparator.<a href="./org/apache/commons/io/comparator/ExtensionFileComparator.html" title="class in org.apache.commons.io.comparator">ExtensionFileComparator</a></dt>
-<dd>
-<div class="block">Construct a case sensitive file extension comparator instance.</div>
-</dd>
-<dt><span class="strong"><a href="./org/apache/commons/io/comparator/ExtensionFileComparator.html#ExtensionFileComparator(org.apache.commons.io.IOCase)">ExtensionFileComparator(IOCase)</a></span> - Constructor for class org.apache.commons.io.comparator.<a href="./org/apache/commons/io/comparator/ExtensionFileComparator.html" title="class in org.apache.commons.io.comparator">ExtensionFileComparator</a></dt>
-<dd>
-<div class="block">Construct a file extension comparator instance with the specified case-sensitivity.</div>
-</dd>
-</dl>
-<a name="_F_">
-<!--   -->
-</a>
-<h2 class="title">F</h2>
-<dl>
-<dt><span class="strong"><a href="./org/apache/commons/io/filefilter/FalseFileFilter.html#FALSE">FALSE</a></span> - Static variable in class org.apache.commons.io.filefilter.<a href="./org/apache/commons/io/filefilter/FalseFileFilter.html" title="class in org.apache.commons.io.filefilter">FalseFileFilter</a></dt>
-<dd>
-<div class="block">Singleton instance of false filter.</div>
-</dd>
-<dt><a href="./org/apache/commons/io/filefilter/FalseFileFilter.html" title="class in org.apache.commons.io.filefilter"><span class="strong">FalseFileFilter</span></a> - Class in <a href="./org/apache/commons/io/filefilter/package-summary.html">org.apache.commons.io.filefilter</a></dt>
-<dd>
-<div class="block">A file filter that always returns false.</div>
-</dd>
-<dt><span class="strong"><a href="./org/apache/commons/io/filefilter/FalseFileFilter.html#FalseFileFilter()">FalseFileFilter()</a></span> - Constructor for class org.apache.commons.io.filefilter.<a href="./org/apache/commons/io/filefilter/FalseFileFilter.html" title="class in org.apache.commons.io.filefilter">FalseFileFilter</a></dt>
-<dd>
-<div class="block">Restrictive consructor.</div>
-</dd>
-<dt><span class="strong"><a href="./org/apache/commons/io/filefilter/FileFilterUtils.html#falseFileFilter()">falseFileFilter()</a></span> - Static method in class org.apache.commons.io.filefilter.<a href="./org/apache/commons/io/filefilter/FileFilterUtils.html" title="class in org.apache.commons.io.filefilter">FileFilterUtils</a></dt>
-<dd>
-<div class="block">Returns a filter that always returns false.</div>
-</dd>
-<dt><span class="strong"><a href="./org/apache/commons/io/filefilter/FileFileFilter.html#FILE">FILE</a></span> - Static variable in class org.apache.commons.io.filefilter.<a href="./org/apache/commons/io/filefilter/FileFileFilter.html" title="class in org.apache.commons.io.filefilter">FileFileFilter</a></dt>
-<dd>
-<div class="block">Singleton instance of file filter</div>
-</dd>
-<dt><a href="./org/apache/commons/io/monitor/FileAlterationListener.html" title="interface in org.apache.commons.io.monitor"><span class="strong">FileAlterationListener</span></a> - Interface in <a href="./org/apache/commons/io/monitor/package-summary.html">org.apache.commons.io.monitor</a></dt>
-<dd>
-<div class="block">A listener that receives events of file system modifications.</div>
-</dd>
-<dt><a href="./org/apache/commons/io/monitor/FileAlterationListenerAdaptor.html" title="class in org.apache.commons.io.monitor"><span class="strong">FileAlterationListenerAdaptor</span></a> - Class in <a href="./org/apache/commons/io/monitor/package-summary.html">org.apache.commons.io.monitor</a></dt>
-<dd>
-<div class="block">Convenience <a href="./org/apache/commons/io/monitor/FileAlterationListener.html" title="interface in org.apache.commons.io.monitor"><code>FileAlterationListener</code></a> implementation that does nothing.</div>
-</dd>
-<dt><span class="strong"><a href="./org/apache/commons/io/monitor/FileAlterationListenerAdaptor.html#FileAlterationListenerAdaptor()">FileAlterationListenerAdaptor()</a></span> - Constructor for class org.apache.commons.io.monitor.<a href="./org/apache/commons/io/monitor/FileAlterationListenerAdaptor.html" title="class in org.apache.commons.io.monitor">FileAlterationListenerAdaptor</a></dt>
-<dd>&nbsp;</dd>
-<dt><a href="./org/apache/commons/io/monitor/FileAlterationMonitor.html" title="class in org.apache.commons.io.monitor"><span class="strong">FileAlterationMonitor</span></a> - Class in <a href="./org/apache/commons/io/monitor/package-summary.html">org.apache.commons.io.monitor</a></dt>
-<dd>
-<div class="block">A runnable that spawns a monitoring thread triggering any
- registered <a href="./org/apache/commons/io/monitor/FileAlterationObserver.html" title="class in org.apache.commons.io.monitor"><code>FileAlterationObserver</code></a> at a specified interval.</div>
-</dd>
-<dt><span class="strong"><a href="./org/apache/commons/io/monitor/FileAlterationMonitor.html#FileAlterationMonitor()">FileAlterationMonitor()</a></span> - Constructor for class org.apache.commons.io.monitor.<a href="./org/apache/commons/io/monitor/FileAlterationMonitor.html" title="class in org.apache.commons.io.monitor">FileAlterationMonitor</a></dt>
-<dd>
-<div class="block">Construct a monitor with a default interval of 10 seconds.</div>
-</dd>
-<dt><span class="strong"><a href="./org/apache/commons/io/monitor/FileAlterationMonitor.html#FileAlterationMonitor(long)">FileAlterationMonitor(long)</a></span> - Constructor for class org.apache.commons.io.monitor.<a href="./org/apache/commons/io/monitor/FileAlterationMonitor.html" title="class in org.apache.commons.io.monitor">FileAlterationMonitor</a></dt>
-<dd>
-<div class="block">Construct a monitor with the specified interval.</div>
-</dd>
-<dt><span class="strong"><a href="./org/apache/commons/io/monitor/FileAlterationMonitor.html#FileAlterationMonitor(long, org.apache.commons.io.monitor.FileAlterationObserver...)">FileAlterationMonitor(long, FileAlterationObserver...)</a></span> - Constructor for class org.apache.commons.io.monitor.<a href="./org/apache/commons/io/monitor/FileAlterationMonitor.html" title="class in org.apache.commons.io.monitor">FileAlterationMonitor</a></dt>
-<dd>
-<div class="block">Construct a monitor with the specified interval and set of observers.</div>
-</dd>
-<dt><a href="./org/apache/commons/io/monitor/FileAlterationObserver.html" title="class in org.apache.commons.io.monitor"><span class="strong">FileAlterationObserver</span></a> - Class in <a href="./org/apache/commons/io/monitor/package-summary.html">org.apache.commons.io.monitor</a></dt>
-<dd>
-<div class="block">FileAlterationObserver represents the state of files below a root directory,
- checking the filesystem and notifying listeners of create, change or
- delete events.</div>
-</dd>
-<dt><span class="strong"><a href="./org/apache/commons/io/monitor/FileAlterationObserver.html#FileAlterationObserver(java.lang.String)">FileAlterationObserver(String)</a></span> - Constructor for class org.apache.commons.io.monitor.<a href="./org/apache/commons/io/monitor/FileAlterationObserver.html" title="class in org.apache.commons.io.monitor">FileAlterationObserver</a></dt>
-<dd>
-<div class="block">Construct an observer for the specified directory.</div>
-</dd>
-<dt><span class="strong"><a href="./org/apache/commons/io/monitor/FileAlterationObserver.html#FileAlterationObserver(java.lang.String, java.io.FileFilter)">FileAlterationObserver(String, FileFilter)</a></span> - Constructor for class org.apache.commons.io.monitor.<a href="./org/apache/commons/io/monitor/FileAlterationObserver.html" title="class in org.apache.commons.io.monitor">FileAlterationObserver</a></dt>
-<dd>
-<div class="block">Construct an observer for the specified directory and file filter.</div>
-</dd>
-<dt><span class="strong"><a href="./org/apache/commons/io/monitor/FileAlterationObserver.html#FileAlterationObserver(java.lang.String, java.io.FileFilter, org.apache.commons.io.IOCase)">FileAlterationObserver(String, FileFilter, IOCase)</a></span> - Constructor for class org.apache.commons.io.monitor.<a href="./org/apache/commons/io/monitor/FileAlterationObserver.html" title="class in org.apache.commons.io.monitor">FileAlterationObserver</a></dt>
-<dd>
-<div class="block">Construct an observer for the specified directory, file filter and
- file comparator.</div>
-</dd>
-<dt><span class="strong"><a href="./org/apache/commons/io/monitor/FileAlterationObserver.html#FileAlterationObserver(java.io.File)">FileAlterationObserver(File)</a></span> - Constructor for class org.apache.commons.io.monitor.<a href="./org/apache/commons/io/monitor/FileAlterationObserver.html" title="class in org.apache.commons.io.monitor">FileAlterationObserver</a></dt>
-<dd>
-<div class="block">Construct an observer for the specified directory.</div>
-</dd>
-<dt><span class="strong"><a href="./org/apache/commons/io/monitor/FileAlterationObserver.html#FileAlterationObserver(java.io.File, java.io.FileFilter)">FileAlterationObserver(File, FileFilter)</a></span> - Constructor for class org.apache.commons.io.monitor.<a href="./org/apache/commons/io/monitor/FileAlterationObserver.html" title="class in org.apache.commons.io.monitor">FileAlterationObserver</a></dt>
-<dd>
-<div class="block">Construct an observer for the specified directory and file filter.</div>
-</dd>
-<dt><span class="strong"><a href="./org/apache/commons/io/monitor/FileAlterationObserver.html#FileAlterationObserver(java.io.File, java.io.FileFilter, org.apache.commons.io.IOCase)">FileAlterationObserver(File, FileFilter, IOCase)</a></span> - Constructor for class org.apache.commons.io.monitor.<a href="./org/apache/commons/io/monitor/FileAlterationObserver.html" title="class in org.apache.commons.io.monitor">FileAlterationObserver</a></dt>
-<dd>
-<div class="block">Construct an observer for the specified directory, file filter and
- file comparator.</div>
-</dd>
-<dt><span class="strong"><a href="./org/apache/commons/io/monitor/FileAlterationObserver.html#FileAlterationObserver(org.apache.commons.io.monitor.FileEntry, java.io.FileFilter, org.apache.commons.io.IOCase)">FileAlterationObserver(FileEntry, FileFilter, IOCase)</a></span> - Constructor for class org.apache.commons.io.monitor.<a href="./org/apache/commons/io/monitor/FileAlterationObserver.html" title="class in org.apache.commons.io.monitor">FileAlterationObserver</a></dt>
-<dd>
-<div class="block">Construct an observer for the specified directory, file filter and
- file comparator.</div>
-</dd>
-<dt><a href="./org/apache/commons/io/FileCleaner.html" title="class in org.apache.commons.io"><span class="strong">FileCleaner</span></a> - Class in <a href="./org/apache/commons/io/package-summary.html">org.apache.commons.io</a></dt>
-<dd>
-<div class="block"><span class="strong">Deprecated.</span>
-<div class="block"><i>Use <a href="./org/apache/commons/io/FileCleaningTracker.html" title="class in org.apache.commons.io"><code>FileCleaningTracker</code></a></i></div>
-</div>
-</dd>
-<dt><span class="strong"><a href="./org/apache/commons/io/FileCleaner.html#FileCleaner()">FileCleaner()</a></span> - Constructor for class org.apache.commons.io.<a href="./org/apache/commons/io/FileCleaner.html" title="class in org.apache.commons.io">FileCleaner</a></dt>
-<dd>
-<div class="block"><span class="strong">Deprecated.</span></div>
-&nbsp;</dd>
-<dt><a href="./org/apache/commons/io/FileCleaningTracker.html" title="class in org.apache.commons.io"><span class="strong">FileCleaningTracker</span></a> - Class in <a href="./org/apache/commons/io/package-summary.html">org.apache.commons.io</a></dt>
-<dd>
-<div class="block">Keeps track of files awaiting deletion, and deletes them when an associated
- marker object is reclaimed by the garbage collector.</div>
-</dd>
-<dt><span class="strong"><a href="./org/apache/commons/io/FileCleaningTracker.html#FileCleaningTracker()">FileCleaningTracker()</a></span> - Constructor for class org.apache.commons.io.<a href="./org/apache/commons/io/FileCleaningTracker.html" title="class in org.apache.commons.io">FileCleaningTracker</a></dt>
-<dd>&nbsp;</dd>
-<dt><a href="./org/apache/commons/io/FileDeleteStrategy.html" title="class in org.apache.commons.io"><span class="strong">FileDeleteStrategy</span></a> - Class in <a href="./org/apache/commons/io/package-summary.html">org.apache.commons.io</a></dt>
-<dd>
-<div class="block">Strategy for deleting files.</div>
-</dd>
-<dt><span class="strong"><a href="./org/apache/commons/io/FileDeleteStrategy.html#FileDeleteStrategy(java.lang.String)">FileDeleteStrategy(String)</a></span> - Constructor for class org.apache.commons.io.<a href="./org/apache/commons/io/FileDeleteStrategy.html" title="class in org.apache.commons.io">FileDeleteStrategy</a></dt>
-<dd>
-<div class="block">Restricted constructor.</div>
-</dd>
-<dt><a href="./org/apache/commons/io/monitor/FileEntry.html" title="class in org.apache.commons.io.monitor"><span class="strong">FileEntry</span></a> - Class in <a href="./org/apache/commons/io/monitor/package-summary.html">org.apache.commons.io.monitor</a></dt>
-<dd>
-<div class="block"><a href="./org/apache/commons/io/monitor/FileEntry.html" title="class in org.apache.commons.io.monitor"><code>FileEntry</code></a> represents the state of a file or directory, capturing
- the following <a href="http://download.oracle.com/javase/6/docs/api/java/io/File.html?is-external=true" title="class or interface in java.io"><code>File</code></a> attributes at a point in time.</div>
-</dd>
-<dt><span class="strong"><a href="./org/apache/commons/io/monitor/FileEntry.html#FileEntry(java.io.File)">FileEntry(File)</a></span> - Constructor for class org.apache.commons.io.monitor.<a href="./org/apache/commons/io/monitor/FileEntry.html" title="class in org.apache.commons.io.monitor">FileEntry</a></dt>
-<dd>
-<div class="block">Construct a new monitor for a specified <a href="http://download.oracle.com/javase/6/docs/api/java/io/File.html?is-external=true" title="class or interface in java.io"><code>File</code></a>.</div>
-</dd>
-<dt><span class="strong"><a href="./org/apache/commons/io/monitor/FileEntry.html#FileEntry(org.apache.commons.io.monitor.FileEntry, java.io.File)">FileEntry(FileEntry, File)</a></span> - Constructor for class org.apache.commons.io.monitor.<a href="./org/apache/commons/io/monitor/FileEntry.html" title="class in org.apache.commons.io.monitor">FileEntry</a></dt>
-<dd>
-<div class="block">Construct a new monitor for a specified <a href="http://download.oracle.com/javase/6/docs/api/java/io/File.html?is-external=true" title="class or interface in java.io"><code>File</code></a>.</div>
-</dd>
-<dt><a href="./org/apache/commons/io/FileExistsException.html" title="class in org.apache.commons.io"><span class="strong">FileExistsException</span></a> - Exception in <a href="./org/apache/commons/io/package-summary.html">org.apache.commons.io</a></dt>
-<dd>
-<div class="block">Indicates that a file already exists.</div>
-</dd>
-<dt><span class="strong"><a href="./org/apache/commons/io/FileExistsException.html#FileExistsException()">FileExistsException()</a></span> - Constructor for exception org.apache.commons.io.<a href="./org/apache/commons/io/FileExistsException.html" title="class in org.apache.commons.io">FileExistsException</a></dt>
-<dd>
-<div class="block">Default Constructor.</div>
-</dd>
-<dt><span class="strong"><a href="./org/apache/commons/io/FileExistsException.html#FileExistsException(java.lang.String)">FileExistsException(String)</a></span> - Constructor for exception org.apache.commons.io.<a href="./org/apache/commons/io/FileExistsException.html" title="class in org.apache.commons.io">FileExistsException</a></dt>
-<dd>
-<div class="block">Construct an instance with the specified message.</div>
-</dd>
-<dt><span class="strong"><a href="./org/apache/commons/io/FileExistsException.html#FileExistsException(java.io.File)">FileExistsException(File)</a></span> - Constructor for exception org.apache.commons.io.<a href="./org/apache/commons/io/FileExistsException.html" title="class in org.apache.commons.io">FileExistsException</a></dt>
-<dd>
-<div class="block">Construct an instance with the specified file.</div>
-</dd>
-<dt><a href="./org/apache/commons/io/filefilter/FileFileFilter.html" title="class in org.apache.commons.io.filefilter"><span class="strong">FileFileFilter</span></a> - Class in <a href="./org/apache/commons/io/filefilter/package-summary.html">org.apache.commons.io.filefilter</a></dt>
-<dd>
-<div class="block">This filter accepts <code>File</code>s that are files (not directories).</div>
-</dd>
-<dt><span class="strong"><a href="./org/apache/commons/io/filefilter/FileFileFilter.html#FileFileFilter()">FileFileFilter()</a></span> - Constructor for class org.apache.commons.io.filefilter.<a href="./org/apache/commons/io/filefilter/FileFileFilter.html" title="class in org.apache.commons.io.filefilter">FileFileFilter</a></dt>
-<dd>
-<div class="block">Restrictive consructor.</div>
-</dd>
-<dt><span class="strong"><a href="./org/apache/commons/io/filefilter/FileFilterUtils.html#fileFileFilter()">fileFileFilter()</a></span> - Static method in class org.apache.commons.io.filefilter.<a href="./org/apache/commons/io/filefilter/FileFilterUtils.html" title="class in org.apache.commons.io.filefilter">FileFilterUtils</a></dt>
-<dd>
-<div class="block">Returns a filter that checks if the file is a file (and not a directory).</div>
-</dd>
-<dt><a href="./org/apache/commons/io/filefilter/FileFilterUtils.html" title="class in org.apache.commons.io.filefilter"><span class="strong">FileFilterUtils</span></a> - Class in <a href="./org/apache/commons/io/filefilter/package-summary.html">org.apache.commons.io.filefilter</a></dt>
-<dd>
-<div class="block">Useful utilities for working with file filters.</div>
-</dd>
-<dt><span class="strong"><a href="./org/apache/commons/io/filefilter/FileFilterUtils.html#FileFilterUtils()">FileFilterUtils()</a></span> - Constructor for class org.apache.commons.io.filefilter.<a href="./org/apache/commons/io/filefilter/FileFilterUtils.html" title="class in org.apache.commons.io.filefilter">FileFilterUtils</a></dt>
-<dd>
-<div class="block">FileFilterUtils is not normally instantiated.</div>
-</dd>
-<dt><a href="./org/apache/commons/io/FilenameUtils.html" title="class in org.apache.commons.io"><span class="strong">FilenameUtils</span></a> - Class in <a href="./org/apache/commons/io/package-summary.html">org.apache.commons.io</a></dt>
-<dd>
-<div class="block">General filename and filepath manipulation utilities.</div>
-</dd>
-<dt><span class="strong"><a href="./org/apache/commons/io/FilenameUtils.html#FilenameUtils()">FilenameUtils()</a></span> - Constructor for class org.apache.commons.io.<a href="./org/apache/commons/io/FilenameUtils.html" title="class in org.apache.commons.io">FilenameUtils</a></dt>
-<dd>
-<div class="block">Instances should NOT be constructed in standard programming.</div>
-</dd>
-<dt><span class="strong"><a href="./org/apache/commons/io/input/TailerListener.html#fileNotFound()">fileNotFound()</a></span> - Method in interface org.apache.commons.io.input.<a href="./org/apache/commons/io/input/TailerListener.html" title="interface in org.apache.commons.io.input">TailerListener</a></dt>
-<dd>
-<div class="block">This method is called if the tailed file is not found.</div>
-</dd>
-<dt><span class="strong"><a href="./org/apache/commons/io/input/TailerListenerAdapter.html#fileNotFound()">fileNotFound()</a></span> - Method in class org.apache.commons.io.input.<a href="./org/apache/commons/io/input/TailerListenerAdapter.html" title="class in org.apache.commons.io.input">TailerListenerAdapter</a></dt>
-<dd>
-<div class="block">This method is called if the tailed file is not found.</div>
-</dd>
-<dt><span class="strong"><a href="./org/apache/commons/io/input/TailerListener.html#fileRotated()">fileRotated()</a></span> - Method in interface org.apache.commons.io.input.<a href="./org/apache/commons/io/input/TailerListener.html" title="interface in org.apache.commons.io.input">TailerListener</a></dt>
-<dd>
-<div class="block">Called if a file rotation is detected.</div>
-</dd>
-<dt><span class="strong"><a href="./org/apache/commons/io/input/TailerListenerAdapter.html#fileRotated()">fileRotated()</a></span> - Method in class org.apache.commons.io.input.<a href="./org/apache/commons/io/input/TailerListenerAdapter.html" title="class in org.apache.commons.io.input">TailerListenerAdapter</a></dt>
-<dd>
-<div class="block">Called if a file rotation is detected.</div>
-</dd>
-<dt><a href="./org/apache/commons/io/FileSystemUtils.html" title="class in org.apache.commons.io"><span class="strong">FileSystemUtils</span></a> - Class in <a href="./org/apache/commons/io/package-summary.html">org.apache.commons.io</a></dt>
-<dd>
-<div class="block">General File System utilities.</div>
-</dd>
-<dt><span class="strong"><a href="./org/apache/commons/io/FileSystemUtils.html#FileSystemUtils()">FileSystemUtils()</a></span> - Constructor for class org.apache.commons.io.<a href="./org/apache/commons/io/FileSystemUtils.html" title="class in org.apache.commons.io">FileSystemUtils</a></dt>
-<dd>
-<div class="block">Instances should NOT be constructed in standard programming.</div>
-</dd>
-<dt><a href="./org/apache/commons/io/FileUtils.html" title="class in org.apache.commons.io"><span class="strong">FileUtils</span></a> - Class in <a href="./org/apache/commons/io/package-summary.html">org.apache.commons.io</a></dt>
-<dd>
-<div class="block">General file manipulation utilities.</div>
-</dd>
-<dt><span class="strong"><a href="./org/apache/commons/io/FileUtils.html#FileUtils()">FileUtils()</a></span> - Constructor for class org.apache.commons.io.<a href="./org/apache/commons/io/FileUtils.html" title="class in org.apache.commons.io">FileUtils</a></dt>
-<dd>
-<div class="block">Instances should NOT be constructed in standard programming.</div>
-</dd>
-<dt><a href="./org/apache/commons/io/output/FileWriterWithEncoding.html" title="class in org.apache.commons.io.output"><span class="strong">FileWriterWithEncoding</span></a> - Class in <a href="./org/apache/commons/io/output/package-summary.html">org.apache.commons.io.output</a></dt>
-<dd>
-<div class="block">Writer of files that allows the encoding to be set.</div>
-</dd>
-<dt><span class="strong"><a href="./org/apache/commons/io/output/FileWriterWithEncoding.html#FileWriterWithEncoding(java.lang.String, java.lang.String)">FileWriterWithEncoding(String, String)</a></span> - Constructor for class org.apache.commons.io.output.<a href="./org/apache/commons/io/output/FileWriterWithEncoding.html" title="class in org.apache.commons.io.output">FileWriterWithEncoding</a></dt>
-<dd>
-<div class="block">Constructs a FileWriterWithEncoding with a file encoding.</div>
-</dd>
-<dt><span class="strong"><a href="./org/apache/commons/io/output/FileWriterWithEncoding.html#FileWriterWithEncoding(java.lang.String, java.lang.String, boolean)">FileWriterWithEncoding(String, String, boolean)</a></span> - Constructor for class org.apache.commons.io.output.<a href="./org/apache/commons/io/output/FileWriterWithEncoding.html" title="class in org.apache.commons.io.output">FileWriterWithEncoding</a></dt>
-<dd>
-<div class="block">Constructs a FileWriterWithEncoding with a file encoding.</div>
-</dd>
-<dt><span class="strong"><a href="./org/apache/commons/io/output/FileWriterWithEncoding.html#FileWriterWithEncoding(java.lang.String, java.nio.charset.Charset)">FileWriterWithEncoding(String, Charset)</a></span> - Constructor for class org.apache.commons.io.output.<a href="./org/apache/commons/io/output/FileWriterWithEncoding.html" title="class in org.apache.commons.io.output">FileWriterWithEncoding</a></dt>
-<dd>
-<div class="block">Constructs a FileWriterWithEncoding with a file encoding.</div>
-</dd>
-<dt><span class="strong"><a href="./org/apache/commons/io/output/FileWriterWithEncoding.html#FileWriterWithEncoding(java.lang.String, java.nio.charset.Charset, boolean)">FileWriterWithEncoding(String, Charset, boolean)</a></span> - Constructor for class org.apache.commons.io.output.<a href="./org/apache/commons/io/output/FileWriterWithEncoding.html" title="class in org.apache.commons.io.output">FileWriterWithEncoding</a></dt>
-<dd>
-<div class="block">Constructs a FileWriterWithEncoding with a file encoding.</div>
-</dd>
-<dt><span class="strong"><a href="./org/apache/commons/io/output/FileWriterWithEncoding.html#FileWriterWithEncoding(java.lang.String, java.nio.charset.CharsetEncoder)">FileWriterWithEncoding(String, CharsetEncoder)</a></span> - Constructor for class org.apache.commons.io.output.<a href="./org/apache/commons/io/output/FileWriterWithEncoding.html" title="class in org.apache.commons.io.output">FileWriterWithEncoding</a></dt>
-<dd>
-<div class="block">Constructs a FileWriterWithEncoding with a file encoding.</div>
-</dd>
-<dt><span class="strong"><a href="./org/apache/commons/io/output/FileWriterWithEncoding.html#FileWriterWithEncoding(java.lang.String, java.nio.charset.CharsetEncoder, boolean)">FileWriterWithEncoding(String, CharsetEncoder, boolean)</a></span> - Constructor for class org.apache.commons.io.output.<a href="./org/apache/commons/io/output/FileWriterWithEncoding.html" title="class in org.apache.commons.io.output">FileWriterWithEncoding</a></dt>
-<dd>
-<div class="block">Constructs a FileWriterWithEncoding with a file encoding.</div>
-</dd>
-<dt><span class="strong"><a href="./org/apache/commons/io/output/FileWriterWithEncoding.html#FileWriterWithEncoding(java.io.File, java.lang.String)">FileWriterWithEncoding(File, String)</a></span> - Constructor for class org.apache.commons.io.output.<a href="./org/apache/commons/io/output/FileWriterWithEncoding.html" title="class in org.apache.commons.io.output">FileWriterWithEncoding</a></dt>
-<dd>
-<div class="block">Constructs a FileWriterWithEncoding with a file encoding.</div>
-</dd>
-<dt><span class="strong"><a href="./org/apache/commons/io/output/FileWriterWithEncoding.html#FileWriterWithEncoding(java.io.File, java.lang.String, boolean)">FileWriterWithEncoding(File, String, boolean)</a></span> - Constructor for class org.apache.commons.io.output.<a href="./org/apache/commons/io/output/FileWriterWithEncoding.html" title="class in org.apache.commons.io.output">FileWriterWithEncoding</a></dt>
-<dd>
-<div class="block">Constructs a FileWriterWithEncoding with a file encoding.</div>
-</dd>
-<dt><span class="strong"><a href="./org/apache/commons/io/output/FileWriterWithEncoding.html#FileWriterWithEncoding(java.io.File, java.nio.charset.Charset)">FileWriterWithEncoding(File, Charset)</a></span> - Constructor for class org.apache.commons.io.output.<a href="./org/apache/commons/io/output/FileWriterWithEncoding.html" title="class in org.apache.commons.io.output">FileWriterWithEncoding</a></dt>
-<dd>
-<div class="block">Constructs a FileWriterWithEncoding with a file encoding.</div>
-</dd>
-<dt><span class="strong"><a href="./org/apache/commons/io/output/FileWriterWithEncoding.html#FileWriterWithEncoding(java.io.File, java.nio.charset.Charset, boolean)">FileWriterWithEncoding(File, Charset, boolean)</a></span> - Constructor for class org.apache.commons.io.output.<a href="./org/apache/commons/io/output/FileWriterWithEncoding.html" title="class in org.apache.commons.io.output">FileWriterWithEncoding</a></dt>
-<dd>
-<div class="block">Constructs a FileWriterWithEncoding with a file encoding.</div>
-</dd>
-<dt><span class="strong"><a href="./org/apache/commons/io/output/FileWriterWithEncoding.html#FileWriterWithEncoding(java.io.File, java.nio.charset.CharsetEncoder)">FileWriterWithEncoding(File, CharsetEncoder)</a></span> - Constructor for class org.apache.commons.io.output.<a href="./org/apache/commons/io/output/FileWriterWithEncoding.html" title="class in org.apache.commons.io.output">FileWriterWithEncoding</a></dt>
-<dd>
-<div class="block">Constructs a FileWriterWithEncoding with a file encoding.</div>
-</dd>
-<dt><span class="strong"><a href="./org/apache/commons/io/output/FileWriterWithEncoding.html#FileWriterWithEncoding(java.io.File, java.nio.charset.CharsetEncoder, boolean)">FileWriterWithEncoding(File, CharsetEncoder, boolean)</a></span> - Constructor for class org.apache.commons.io.output.<a href="./org/apache/commons/io/output/FileWriterWithEncoding.html" title="class in org.apache.commons.io.output">FileWriterWithEncoding</a></dt>
-<dd>
-<div class="block">Constructs a FileWriterWithEncoding with a file encoding.</div>
-</dd>
-<dt><span class="strong"><a href="./org/apache/commons/io/filefilter/FileFilterUtils.html#filter(org.apache.commons.io.filefilter.IOFileFilter, java.io.File...)">filter(IOFileFilter, File...)</a></span> - Static method in class org.apache.commons.io.filefilter.<a href="./org/apache/commons/io/filefilter/FileFilterUtils.html" title="class in org.apache.commons.io.filefilter">FileFilterUtils</a></dt>
-<dd>
-<div class="block">
- Applies an <a href="./org/apache/commons/io/filefilter/IOFileFilter.html" title="interface in org.apache.commons.io.filefilter"><code>IOFileFilter</code></a> to the provided <a href="http://download.oracle.com/javase/6/docs/api/java/io/File.html?is-external=true" title="class or interface in java.io"><code>File</code></a>
- objects.</div>
-</dd>
-<dt><span class="strong"><a href="./org/apache/commons/io/filefilter/FileFilterUtils.html#filter(org.apache.commons.io.filefilter.IOFileFilter, java.lang.Iterable)">filter(IOFileFilter, Iterable&lt;File&gt;)</a></span> - Static method in class org.apache.commons.io.filefilter.<a href="./org/apache/commons/io/filefilter/FileFilterUtils.html" title="class in org.apache.commons.io.filefilter">FileFilterUtils</a></dt>
-<dd>
-<div class="block">
- Applies an <a href="./org/apache/commons/io/filefilter/IOFileFilter.html" title="interface in org.apache.commons.io.filefilter"><code>IOFileFilter</code></a> to the provided <a href="http://download.oracle.com/javase/6/docs/api/java/io/File.html?is-external=true" title="class or interface in java.io"><code>File</code></a>
- objects.</div>
-</dd>
-<dt><span class="strong"><a href="./org/apache/commons/io/DirectoryWalker.html#filterDirectoryContents(java.io.File, int, java.io.File[])">filterDirectoryContents(File, int, File[])</a></span> - Method in class org.apache.commons.io.<a href="./org/apache/commons/io/DirectoryWalker.html" title="class in org.apache.commons.io">DirectoryWalker</a></dt>
-<dd>
-<div class="block">Overridable callback method invoked with the contents of each directory.</div>
-</dd>
-<dt><span class="strong"><a href="./org/apache/commons/io/filefilter/FileFilterUtils.html#filterList(org.apache.commons.io.filefilter.IOFileFilter, java.lang.Iterable)">filterList(IOFileFilter, Iterable&lt;File&gt;)</a></span> - Static method in class org.apache.commons.io.filefilter.<a href="./org/apache/commons/io/filefilter/FileFilterUtils.html" title="class in org.apache.commons.io.filefilter">FileFilterUtils</a></dt>
-<dd>
-<div class="block">
- Applies an <a href="./org/apache/commons/io/filefilter/IOFileFilter.html" title="interface in org.apache.commons.io.filefilter"><code>IOFileFilter</code></a> to the provided <a href="http://download.oracle.com/javase/6/docs/api/java/io/File.html?is-external=true" title="class or interface in java.io"><code>File</code></a>
- objects.</div>
-</dd>
-<dt><span class="strong"><a href="./org/apache/commons/io/filefilter/FileFilterUtils.html#filterList(org.apache.commons.io.filefilter.IOFileFilter, java.io.File...)">filterList(IOFileFilter, File...)</a></span> - Static method in class org.apache.commons.io.filefilter.<a href="./org/apache/commons/io/filefilter/FileFilterUtils.html" title="class in org.apache.commons.io.filefilter">FileFilterUtils</a></dt>
-<dd>
-<div class="block">
- Applies an <a href="./org/apache/commons/io/filefilter/IOFileFilter.html" title="interface in org.apache.commons.io.filefilter"><code>IOFileFilter</code></a> to the provided <a href="http://download.oracle.com/javase/6/docs/api/java/io/File.html?is-external=true" title="class or interface in java.io"><code>File</code></a>
- objects.</div>
-</dd>
-<dt><span class="strong"><a href="./org/apache/commons/io/filefilter/FileFilterUtils.html#filterSet(org.apache.commons.io.filefilter.IOFileFilter, java.io.File...)">filterSet(IOFileFilter, File...)</a></span> - Static method in class org.apache.commons.io.filefilter.<a href="./org/apache/commons/io/filefilter/FileFilterUtils.html" title="class in org.apache.commons.io.filefilter">FileFilterUtils</a></dt>
-<dd>
-<div class="block">
- Applies an <a href="./org/apache/commons/io/filefilter/IOFileFilter.html" title="interface in org.apache.commons.io.filefilter"><code>IOFileFilter</code></a> to the provided <a href="http://download.oracle.com/javase/6/docs/api/java/io/File.html?is-external=true" title="class or interface in java.io"><code>File</code></a>
- objects.</div>
-</dd>
-<dt><span class="strong"><a href="./org/apache/commons/io/filefilter/FileFilterUtils.html#filterSet(org.apache.commons.io.filefilter.IOFileFilter, java.lang.Iterable)">filterSet(IOFileFilter, Iterable&lt;File&gt;)</a></span> - Static method in class org.apache.commons.io.filefilter.<a href="./org/apache/commons/io/filefilter/FileFilterUtils.html" title="class in org.apache.commons.io.filefilter">FileFilterUtils</a></dt>
-<dd>
-<div class="block">
- Applies an <a href="./org/apache/commons/io/filefilter/IOFileFilter.html" title="interface in org.apache.commons.io.filefilter"><code>IOFileFilter</code></a> to the provided <a href="http://download.oracle.com/javase/6/docs/api/java/io/File.html?is-external=true" title="class or interface in java.io"><code>File</code></a>
- objects.</div>
-</dd>
-<dt><span class="strong"><a href="./org/apache/commons/io/input/AutoCloseInputStream.html#finalize()">finalize()</a></span> - Method in class org.apache.commons.io.input.<a href="./org/apache/commons/io/input/AutoCloseInputStream.html" title="class in org.apache.commons.io.input">AutoCloseInputStream</a></dt>
-<dd>
-<div class="block">Ensures that the stream is closed before it gets garbage-collected.</div>
-</dd>
-<dt><span class="strong"><a href="./org/apache/commons/io/output/BrokenOutputStream.html#flush()">flush()</a></span> - Method in class org.apache.commons.io.output.<a href="./org/apache/commons/io/output/BrokenOutputStream.html" title="class in org.apache.commons.io.output">BrokenOutputStream</a></dt>
-<dd>
-<div class="block">Throws the configured exception.</div>
-</dd>
-<dt><span class="strong"><a href="./org/apache/commons/io/output/DemuxOutputStream.html#flush()">flush()</a></span> - Method in class org.apache.commons.io.output.<a href="./org/apache/commons/io/output/DemuxOutputStream.html" title="class in org.apache.commons.io.output">DemuxOutputStream</a></dt>
-<dd>
-<div class="block">Flushes stream associated with current thread.</div>
-</dd>
-<dt><span class="strong"><a href="./org/apache/commons/io/output/FileWriterWithEncoding.html#flush()">flush()</a></span> - Method in class org.apache.commons.io.output.<a href="./org/apache/commons/io/output/FileWriterWithEncoding.html" title="class in org.apache.commons.io.output">FileWriterWithEncoding</a></dt>
-<dd>
-<div class="block">Flush the stream.</div>
-</dd>
-<dt><span class="strong"><a href="./org/apache/commons/io/output/LockableFileWriter.html#flush()">flush()</a></span> - Method in class org.apache.commons.io.output.<a href="./org/apache/commons/io/output/LockableFileWriter.html" title="class in org.apache.commons.io.output">LockableFileWriter</a></dt>
-<dd>
-<div class="block">Flush the stream.</div>
-</dd>
-<dt><span class="strong"><a href="./org/apache/commons/io/output/NullWriter.html#flush()">flush()</a></span> - Method in class org.apache.commons.io.output.<a href="./org/apache/commons/io/output/NullWriter.html" title="class in org.apache.commons.io.output">NullWriter</a></dt>
-<dd>&nbsp;</dd>
-<dt><span class="strong"><a href="./org/apache/commons/io/output/ProxyOutputStream.html#flush()">flush()</a></span> - Method in class org.apache.commons.io.output.<a href="./org/apache/commons/io/output/ProxyOutputStream.html" title="class in org.apache.commons.io.output">ProxyOutputStream</a></dt>
-<dd>
-<div class="block">Invokes the delegate's <code>flush()</code> method.</div>
-</dd>
-<dt><span class="strong"><a href="./org/apache/commons/io/output/ProxyWriter.html#flush()">flush()</a></span> - Method in class org.apache.commons.io.output.<a href="./org/apache/commons/io/output/ProxyWriter.html" title="class in org.apache.commons.io.output">ProxyWriter</a></dt>
-<dd>
-<div class="block">Invokes the delegate's <code>flush()</code> method.</div>
-</dd>
-<dt><span class="strong"><a href="./org/apache/commons/io/output/StringBuilderWriter.html#flush()">flush()</a></span> - Method in class org.apache.commons.io.output.<a href="./org/apache/commons/io/output/StringBuilderWriter.html" title="class in org.apache.commons.io.output">StringBuilderWriter</a></dt>
-<dd>
-<div class="block">Flushing this writer has no effect.</div>
-</dd>
-<dt><span class="strong"><a href="./org/apache/commons/io/output/TeeOutputStream.html#flush()">flush()</a></span> - Method in class org.apache.commons.io.output.<a href="./org/apache/commons/io/output/TeeOutputStream.html" title="class in org.apache.commons.io.output">TeeOutputStream</a></dt>
-<dd>
-<div class="block">Flushes both streams.</div>
-</dd>
-<dt><span class="strong"><a href="./org/apache/commons/io/output/ThresholdingOutputStream.html#flush()">flush()</a></span> - Method in class org.apache.commons.io.output.<a href="./org/apache/commons/io/output/ThresholdingOutputStream.html" title="class in org.apache.commons.io.output">ThresholdingOutputStream</a></dt>
-<dd>
-<div class="block">Flushes this output stream and forces any buffered output bytes to be
- written out.</div>
-</dd>
-<dt><span class="strong"><a href="./org/apache/commons/io/output/WriterOutputStream.html#flush()">flush()</a></span> - Method in class org.apache.commons.io.output.<a href="./org/apache/commons/io/output/WriterOutputStream.html" title="class in org.apache.commons.io.output">WriterOutputStream</a></dt>
-<dd>
-<div class="block">Flush the stream.</div>
-</dd>
-<dt><span class="strong"><a href="./org/apache/commons/io/output/XmlStreamWriter.html#flush()">flush()</a></span> - Method in class org.apache.commons.io.output.<a href="./org/apache/commons/io/output/XmlStreamWriter.html" title="class in org.apache.commons.io.output">XmlStreamWriter</a></dt>
-<dd>
-<div class="block">Flush the underlying writer.</div>
-</dd>
-<dt><span class="strong"><a href="./org/apache/commons/io/FileDeleteStrategy.html#FORCE">FORCE</a></span> - Static variable in class org.apache.commons.io.<a href="./org/apache/commons/io/FileDeleteStrategy.html" title="class in org.apache.commons.io">FileDeleteStrategy</a></dt>
-<dd>
-<div class="block">The singleton instance for forced file deletion, which always deletes,
- even if the file represents a non-empty directory.</div>
-</dd>
-<dt><span class="strong"><a href="./org/apache/commons/io/FileUtils.html#forceDelete(java.io.File)">forceDelete(File)</a></span> - Static method in class org.apache.commons.io.<a href="./org/apache/commons/io/FileUtils.html" title="class in org.apache.commons.io">FileUtils</a></dt>
-<dd>
-<div class="block">Deletes a file.</div>
-</dd>
-<dt><span class="strong"><a href="./org/apache/commons/io/FileUtils.html#forceDeleteOnExit(java.io.File)">forceDeleteOnExit(File)</a></span> - Static method in class org.apache.commons.io.<a href="./org/apache/commons/io/FileUtils.html" title="class in org.apache.commons.io">FileUtils</a></dt>
-<dd>
-<div class="block">Schedules a file to be deleted when JVM exits.</div>
-</dd>
-<dt><span class="strong"><a href="./org/apache/commons/io/FileUtils.html#forceMkdir(java.io.File)">forceMkdir(File)</a></span> - Static method in class org.apache.commons.io.<a href="./org/apache/commons/io/FileUtils.html" title="class in org.apache.commons.io">FileUtils</a></dt>
-<dd>
-<div class="block">Makes a directory, including any necessary but nonexistent parent
- directories.</div>
-</dd>
-<dt><span class="strong"><a href="./org/apache/commons/io/FileUtils.html#forceMkdirParent(java.io.File)">forceMkdirParent(File)</a></span> - Static method in class org.apache.commons.io.<a href="./org/apache/commons/io/FileUtils.html" title="class in org.apache.commons.io">FileUtils</a></dt>
-<dd>
-<div class="block">Makes any necessary but nonexistent parent directories for a given File.</div>
-</dd>
-<dt><span class="strong"><a href="./org/apache/commons/io/IOCase.html#forName(java.lang.String)">forName(String)</a></span> - Static method in class org.apache.commons.io.<a href="./org/apache/commons/io/IOCase.html" title="class in org.apache.commons.io">IOCase</a></dt>
-<dd>
-<div class="block">Factory method to create an IOCase from a name.</div>
-</dd>
-<dt><span class="strong"><a href="./org/apache/commons/io/FileSystemUtils.html#freeSpace(java.lang.String)">freeSpace(String)</a></span> - Static method in class org.apache.commons.io.<a href="./org/apache/commons/io/FileSystemUtils.html" title="class in org.apache.commons.io">FileSystemUtils</a></dt>
-<dd>
-<div class="block"><span class="strong">Deprecated.</span>
-<div class="block"><i>Use freeSpaceKb(String)
-  Deprecated from 1.3, may be removed in 2.0</i></div>
-</div>
-</dd>
-<dt><span class="strong"><a href="./org/apache/commons/io/FileSystemUtils.html#freeSpaceKb(java.lang.String)">freeSpaceKb(String)</a></span> - Static method in class org.apache.commons.io.<a href="./org/apache/commons/io/FileSystemUtils.html" title="class in org.apache.commons.io">FileSystemUtils</a></dt>
-<dd>
-<div class="block">Returns the free space on a drive or volume in kilobytes by invoking
- the command line.</div>
-</dd>
-<dt><span class="strong"><a href="./org/apache/commons/io/FileSystemUtils.html#freeSpaceKb(java.lang.String, long)">freeSpaceKb(String, long)</a></span> - Static method in class org.apache.commons.io.<a href="./org/apache/commons/io/FileSystemUtils.html" title="class in org.apache.commons.io">FileSystemUtils</a></dt>
-<dd>
-<div class="block">Returns the free space on a drive or volume in kilobytes by invoking
- the command line.</div>
-</dd>
-<dt><span class="strong"><a href="./org/apache/commons/io/FileSystemUtils.html#freeSpaceKb()">freeSpaceKb()</a></span> - Static method in class org.apache.commons.io.<a href="./org/apache/commons/io/FileSystemUtils.html" title="class in org.apache.commons.io">FileSystemUtils</a></dt>
-<dd>
-<div class="block">Returns the disk size of the volume which holds the working directory.</div>
-</dd>
-<dt><span class="strong"><a href="./org/apache/commons/io/FileSystemUtils.html#freeSpaceKb(long)">freeSpaceKb(long)</a></span> - Static method in class org.apache.commons.io.<a href="./org/apache/commons/io/FileSystemUtils.html" title="class in org.apache.commons.io">FileSystemUtils</a></dt>
-<dd>
-<div class="block">Returns the disk size of the volume which holds the working directory.</div>
-</dd>
-</dl>
-<a name="_G_">
-<!--   -->
-</a>
-<h2 class="title">G</h2>
-<dl>
-<dt><span class="strong"><a href="./org/apache/commons/io/ByteOrderMark.html#get(int)">get(int)</a></span> - Method in class org.apache.commons.io.<a href="./org/apache/commons/io/ByteOrderMark.html" title="class in org.apache.commons.io">ByteOrderMark</a></dt>
-<dd>
-<div class="block">The byte at the specified position.</div>
-</dd>
-<dt><span class="strong"><a href="./org/apache/commons/io/FilenameUtils.html#getBaseName(java.lang.String)">getBaseName(String)</a></span> - Static method in class org.apache.commons.io.<a href="./org/apache/commons/io/FilenameUtils.html" title="class in org.apache.commons.io">FilenameUtils</a></dt>
-<dd>
-<div class="block">Gets the base name, minus the full path and extension, from a full filename.</div>
-</dd>
-<dt><span class="strong"><a href="./org/apache/commons/io/input/BOMInputStream.html#getBOM()">getBOM()</a></span> - Method in class org.apache.commons.io.input.<a href="./org/apache/commons/io/input/BOMInputStream.html" title="class in org.apache.commons.io.input">BOMInputStream</a></dt>
-<dd>
-<div class="block">Return the BOM (Byte Order Mark).</div>
-</dd>
-<dt><span class="strong"><a href="./org/apache/commons/io/input/BOMInputStream.html#getBOMCharsetName()">getBOMCharsetName()</a></span> - Method in class org.apache.commons.io.input.<a href="./org/apache/commons/io/input/BOMInputStream.html" title="class in org.apache.commons.io.input">BOMInputStream</a></dt>
-<dd>
-<div class="block">Return the BOM charset Name - <a href="./org/apache/commons/io/ByteOrderMark.html#getCharsetName()"><code>ByteOrderMark.getCharsetName()</code></a>.</div>
-</dd>
-<dt><span class="strong"><a href="./org/apache/commons/io/input/XmlStreamReaderException.html#getBomEncoding()">getBomEncoding()</a></span> - Method in exception org.apache.commons.io.input.<a href="./org/apache/commons/io/input/XmlStreamReaderException.html" title="class in org.apache.commons.io.input">XmlStreamReaderException</a></dt>
-<dd>
-<div class="block">Returns the BOM encoding found in the InputStream.</div>
-</dd>
-<dt><span class="strong"><a href="./org/apache/commons/io/output/StringBuilderWriter.html#getBuilder()">getBuilder()</a></span> - Method in class org.apache.commons.io.output.<a href="./org/apache/commons/io/output/StringBuilderWriter.html" title="class in org.apache.commons.io.output">StringBuilderWriter</a></dt>
-<dd>
-<div class="block">Return the underlying builder.</div>
-</dd>
-<dt><span class="strong"><a href="./org/apache/commons/io/input/CountingInputStream.html#getByteCount()">getByteCount()</a></span> - Method in class org.apache.commons.io.input.<a href="./org/apache/commons/io/input/CountingInputStream.html" title="class in org.apache.commons.io.input">CountingInputStream</a></dt>
-<dd>
-<div class="block">The number of bytes that have passed through this stream.</div>
-</dd>
-<dt><span class="strong"><a href="./org/apache/commons/io/output/CountingOutputStream.html#getByteCount()">getByteCount()</a></span> - Method in class org.apache.commons.io.output.<a href="./org/apache/commons/io/output/CountingOutputStream.html" title="class in org.apache.commons.io.output">CountingOutputStream</a></dt>
-<dd>
-<div class="block">The number of bytes that have passed through this stream.</div>
-</dd>
-<dt><span class="strong"><a href="./org/apache/commons/io/output/ThresholdingOutputStream.html#getByteCount()">getByteCount()</a></span> - Method in class org.apache.commons.io.output.<a href="./org/apache/commons/io/output/ThresholdingOutputStream.html" title="class in org.apache.commons.io.output">ThresholdingOutputStream</a></dt>
-<dd>
-<div class="block">Returns the number of bytes that have been written to this output stream.</div>
-</dd>
-<dt><span class="strong"><a href="./org/apache/commons/io/ByteOrderMark.html#getBytes()">getBytes()</a></span> - Method in class org.apache.commons.io.<a href="./org/apache/commons/io/ByteOrderMark.html" title="class in org.apache.commons.io">ByteOrderMark</a></dt>
-<dd>
-<div class="block">Return a copy of the BOM's bytes.</div>
-</dd>
-<dt><span class="strong"><a href="./org/apache/commons/io/TaggedIOException.html#getCause()">getCause()</a></span> - Method in exception org.apache.commons.io.<a href="./org/apache/commons/io/TaggedIOException.html" title="class in org.apache.commons.io">TaggedIOException</a></dt>
-<dd>
-<div class="block">Returns the wrapped exception.</div>
-</dd>
-<dt><span class="strong"><a href="./org/apache/commons/io/ByteOrderMark.html#getCharsetName()">getCharsetName()</a></span> - Method in class org.apache.commons.io.<a href="./org/apache/commons/io/ByteOrderMark.html" title="class in org.apache.commons.io">ByteOrderMark</a></dt>
-<dd>
-<div class="block">Return the name of the <a href="http://download.oracle.com/javase/6/docs/api/java/nio/charset/Charset.html?is-external=true" title="class or interface in java.nio.charset"><code>Charset</code></a> the BOM represents.</div>
-</dd>
-<dt><span class="strong"><a href="./org/apache/commons/io/monitor/FileEntry.html#getChildren()">getChildren()</a></span> - Method in class org.apache.commons.io.monitor.<a href="./org/apache/commons/io/monitor/FileEntry.html" title="class in org.apache.commons.io.monitor">FileEntry</a></dt>
-<dd>
-<div class="block">Return the directory's files.</div>
-</dd>
-<dt><span class="strong"><a href="./org/apache/commons/io/input/XmlStreamReaderException.html#getContentTypeEncoding()">getContentTypeEncoding()</a></span> - Method in exception org.apache.commons.io.input.<a href="./org/apache/commons/io/input/XmlStreamReaderException.html" title="class in org.apache.commons.io.input">XmlStreamReaderException</a></dt>
-<dd>
-<div class="block">Returns the encoding in the content-type used to attempt determining the
- encoding.</div>
-</dd>
-<dt><span class="strong"><a href="./org/apache/commons/io/input/XmlStreamReaderException.html#getContentTypeMime()">getContentTypeMime()</a></span> - Method in exception org.apache.commons.io.input.<a href="./org/apache/commons/io/input/XmlStreamReaderException.html" title="class in org.apache.commons.io.input">XmlStreamReaderException</a></dt>
-<dd>
-<div class="block">Returns the MIME type in the content-type used to attempt determining the
- encoding.</div>
-</dd>
-<dt><span class="strong"><a href="./org/apache/commons/io/input/CountingInputStream.html#getCount()">getCount()</a></span> - Method in class org.apache.commons.io.input.<a href="./org/apache/commons/io/input/CountingInputStream.html" title="class in org.apache.commons.io.input">CountingInputStream</a></dt>
-<dd>
-<div class="block">The number of bytes that have passed through this stream.</div>
-</dd>
-<dt><span class="strong"><a href="./org/apache/commons/io/output/CountingOutputStream.html#getCount()">getCount()</a></span> - Method in class org.apache.commons.io.output.<a href="./org/apache/commons/io/output/CountingOutputStream.html" title="class in org.apache.commons.io.output">CountingOutputStream</a></dt>
-<dd>
-<div class="block">The number of bytes that have passed through this stream.</div>
-</dd>
-<dt><span class="strong"><a href="./org/apache/commons/io/output/DeferredFileOutputStream.html#getData()">getData()</a></span> - Method in class org.apache.commons.io.output.<a href="./org/apache/commons/io/output/DeferredFileOutputStream.html" title="class in org.apache.commons.io.output">DeferredFileOutputStream</a></dt>
-<dd>
-<div class="block">Returns the data for this output stream as an array of bytes, assuming
- that the data has been retained in memory.</div>
-</dd>
-<dt><span class="strong"><a href="./org/apache/commons/io/input/XmlStreamReader.html#getDefaultEncoding()">getDefaultEncoding()</a></span> - Method in class org.apache.commons.io.input.<a href="./org/apache/commons/io/input/XmlStreamReader.html" title="class in org.apache.commons.io.input">XmlStreamReader</a></dt>
-<dd>
-<div class="block">Returns the default encoding to use if none is set in HTTP content-type,
- XML prolog and the rules based on content-type are not adequate.</div>
-</dd>
-<dt><span class="strong"><a href="./org/apache/commons/io/output/XmlStreamWriter.html#getDefaultEncoding()">getDefaultEncoding()</a></span> - Method in class org.apache.commons.io.output.<a href="./org/apache/commons/io/output/XmlStreamWriter.html" title="class in org.apache.commons.io.output">XmlStreamWriter</a></dt>
-<dd>
-<div class="block">Return the default encoding.</div>
-</dd>
-<dt><span class="strong"><a href="./org/apache/commons/io/input/Tailer.html#getDelay()">getDelay()</a></span> - Method in class org.apache.commons.io.input.<a href="./org/apache/commons/io/input/Tailer.html" title="class in org.apache.commons.io.input">Tailer</a></dt>
-<dd>
-<div class="block">Return the delay in milliseconds.</div>
-</dd>
-<dt><span class="strong"><a href="./org/apache/commons/io/FileCleaningTracker.html#getDeleteFailures()">getDeleteFailures()</a></span> - Method in class org.apache.commons.io.<a href="./org/apache/commons/io/FileCleaningTracker.html" title="class in org.apache.commons.io">FileCleaningTracker</a></dt>
-<dd>
-<div class="block">Return the file paths that failed to delete.</div>
-</dd>
-<dt><span class="strong"><a href="./org/apache/commons/io/DirectoryWalker.CancelException.html#getDepth()">getDepth()</a></span> - Method in exception org.apache.commons.io.<a href="./org/apache/commons/io/DirectoryWalker.CancelException.html" title="class in org.apache.commons.io">DirectoryWalker.CancelException</a></dt>
-<dd>
-<div class="block">Return the depth when the operation was cancelled.</div>
-</dd>
-<dt><span class="strong"><a href="./org/apache/commons/io/monitor/FileAlterationObserver.html#getDirectory()">getDirectory()</a></span> - Method in class org.apache.commons.io.monitor.<a href="./org/apache/commons/io/monitor/FileAlterationObserver.html" title="class in org.apache.commons.io.monitor">FileAlterationObserver</a></dt>
-<dd>
-<div class="block">Return the directory being observed.</div>
-</dd>
-<dt><span class="strong"><a href="./org/apache/commons/io/input/XmlStreamReader.html#getEncoding()">getEncoding()</a></span> - Method in class org.apache.commons.io.input.<a href="./org/apache/commons/io/input/XmlStreamReader.html" title="class in org.apache.commons.io.input">XmlStreamReader</a></dt>
-<dd>
-<div class="block">Returns the charset encoding of the XmlStreamReader.</div>
-</dd>
-<dt><span class="strong"><a href="./org/apache/commons/io/output/XmlStreamWriter.html#getEncoding()">getEncoding()</a></span> - Method in class org.apache.commons.io.output.<a href="./org/apache/commons/io/output/XmlStreamWriter.html" title="class in org.apache.commons.io.output">XmlStreamWriter</a></dt>
-<dd>
-<div class="block">Return the detected encoding.</div>
-</dd>
-<dt><span class="strong"><a href="./org/apache/commons/io/FilenameUtils.html#getExtension(java.lang.String)">getExtension(String)</a></span> - Static method in class org.apache.commons.io.<a href="./org/apache/commons/io/FilenameUtils.html" title="class in org.apache.commons.io">FilenameUtils</a></dt>
-<dd>
-<div class="block">Gets the extension of a filename.</div>
-</dd>
-<dt><span class="strong"><a href="./org/apache/commons/io/DirectoryWalker.CancelException.html#getFile()">getFile()</a></span> - Method in exception org.apache.commons.io.<a href="./org/apache/commons/io/DirectoryWalker.CancelException.html" title="class in org.apache.commons.io">DirectoryWalker.CancelException</a></dt>
-<dd>
-<div class="block">Return the file when the operation was cancelled.</div>
-</dd>
-<dt><span class="strong"><a href="./org/apache/commons/io/FileUtils.html#getFile(java.io.File, java.lang.String...)">getFile(File, String...)</a></span> - Static method in class org.apache.commons.io.<a href="./org/apache/commons/io/FileUtils.html" title="class in org.apache.commons.io">FileUtils</a></dt>
-<dd>
-<div class="block">Construct a file from the set of name elements.</div>
-</dd>
-<dt><span class="strong"><a href="./org/apache/commons/io/FileUtils.html#getFile(java.lang.String...)">getFile(String...)</a></span> - Static method in class org.apache.commons.io.<a href="./org/apache/commons/io/FileUtils.html" title="class in org.apache.commons.io">FileUtils</a></dt>
-<dd>
-<div class="block">Construct a file from the set of name elements.</div>
-</dd>
-<dt><span class="strong"><a href="./org/apache/commons/io/input/Tailer.html#getFile()">getFile()</a></span> - Method in class org.apache.commons.io.input.<a href="./org/apache/commons/io/input/Tailer.html" title="class in org.apache.commons.io.input">Tailer</a></dt>
-<dd>
-<div class="block">Return the file.</div>
-</dd>
-<dt><span class="strong"><a href="./org/apache/commons/io/monitor/FileEntry.html#getFile()">getFile()</a></span> - Method in class org.apache.commons.io.monitor.<a href="./org/apache/commons/io/monitor/FileEntry.html" title="class in org.apache.commons.io.monitor">FileEntry</a></dt>
-<dd>
-<div class="block">Return the file being monitored.</div>
-</dd>
-<dt><span class="strong"><a href="./org/apache/commons/io/output/DeferredFileOutputStream.html#getFile()">getFile()</a></span> - Method in class org.apache.commons.io.output.<a href="./org/apache/commons/io/output/DeferredFileOutputStream.html" title="class in org.apache.commons.io.output">DeferredFileOutputStream</a></dt>
-<dd>
-<div class="block">Returns either the output file specified in the constructor or
- the temporary file created or null.</div>
-</dd>
-<dt><span class="strong"><a href="./org/apache/commons/io/monitor/FileAlterationObserver.html#getFileFilter()">getFileFilter()</a></span> - Method in class org.apache.commons.io.monitor.<a href="./org/apache/commons/io/monitor/FileAlterationObserver.html" title="class in org.apache.commons.io.monitor">FileAlterationObserver</a></dt>
-<dd>
-<div class="block">Return the fileFilter.</div>
-</dd>
-<dt><span class="strong"><a href="./org/apache/commons/io/filefilter/AndFileFilter.html#getFileFilters()">getFileFilters()</a></span> - Method in class org.apache.commons.io.filefilter.<a href="./org/apache/commons/io/filefilter/AndFileFilter.html" title="class in org.apache.commons.io.filefilter">AndFileFilter</a></dt>
-<dd>
-<div class="block">Returns this conditional file filter's list of file filters.</div>
-</dd>
-<dt><span class="strong"><a href="./org/apache/commons/io/filefilter/ConditionalFileFilter.html#getFileFilters()">getFileFilters()</a></span> - Method in interface org.apache.commons.io.filefilter.<a href="./org/apache/commons/io/filefilter/ConditionalFileFilter.html" title="interface in org.apache.commons.io.filefilter">ConditionalFileFilter</a></dt>
-<dd>
-<div class="block">Returns this conditional file filter's list of file filters.</div>
-</dd>
-<dt><span class="strong"><a href="./org/apache/commons/io/filefilter/OrFileFilter.html#getFileFilters()">getFileFilters()</a></span> - Method in class org.apache.commons.io.filefilter.<a href="./org/apache/commons/io/filefilter/OrFileFilter.html" title="class in org.apache.commons.io.filefilter">OrFileFilter</a></dt>
-<dd>
-<div class="block">Returns this conditional file filter's list of file filters.</div>
-</dd>
-<dt><span class="strong"><a href="./org/apache/commons/io/FilenameUtils.html#getFullPath(java.lang.String)">getFullPath(String)</a></span> - Static method in class org.apache.commons.io.<a href="./org/apache/commons/io/FilenameUtils.html" title="class in org.apache.commons.io">FilenameUtils</a></dt>
-<dd>
-<div class="block">Gets the full path from a full filename, which is the prefix + path.</div>
-</dd>
-<dt><span class="strong"><a href="./org/apache/commons/io/FilenameUtils.html#getFullPathNoEndSeparator(java.lang.String)">getFullPathNoEndSeparator(String)</a></span> - Static method in class org.apache.commons.io.<a href="./org/apache/commons/io/FilenameUtils.html" title="class in org.apache.commons.io">FilenameUtils</a></dt>
-<dd>
-<div class="block">Gets the full path from a full filename, which is the prefix + path,
- and also excluding the final directory separator.</div>
-</dd>
-<dt><span class="strong"><a href="./org/apache/commons/io/FileCleaner.html#getInstance()">getInstance()</a></span> - Static method in class org.apache.commons.io.<a href="./org/apache/commons/io/FileCleaner.html" title="class in org.apache.commons.io">FileCleaner</a></dt>
-<dd>
-<div class="block"><span class="strong">Deprecated.</span></div>
-<div class="block">Returns the singleton instance, which is used by the deprecated, static methods.</div>
-</dd>
-<dt><span class="strong"><a href="./org/apache/commons/io/monitor/FileAlterationMonitor.html#getInterval()">getInterval()</a></span> - Method in class org.apache.commons.io.monitor.<a href="./org/apache/commons/io/monitor/FileAlterationMonitor.html" title="class in org.apache.commons.io.monitor">FileAlterationMonitor</a></dt>
-<dd>
-<div class="block">Return the interval.</div>
-</dd>
-<dt><span class="strong"><a href="./org/apache/commons/io/monitor/FileEntry.html#getLastModified()">getLastModified()</a></span> - Method in class org.apache.commons.io.monitor.<a href="./org/apache/commons/io/monitor/FileEntry.html" title="class in org.apache.commons.io.monitor">FileEntry</a></dt>
-<dd>
-<div class="block">Return the last modified time from the last time it
- was checked.</div>
-</dd>
-<dt><span class="strong"><a href="./org/apache/commons/io/monitor/FileEntry.html#getLength()">getLength()</a></span> - Method in class org.apache.commons.io.monitor.<a href="./org/apache/commons/io/monitor/FileEntry.html" title="class in org.apache.commons.io.monitor">FileEntry</a></dt>
-<dd>
-<div class="block">Return the length.</div>
-</dd>
-<dt><span class="strong"><a href="./org/apache/commons/io/monitor/FileEntry.html#getLevel()">getLevel()</a></span> - Method in class org.apache.commons.io.monitor.<a href="./org/apache/commons/io/monitor/FileEntry.html" title="class in org.apache.commons.io.monitor">FileEntry</a></dt>
-<dd>
-<div class="block">Return the level</div>
-</dd>
-<dt><span class="strong"><a href="./org/apache/commons/io/monitor/FileAlterationObserver.html#getListeners()">getListeners()</a></span> - Method in class org.apache.commons.io.monitor.<a href="./org/apache/commons/io/monitor/FileAlterationObserver.html" title="class in org.apache.commons.io.monitor">FileAlterationObserver</a></dt>
-<dd>
-<div class="block">Returns the set of registered file system listeners.</div>
-</dd>
-<dt><span class="strong"><a href="./org/apache/commons/io/FilenameUtils.html#getName(java.lang.String)">getName(String)</a></span> - Static method in class org.apache.commons.io.<a href="./org/apache/commons/io/FilenameUtils.html" title="class in org.apache.commons.io">FilenameUtils</a></dt>
-<dd>
-<div class="block">Gets the name minus the path from a full filename.</div>
-</dd>
-<dt><span class="strong"><a href="./org/apache/commons/io/IOCase.html#getName()">getName()</a></span> - Method in class org.apache.commons.io.<a href="./org/apache/commons/io/IOCase.html" title="class in org.apache.commons.io">IOCase</a></dt>
-<dd>
-<div class="block">Gets the name of the constant.</div>
-</dd>
-<dt><span class="strong"><a href="./org/apache/commons/io/monitor/FileEntry.html#getName()">getName()</a></span> - Method in class org.apache.commons.io.monitor.<a href="./org/apache/commons/io/monitor/FileEntry.html" title="class in org.apache.commons.io.monitor">FileEntry</a></dt>
-<dd>
-<div class="block">Return the file name.</div>
-</dd>
-<dt><span class="strong"><a href="./org/apache/commons/io/monitor/FileAlterationMonitor.html#getObservers()">getObservers()</a></span> - Method in class org.apache.commons.io.monitor.<a href="./org/apache/commons/io/monitor/FileAlterationMonitor.html" title="class in org.apache.commons.io.monitor">FileAlterationMonitor</a></dt>
-<dd>
-<div class="block">Returns the set of <a href="./org/apache/commons/io/monitor/FileAlterationObserver.html" title="class in org.apache.commons.io.monitor"><code>FileAlterationObserver</code></a> registered with
- this monitor.</div>
-</dd>
-<dt><span class="strong"><a href="./org/apache/commons/io/monitor/FileEntry.html#getParent()">getParent()</a></span> - Method in class org.apache.commons.io.monitor.<a href="./org/apache/commons/io/monitor/FileEntry.html" title="class in org.apache.commons.io.monitor">FileEntry</a></dt>
-<dd>
-<div class="block">Return the parent entry.</div>
-</dd>
-<dt><span class="strong"><a href="./org/apache/commons/io/FilenameUtils.html#getPath(java.lang.String)">getPath(String)</a></span> - Static method in class org.apache.commons.io.<a href="./org/apache/commons/io/FilenameUtils.html" title="class in org.apache.commons.io">FilenameUtils</a></dt>
-<dd>
-<div class="block">Gets the path from a full filename, which excludes the prefix.</div>
-</dd>
-<dt><span class="strong"><a href="./org/apache/commons/io/FilenameUtils.html#getPathNoEndSeparator(java.lang.String)">getPathNoEndSeparator(String)</a></span> - Static method in class org.apache.commons.io.<a href="./org/apache/commons/io/FilenameUtils.html" title="class in org.apache.commons.io">FilenameUtils</a></dt>
-<dd>
-<div class="block">Gets the path from a full filename, which excludes the prefix, and
- also excluding the final directory separator.</div>
-</dd>
-<dt><span class="strong"><a href="./org/apache/commons/io/input/NullInputStream.html#getPosition()">getPosition()</a></span> - Method in class org.apache.commons.io.input.<a href="./org/apache/commons/io/input/NullInputStream.html" title="class in org.apache.commons.io.input">NullInputStream</a></dt>
-<dd>
-<div class="block">Return the current position.</div>
-</dd>
-<dt><span class="strong"><a href="./org/apache/commons/io/input/NullReader.html#getPosition()">getPosition()</a></span> - Method in class org.apache.commons.io.input.<a href="./org/apache/commons/io/input/NullReader.html" title="class in org.apache.commons.io.input">NullReader</a></dt>
-<dd>
-<div class="block">Return the current position.</div>
-</dd>
-<dt><span class="strong"><a href="./org/apache/commons/io/FilenameUtils.html#getPrefix(java.lang.String)">getPrefix(String)</a></span> - Static method in class org.apache.commons.io.<a href="./org/apache/commons/io/FilenameUtils.html" title="class in org.apache.commons.io">FilenameUtils</a></dt>
-<dd>
-<div class="block">Gets the prefix from a full filename, such as <code>C:/</code>
- or <code>~/</code>.</div>
-</dd>
-<dt><span class="strong"><a href="./org/apache/commons/io/FilenameUtils.html#getPrefixLength(java.lang.String)">getPrefixLength(String)</a></span> - Static method in class org.apache.commons.io.<a href="./org/apache/commons/io/FilenameUtils.html" title="class in org.apache.commons.io">FilenameUtils</a></dt>
-<dd>
-<div class="block">Returns the length of the filename prefix, such as <code>C:/</code> or <code>~/</code>.</div>
-</dd>
-<dt><span class="strong"><a href="./org/apache/commons/io/input/Tailer.html#getRun()">getRun()</a></span> - Method in class org.apache.commons.io.input.<a href="./org/apache/commons/io/input/Tailer.html" title="class in org.apache.commons.io.input">Tailer</a></dt>
-<dd>
-<div class="block">Gets whether to keep on running.</div>
-</dd>
-<dt><span class="strong"><a href="./org/apache/commons/io/input/NullInputStream.html#getSize()">getSize()</a></span> - Method in class org.apache.commons.io.input.<a href="./org/apache/commons/io/input/NullInputStream.html" title="class in org.apache.commons.io.input">NullInputStream</a></dt>
-<dd>
-<div class="block">Return the size this <a href="http://download.oracle.com/javase/6/docs/api/java/io/InputStream.html?is-external=true" title="class or interface in java.io"><code>InputStream</code></a> emulates.</div>
-</dd>
-<dt><span class="strong"><a href="./org/apache/commons/io/input/NullReader.html#getSize()">getSize()</a></span> - Method in class org.apache.commons.io.input.<a href="./org/apache/commons/io/input/NullReader.html" title="class in org.apache.commons.io.input">NullReader</a></dt>
-<dd>
-<div class="block">Return the size this <a href="http://download.oracle.com/javase/6/docs/api/java/io/Reader.html?is-external=true" title="class or interface in java.io"><code>Reader</code></a> emulates.</div>
-</dd>
-<dt><span class="strong"><a href="./org/apache/commons/io/output/DeferredFileOutputStream.html#getStream()">getStream()</a></span> - Method in class org.apache.commons.io.output.<a href="./org/apache/commons/io/output/DeferredFileOutputStream.html" title="class in org.apache.commons.io.output">DeferredFileOutputStream</a></dt>
-<dd>
-<div class="block">Returns the current output stream.</div>
-</dd>
-<dt><span class="strong"><a href="./org/apache/commons/io/output/ThresholdingOutputStream.html#getStream()">getStream()</a></span> - Method in class org.apache.commons.io.output.<a href="./org/apache/commons/io/output/ThresholdingOutputStream.html" title="class in org.apache.commons.io.output">ThresholdingOutputStream</a></dt>
-<dd>
-<div class="block">Returns the underlying output stream, to which the corresponding
- <code>OutputStream</code> methods in this class will ultimately delegate.</div>
-</dd>
-<dt><span class="strong"><a href="./org/apache/commons/io/TaggedIOException.html#getTag()">getTag()</a></span> - Method in exception org.apache.commons.io.<a href="./org/apache/commons/io/TaggedIOException.html" title="class in org.apache.commons.io">TaggedIOException</a></dt>
-<dd>
-<div class="block">Returns the serializable tag object.</div>
-</dd>
-<dt><span class="strong"><a href="./org/apache/commons/io/FileUtils.html#getTempDirectory()">getTempDirectory()</a></span> - Static method in class org.apache.commons.io.<a href="./org/apache/commons/io/FileUtils.html" title="class in org.apache.commons.io">FileUtils</a></dt>
-<dd>
-<div class="block">Returns a <a href="http://download.oracle.com/javase/6/docs/api/java/io/File.html?is-external=true" title="class or interface in java.io"><code>File</code></a> representing the system temporary directory.</div>
-</dd>
-<dt><span class="strong"><a href="./org/apache/commons/io/FileUtils.html#getTempDirectoryPath()">getTempDirectoryPath()</a></span> - Static method in class org.apache.commons.io.<a href="./org/apache/commons/io/FileUtils.html" title="class in org.apache.commons.io">FileUtils</a></dt>
-<dd>
-<div class="block">Returns the path to the system temporary directory.</div>
-</dd>
-<dt><span class="strong"><a href="./org/apache/commons/io/output/ThresholdingOutputStream.html#getThreshold()">getThreshold()</a></span> - Method in class org.apache.commons.io.output.<a href="./org/apache/commons/io/output/ThresholdingOutputStream.html" title="class in org.apache.commons.io.output">ThresholdingOutputStream</a></dt>
-<dd>
-<div class="block">Returns the threshold, in bytes, at which an event will be triggered.</div>
-</dd>
-<dt><span class="strong"><a href="./org/apache/commons/io/FileCleaner.html#getTrackCount()">getTrackCount()</a></span> - Static method in class org.apache.commons.io.<a href="./org/apache/commons/io/FileCleaner.html" title="class in org.apache.commons.io">FileCleaner</a></dt>
-<dd>
-<div class="block"><span class="strong">Deprecated.</span>
-<div class="block"><i>Use <a href="./org/apache/commons/io/FileCleaningTracker.html#getTrackCount()"><code>FileCleaningTracker.getTrackCount()</code></a>.</i></div>
-</div>
-</dd>
-<dt><span class="strong"><a href="./org/apache/commons/io/FileCleaningTracker.html#getTrackCount()">getTrackCount()</a></span> - Method in class org.apache.commons.io.<a href="./org/apache/commons/io/FileCleaningTracker.html" title="class in org.apache.commons.io">FileCleaningTracker</a></dt>
-<dd>
-<div class="block">Retrieve the number of files currently being tracked, and therefore
- awaiting deletion.</div>
-</dd>
-<dt><span class="strong"><a href="./org/apache/commons/io/FileUtils.html#getUserDirectory()">getUserDirectory()</a></span> - Static method in class org.apache.commons.io.<a href="./org/apache/commons/io/FileUtils.html" title="class in org.apache.commons.io">FileUtils</a></dt>
-<dd>
-<div class="block">Returns a <a href="http://download.oracle.com/javase/6/docs/api/java/io/File.html?is-external=true" title="class or interface in java.io"><code>File</code></a> representing the user's home directory.</div>
-</dd>
-<dt><span class="strong"><a href="./org/apache/commons/io/FileUtils.html#getUserDirectoryPath()">getUserDirectoryPath()</a></span> - Static method in class org.apache.commons.io.<a href="./org/apache/commons/io/FileUtils.html" title="class in org.apache.commons.io">FileUtils</a></dt>
-<dd>
-<div class="block">Returns the path to the user's home directory.</div>
-</dd>
-<dt><span class="strong"><a href="./org/apache/commons/io/input/XmlStreamReaderException.html#getXmlEncoding()">getXmlEncoding()</a></span> - Method in exception org.apache.commons.io.input.<a href="./org/apache/commons/io/input/XmlStreamReaderException.html" title="class in org.apache.commons.io.input">XmlStreamReaderException</a></dt>
-<dd>
-<div class="block">Returns the encoding found in the XML prolog of the InputStream.</div>
-</dd>
-<dt><span class="strong"><a href="./org/apache/commons/io/input/XmlStreamReaderException.html#getXmlGuessEncoding()">getXmlGuessEncoding()</a></span> - Method in exception org.apache.commons.io.input.<a href="./org/apache/commons/io/input/XmlStreamReaderException.html" title="class in org.apache.commons.io.input">XmlStreamReaderException</a></dt>
-<dd>
-<div class="block">Returns the encoding guess based on the first bytes of the InputStream.</div>
-</dd>
-</dl>
-<a name="_H_">
-<!--   -->
-</a>
-<h2 class="title">H</h2>
-<dl>
-<dt><span class="strong"><a href="./org/apache/commons/io/input/TailerListener.html#handle(java.lang.String)">handle(String)</a></span> - Method in interface org.apache.commons.io.input.<a href="./org/apache/commons/io/input/TailerListener.html" title="interface in org.apache.commons.io.input">TailerListener</a></dt>
-<dd>
-<div class="block">Handles a line from a Tailer.</div>
-</dd>
-<dt><span class="strong"><a href="./org/apache/commons/io/input/TailerListener.html#handle(java.lang.Exception)">handle(Exception)</a></span> - Method in interface org.apache.commons.io.input.<a href="./org/apache/commons/io/input/TailerListener.html" title="interface in org.apache.commons.io.input">TailerListener</a></dt>
-<dd>
-<div class="block">Handles an Exception .</div>
-</dd>
-<dt><span class="strong"><a href="./org/apache/commons/io/input/TailerListenerAdapter.html#handle(java.lang.String)">handle(String)</a></span> - Method in class org.apache.commons.io.input.<a href="./org/apache/commons/io/input/TailerListenerAdapter.html" title="class in org.apache.commons.io.input">TailerListenerAdapter</a></dt>
-<dd>
-<div class="block">Handles a line from a Tailer.</div>
-</dd>
-<dt><span class="strong"><a href="./org/apache/commons/io/input/TailerListenerAdapter.html#handle(java.lang.Exception)">handle(Exception)</a></span> - Method in class org.apache.commons.io.input.<a href="./org/apache/commons/io/input/TailerListenerAdapter.html" title="class in org.apache.commons.io.input">TailerListenerAdapter</a></dt>
-<dd>
-<div class="block">Handles an Exception .</div>
-</dd>
-<dt><span class="strong"><a href="./org/apache/commons/io/DirectoryWalker.html#handleCancelled(java.io.File, java.util.Collection, org.apache.commons.io.DirectoryWalker.CancelException)">handleCancelled(File, Collection&lt;T&gt;, DirectoryWalker.CancelException)</a></span> - Method in class org.apache.commons.io.<a href="./org/apache/commons/io/DirectoryWalker.html" title="class in org.apache.commons.io">DirectoryWalker</a></dt>
-<dd>
-<div class="block">Overridable callback method invoked when the operation is cancelled.</div>
-</dd>
-<dt><span class="strong"><a href="./org/apache/commons/io/DirectoryWalker.html#handleDirectory(java.io.File, int, java.util.Collection)">handleDirectory(File, int, Collection&lt;T&gt;)</a></span> - Method in class org.apache.commons.io.<a href="./org/apache/commons/io/DirectoryWalker.html" title="class in org.apache.commons.io">DirectoryWalker</a></dt>
-<dd>
-<div class="block">Overridable callback method invoked to determine if a directory should be processed.</div>
-</dd>
-<dt><span class="strong"><a href="./org/apache/commons/io/DirectoryWalker.html#handleDirectoryEnd(java.io.File, int, java.util.Collection)">handleDirectoryEnd(File, int, Collection&lt;T&gt;)</a></span> - Method in class org.apache.commons.io.<a href="./org/apache/commons/io/DirectoryWalker.html" title="class in org.apache.commons.io">DirectoryWalker</a></dt>
-<dd>
-<div class="block">Overridable callback method invoked at the end of processing each directory.</div>
-</dd>
-<dt><span class="strong"><a href="./org/apache/commons/io/DirectoryWalker.html#handleDirectoryStart(java.io.File, int, java.util.Collection)">handleDirectoryStart(File, int, Collection&lt;T&gt;)</a></span> - Method in class org.apache.commons.io.<a href="./org/apache/commons/io/DirectoryWalker.html" title="class in org.apache.commons.io">DirectoryWalker</a></dt>
-<dd>
-<div class="block">Overridable callback method invoked at the start of processing each directory.</div>
-</dd>
-<dt><span class="strong"><a href="./org/apache/commons/io/DirectoryWalker.html#handleEnd(java.util.Collection)">handleEnd(Collection&lt;T&gt;)</a></span> - Method in class org.apache.commons.io.<a href="./org/apache/commons/io/DirectoryWalker.html" title="class in org.apache.commons.io">DirectoryWalker</a></dt>
-<dd>
-<div class="block">Overridable callback method invoked at the end of processing.</div>
-</dd>
-<dt><span class="strong"><a href="./org/apache/commons/io/DirectoryWalker.html#handleFile(java.io.File, int, java.util.Collection)">handleFile(File, int, Collection&lt;T&gt;)</a></span> - Method in class org.apache.commons.io.<a href="./org/apache/commons/io/DirectoryWalker.html" title="class in org.apache.commons.io">DirectoryWalker</a></dt>
-<dd>
-<div class="block">Overridable callback method invoked for each (non-directory) file.</div>
-</dd>
-<dt><span class="strong"><a href="./org/apache/commons/io/input/ProxyInputStream.html#handleIOException(java.io.IOException)">handleIOException(IOException)</a></span> - Method in class org.apache.commons.io.input.<a href="./org/apache/commons/io/input/ProxyInputStream.html" title="class in org.apache.commons.io.input">ProxyInputStream</a></dt>
-<dd>
-<div class="block">Handle any IOExceptions thrown.</div>
-</dd>
-<dt><span class="strong"><a href="./org/apache/commons/io/input/ProxyReader.html#handleIOException(java.io.IOException)">handleIOException(IOException)</a></span> - Method in class org.apache.commons.io.input.<a href="./org/apache/commons/io/input/ProxyReader.html" title="class in org.apache.commons.io.input">ProxyReader</a></dt>
-<dd>
-<div class="block">Handle any IOExceptions thrown.</div>
-</dd>
-<dt><span class="strong"><a href="./org/apache/commons/io/input/TaggedInputStream.html#handleIOException(java.io.IOException)">handleIOException(IOException)</a></span> - Method in class org.apache.commons.io.input.<a href="./org/apache/commons/io/input/TaggedInputStream.html" title="class in org.apache.commons.io.input">TaggedInputStream</a></dt>
-<dd>
-<div class="block">Tags any IOExceptions thrown, wrapping and re-throwing.</div>
-</dd>
-<dt><span class="strong"><a href="./org/apache/commons/io/output/ProxyOutputStream.html#handleIOException(java.io.IOException)">handleIOException(IOException)</a></span> - Method in class org.apache.commons.io.output.<a href="./org/apache/commons/io/output/ProxyOutputStream.html" title="class in org.apache.commons.io.output">ProxyOutputStream</a></dt>
-<dd>
-<div class="block">Handle any IOExceptions thrown.</div>
-</dd>
-<dt><span class="strong"><a href="./org/apache/commons/io/output/ProxyWriter.html#handleIOException(java.io.IOException)">handleIOException(IOException)</a></span> - Method in class org.apache.commons.io.output.<a href="./org/apache/commons/io/output/ProxyWriter.html" title="class in org.apache.commons.io.output">ProxyWriter</a></dt>
-<dd>
-<div class="block">Handle any IOExceptions thrown.</div>
-</dd>
-<dt><span class="strong"><a href="./org/apache/commons/io/output/TaggedOutputStream.html#handleIOException(java.io.IOException)">handleIOException(IOException)</a></span> - Method in class org.apache.commons.io.output.<a href="./org/apache/commons/io/output/TaggedOutputStream.html" title="class in org.apache.commons.io.output">TaggedOutputStream</a></dt>
-<dd>
-<div class="block">Tags any IOExceptions thrown, wrapping and re-throwing.</div>
-</dd>
-<dt><span class="strong"><a href="./org/apache/commons/io/DirectoryWalker.html#handleIsCancelled(java.io.File, int, java.util.Collection)">handleIsCancelled(File, int, Collection&lt;T&gt;)</a></span> - Method in class org.apache.commons.io.<a href="./org/apache/commons/io/DirectoryWalker.html" title="class in org.apache.commons.io">DirectoryWalker</a></dt>
-<dd>
-<div class="block">Overridable callback method invoked to determine if the entire walk
- operation should be immediately cancelled.</div>
-</dd>
-<dt><span class="strong"><a href="./org/apache/commons/io/DirectoryWalker.html#handleRestricted(java.io.File, int, java.util.Collection)">handleRestricted(File, int, Collection&lt;T&gt;)</a></span> - Method in class org.apache.commons.io.<a href="./org/apache/commons/io/DirectoryWalker.html" title="class in org.apache.commons.io">DirectoryWalker</a></dt>
-<dd>
-<div class="block">Overridable callback method invoked for each restricted directory.</div>
-</dd>
-<dt><span class="strong"><a href="./org/apache/commons/io/DirectoryWalker.html#handleStart(java.io.File, java.util.Collection)">handleStart(File, Collection&lt;T&gt;)</a></span> - Method in class org.apache.commons.io.<a href="./org/apache/commons/io/DirectoryWalker.html" title="class in org.apache.commons.io">DirectoryWalker</a></dt>
-<dd>
-<div class="block">Overridable callback method invoked at the start of processing.</div>
-</dd>
-<dt><span class="strong"><a href="./org/apache/commons/io/input/BOMInputStream.html#hasBOM()">hasBOM()</a></span> - Method in class org.apache.commons.io.input.<a href="./org/apache/commons/io/input/BOMInputStream.html" title="class in org.apache.commons.io.input">BOMInputStream</a></dt>
-<dd>
-<div class="block">Indicates whether the stream contains one of the specified BOMs.</div>
-</dd>
-<dt><span class="strong"><a href="./org/apache/commons/io/input/BOMInputStream.html#hasBOM(org.apache.commons.io.ByteOrderMark)">hasBOM(ByteOrderMark)</a></span> - Method in class org.apache.commons.io.input.<a href="./org/apache/commons/io/input/BOMInputStream.html" title="class in org.apache.commons.io.input">BOMInputStream</a></dt>
-<dd>
-<div class="block">Indicates whether the stream contains the specified BOM.</div>
-</dd>
-<dt><span class="strong"><a href="./org/apache/commons/io/ByteOrderMark.html#hashCode()">hashCode()</a></span> - Method in class org.apache.commons.io.<a href="./org/apache/commons/io/ByteOrderMark.html" title="class in org.apache.commons.io">ByteOrderMark</a></dt>
-<dd>
-<div class="block">Return the hashcode for this BOM.</div>
-</dd>
-<dt><span class="strong"><a href="./org/apache/commons/io/LineIterator.html#hasNext()">hasNext()</a></span> - Method in class org.apache.commons.io.<a href="./org/apache/commons/io/LineIterator.html" title="class in org.apache.commons.io">LineIterator</a></dt>
-<dd>
-<div class="block">Indicates whether the <code>Reader</code> has more lines.</div>
-</dd>
-<dt><a href="./org/apache/commons/io/HexDump.html" title="class in org.apache.commons.io"><span class="strong">HexDump</span></a> - Class in <a href="./org/apache/commons/io/package-summary.html">org.apache.commons.io</a></dt>
-<dd>
-<div class="block">Dumps data in hexadecimal format.</div>
-</dd>
-<dt><span class="strong"><a href="./org/apache/commons/io/HexDump.html#HexDump()">HexDump()</a></span> - Constructor for class org.apache.commons.io.<a href="./org/apache/commons/io/HexDump.html" title="class in org.apache.commons.io">HexDump</a></dt>
-<dd>
-<div class="block">Instances should NOT be constructed in standard programming.</div>
-</dd>
-<dt><span class="strong"><a href="./org/apache/commons/io/filefilter/HiddenFileFilter.html#HIDDEN">HIDDEN</a></span> - Static variable in class org.apache.commons.io.filefilter.<a href="./org/apache/commons/io/filefilter/HiddenFileFilter.html" title="class in org.apache.commons.io.filefilter">HiddenFileFilter</a></dt>
-<dd>
-<div class="block">Singleton instance of <i>hidden</i> filter</div>
-</dd>
-<dt><a href="./org/apache/commons/io/filefilter/HiddenFileFilter.html" title="class in org.apache.commons.io.filefilter"><span class="strong">HiddenFileFilter</span></a> - Class in <a href="./org/apache/commons/io/filefilter/package-summary.html">org.apache.commons.io.filefilter</a></dt>
-<dd>
-<div class="block">This filter accepts <code>File</code>s that are hidden.</div>
-</dd>
-<dt><span class="strong"><a href="./org/apache/commons/io/filefilter/HiddenFileFilter.html#HiddenFileFilter()">HiddenFileFilter()</a></span> - Constructor for class org.apache.commons.io.filefilter.<a href="./org/apache/commons/io/filefilter/HiddenFileFilter.html" title="class in org.apache.commons.io.filefilter">HiddenFileFilter</a></dt>
-<dd>
-<div class="block">Restrictive consructor.</div>
-</dd>
-</dl>
-<a name="_I_">
-<!--   -->
-</a>
-<h2 class="title">I</h2>
-<dl>
-<dt><span class="strong"><a href="./org/apache/commons/io/FilenameUtils.html#indexOfExtension(java.lang.String)">indexOfExtension(String)</a></span> - Static method in class org.apache.commons.io.<a href="./org/apache/commons/io/FilenameUtils.html" title="class in org.apache.commons.io">FilenameUtils</a></dt>
-<dd>
-<div class="block">Returns the index of the last extension separator character, which is a dot.</div>
-</dd>
-<dt><span class="strong"><a href="./org/apache/commons/io/FilenameUtils.html#indexOfLastSeparator(java.lang.String)">indexOfLastSeparator(String)</a></span> - Static method in class org.apache.commons.io.<a href="./org/apache/commons/io/FilenameUtils.html" title="class in org.apache.commons.io">FilenameUtils</a></dt>
-<dd>
-<div class="block">Returns the index of the last directory separator character.</div>
-</dd>
-<dt><span class="strong"><a href="./org/apache/commons/io/input/TailerListener.html#init(org.apache.commons.io.input.Tailer)">init(Tailer)</a></span> - Method in interface org.apache.commons.io.input.<a href="./org/apache/commons/io/input/TailerListener.html" title="interface in org.apache.commons.io.input">TailerListener</a></dt>
-<dd>
-<div class="block">The tailer will call this method during construction,
- giving the listener a method of stopping the tailer.</div>
-</dd>
-<dt><span class="strong"><a href="./org/apache/commons/io/input/TailerListenerAdapter.html#init(org.apache.commons.io.input.Tailer)">init(Tailer)</a></span> - Method in class org.apache.commons.io.input.<a href="./org/apache/commons/io/input/TailerListenerAdapter.html" title="class in org.apache.commons.io.input">TailerListenerAdapter</a></dt>
-<dd>
-<div class="block">The tailer will call this method during construction,
- giving the listener a method of stopping the tailer.</div>
-</dd>
-<dt><span class="strong"><a href="./org/apache/commons/io/monitor/FileAlterationObserver.html#initialize()">initialize()</a></span> - Method in class org.apache.commons.io.monitor.<a href="./org/apache/commons/io/monitor/FileAlterationObserver.html" title="class in org.apache.commons.io.monitor">FileAlterationObserver</a></dt>
-<dd>
-<div class="block">Initialize the observer.</div>
-</dd>
-<dt><span class="strong"><a href="./org/apache/commons/io/IOCase.html#INSENSITIVE">INSENSITIVE</a></span> - Static variable in class org.apache.commons.io.<a href="./org/apache/commons/io/IOCase.html" title="class in org.apache.commons.io">IOCase</a></dt>
-<dd>
-<div class="block">The constant for case insensitive regardless of operating system.</div>
-</dd>
-<dt><span class="strong"><a href="./org/apache/commons/io/filefilter/DirectoryFileFilter.html#INSTANCE">INSTANCE</a></span> - Static variable in class org.apache.commons.io.filefilter.<a href="./org/apache/commons/io/filefilter/DirectoryFileFilter.html" title="class in org.apache.commons.io.filefilter">DirectoryFileFilter</a></dt>
-<dd>
-<div class="block">Singleton instance of directory filter.</div>
-</dd>
-<dt><span class="strong"><a href="./org/apache/commons/io/filefilter/FalseFileFilter.html#INSTANCE">INSTANCE</a></span> - Static variable in class org.apache.commons.io.filefilter.<a href="./org/apache/commons/io/filefilter/FalseFileFilter.html" title="class in org.apache.commons.io.filefilter">FalseFileFilter</a></dt>
-<dd>
-<div class="block">Singleton instance of false filter.</div>
-</dd>
-<dt><span class="strong"><a href="./org/apache/commons/io/filefilter/TrueFileFilter.html#INSTANCE">INSTANCE</a></span> - Static variable in class org.apache.commons.io.filefilter.<a href="./org/apache/commons/io/filefilter/TrueFileFilter.html" title="class in org.apache.commons.io.filefilter">TrueFileFilter</a></dt>
-<dd>
-<div class="block">Singleton instance of true filter.</div>
-</dd>
-<dt><a href="./org/apache/commons/io/IOCase.html" title="class in org.apache.commons.io"><span class="strong">IOCase</span></a> - Class in <a href="./org/apache/commons/io/package-summary.html">org.apache.commons.io</a></dt>
-<dd>
-<div class="block">Enumeration of IO case sensitivity.</div>
-</dd>
-<dt><a href="./org/apache/commons/io/IOExceptionWithCause.html" title="class in org.apache.commons.io"><span class="strong">IOExceptionWithCause</span></a> - Exception in <a href="./org/apache/commons/io/package-summary.html">org.apache.commons.io</a></dt>
-<dd>
-<div class="block">Subclasses IOException with the <a href="http://download.oracle.com/javase/6/docs/api/java/lang/Throwable.html?is-external=true" title="class or interface in java.lang"><code>Throwable</code></a> constructors missing before Java 6.</div>
-</dd>
-<dt><span class="strong"><a href="./org/apache/commons/io/IOExceptionWithCause.html#IOExceptionWithCause(java.lang.String, java.lang.Throwable)">IOExceptionWithCause(String, Throwable)</a></span> - Constructor for exception org.apache.commons.io.<a href="./org/apache/commons/io/IOExceptionWithCause.html" title="class in org.apache.commons.io">IOExceptionWithCause</a></dt>
-<dd>
-<div class="block">Constructs a new instance with the given message and cause.</div>
-</dd>
-<dt><span class="strong"><a href="./org/apache/commons/io/IOExceptionWithCause.html#IOExceptionWithCause(java.lang.Throwable)">IOExceptionWithCause(Throwable)</a></span> - Constructor for exception org.apache.commons.io.<a href="./org/apache/commons/io/IOExceptionWithCause.html" title="class in org.apache.commons.io">IOExceptionWithCause</a></dt>
-<dd>
-<div class="block">Constructs a new instance with the given cause.</div>
-</dd>
-<dt><a href="./org/apache/commons/io/filefilter/IOFileFilter.html" title="interface in org.apache.commons.io.filefilter"><span class="strong">IOFileFilter</span></a> - Interface in <a href="./org/apache/commons/io/filefilter/package-summary.html">org.apache.commons.io.filefilter</a></dt>
-<dd>
-<div class="block">An interface which brings the FileFilter and FilenameFilter
- interfaces together.</div>
-</dd>
-<dt><a href="./org/apache/commons/io/IOUtils.html" title="class in org.apache.commons.io"><span class="strong">IOUtils</span></a> - Class in <a href="./org/apache/commons/io/package-summary.html">org.apache.commons.io</a></dt>
-<dd>
-<div class="block">General IO stream manipulation utilities.</div>
-</dd>
-<dt><span class="strong"><a href="./org/apache/commons/io/IOUtils.html#IOUtils()">IOUtils()</a></span> - Constructor for class org.apache.commons.io.<a href="./org/apache/commons/io/IOUtils.html" title="class in org.apache.commons.io">IOUtils</a></dt>
-<dd>
-<div class="block">Instances should NOT be constructed in standard programming.</div>
-</dd>
-<dt><span class="strong"><a href="./org/apache/commons/io/IOCase.html#isCaseSensitive()">isCaseSensitive()</a></span> - Method in class org.apache.commons.io.<a href="./org/apache/commons/io/IOCase.html" title="class in org.apache.commons.io">IOCase</a></dt>
-<dd>
-<div class="block">Does the object represent case sensitive comparison.</div>
-</dd>
-<dt><span class="strong"><a href="./org/apache/commons/io/input/TaggedInputStream.html#isCauseOf(java.lang.Throwable)">isCauseOf(Throwable)</a></span> - Method in class org.apache.commons.io.input.<a href="./org/apache/commons/io/input/TaggedInputStream.html" title="class in org.apache.commons.io.input">TaggedInputStream</a></dt>
-<dd>
-<div class="block">Tests if the given exception was caused by this stream.</div>
-</dd>
-<dt><span class="strong"><a href="./org/apache/commons/io/output/TaggedOutputStream.html#isCauseOf(java.lang.Exception)">isCauseOf(Exception)</a></span> - Method in class org.apache.commons.io.output.<a href="./org/apache/commons/io/output/TaggedOutputStream.html" title="class in org.apache.commons.io.output">TaggedOutputStream</a></dt>
-<dd>
-<div class="block">Tests if the given exception was caused by this stream.</div>
-</dd>
-<dt><span class="strong"><a href="./org/apache/commons/io/monitor/FileEntry.html#isDirectory()">isDirectory()</a></span> - Method in class org.apache.commons.io.monitor.<a href="./org/apache/commons/io/monitor/FileEntry.html" title="class in org.apache.commons.io.monitor">FileEntry</a></dt>
-<dd>
-<div class="block">Indicate whether the file is a directory or not.</div>
-</dd>
-<dt><span class="strong"><a href="./org/apache/commons/io/monitor/FileEntry.html#isExists()">isExists()</a></span> - Method in class org.apache.commons.io.monitor.<a href="./org/apache/commons/io/monitor/FileEntry.html" title="class in org.apache.commons.io.monitor">FileEntry</a></dt>
-<dd>
-<div class="block">Indicate whether the file existed the last time it
- was checked.</div>
-</dd>
-<dt><span class="strong"><a href="./org/apache/commons/io/FilenameUtils.html#isExtension(java.lang.String, java.lang.String)">isExtension(String, String)</a></span> - Static method in class org.apache.commons.io.<a href="./org/apache/commons/io/FilenameUtils.html" title="class in org.apache.commons.io">FilenameUtils</a></dt>
-<dd>
-<div class="block">Checks whether the extension of the filename is that specified.</div>
-</dd>
-<dt><span class="strong"><a href="./org/apache/commons/io/FilenameUtils.html#isExtension(java.lang.String, java.lang.String[])">isExtension(String, String[])</a></span> - Static method in class org.apache.commons.io.<a href="./org/apache/commons/io/FilenameUtils.html" title="class in org.apache.commons.io">FilenameUtils</a></dt>
-<dd>
-<div class="block">Checks whether the extension of the filename is one of those specified.</div>
-</dd>
-<dt><span class="strong"><a href="./org/apache/commons/io/FilenameUtils.html#isExtension(java.lang.String, java.util.Collection)">isExtension(String, Collection&lt;String&gt;)</a></span> - Static method in class org.apache.commons.io.<a href="./org/apache/commons/io/FilenameUtils.html" title="class in org.apache.commons.io">FilenameUtils</a></dt>
-<dd>
-<div class="block">Checks whether the extension of the filename is one of those specified.</div>
-</dd>
-<dt><span class="strong"><a href="./org/apache/commons/io/FileUtils.html#isFileNewer(java.io.File, java.io.File)">isFileNewer(File, File)</a></span> - Static method in class org.apache.commons.io.<a href="./org/apache/commons/io/FileUtils.html" title="class in org.apache.commons.io">FileUtils</a></dt>
-<dd>
-<div class="block">Tests if the specified <code>File</code> is newer than the reference
- <code>File</code>.</div>
-</dd>
-<dt><span class="strong"><a href="./org/apache/commons/io/FileUtils.html#isFileNewer(java.io.File, java.util.Date)">isFileNewer(File, Date)</a></span> - Static method in class org.apache.commons.io.<a href="./org/apache/commons/io/FileUtils.html" title="class in org.apache.commons.io">FileUtils</a></dt>
-<dd>
-<div class="block">Tests if the specified <code>File</code> is newer than the specified
- <code>Date</code>.</div>
-</dd>
-<dt><span class="strong"><a href="./org/apache/commons/io/FileUtils.html#isFileNewer(java.io.File, long)">isFileNewer(File, long)</a></span> - Static method in class org.apache.commons.io.<a href="./org/apache/commons/io/FileUtils.html" title="class in org.apache.commons.io">FileUtils</a></dt>
-<dd>
-<div class="block">Tests if the specified <code>File</code> is newer than the specified
- time reference.</div>
-</dd>
-<dt><span class="strong"><a href="./org/apache/commons/io/FileUtils.html#isFileOlder(java.io.File, java.io.File)">isFileOlder(File, File)</a></span> - Static method in class org.apache.commons.io.<a href="./org/apache/commons/io/FileUtils.html" title="class in org.apache.commons.io">FileUtils</a></dt>
-<dd>
-<div class="block">Tests if the specified <code>File</code> is older than the reference
- <code>File</code>.</div>
-</dd>
-<dt><span class="strong"><a href="./org/apache/commons/io/FileUtils.html#isFileOlder(java.io.File, java.util.Date)">isFileOlder(File, Date)</a></span> - Static method in class org.apache.commons.io.<a href="./org/apache/commons/io/FileUtils.html" title="class in org.apache.commons.io">FileUtils</a></dt>
-<dd>
-<div class="block">Tests if the specified <code>File</code> is older than the specified
- <code>Date</code>.</div>
-</dd>
-<dt><span class="strong"><a href="./org/apache/commons/io/FileUtils.html#isFileOlder(java.io.File, long)">isFileOlder(File, long)</a></span> - Static method in class org.apache.commons.io.<a href="./org/apache/commons/io/FileUtils.html" title="class in org.apache.commons.io">FileUtils</a></dt>
-<dd>
-<div class="block">Tests if the specified <code>File</code> is older than the specified
- time reference.</div>
-</dd>
-<dt><span class="strong"><a href="./org/apache/commons/io/output/DeferredFileOutputStream.html#isInMemory()">isInMemory()</a></span> - Method in class org.apache.commons.io.output.<a href="./org/apache/commons/io/output/DeferredFileOutputStream.html" title="class in org.apache.commons.io.output">DeferredFileOutputStream</a></dt>
-<dd>
-<div class="block">Determines whether or not the data for this output stream has been
- retained in memory.</div>
-</dd>
-<dt><span class="strong"><a href="./org/apache/commons/io/Charsets.html#ISO_8859_1">ISO_8859_1</a></span> - Static variable in class org.apache.commons.io.<a href="./org/apache/commons/io/Charsets.html" title="class in org.apache.commons.io">Charsets</a></dt>
-<dd>
-<div class="block">CharEncodingISO Latin Alphabet No.</div>
-</dd>
-<dt><span class="strong"><a href="./org/apache/commons/io/input/BoundedInputStream.html#isPropagateClose()">isPropagateClose()</a></span> - Method in class org.apache.commons.io.input.<a href="./org/apache/commons/io/input/BoundedInputStream.html" title="class in org.apache.commons.io.input">BoundedInputStream</a></dt>
-<dd>
-<div class="block">Indicates whether the <a href="./org/apache/commons/io/input/BoundedInputStream.html#close()"><code>BoundedInputStream.close()</code></a> method
- should propagate to the underling <a href="http://download.oracle.com/javase/6/docs/api/java/io/InputStream.html?is-external=true" title="class or interface in java.io"><code>InputStream</code></a>.</div>
-</dd>
-<dt><span class="strong"><a href="./org/apache/commons/io/FileUtils.html#isSymlink(java.io.File)">isSymlink(File)</a></span> - Static method in class org.apache.commons.io.<a href="./org/apache/commons/io/FileUtils.html" title="class in org.apache.commons.io">FileUtils</a></dt>
-<dd>
-<div class="block">Determines whether the specified file is a Symbolic Link rather than an actual file.</div>
-</dd>
-<dt><span class="strong"><a href="./org/apache/commons/io/TaggedIOException.html#isTaggedWith(java.lang.Throwable, java.lang.Object)">isTaggedWith(Throwable, Object)</a></span> - Static method in exception org.apache.commons.io.<a href="./org/apache/commons/io/TaggedIOException.html" title="class in org.apache.commons.io">TaggedIOException</a></dt>
-<dd>
-<div class="block">Checks whether the given throwable is tagged with the given tag.</div>
-</dd>
-<dt><span class="strong"><a href="./org/apache/commons/io/output/ThresholdingOutputStream.html#isThresholdExceeded()">isThresholdExceeded()</a></span> - Method in class org.apache.commons.io.output.<a href="./org/apache/commons/io/output/ThresholdingOutputStream.html" title="class in org.apache.commons.io.output">ThresholdingOutputStream</a></dt>
-<dd>
-<div class="block">Determines whether or not the configured threshold has been exceeded for
- this output stream.</div>
-</dd>
-<dt><span class="strong"><a href="./org/apache/commons/io/LineIterator.html#isValidLine(java.lang.String)">isValidLine(String)</a></span> - Method in class org.apache.commons.io.<a href="./org/apache/commons/io/LineIterator.html" title="class in org.apache.commons.io">LineIterator</a></dt>
-<dd>
-<div class="block">Overridable method to validate each line that is returned.</div>
-</dd>
-<dt><span class="strong"><a href="./org/apache/commons/io/FileUtils.html#iterateFiles(java.io.File, org.apache.commons.io.filefilter.IOFileFilter, org.apache.commons.io.filefilter.IOFileFilter)">iterateFiles(File, IOFileFilter, IOFileFilter)</a></span> - Static method in class org.apache.commons.io.<a href="./org/apache/commons/io/FileUtils.html" title="class in org.apache.commons.io">FileUtils</a></dt>
-<dd>
-<div class="block">Allows iteration over the files in given directory (and optionally
- its subdirectories).</div>
-</dd>
-<dt><span class="strong"><a href="./org/apache/commons/io/FileUtils.html#iterateFiles(java.io.File, java.lang.String[], boolean)">iterateFiles(File, String[], boolean)</a></span> - Static method in class org.apache.commons.io.<a href="./org/apache/commons/io/FileUtils.html" title="class in org.apache.commons.io">FileUtils</a></dt>
-<dd>
-<div class="block">Allows iteration over the files in a given directory (and optionally
- its subdirectories) which match an array of extensions.</div>
-</dd>
-<dt><span class="strong"><a href="./org/apache/commons/io/FileUtils.html#iterateFilesAndDirs(java.io.File, org.apache.commons.io.filefilter.IOFileFilter, org.apache.commons.io.filefilter.IOFileFilter)">iterateFilesAndDirs(File, IOFileFilter, IOFileFilter)</a></span> - Static method in class org.apache.commons.io.<a href="./org/apache/commons/io/FileUtils.html" title="class in org.apache.commons.io">FileUtils</a></dt>
-<dd>
-<div class="block">Allows iteration over the files in given directory (and optionally
- its subdirectories).</div>
-</dd>
-</dl>
-<a name="_L_">
-<!--   -->
-</a>
-<h2 class="title">L</h2>
-<dl>
-<dt><span class="strong"><a href="./org/apache/commons/io/comparator/LastModifiedFileComparator.html#LASTMODIFIED_COMPARATOR">LASTMODIFIED_COMPARATOR</a></span> - Static variable in class org.apache.commons.io.comparator.<a href="./org/apache/commons/io/comparator/LastModifiedFileComparator.html" title="class in org.apache.commons.io.comparator">LastModifiedFileComparator</a></dt>
-<dd>
-<div class="block">Last modified comparator instance</div>
-</dd>
-<dt><span class="strong"><a href="./org/apache/commons/io/comparator/LastModifiedFileComparator.html#LASTMODIFIED_REVERSE">LASTMODIFIED_REVERSE</a></span> - Static variable in class org.apache.commons.io.comparator.<a href="./org/apache/commons/io/comparator/LastModifiedFileComparator.html" title="class in org.apache.commons.io.comparator">LastModifiedFileComparator</a></dt>
-<dd>
-<div class="block">Reverse last modified comparator instance</div>
-</dd>
-<dt><a href="./org/apache/commons/io/comparator/LastModifiedFileComparator.html" title="class in org.apache.commons.io.comparator"><span class="strong">LastModifiedFileComparator</span></a> - Class in <a href="./org/apache/commons/io/comparator/package-summary.html">org.apache.commons.io.comparator</a></dt>
-<dd>
-<div class="block">Compare the <b>last modified date/time</b> of two files for order 
- (see <a href="http://download.oracle.com/javase/6/docs/api/java/io/File.html?is-external=true#lastModified()" title="class or interface in java.io"><code>File.lastModified()</code></a>).</div>
-</dd>
-<dt><span class="strong"><a href="./org/apache/commons/io/comparator/LastModifiedFileComparator.html#LastModifiedFileComparator()">LastModifiedFileComparator()</a></span> - Constructor for class org.apache.commons.io.comparator.<a href="./org/apache/commons/io/comparator/LastModifiedFileComparator.html" title="class in org.apache.commons.io.comparator">LastModifiedFileComparator</a></dt>
-<dd>&nbsp;</dd>
-<dt><span class="strong"><a href="./org/apache/commons/io/ByteOrderMark.html#length()">length()</a></span> - Method in class org.apache.commons.io.<a href="./org/apache/commons/io/ByteOrderMark.html" title="class in org.apache.commons.io">ByteOrderMark</a></dt>
-<dd>
-<div class="block">Return the length of the BOM's bytes.</div>
-</dd>
-<dt><span class="strong"><a href="./org/apache/commons/io/IOUtils.html#LINE_SEPARATOR">LINE_SEPARATOR</a></span> - Static variable in class org.apache.commons.io.<a href="./org/apache/commons/io/IOUtils.html" title="class in org.apache.commons.io">IOUtils</a></dt>
-<dd>
-<div class="block">The system line separator string.</div>
-</dd>
-<dt><span class="strong"><a href="./org/apache/commons/io/IOUtils.html#LINE_SEPARATOR_UNIX">LINE_SEPARATOR_UNIX</a></span> - Static variable in class org.apache.commons.io.<a href="./org/apache/commons/io/IOUtils.html" title="class in org.apache.commons.io">IOUtils</a></dt>
-<dd>
-<div class="block">The Unix line separator string.</div>
-</dd>
-<dt><span class="strong"><a href="./org/apache/commons/io/IOUtils.html#LINE_SEPARATOR_WINDOWS">LINE_SEPARATOR_WINDOWS</a></span> - Static variable in class org.apache.commons.io.<a href="./org/apache/commons/io/IOUtils.html" title="class in org.apache.commons.io">IOUtils</a></dt>
-<dd>
-<div class="block">The Windows line separator string.</div>
-</dd>
-<dt><span class="strong"><a href="./org/apache/commons/io/FileUtils.html#lineIterator(java.io.File, java.lang.String)">lineIterator(File, String)</a></span> - Static method in class org.apache.commons.io.<a href="./org/apache/commons/io/FileUtils.html" title="class in org.apache.commons.io">FileUtils</a></dt>
-<dd>
-<div class="block">Returns an Iterator for the lines in a <code>File</code>.</div>
-</dd>
-<dt><span class="strong"><a href="./org/apache/commons/io/FileUtils.html#lineIterator(java.io.File)">lineIterator(File)</a></span> - Static method in class org.apache.commons.io.<a href="./org/apache/commons/io/FileUtils.html" title="class in org.apache.commons.io">FileUtils</a></dt>
-<dd>
-<div class="block">Returns an Iterator for the lines in a <code>File</code> using the default encoding for the VM.</div>
-</dd>
-<dt><span class="strong"><a href="./org/apache/commons/io/IOUtils.html#lineIterator(java.io.Reader)">lineIterator(Reader)</a></span> - Static method in class org.apache.commons.io.<a href="./org/apache/commons/io/IOUtils.html" title="class in org.apache.commons.io">IOUtils</a></dt>
-<dd>
-<div class="block">Returns an Iterator for the lines in a <code>Reader</code>.</div>
-</dd>
-<dt><span class="strong"><a href="./org/apache/commons/io/IOUtils.html#lineIterator(java.io.InputStream, java.nio.charset.Charset)">lineIterator(InputStream, Charset)</a></span> - Static method in class org.apache.commons.io.<a href="./org/apache/commons/io/IOUtils.html" title="class in org.apache.commons.io">IOUtils</a></dt>
-<dd>
-<div class="block">Returns an Iterator for the lines in an <code>InputStream</code>, using
- the character encoding specified (or default encoding if null).</div>
-</dd>
-<dt><span class="strong"><a href="./org/apache/commons/io/IOUtils.html#lineIterator(java.io.InputStream, java.lang.String)">lineIterator(InputStream, String)</a></span> - Static method in class org.apache.commons.io.<a href="./org/apache/commons/io/IOUtils.html" title="class in org.apache.commons.io">IOUtils</a></dt>
-<dd>
-<div class="block">Returns an Iterator for the lines in an <code>InputStream</code>, using
- the character encoding specified (or default encoding if null).</div>
-</dd>
-<dt><a href="./org/apache/commons/io/LineIterator.html" title="class in org.apache.commons.io"><span class="strong">LineIterator</span></a> - Class in <a href="./org/apache/commons/io/package-summary.html">org.apache.commons.io</a></dt>
-<dd>
-<div class="block">An Iterator over the lines in a <code>Reader</code>.</div>
-</dd>
-<dt><span class="strong"><a href="./org/apache/commons/io/LineIterator.html#LineIterator(java.io.Reader)">LineIterator(Reader)</a></span> - Constructor for class org.apache.commons.io.<a href="./org/apache/commons/io/LineIterator.html" title="class in org.apache.commons.io">LineIterator</a></dt>
-<dd>
-<div class="block">Constructs an iterator of the lines for a <code>Reader</code>.</div>
-</dd>
-<dt><span class="strong"><a href="./org/apache/commons/io/FileUtils.html#listFiles(java.io.File, org.apache.commons.io.filefilter.IOFileFilter, org.apache.commons.io.filefilter.IOFileFilter)">listFiles(File, IOFileFilter, IOFileFilter)</a></span> - Static method in class org.apache.commons.io.<a href="./org/apache/commons/io/FileUtils.html" title="class in org.apache.commons.io">FileUtils</a></dt>
-<dd>
-<div class="block">Finds files within a given directory (and optionally its
- subdirectories).</div>
-</dd>
-<dt><span class="strong"><a href="./org/apache/commons/io/FileUtils.html#listFiles(java.io.File, java.lang.String[], boolean)">listFiles(File, String[], boolean)</a></span> - Static method in class org.apache.commons.io.<a href="./org/apache/commons/io/FileUtils.html" title="class in org.apache.commons.io">FileUtils</a></dt>
-<dd>
-<div class="block">Finds files within a given directory (and optionally its subdirectories)
- which match an array of extensions.</div>
-</dd>
-<dt><span class="strong"><a href="./org/apache/commons/io/FileUtils.html#listFilesAndDirs(java.io.File, org.apache.commons.io.filefilter.IOFileFilter, org.apache.commons.io.filefilter.IOFileFilter)">listFilesAndDirs(File, IOFileFilter, IOFileFilter)</a></span> - Static method in class org.apache.commons.io.<a href="./org/apache/commons/io/FileUtils.html" title="class in org.apache.commons.io">FileUtils</a></dt>
-<dd>
-<div class="block">Finds files within a given directory (and optionally its
- subdirectories).</div>
-</dd>
-<dt><a href="./org/apache/commons/io/output/LockableFileWriter.html" title="class in org.apache.commons.io.output"><span class="strong">LockableFileWriter</span></a> - Class in <a href="./org/apache/commons/io/output/package-summary.html">org.apache.commons.io.output</a></dt>
-<dd>
-<div class="block">FileWriter that will create and honor lock files to allow simple
- cross thread file lock handling.</div>
-</dd>
-<dt><span class="strong"><a href="./org/apache/commons/io/output/LockableFileWriter.html#LockableFileWriter(java.lang.String)">LockableFileWriter(String)</a></span> - Constructor for class org.apache.commons.io.output.<a href="./org/apache/commons/io/output/LockableFileWriter.html" title="class in org.apache.commons.io.output">LockableFileWriter</a></dt>
-<dd>
-<div class="block">Constructs a LockableFileWriter.</div>
-</dd>
-<dt><span class="strong"><a href="./org/apache/commons/io/output/LockableFileWriter.html#LockableFileWriter(java.lang.String, boolean)">LockableFileWriter(String, boolean)</a></span> - Constructor for class org.apache.commons.io.output.<a href="./org/apache/commons/io/output/LockableFileWriter.html" title="class in org.apache.commons.io.output">LockableFileWriter</a></dt>
-<dd>
-<div class="block">Constructs a LockableFileWriter.</div>
-</dd>
-<dt><span class="strong"><a href="./org/apache/commons/io/output/LockableFileWriter.html#LockableFileWriter(java.lang.String, boolean, java.lang.String)">LockableFileWriter(String, boolean, String)</a></span> - Constructor for class org.apache.commons.io.output.<a href="./org/apache/commons/io/output/LockableFileWriter.html" title="class in org.apache.commons.io.output">LockableFileWriter</a></dt>
-<dd>
-<div class="block">Constructs a LockableFileWriter.</div>
-</dd>
-<dt><span class="strong"><a href="./org/apache/commons/io/output/LockableFileWriter.html#LockableFileWriter(java.io.File)">LockableFileWriter(File)</a></span> - Constructor for class org.apache.commons.io.output.<a href="./org/apache/commons/io/output/LockableFileWriter.html" title="class in org.apache.commons.io.output">LockableFileWriter</a></dt>
-<dd>
-<div class="block">Constructs a LockableFileWriter.</div>
-</dd>
-<dt><span class="strong"><a href="./org/apache/commons/io/output/LockableFileWriter.html#LockableFileWriter(java.io.File, boolean)">LockableFileWriter(File, boolean)</a></span> - Constructor for class org.apache.commons.io.output.<a href="./org/apache/commons/io/output/LockableFileWriter.html" title="class in org.apache.commons.io.output">LockableFileWriter</a></dt>
-<dd>
-<div class="block">Constructs a LockableFileWriter.</div>
-</dd>
-<dt><span class="strong"><a href="./org/apache/commons/io/output/LockableFileWriter.html#LockableFileWriter(java.io.File, boolean, java.lang.String)">LockableFileWriter(File, boolean, String)</a></span> - Constructor for class org.apache.commons.io.output.<a href="./org/apache/commons/io/output/LockableFileWriter.html" title="class in org.apache.commons.io.output">LockableFileWriter</a></dt>
-<dd>
-<div class="block"><span class="strong">Deprecated.</span>
-<div class="block"><i>2.5 use <a href="./org/apache/commons/io/output/LockableFileWriter.html#LockableFileWriter(java.io.File, java.nio.charset.Charset, boolean, java.lang.String)"><code>LockableFileWriter.LockableFileWriter(File, Charset, boolean, String)</code></a> instead</i></div>
-</div>
-</dd>
-<dt><span class="strong"><a href="./org/apache/commons/io/output/LockableFileWriter.html#LockableFileWriter(java.io.File, java.nio.charset.Charset)">LockableFileWriter(File, Charset)</a></span> - Constructor for class org.apache.commons.io.output.<a href="./org/apache/commons/io/output/LockableFileWriter.html" title="class in org.apache.commons.io.output">LockableFileWriter</a></dt>
-<dd>
-<div class="block">Constructs a LockableFileWriter with a file encoding.</div>
-</dd>
-<dt><span class="strong"><a href="./org/apache/commons/io/output/LockableFileWriter.html#LockableFileWriter(java.io.File, java.lang.String)">LockableFileWriter(File, String)</a></span> - Constructor for class org.apache.commons.io.output.<a href="./org/apache/commons/io/output/LockableFileWriter.html" title="class in org.apache.commons.io.output">LockableFileWriter</a></dt>
-<dd>
-<div class="block">Constructs a LockableFileWriter with a file encoding.</div>
-</dd>
-<dt><span class="strong"><a href="./org/apache/commons/io/output/LockableFileWriter.html#LockableFileWriter(java.io.File, java.nio.charset.Charset, boolean, java.lang.String)">LockableFileWriter(File, Charset, boolean, String)</a></span> - Constructor for class org.apache.commons.io.output.<a href="./org/apache/commons/io/output/LockableFileWriter.html" title="class in org.apache.commons.io.output">LockableFileWriter</a></dt>
-<dd>
-<div class="block">Constructs a LockableFileWriter with a file encoding.</div>
-</dd>
-<dt><span class="strong"><a href="./org/apache/commons/io/output/LockableFileWriter.html#LockableFileWriter(java.io.File, java.lang.String, boolean, java.lang.String)">LockableFileWriter(File, String, boolean, String)</a></span> - Constructor for class org.apache.commons.io.output.<a href="./org/apache/commons/io/output/LockableFileWriter.html" title="class in org.apache.commons.io.output">LockableFileWriter</a></dt>
-<dd>
-<div class="block">Constructs a LockableFileWriter with a file encoding.</div>
-</dd>
-</dl>
-<a name="_M_">
-<!--   -->
-</a>
-<h2 class="title">M</h2>
-<dl>
-<dt><span class="strong"><a href="./org/apache/commons/io/filefilter/FileFilterUtils.html#magicNumberFileFilter(java.lang.String)">magicNumberFileFilter(String)</a></span> - Static method in class org.apache.commons.io.filefilter.<a href="./org/apache/commons/io/filefilter/FileFilterUtils.html" title="class in org.apache.commons.io.filefilter">FileFilterUtils</a></dt>
-<dd>
-<div class="block">Returns a filter that accepts files that begin with the provided magic
- number.</div>
-</dd>
-<dt><span class="strong"><a href="./org/apache/commons/io/filefilter/FileFilterUtils.html#magicNumberFileFilter(java.lang.String, long)">magicNumberFileFilter(String, long)</a></span> - Static method in class org.apache.commons.io.filefilter.<a href="./org/apache/commons/io/filefilter/FileFilterUtils.html" title="class in org.apache.commons.io.filefilter">FileFilterUtils</a></dt>
-<dd>
-<div class="block">Returns a filter that accepts files that contains the provided magic
- number at a specified offset within the file.</div>
-</dd>
-<dt><span class="strong"><a href="./org/apache/commons/io/filefilter/FileFilterUtils.html#magicNumberFileFilter(byte[])">magicNumberFileFilter(byte[])</a></span> - Static method in class org.apache.commons.io.filefilter.<a href="./org/apache/commons/io/filefilter/FileFilterUtils.html" title="class in org.apache.commons.io.filefilter">FileFilterUtils</a></dt>
-<dd>
-<div class="block">Returns a filter that accepts files that begin with the provided magic
- number.</div>
-</dd>
-<dt><span class="strong"><a href="./org/apache/commons/io/filefilter/FileFilterUtils.html#magicNumberFileFilter(byte[], long)">magicNumberFileFilter(byte[], long)</a></span> - Static method in class org.apache.commons.io.filefilter.<a href="./org/apache/commons/io/filefilter/FileFilterUtils.html" title="class in org.apache.commons.io.filefilter">FileFilterUtils</a></dt>
-<dd>
-<div class="block">Returns a filter that accepts files that contains the provided magic
- number at a specified offset within the file.</div>
-</dd>
-<dt><a href="./org/apache/commons/io/filefilter/MagicNumberFileFilter.html" title="class in org.apache.commons.io.filefilter"><span class="strong">MagicNumberFileFilter</span></a> - Class in <a href="./org/apache/commons/io/filefilter/package-summary.html">org.apache.commons.io.filefilter</a></dt>
-<dd>
-<div class="block">
- File filter for matching files containing a "magic number".</div>
-</dd>
-<dt><span class="strong"><a href="./org/apache/commons/io/filefilter/MagicNumberFileFilter.html#MagicNumberFileFilter(byte[])">MagicNumberFileFilter(byte[])</a></span> - Constructor for class org.apache.commons.io.filefilter.<a href="./org/apache/commons/io/filefilter/MagicNumberFileFilter.html" title="class in org.apache.commons.io.filefilter">MagicNumberFileFilter</a></dt>
-<dd>
-<div class="block">
- Constructs a new MagicNumberFileFilter and associates it with the magic
- number to test for in files.</div>
-</dd>
-<dt><span class="strong"><a href="./org/apache/commons/io/filefilter/MagicNumberFileFilter.html#MagicNumberFileFilter(java.lang.String)">MagicNumberFileFilter(String)</a></span> - Constructor for class org.apache.commons.io.filefilter.<a href="./org/apache/commons/io/filefilter/MagicNumberFileFilter.html" title="class in org.apache.commons.io.filefilter">MagicNumberFileFilter</a></dt>
-<dd>
-<div class="block">
- Constructs a new MagicNumberFileFilter and associates it with the magic
- number to test for in files.</div>
-</dd>
-<dt><span class="strong"><a href="./org/apache/commons/io/filefilter/MagicNumberFileFilter.html#MagicNumberFileFilter(java.lang.String, long)">MagicNumberFileFilter(String, long)</a></span> - Constructor for class org.apache.commons.io.filefilter.<a href="./org/apache/commons/io/filefilter/MagicNumberFileFilter.html" title="class in org.apache.commons.io.filefilter">MagicNumberFileFilter</a></dt>
-<dd>
-<div class="block">
- Constructs a new MagicNumberFileFilter and associates it with the magic
- number to test for in files and the byte offset location in the file to
- to look for that magic number.</div>
-</dd>
-<dt><span class="strong"><a href="./org/apache/commons/io/filefilter/MagicNumberFileFilter.html#MagicNumberFileFilter(byte[], long)">MagicNumberFileFilter(byte[], long)</a></span> - Constructor for class org.apache.commons.io.filefilter.<a href="./org/apache/commons/io/filefilter/MagicNumberFileFilter.html" title="class in org.apache.commons.io.filefilter">MagicNumberFileFilter</a></dt>
-<dd>
-<div class="block">
- Constructs a new MagicNumberFileFilter and associates it with the magic
- number to test for in files and the byte offset location in the file to
- to look for that magic number.</div>
-</dd>
-<dt><span class="strong"><a href="./org/apache/commons/io/filefilter/FileFilterUtils.html#makeCVSAware(org.apache.commons.io.filefilter.IOFileFilter)">makeCVSAware(IOFileFilter)</a></span> - Static method in class org.apache.commons.io.filefilter.<a href="./org/apache/commons/io/filefilter/FileFilterUtils.html" title="class in org.apache.commons.io.filefilter">FileFilterUtils</a></dt>
-<dd>
-<div class="block">Decorates a filter to make it ignore CVS directories.</div>
-</dd>
-<dt><span class="strong"><a href="./org/apache/commons/io/filefilter/FileFilterUtils.html#makeDirectoryOnly(org.apache.commons.io.filefilter.IOFileFilter)">makeDirectoryOnly(IOFileFilter)</a></span> - Static method in class org.apache.commons.io.filefilter.<a href="./org/apache/commons/io/filefilter/FileFilterUtils.html" title="class in org.apache.commons.io.filefilter">FileFilterUtils</a></dt>
-<dd>
-<div class="block">Decorates a filter so that it only applies to directories and not to files.</div>
-</dd>
-<dt><span class="strong"><a href="./org/apache/commons/io/filefilter/FileFilterUtils.html#makeFileOnly(org.apache.commons.io.filefilter.IOFileFilter)">makeFileOnly(IOFileFilter)</a></span> - Static method in class org.apache.commons.io.filefilter.<a href="./org/apache/commons/io/filefilter/FileFilterUtils.html" title="class in org.apache.commons.io.filefilter">FileFilterUtils</a></dt>
-<dd>
-<div class="block">Decorates a filter so that it only applies to files and not to directories.</div>
-</dd>
-<dt><span class="strong"><a href="./org/apache/commons/io/filefilter/FileFilterUtils.html#makeSVNAware(org.apache.commons.io.filefilter.IOFileFilter)">makeSVNAware(IOFileFilter)</a></span> - Static method in class org.apache.commons.io.filefilter.<a href="./org/apache/commons/io/filefilter/FileFilterUtils.html" title="class in org.apache.commons.io.filefilter">FileFilterUtils</a></dt>
-<dd>
-<div class="block">Decorates a filter to make it ignore SVN directories.</div>
-</dd>
-<dt><span class="strong"><a href="./org/apache/commons/io/input/BOMInputStream.html#mark(int)">mark(int)</a></span> - Method in class org.apache.commons.io.input.<a href="./org/apache/commons/io/input/BOMInputStream.html" title="class in org.apache.commons.io.input">BOMInputStream</a></dt>
-<dd>
-<div class="block">Invokes the delegate's <code>mark(int)</code> method.</div>
-</dd>
-<dt><span class="strong"><a href="./org/apache/commons/io/input/BoundedInputStream.html#mark(int)">mark(int)</a></span> - Method in class org.apache.commons.io.input.<a href="./org/apache/commons/io/input/BoundedInputStream.html" title="class in org.apache.commons.io.input">BoundedInputStream</a></dt>
-<dd>
-<div class="block">Invokes the delegate's <code>mark(int)</code> method.</div>
-</dd>
-<dt><span class="strong"><a href="./org/apache/commons/io/input/CharSequenceInputStream.html#mark(int)">mark(int)</a></span> - Method in class org.apache.commons.io.input.<a href="./org/apache/commons/io/input/CharSequenceInputStream.html" title="class in org.apache.commons.io.input">CharSequenceInputStream</a></dt>
-<dt><span class="strong"><a href="./org/apache/commons/io/input/CharSequenceReader.html#mark(int)">mark(int)</a></span> - Method in class org.apache.commons.io.input.<a href="./org/apache/commons/io/input/CharSequenceReader.html" title="class in org.apache.commons.io.input">CharSequenceReader</a></dt>
-<dd>
-<div class="block">Mark the current position.</div>
-</dd>
-<dt><span class="strong"><a href="./org/apache/commons/io/input/NullInputStream.html#mark(int)">mark(int)</a></span> - Method in class org.apache.commons.io.input.<a href="./org/apache/commons/io/input/NullInputStream.html" title="class in org.apache.commons.io.input">NullInputStream</a></dt>
-<dd>
-<div class="block">Mark the current position.</div>
-</dd>
-<dt><span class="strong"><a href="./org/apache/commons/io/input/NullReader.html#mark(int)">mark(int)</a></span> - Method in class org.apache.commons.io.input.<a href="./org/apache/commons/io/input/NullReader.html" title="class in org.apache.commons.io.input">NullReader</a></dt>
-<dd>
-<div class="block">Mark the current position.</div>
-</dd>
-<dt><span class="strong"><a href="./org/apache/commons/io/input/ProxyInputStream.html#mark(int)">mark(int)</a></span> - Method in class org.apache.commons.io.input.<a href="./org/apache/commons/io/input/ProxyInputStream.html" title="class in org.apache.commons.io.input">ProxyInputStream</a></dt>
-<dd>
-<div class="block">Invokes the delegate's <code>mark(int)</code> method.</div>
-</dd>
-<dt><span class="strong"><a href="./org/apache/commons/io/input/ProxyReader.html#mark(int)">mark(int)</a></span> - Method in class org.apache.commons.io.input.<a href="./org/apache/commons/io/input/ProxyReader.html" title="class in org.apache.commons.io.input">ProxyReader</a></dt>
-<dd>
-<div class="block">Invokes the delegate's <code>mark(int)</code> method.</div>
-</dd>
-<dt><span class="strong"><a href="./org/apache/commons/io/input/BoundedInputStream.html#markSupported()">markSupported()</a></span> - Method in class org.apache.commons.io.input.<a href="./org/apache/commons/io/input/BoundedInputStream.html" title="class in org.apache.commons.io.input">BoundedInputStream</a></dt>
-<dd>
-<div class="block">Invokes the delegate's <code>markSupported()</code> method.</div>
-</dd>
-<dt><span class="strong"><a href="./org/apache/commons/io/input/CharSequenceInputStream.html#markSupported()">markSupported()</a></span> - Method in class org.apache.commons.io.input.<a href="./org/apache/commons/io/input/CharSequenceInputStream.html" title="class in org.apache.commons.io.input">CharSequenceInputStream</a></dt>
-<dd>&nbsp;</dd>
-<dt><span class="strong"><a href="./org/apache/commons/io/input/CharSequenceReader.html#markSupported()">markSupported()</a></span> - Method in class org.apache.commons.io.input.<a href="./org/apache/commons/io/input/CharSequenceReader.html" title="class in org.apache.commons.io.input">CharSequenceReader</a></dt>
-<dd>
-<div class="block">Mark is supported (returns true).</div>
-</dd>
-<dt><span class="strong"><a href="./org/apache/commons/io/input/NullInputStream.html#markSupported()">markSupported()</a></span> - Method in class org.apache.commons.io.input.<a href="./org/apache/commons/io/input/NullInputStream.html" title="class in org.apache.commons.io.input">NullInputStream</a></dt>
-<dd>
-<div class="block">Indicates whether <i>mark</i> is supported.</div>
-</dd>
-<dt><span class="strong"><a href="./org/apache/commons/io/input/NullReader.html#markSupported()">markSupported()</a></span> - Method in class org.apache.commons.io.input.<a href="./org/apache/commons/io/input/NullReader.html" title="class in org.apache.commons.io.input">NullReader</a></dt>
-<dd>
-<div class="block">Indicates whether <i>mark</i> is supported.</div>
-</dd>
-<dt><span class="strong"><a href="./org/apache/commons/io/input/ProxyInputStream.html#markSupported()">markSupported()</a></span> - Method in class org.apache.commons.io.input.<a href="./org/apache/commons/io/input/ProxyInputStream.html" title="class in org.apache.commons.io.input">ProxyInputStream</a></dt>
-<dd>
-<div class="block">Invokes the delegate's <code>markSupported()</code> method.</div>
-</dd>
-<dt><span class="strong"><a href="./org/apache/commons/io/input/ProxyReader.html#markSupported()">markSupported()</a></span> - Method in class org.apache.commons.io.input.<a href="./org/apache/commons/io/input/ProxyReader.html" title="class in org.apache.commons.io.input">ProxyReader</a></dt>
-<dd>
-<div class="block">Invokes the delegate's <code>markSupported()</code> method.</div>
-</dd>
-<dt><span class="strong"><a href="./org/apache/commons/io/FileUtils.html#moveDirectory(java.io.File, java.io.File)">moveDirectory(File, File)</a></span> - Static method in class org.apache.commons.io.<a href="./org/apache/commons/io/FileUtils.html" title="class in org.apache.commons.io">FileUtils</a></dt>
-<dd>
-<div class="block">Moves a directory.</div>
-</dd>
-<dt><span class="strong"><a href="./org/apache/commons/io/FileUtils.html#moveDirectoryToDirectory(java.io.File, java.io.File, boolean)">moveDirectoryToDirectory(File, File, boolean)</a></span> - Static method in class org.apache.commons.io.<a href="./org/apache/commons/io/FileUtils.html" title="class in org.apache.commons.io">FileUtils</a></dt>
-<dd>
-<div class="block">Moves a directory to another directory.</div>
-</dd>
-<dt><span class="strong"><a href="./org/apache/commons/io/FileUtils.html#moveFile(java.io.File, java.io.File)">moveFile(File, File)</a></span> - Static method in class org.apache.commons.io.<a href="./org/apache/commons/io/FileUtils.html" title="class in org.apache.commons.io">FileUtils</a></dt>
-<dd>
-<div class="block">Moves a file.</div>
-</dd>
-<dt><span class="strong"><a href="./org/apache/commons/io/FileUtils.html#moveFileToDirectory(java.io.File, java.io.File, boolean)">moveFileToDirectory(File, File, boolean)</a></span> - Static method in class org.apache.commons.io.<a href="./org/apache/commons/io/FileUtils.html" title="class in org.apache.commons.io">FileUtils</a></dt>
-<dd>
-<div class="block">Moves a file to a directory.</div>
-</dd>
-<dt><span class="strong"><a href="./org/apache/commons/io/FileUtils.html#moveToDirectory(java.io.File, java.io.File, boolean)">moveToDirectory(File, File, boolean)</a></span> - Static method in class org.apache.commons.io.<a href="./org/apache/commons/io/FileUtils.html" title="class in org.apache.commons.io">FileUtils</a></dt>
-<dd>
-<div class="block">Moves a file or directory to the destination directory.</div>
-</dd>
-</dl>
-<a name="_N_">
-<!--   -->
-</a>
-<h2 class="title">N</h2>
-<dl>
-<dt><span class="strong"><a href="./org/apache/commons/io/comparator/NameFileComparator.html#NAME_COMPARATOR">NAME_COMPARATOR</a></span> - Static variable in class org.apache.commons.io.comparator.<a href="./org/apache/commons/io/comparator/NameFileComparator.html" title="class in org.apache.commons.io.comparator">NameFileComparator</a></dt>
-<dd>
-<div class="block">Case-sensitive name comparator instance (see <a href="./org/apache/commons/io/IOCase.html#SENSITIVE"><code>IOCase.SENSITIVE</code></a>)</div>
-</dd>
-<dt><span class="strong"><a href="./org/apache/commons/io/comparator/NameFileComparator.html#NAME_INSENSITIVE_COMPARATOR">NAME_INSENSITIVE_COMPARATOR</a></span> - Static variable in class org.apache.commons.io.comparator.<a href="./org/apache/commons/io/comparator/NameFileComparator.html" title="class in org.apache.commons.io.comparator">NameFileComparator</a></dt>
-<dd>
-<div class="block">Case-insensitive name comparator instance (see <a href="./org/apache/commons/io/IOCase.html#INSENSITIVE"><code>IOCase.INSENSITIVE</code></a>)</div>
-</dd>
-<dt><span class="strong"><a href="./org/apache/commons/io/comparator/NameFileComparator.html#NAME_INSENSITIVE_REVERSE">NAME_INSENSITIVE_REVERSE</a></span> - Static variable in class org.apache.commons.io.comparator.<a href="./org/apache/commons/io/comparator/NameFileComparator.html" title="class in org.apache.commons.io.comparator">NameFileComparator</a></dt>
-<dd>
-<div class="block">Reverse case-insensitive name comparator instance (see <a href="./org/apache/commons/io/IOCase.html#INSENSITIVE"><code>IOCase.INSENSITIVE</code></a>)</div>
-</dd>
-<dt><span class="strong"><a href="./org/apache/commons/io/comparator/NameFileComparator.html#NAME_REVERSE">NAME_REVERSE</a></span> - Static variable in class org.apache.commons.io.comparator.<a href="./org/apache/commons/io/comparator/NameFileComparator.html" title="class in org.apache.commons.io.comparator">NameFileComparator</a></dt>
-<dd>
-<div class="block">Reverse case-sensitive name comparator instance (see <a href="./org/apache/commons/io/IOCase.html#SENSITIVE"><code>IOCase.SENSITIVE</code></a>)</div>
-</dd>
-<dt><span class="strong"><a href="./org/apache/commons/io/comparator/NameFileComparator.html#NAME_SYSTEM_COMPARATOR">NAME_SYSTEM_COMPARATOR</a></span> - Static variable in class org.apache.commons.io.comparator.<a href="./org/apache/commons/io/comparator/NameFileComparator.html" title="class in org.apache.commons.io.comparator">NameFileComparator</a></dt>
-<dd>
-<div class="block">System sensitive name comparator instance (see <a href="./org/apache/commons/io/IOCase.html#SYSTEM"><code>IOCase.SYSTEM</code></a>)</div>
-</dd>
-<dt><span class="strong"><a href="./org/apache/commons/io/comparator/NameFileComparator.html#NAME_SYSTEM_REVERSE">NAME_SYSTEM_REVERSE</a></span> - Static variable in class org.apache.commons.io.comparator.<a href="./org/apache/commons/io/comparator/NameFileComparator.html" title="class in org.apache.commons.io.comparator">NameFileComparator</a></dt>
-<dd>
-<div class="block">Reverse system sensitive name comparator instance (see <a href="./org/apache/commons/io/IOCase.html#SYSTEM"><code>IOCase.SYSTEM</code></a>)</div>
-</dd>
-<dt><a href="./org/apache/commons/io/comparator/NameFileComparator.html" title="class in org.apache.commons.io.comparator"><span class="strong">NameFileComparator</span></a> - Class in <a href="./org/apache/commons/io/comparator/package-summary.html">org.apache.commons.io.comparator</a></dt>
-<dd>
-<div class="block">Compare the <b>names</b> of two files for order (see <a href="http://download.oracle.com/javase/6/docs/api/java/io/File.html?is-external=true#getName()" title="class or interface in java.io"><code>File.getName()</code></a>).</div>
-</dd>
-<dt><span class="strong"><a href="./org/apache/commons/io/comparator/NameFileComparator.html#NameFileComparator()">NameFileComparator()</a></span> - Constructor for class org.apache.commons.io.comparator.<a href="./org/apache/commons/io/comparator/NameFileComparator.html" title="class in org.apache.commons.io.comparator">NameFileComparator</a></dt>
-<dd>
-<div class="block">Construct a case sensitive file name comparator instance.</div>
-</dd>
-<dt><span class="strong"><a href="./org/apache/commons/io/comparator/NameFileComparator.html#NameFileComparator(org.apache.commons.io.IOCase)">NameFileComparator(IOCase)</a></span> - Constructor for class org.apache.commons.io.comparator.<a href="./org/apache/commons/io/comparator/NameFileComparator.html" title="class in org.apache.commons.io.comparator">NameFileComparator</a></dt>
-<dd>
-<div class="block">Construct a file name comparator instance with the specified case-sensitivity.</div>
-</dd>
-<dt><span class="strong"><a href="./org/apache/commons/io/filefilter/FileFilterUtils.html#nameFileFilter(java.lang.String)">nameFileFilter(String)</a></span> - Static method in class org.apache.commons.io.filefilter.<a href="./org/apache/commons/io/filefilter/FileFilterUtils.html" title="class in org.apache.commons.io.filefilter">FileFilterUtils</a></dt>
-<dd>
-<div class="block">Returns a filter that returns true if the filename matches the specified text.</div>
-</dd>
-<dt><span class="strong"><a href="./org/apache/commons/io/filefilter/FileFilterUtils.html#nameFileFilter(java.lang.String, org.apache.commons.io.IOCase)">nameFileFilter(String, IOCase)</a></span> - Static method in class org.apache.commons.io.filefilter.<a href="./org/apache/commons/io/filefilter/FileFilterUtils.html" title="class in org.apache.commons.io.filefilter">FileFilterUtils</a></dt>
-<dd>
-<div class="block">Returns a filter that returns true if the filename matches the specified text.</div>
-</dd>
-<dt><a href="./org/apache/commons/io/filefilter/NameFileFilter.html" title="class in org.apache.commons.io.filefilter"><span class="strong">NameFileFilter</span></a> - Class in <a href="./org/apache/commons/io/filefilter/package-summary.html">org.apache.commons.io.filefilter</a></dt>
-<dd>
-<div class="block">Filters filenames for a certain name.</div>
-</dd>
-<dt><span class="strong"><a href="./org/apache/commons/io/filefilter/NameFileFilter.html#NameFileFilter(java.lang.String)">NameFileFilter(String)</a></span> - Constructor for class org.apache.commons.io.filefilter.<a href="./org/apache/commons/io/filefilter/NameFileFilter.html" title="class in org.apache.commons.io.filefilter">NameFileFilter</a></dt>
-<dd>
-<div class="block">Constructs a new case-sensitive name file filter for a single name.</div>
-</dd>
-<dt><span class="strong"><a href="./org/apache/commons/io/filefilter/NameFileFilter.html#NameFileFilter(java.lang.String, org.apache.commons.io.IOCase)">NameFileFilter(String, IOCase)</a></span> - Constructor for class org.apache.commons.io.filefilter.<a href="./org/apache/commons/io/filefilter/NameFileFilter.html" title="class in org.apache.commons.io.filefilter">NameFileFilter</a></dt>
-<dd>
-<div class="block">Construct a new name file filter specifying case-sensitivity.</div>
-</dd>
-<dt><span class="strong"><a href="./org/apache/commons/io/filefilter/NameFileFilter.html#NameFileFilter(java.lang.String[])">NameFileFilter(String[])</a></span> - Constructor for class org.apache.commons.io.filefilter.<a href="./org/apache/commons/io/filefilter/NameFileFilter.html" title="class in org.apache.commons.io.filefilter">NameFileFilter</a></dt>
-<dd>
-<div class="block">Constructs a new case-sensitive name file filter for an array of names.</div>
-</dd>
-<dt><span class="strong"><a href="./org/apache/commons/io/filefilter/NameFileFilter.html#NameFileFilter(java.lang.String[], org.apache.commons.io.IOCase)">NameFileFilter(String[], IOCase)</a></span> - Constructor for class org.apache.commons.io.filefilter.<a href="./org/apache/commons/io/filefilter/NameFileFilter.html" title="class in org.apache.commons.io.filefilter">NameFileFilter</a></dt>
-<dd>
-<div class="block">Constructs a new name file filter for an array of names specifying case-sensitivity.</div>
-</dd>
-<dt><span class="strong"><a href="./org/apache/commons/io/filefilter/NameFileFilter.html#NameFileFilter(java.util.List)">NameFileFilter(List&lt;String&gt;)</a></span> - Constructor for class org.apache.commons.io.filefilter.<a href="./org/apache/commons/io/filefilter/NameFileFilter.html" title="class in org.apache.commons.io.filefilter">NameFileFilter</a></dt>
-<dd>
-<div class="block">Constructs a new case-sensitive name file filter for a list of names.</div>
-</dd>
-<dt><span class="strong"><a href="./org/apache/commons/io/filefilter/NameFileFilter.html#NameFileFilter(java.util.List, org.apache.commons.io.IOCase)">NameFileFilter(List&lt;String&gt;, IOCase)</a></span> - Constructor for class org.apache.commons.io.filefilter.<a href="./org/apache/commons/io/filefilter/NameFileFilter.html" title="class in org.apache.commons.io.filefilter">NameFileFilter</a></dt>
-<dd>
-<div class="block">Constructs a new name file filter for a list of names specifying case-sensitivity.</div>
-</dd>
-<dt><span class="strong"><a href="./org/apache/commons/io/monitor/FileEntry.html#newChildInstance(java.io.File)">newChildInstance(File)</a></span> - Method in class org.apache.commons.io.monitor.<a href="./org/apache/commons/io/monitor/FileEntry.html" title="class in org.apache.commons.io.monitor">FileEntry</a></dt>
-<dd>
-<div class="block">Create a new child instance.</div>
-</dd>
-<dt><span class="strong"><a href="./org/apache/commons/io/LineIterator.html#next()">next()</a></span> - Method in class org.apache.commons.io.<a href="./org/apache/commons/io/LineIterator.html" title="class in org.apache.commons.io">LineIterator</a></dt>
-<dd>
-<div class="block">Returns the next line in the wrapped <code>Reader</code>.</div>
-</dd>
-<dt><span class="strong"><a href="./org/apache/commons/io/LineIterator.html#nextLine()">nextLine()</a></span> - Method in class org.apache.commons.io.<a href="./org/apache/commons/io/LineIterator.html" title="class in org.apache.commons.io">LineIterator</a></dt>
-<dd>
-<div class="block">Returns the next line in the wrapped <code>Reader</code>.</div>
-</dd>
-<dt><span class="strong"><a href="./org/apache/commons/io/FileDeleteStrategy.html#NORMAL">NORMAL</a></span> - Static variable in class org.apache.commons.io.<a href="./org/apache/commons/io/FileDeleteStrategy.html" title="class in org.apache.commons.io">FileDeleteStrategy</a></dt>
-<dd>
-<div class="block">The singleton instance for normal file deletion, which does not permit
- the deletion of directories that are not empty.</div>
-</dd>
-<dt><span class="strong"><a href="./org/apache/commons/io/FilenameUtils.html#normalize(java.lang.String)">normalize(String)</a></span> - Static method in class org.apache.commons.io.<a href="./org/apache/commons/io/FilenameUtils.html" title="class in org.apache.commons.io">FilenameUtils</a></dt>
-<dd>
-<div class="block">Normalizes a path, removing double and single dot path steps.</div>
-</dd>
-<dt><span class="strong"><a href="./org/apache/commons/io/FilenameUtils.html#normalize(java.lang.String, boolean)">normalize(String, boolean)</a></span> - Static method in class org.apache.commons.io.<a href="./org/apache/commons/io/FilenameUtils.html" title="class in org.apache.commons.io">FilenameUtils</a></dt>
-<dd>
-<div class="block">Normalizes a path, removing double and single dot path steps.</div>
-</dd>
-<dt><span class="strong"><a href="./org/apache/commons/io/FilenameUtils.html#normalizeNoEndSeparator(java.lang.String)">normalizeNoEndSeparator(String)</a></span> - Static method in class org.apache.commons.io.<a href="./org/apache/commons/io/FilenameUtils.html" title="class in org.apache.commons.io">FilenameUtils</a></dt>
-<dd>
-<div class="block">Normalizes a path, removing double and single dot path steps,
- and removing any final directory separator.</div>
-</dd>
-<dt><span class="strong"><a href="./org/apache/commons/io/FilenameUtils.html#normalizeNoEndSeparator(java.lang.String, boolean)">normalizeNoEndSeparator(String, boolean)</a></span> - Static method in class org.apache.commons.io.<a href="./org/apache/commons/io/FilenameUtils.html" title="class in org.apache.commons.io">FilenameUtils</a></dt>
-<dd>
-<div class="block">Normalizes a path, removing double and single dot path steps,
- and removing any final directory separator.</div>
-</dd>
-<dt><span class="strong"><a href="./org/apache/commons/io/filefilter/EmptyFileFilter.html#NOT_EMPTY">NOT_EMPTY</a></span> - Static variable in class org.apache.commons.io.filefilter.<a href="./org/apache/commons/io/filefilter/EmptyFileFilter.html" title="class in org.apache.commons.io.filefilter">EmptyFileFilter</a></dt>
-<dd>
-<div class="block">Singleton instance of <i>not-empty</i> filter</div>
-</dd>
-<dt><span class="strong"><a href="./org/apache/commons/io/filefilter/FileFilterUtils.html#notFileFilter(org.apache.commons.io.filefilter.IOFileFilter)">notFileFilter(IOFileFilter)</a></span> - Static method in class org.apache.commons.io.filefilter.<a href="./org/apache/commons/io/filefilter/FileFilterUtils.html" title="class in org.apache.commons.io.filefilter">FileFilterUtils</a></dt>
-<dd>
-<div class="block">Returns a filter that NOTs the specified filter.</div>
-</dd>
-<dt><a href="./org/apache/commons/io/filefilter/NotFileFilter.html" title="class in org.apache.commons.io.filefilter"><span class="strong">NotFileFilter</span></a> - Class in <a href="./org/apache/commons/io/filefilter/package-summary.html">org.apache.commons.io.filefilter</a></dt>
-<dd>
-<div class="block">This filter produces a logical NOT of the filters specified.</div>
-</dd>
-<dt><span class="strong"><a href="./org/apache/commons/io/filefilter/NotFileFilter.html#NotFileFilter(org.apache.commons.io.filefilter.IOFileFilter)">NotFileFilter(IOFileFilter)</a></span> - Constructor for class org.apache.commons.io.filefilter.<a href="./org/apache/commons/io/filefilter/NotFileFilter.html" title="class in org.apache.commons.io.filefilter">NotFileFilter</a></dt>
-<dd>
-<div class="block">Constructs a new file filter that NOTs the result of another filter.</div>
-</dd>
-<dt><span class="strong"><a href="./org/apache/commons/io/output/NullOutputStream.html#NULL_OUTPUT_STREAM">NULL_OUTPUT_STREAM</a></span> - Static variable in class org.apache.commons.io.output.<a href="./org/apache/commons/io/output/NullOutputStream.html" title="class in org.apache.commons.io.output">NullOutputStream</a></dt>
-<dd>
-<div class="block">A singleton.</div>
-</dd>
-<dt><span class="strong"><a href="./org/apache/commons/io/output/NullWriter.html#NULL_WRITER">NULL_WRITER</a></span> - Static variable in class org.apache.commons.io.output.<a href="./org/apache/commons/io/output/NullWriter.html" title="class in org.apache.commons.io.output">NullWriter</a></dt>
-<dd>
-<div class="block">A singleton.</div>
-</dd>
-<dt><a href="./org/apache/commons/io/input/NullInputStream.html" title="class in org.apache.commons.io.input"><span class="strong">NullInputStream</span></a> - Class in <a href="./org/apache/commons/io/input/package-summary.html">org.apache.commons.io.input</a></dt>
-<dd>
-<div class="block">A functional, light weight <a href="http://download.oracle.com/javase/6/docs/api/java/io/InputStream.html?is-external=true" title="class or interface in java.io"><code>InputStream</code></a> that emulates
- a stream of a specified size.</div>
-</dd>
-<dt><span class="strong"><a href="./org/apache/commons/io/input/NullInputStream.html#NullInputStream(long)">NullInputStream(long)</a></span> - Constructor for class org.apache.commons.io.input.<a href="./org/apache/commons/io/input/NullInputStream.html" title="class in org.apache.commons.io.input">NullInputStream</a></dt>
-<dd>
-<div class="block">Create an <a href="http://download.oracle.com/javase/6/docs/api/java/io/InputStream.html?is-external=true" title="class or interface in java.io"><code>InputStream</code></a> that emulates a specified size
- which supports marking and does not throw EOFException.</div>
-</dd>
-<dt><span class="strong"><a href="./org/apache/commons/io/input/NullInputStream.html#NullInputStream(long, boolean, boolean)">NullInputStream(long, boolean, boolean)</a></span> - Constructor for class org.apache.commons.io.input.<a href="./org/apache/commons/io/input/NullInputStream.html" title="class in org.apache.commons.io.input">NullInputStream</a></dt>
-<dd>
-<div class="block">Create an <a href="http://download.oracle.com/javase/6/docs/api/java/io/InputStream.html?is-external=true" title="class or interface in java.io"><code>InputStream</code></a> that emulates a specified
- size with option settings.</div>
-</dd>
-<dt><a href="./org/apache/commons/io/output/NullOutputStream.html" title="class in org.apache.commons.io.output"><span class="strong">NullOutputStream</span></a> - Class in <a href="./org/apache/commons/io/output/package-summary.html">org.apache.commons.io.output</a></dt>
-<dd>
-<div class="block">This OutputStream writes all data to the famous <b>/dev/null</b>.</div>
-</dd>
-<dt><span class="strong"><a href="./org/apache/commons/io/output/NullOutputStream.html#NullOutputStream()">NullOutputStream()</a></span> - Constructor for class org.apache.commons.io.output.<a href="./org/apache/commons/io/output/NullOutputStream.html" title="class in org.apache.commons.io.output">NullOutputStream</a></dt>
-<dd>&nbsp;</dd>
-<dt><a href="./org/apache/commons/io/input/NullReader.html" title="class in org.apache.commons.io.input"><span class="strong">NullReader</span></a> - Class in <a href="./org/apache/commons/io/input/package-summary.html">org.apache.commons.io.input</a></dt>
-<dd>
-<div class="block">A functional, light weight <a href="http://download.oracle.com/javase/6/docs/api/java/io/Reader.html?is-external=true" title="class or interface in java.io"><code>Reader</code></a> that emulates
- a reader of a specified size.</div>
-</dd>
-<dt><span class="strong"><a href="./org/apache/commons/io/input/NullReader.html#NullReader(long)">NullReader(long)</a></span> - Constructor for class org.apache.commons.io.input.<a href="./org/apache/commons/io/input/NullReader.html" title="class in org.apache.commons.io.input">NullReader</a></dt>
-<dd>
-<div class="block">Create a <a href="http://download.oracle.com/javase/6/docs/api/java/io/Reader.html?is-external=true" title="class or interface in java.io"><code>Reader</code></a> that emulates a specified size
- which supports marking and does not throw EOFException.</div>
-</dd>
-<dt><span class="strong"><a href="./org/apache/commons/io/input/NullReader.html#NullReader(long, boolean, boolean)">NullReader(long, boolean, boolean)</a></span> - Constructor for class org.apache.commons.io.input.<a href="./org/apache/commons/io/input/NullReader.html" title="class in org.apache.commons.io.input">NullReader</a></dt>
-<dd>
-<div class="block">Create a <a href="http://download.oracle.com/javase/6/docs/api/java/io/Reader.html?is-external=true" title="class or interface in java.io"><code>Reader</code></a> that emulates a specified
- size with option settings.</div>
-</dd>
-<dt><a href="./org/apache/commons/io/output/NullWriter.html" title="class in org.apache.commons.io.output"><span class="strong">NullWriter</span></a> - Class in <a href="./org/apache/commons/io/output/package-summary.html">org.apache.commons.io.output</a></dt>
-<dd>
-<div class="block">This <a href="http://download.oracle.com/javase/6/docs/api/java/io/Writer.html?is-external=true" title="class or interface in java.io"><code>Writer</code></a> writes all data to the famous <b>/dev/null</b>.</div>
-</dd>
-<dt><span class="strong"><a href="./org/apache/commons/io/output/NullWriter.html#NullWriter()">NullWriter()</a></span> - Constructor for class org.apache.commons.io.output.<a href="./org/apache/commons/io/output/NullWriter.html" title="class in org.apache.commons.io.output">NullWriter</a></dt>
-<dd>
-<div class="block">Constructs a new NullWriter.</div>
-</dd>
-</dl>
-<a name="_O_">
-<!--   -->
-</a>
-<h2 class="title">O</h2>
-<dl>
-<dt><span class="strong"><a href="./org/apache/commons/io/monitor/FileAlterationListener.html#onDirectoryChange(java.io.File)">onDirectoryChange(File)</a></span> - Method in interface org.apache.commons.io.monitor.<a href="./org/apache/commons/io/monitor/FileAlterationListener.html" title="interface in org.apache.commons.io.monitor">FileAlterationListener</a></dt>
-<dd>
-<div class="block">Directory changed Event.</div>
-</dd>
-<dt><span class="strong"><a href="./org/apache/commons/io/monitor/FileAlterationListenerAdaptor.html#onDirectoryChange(java.io.File)">onDirectoryChange(File)</a></span> - Method in class org.apache.commons.io.monitor.<a href="./org/apache/commons/io/monitor/FileAlterationListenerAdaptor.html" title="class in org.apache.commons.io.monitor">FileAlterationListenerAdaptor</a></dt>
-<dd>
-<div class="block">Directory changed Event.</div>
-</dd>
-<dt><span class="strong"><a href="./org/apache/commons/io/monitor/FileAlterationListener.html#onDirectoryCreate(java.io.File)">onDirectoryCreate(File)</a></span> - Method in interface org.apache.commons.io.monitor.<a href="./org/apache/commons/io/monitor/FileAlterationListener.html" title="interface in org.apache.commons.io.monitor">FileAlterationListener</a></dt>
-<dd>
-<div class="block">Directory created Event.</div>
-</dd>
-<dt><span class="strong"><a href="./org/apache/commons/io/monitor/FileAlterationListenerAdaptor.html#onDirectoryCreate(java.io.File)">onDirectoryCreate(File)</a></span> - Method in class org.apache.commons.io.monitor.<a href="./org/apache/commons/io/monitor/FileAlterationListenerAdaptor.html" title="class in org.apache.commons.io.monitor">FileAlterationListenerAdaptor</a></dt>
-<dd>
-<div class="block">Directory created Event.</div>
-</dd>
-<dt><span class="strong"><a href="./org/apache/commons/io/monitor/FileAlterationListener.html#onDirectoryDelete(java.io.File)">onDirectoryDelete(File)</a></span> - Method in interface org.apache.commons.io.monitor.<a href="./org/apache/commons/io/monitor/FileAlterationListener.html" title="interface in org.apache.commons.io.monitor">FileAlterationListener</a></dt>
-<dd>
-<div class="block">Directory deleted Event.</div>
-</dd>
-<dt><span class="strong"><a href="./org/apache/commons/io/monitor/FileAlterationListenerAdaptor.html#onDirectoryDelete(java.io.File)">onDirectoryDelete(File)</a></span> - Method in class org.apache.commons.io.monitor.<a href="./org/apache/commons/io/monitor/FileAlterationListenerAdaptor.html" title="class in org.apache.commons.io.monitor">FileAlterationListenerAdaptor</a></dt>
-<dd>
-<div class="block">Directory deleted Event.</div>
-</dd>
-<dt><span class="strong"><a href="./org/apache/commons/io/FileUtils.html#ONE_EB">ONE_EB</a></span> - Static variable in class org.apache.commons.io.<a href="./org/apache/commons/io/FileUtils.html" title="class in org.apache.commons.io">FileUtils</a></dt>
-<dd>
-<div class="block">The number of bytes in an exabyte.</div>
-</dd>
-<dt><span class="strong"><a href="./org/apache/commons/io/FileUtils.html#ONE_EB_BI">ONE_EB_BI</a></span> - Static variable in class org.apache.commons.io.<a href="./org/apache/commons/io/FileUtils.html" title="class in org.apache.commons.io">FileUtils</a></dt>
-<dd>
-<div class="block">The number of bytes in an exabyte.</div>
-</dd>
-<dt><span class="strong"><a href="./org/apache/commons/io/FileUtils.html#ONE_GB">ONE_GB</a></span> - Static variable in class org.apache.commons.io.<a href="./org/apache/commons/io/FileUtils.html" title="class in org.apache.commons.io">FileUtils</a></dt>
-<dd>
-<div class="block">The number of bytes in a gigabyte.</div>
-</dd>
-<dt><span class="strong"><a href="./org/apache/commons/io/FileUtils.html#ONE_GB_BI">ONE_GB_BI</a></span> - Static variable in class org.apache.commons.io.<a href="./org/apache/commons/io/FileUtils.html" title="class in org.apache.commons.io">FileUtils</a></dt>
-<dd>
-<div class="block">The number of bytes in a gigabyte.</div>
-</dd>
-<dt><span class="strong"><a href="./org/apache/commons/io/FileUtils.html#ONE_KB">ONE_KB</a></span> - Static variable in class org.apache.commons.io.<a href="./org/apache/commons/io/FileUtils.html" title="class in org.apache.commons.io">FileUtils</a></dt>
-<dd>
-<div class="block">The number of bytes in a kilobyte.</div>
-</dd>
-<dt><span class="strong"><a href="./org/apache/commons/io/FileUtils.html#ONE_KB_BI">ONE_KB_BI</a></span> - Static variable in class org.apache.commons.io.<a href="./org/apache/commons/io/FileUtils.html" title="class in org.apache.commons.io">FileUtils</a></dt>
-<dd>
-<div class="block">The number of bytes in a kilobyte.</div>
-</dd>
-<dt><span class="strong"><a href="./org/apache/commons/io/FileUtils.html#ONE_MB">ONE_MB</a></span> - Static variable in class org.apache.commons.io.<a href="./org/apache/commons/io/FileUtils.html" title="class in org.apache.commons.io">FileUtils</a></dt>
-<dd>
-<div class="block">The number of bytes in a megabyte.</div>
-</dd>
-<dt><span class="strong"><a href="./org/apache/commons/io/FileUtils.html#ONE_MB_BI">ONE_MB_BI</a></span> - Static variable in class org.apache.commons.io.<a href="./org/apache/commons/io/FileUtils.html" title="class in org.apache.commons.io">FileUtils</a></dt>
-<dd>
-<div class="block">The number of bytes in a megabyte.</div>
-</dd>
-<dt><span class="strong"><a href="./org/apache/commons/io/FileUtils.html#ONE_PB">ONE_PB</a></span> - Static variable in class org.apache.commons.io.<a href="./org/apache/commons/io/FileUtils.html" title="class in org.apache.commons.io">FileUtils</a></dt>
-<dd>
-<div class="block">The number of bytes in a petabyte.</div>
-</dd>
-<dt><span class="strong"><a href="./org/apache/commons/io/FileUtils.html#ONE_PB_BI">ONE_PB_BI</a></span> - Static variable in class org.apache.commons.io.<a href="./org/apache/commons/io/FileUtils.html" title="class in org.apache.commons.io">FileUtils</a></dt>
-<dd>
-<div class="block">The number of bytes in a petabyte.</div>
-</dd>
-<dt><span class="strong"><a href="./org/apache/commons/io/FileUtils.html#ONE_TB">ONE_TB</a></span> - Static variable in class org.apache.commons.io.<a href="./org/apache/commons/io/FileUtils.html" title="class in org.apache.commons.io">FileUtils</a></dt>
-<dd>
-<div class="block">The number of bytes in a terabyte.</div>
-</dd>
-<dt><span class="strong"><a href="./org/apache/commons/io/FileUtils.html#ONE_TB_BI">ONE_TB_BI</a></span> - Static variable in class org.apache.commons.io.<a href="./org/apache/commons/io/FileUtils.html" title="class in org.apache.commons.io">FileUtils</a></dt>
-<dd>
-<div class="block">The number of bytes in a terabyte.</div>
-</dd>
-<dt><span class="strong"><a href="./org/apache/commons/io/FileUtils.html#ONE_YB">ONE_YB</a></span> - Static variable in class org.apache.commons.io.<a href="./org/apache/commons/io/FileUtils.html" title="class in org.apache.commons.io">FileUtils</a></dt>
-<dd>
-<div class="block">The number of bytes in a yottabyte.</div>
-</dd>
-<dt><span class="strong"><a href="./org/apache/commons/io/FileUtils.html#ONE_ZB">ONE_ZB</a></span> - Static variable in class org.apache.commons.io.<a href="./org/apache/commons/io/FileUtils.html" title="class in org.apache.commons.io">FileUtils</a></dt>
-<dd>
-<div class="block">The number of bytes in a zettabyte.</div>
-</dd>
-<dt><span class="strong"><a href="./org/apache/commons/io/monitor/FileAlterationListener.html#onFileChange(java.io.File)">onFileChange(File)</a></span> - Method in interface org.apache.commons.io.monitor.<a href="./org/apache/commons/io/monitor/FileAlterationListener.html" title="interface in org.apache.commons.io.monitor">FileAlterationListener</a></dt>
-<dd>
-<div class="block">File changed Event.</div>
-</dd>
-<dt><span class="strong"><a href="./org/apache/commons/io/monitor/FileAlterationListenerAdaptor.html#onFileChange(java.io.File)">onFileChange(File)</a></span> - Method in class org.apache.commons.io.monitor.<a href="./org/apache/commons/io/monitor/FileAlterationListenerAdaptor.html" title="class in org.apache.commons.io.monitor">FileAlterationListenerAdaptor</a></dt>
-<dd>
-<div class="block">File changed Event.</div>
-</dd>
-<dt><span class="strong"><a href="./org/apache/commons/io/monitor/FileAlterationListener.html#onFileCreate(java.io.File)">onFileCreate(File)</a></span> - Method in interface org.apache.commons.io.monitor.<a href="./org/apache/commons/io/monitor/FileAlterationListener.html" title="interface in org.apache.commons.io.monitor">FileAlterationListener</a></dt>
-<dd>
-<div class="block">File created Event.</div>
-</dd>
-<dt><span class="strong"><a href="./org/apache/commons/io/monitor/FileAlterationListenerAdaptor.html#onFileCreate(java.io.File)">onFileCreate(File)</a></span> - Method in class org.apache.commons.io.monitor.<a href="./org/apache/commons/io/monitor/FileAlterationListenerAdaptor.html" title="class in org.apache.commons.io.monitor">FileAlterationListenerAdaptor</a></dt>
-<dd>
-<div class="block">File created Event.</div>
-</dd>
-<dt><span class="strong"><a href="./org/apache/commons/io/monitor/FileAlterationListener.html#onFileDelete(java.io.File)">onFileDelete(File)</a></span> - Method in interface org.apache.commons.io.monitor.<a href="./org/apache/commons/io/monitor/FileAlterationListener.html" title="interface in org.apache.commons.io.monitor">FileAlterationListener</a></dt>
-<dd>
-<div class="block">File deleted Event.</div>
-</dd>
-<dt><span class="strong"><a href="./org/apache/commons/io/monitor/FileAlterationListenerAdaptor.html#onFileDelete(java.io.File)">onFileDelete(File)</a></span> - Method in class org.apache.commons.io.monitor.<a href="./org/apache/commons/io/monitor/FileAlterationListenerAdaptor.html" title="class in org.apache.commons.io.monitor">FileAlterationListenerAdaptor</a></dt>
-<dd>
-<div class="block">File deleted Event.</div>
-</dd>
-<dt><span class="strong"><a href="./org/apache/commons/io/monitor/FileAlterationListener.html#onStart(org.apache.commons.io.monitor.FileAlterationObserver)">onStart(FileAlterationObserver)</a></span> - Method in interface org.apache.commons.io.monitor.<a href="./org/apache/commons/io/monitor/FileAlterationListener.html" title="interface in org.apache.commons.io.monitor">FileAlterationListener</a></dt>
-<dd>
-<div class="block">File system observer started checking event.</div>
-</dd>
-<dt><span class="strong"><a href="./org/apache/commons/io/monitor/FileAlterationListenerAdaptor.html#onStart(org.apache.commons.io.monitor.FileAlterationObserver)">onStart(FileAlterationObserver)</a></span> - Method in class org.apache.commons.io.monitor.<a href="./org/apache/commons/io/monitor/FileAlterationListenerAdaptor.html" title="class in org.apache.commons.io.monitor">FileAlterationListenerAdaptor</a></dt>
-<dd>
-<div class="block">File system observer started checking event.</div>
-</dd>
-<dt><span class="strong"><a href="./org/apache/commons/io/monitor/FileAlterationListener.html#onStop(org.apache.commons.io.monitor.FileAlterationObserver)">onStop(FileAlterationObserver)</a></span> - Method in interface org.apache.commons.io.monitor.<a href="./org/apache/commons/io/monitor/FileAlterationListener.html" title="interface in org.apache.commons.io.monitor">FileAlterationListener</a></dt>
-<dd>
-<div class="block">File system observer finished checking event.</div>
-</dd>
-<dt><span class="strong"><a href="./org/apache/commons/io/monitor/FileAlterationListenerAdaptor.html#onStop(org.apache.commons.io.monitor.FileAlterationObserver)">onStop(FileAlterationObserver)</a></span> - Method in class org.apache.commons.io.monitor.<a href="./org/apache/commons/io/monitor/FileAlterationListenerAdaptor.html" title="class in org.apache.commons.io.monitor">FileAlterationListenerAdaptor</a></dt>
-<dd>
-<div class="block">File system observer finished checking event.</div>
-</dd>
-<dt><span class="strong"><a href="./org/apache/commons/io/FileUtils.html#openInputStream(java.io.File)">openInputStream(File)</a></span> - Static method in class org.apache.commons.io.<a href="./org/apache/commons/io/FileUtils.html" title="class in org.apache.commons.io">FileUtils</a></dt>
-<dd>
-<div class="block">Opens a <a href="http://download.oracle.com/javase/6/docs/api/java/io/FileInputStream.html?is-external=true" title="class or interface in java.io"><code>FileInputStream</code></a> for the specified file, providing better
- error messages than simply calling <code>new FileInputStream(file)</code>.</div>
-</dd>
-<dt><span class="strong"><a href="./org/apache/commons/io/FileUtils.html#openOutputStream(java.io.File)">openOutputStream(File)</a></span> - Static method in class org.apache.commons.io.<a href="./org/apache/commons/io/FileUtils.html" title="class in org.apache.commons.io">FileUtils</a></dt>
-<dd>
-<div class="block">Opens a <a href="http://download.oracle.com/javase/6/docs/api/java/io/FileOutputStream.html?is-external=true" title="class or interface in java.io"><code>FileOutputStream</code></a> for the specified file, checking and
- creating the parent directory if it does not exist.</div>
-</dd>
-<dt><span class="strong"><a href="./org/apache/commons/io/FileUtils.html#openOutputStream(java.io.File, boolean)">openOutputStream(File, boolean)</a></span> - Static method in class org.apache.commons.io.<a href="./org/apache/commons/io/FileUtils.html" title="class in org.apache.commons.io">FileUtils</a></dt>
-<dd>
-<div class="block">Opens a <a href="http://download.oracle.com/javase/6/docs/api/java/io/FileOutputStream.html?is-external=true" title="class or interface in java.io"><code>FileOutputStream</code></a> for the specified file, checking and
- creating the parent directory if it does not exist.</div>
-</dd>
-<dt><span class="strong"><a href="./org/apache/commons/io/filefilter/FileFilterUtils.html#or(org.apache.commons.io.filefilter.IOFileFilter...)">or(IOFileFilter...)</a></span> - Static method in class org.apache.commons.io.filefilter.<a href="./org/apache/commons/io/filefilter/FileFilterUtils.html" title="class in org.apache.commons.io.filefilter">FileFilterUtils</a></dt>
-<dd>
-<div class="block">Returns a filter that ORs the specified filters.</div>
-</dd>
-<dt><span class="strong"><a href="./org/apache/commons/io/filefilter/FileFilterUtils.html#orFileFilter(org.apache.commons.io.filefilter.IOFileFilter, org.apache.commons.io.filefilter.IOFileFilter)">orFileFilter(IOFileFilter, IOFileFilter)</a></span> - Static method in class org.apache.commons.io.filefilter.<a href="./org/apache/commons/io/filefilter/FileFilterUtils.html" title="class in org.apache.commons.io.filefilter">FileFilterUtils</a></dt>
-<dd>
-<div class="block"><span class="strong">Deprecated.</span>
-<div class="block"><i>use <a href="./org/apache/commons/io/filefilter/FileFilterUtils.html#or(org.apache.commons.io.filefilter.IOFileFilter...)"><code>FileFilterUtils.or(IOFileFilter...)</code></a></i></div>
-</div>
-</dd>
-<dt><a href="./org/apache/commons/io/filefilter/OrFileFilter.html" title="class in org.apache.commons.io.filefilter"><span class="strong">OrFileFilter</span></a> - Class in <a href="./org/apache/commons/io/filefilter/package-summary.html">org.apache.commons.io.filefilter</a></dt>
-<dd>
-<div class="block">A <a href="http://download.oracle.com/javase/6/docs/api/java/io/FileFilter.html?is-external=true" title="class or interface in java.io"><code>FileFilter</code></a> providing conditional OR logic across a list of
- file filters.</div>
-</dd>
-<dt><span class="strong"><a href="./org/apache/commons/io/filefilter/OrFileFilter.html#OrFileFilter()">OrFileFilter()</a></span> - Constructor for class org.apache.commons.io.filefilter.<a href="./org/apache/commons/io/filefilter/OrFileFilter.html" title="class in org.apache.commons.io.filefilter">OrFileFilter</a></dt>
-<dd>
-<div class="block">Constructs a new instance of <code>OrFileFilter</code>.</div>
-</dd>
-<dt><span class="strong"><a href="./org/apache/commons/io/filefilter/OrFileFilter.html#OrFileFilter(java.util.List)">OrFileFilter(List&lt;IOFileFilter&gt;)</a></span> - Constructor for class org.apache.commons.io.filefilter.<a href="./org/apache/commons/io/filefilter/OrFileFilter.html" title="class in org.apache.commons.io.filefilter">OrFileFilter</a></dt>
-<dd>
-<div class="block">Constructs a new instance of <code>OrFileFilter</code>
- with the specified filters.</div>
-</dd>
-<dt><span class="strong"><a href="./org/apache/commons/io/filefilter/OrFileFilter.html#OrFileFilter(org.apache.commons.io.filefilter.IOFileFilter, org.apache.commons.io.filefilter.IOFileFilter)">OrFileFilter(IOFileFilter, IOFileFilter)</a></span> - Constructor for class org.apache.commons.io.filefilter.<a href="./org/apache/commons/io/filefilter/OrFileFilter.html" title="class in org.apache.commons.io.filefilter">OrFileFilter</a></dt>
-<dd>
-<div class="block">Constructs a new file filter that ORs the result of two other filters.</div>
-</dd>
-<dt><a href="./org/apache/commons/io/package-summary.html">org.apache.commons.io</a> - package org.apache.commons.io</dt>
-<dd>
-<div class="block">
-This package defines utility classes for working with streams, readers,
-writers and files.</div>
-</dd>
-<dt><a href="./org/apache/commons/io/comparator/package-summary.html">org.apache.commons.io.comparator</a> - package org.apache.commons.io.comparator</dt>
-<dd>
-<div class="block">This package provides various <a href="http://download.oracle.com/javase/6/docs/api/java/util/Comparator.html?is-external=true" title="class or interface in java.util"><code>Comparator</code></a> implementations
-for <a href="http://download.oracle.com/javase/6/docs/api/java/io/File.html?is-external=true" title="class or interface in java.io"><code>File</code></a>s.</div>
-</dd>
-<dt><a href="./org/apache/commons/io/filefilter/package-summary.html">org.apache.commons.io.filefilter</a> - package org.apache.commons.io.filefilter</dt>
-<dd>
-<div class="block">This package defines an interface (IOFileFilter) that combines both 
-<a href="http://download.oracle.com/javase/6/docs/api/java/io/FileFilter.html?is-external=true" title="class or interface in java.io"><code>FileFilter</code></a> and <a href="http://download.oracle.com/javase/6/docs/api/java/io/FilenameFilter.html?is-external=true" title="class or interface in java.io"><code>FilenameFilter</code></a>.</div>
-</dd>
-<dt><a href="./org/apache/commons/io/input/package-summary.html">org.apache.commons.io.input</a> - package org.apache.commons.io.input</dt>
-<dd>
-<div class="block">
-This package provides implementations of input classes, such as
-<code>InputStream</code> and <code>Reader</code>.</div>
-</dd>
-<dt><a href="./org/apache/commons/io/monitor/package-summary.html">org.apache.commons.io.monitor</a> - package org.apache.commons.io.monitor</dt>
-<dd>
-<div class="block">
-This package provides a component for monitoring file system events
-(directory and file create, update and delete events).</div>
-</dd>
-<dt><a href="./org/apache/commons/io/output/package-summary.html">org.apache.commons.io.output</a> - package org.apache.commons.io.output</dt>
-<dd>
-<div class="block">
-This package provides implementations of output classes, such as
-<code>OutputStream</code> and <code>Writer</code>.</div>
-</dd>
-</dl>
-<a name="_P_">
-<!--   -->
-</a>
-<h2 class="title">P</h2>
-<dl>
-<dt><span class="strong"><a href="./org/apache/commons/io/comparator/PathFileComparator.html#PATH_COMPARATOR">PATH_COMPARATOR</a></span> - Static variable in class org.apache.commons.io.comparator.<a href="./org/apache/commons/io/comparator/PathFileComparator.html" title="class in org.apache.commons.io.comparator">PathFileComparator</a></dt>
-<dd>
-<div class="block">Case-sensitive path comparator instance (see <a href="./org/apache/commons/io/IOCase.html#SENSITIVE"><code>IOCase.SENSITIVE</code></a>)</div>
-</dd>
-<dt><span class="strong"><a href="./org/apache/commons/io/comparator/PathFileComparator.html#PATH_INSENSITIVE_COMPARATOR">PATH_INSENSITIVE_COMPARATOR</a></span> - Static variable in class org.apache.commons.io.comparator.<a href="./org/apache/commons/io/comparator/PathFileComparator.html" title="class in org.apache.commons.io.comparator">PathFileComparator</a></dt>
-<dd>
-<div class="block">Case-insensitive path comparator instance (see <a href="./org/apache/commons/io/IOCase.html#INSENSITIVE"><code>IOCase.INSENSITIVE</code></a>)</div>
-</dd>
-<dt><span class="strong"><a href="./org/apache/commons/io/comparator/PathFileComparator.html#PATH_INSENSITIVE_REVERSE">PATH_INSENSITIVE_REVERSE</a></span> - Static variable in class org.apache.commons.io.comparator.<a href="./org/apache/commons/io/comparator/PathFileComparator.html" title="class in org.apache.commons.io.comparator">PathFileComparator</a></dt>
-<dd>
-<div class="block">Reverse case-insensitive path comparator instance (see <a href="./org/apache/commons/io/IOCase.html#INSENSITIVE"><code>IOCase.INSENSITIVE</code></a>)</div>
-</dd>
-<dt><span class="strong"><a href="./org/apache/commons/io/comparator/PathFileComparator.html#PATH_REVERSE">PATH_REVERSE</a></span> - Static variable in class org.apache.commons.io.comparator.<a href="./org/apache/commons/io/comparator/PathFileComparator.html" title="class in org.apache.commons.io.comparator">PathFileComparator</a></dt>
-<dd>
-<div class="block">Reverse case-sensitive path comparator instance (see <a href="./org/apache/commons/io/IOCase.html#SENSITIVE"><code>IOCase.SENSITIVE</code></a>)</div>
-</dd>
-<dt><span class="strong"><a href="./org/apache/commons/io/comparator/PathFileComparator.html#PATH_SYSTEM_COMPARATOR">PATH_SYSTEM_COMPARATOR</a></span> - Static variable in class org.apache.commons.io.comparator.<a href="./org/apache/commons/io/comparator/PathFileComparator.html" title="class in org.apache.commons.io.comparator">PathFileComparator</a></dt>
-<dd>
-<div class="block">System sensitive path comparator instance (see <a href="./org/apache/commons/io/IOCase.html#SYSTEM"><code>IOCase.SYSTEM</code></a>)</div>
-</dd>
-<dt><span class="strong"><a href="./org/apache/commons/io/comparator/PathFileComparator.html#PATH_SYSTEM_REVERSE">PATH_SYSTEM_REVERSE</a></span> - Static variable in class org.apache.commons.io.comparator.<a href="./org/apache/commons/io/comparator/PathFileComparator.html" title="class in org.apache.commons.io.comparator">PathFileComparator</a></dt>
-<dd>
-<div class="block">Reverse system sensitive path comparator instance (see <a href="./org/apache/commons/io/IOCase.html#SYSTEM"><code>IOCase.SYSTEM</code></a>)</div>
-</dd>
-<dt><a href="./org/apache/commons/io/comparator/PathFileComparator.html" title="class in org.apache.commons.io.comparator"><span class="strong">PathFileComparator</span></a> - Class in <a href="./org/apache/commons/io/comparator/package-summary.html">org.apache.commons.io.comparator</a></dt>
-<dd>
-<div class="block">Compare the <b>path</b> of two files for order (see <a href="http://download.oracle.com/javase/6/docs/api/java/io/File.html?is-external=true#getPath()" title="class or interface in java.io"><code>File.getPath()</code></a>).</div>
-</dd>
-<dt><span class="strong"><a href="./org/apache/commons/io/comparator/PathFileComparator.html#PathFileComparator()">PathFileComparator()</a></span> - Constructor for class org.apache.commons.io.comparator.<a href="./org/apache/commons/io/comparator/PathFileComparator.html" title="class in org.apache.commons.io.comparator">PathFileComparator</a></dt>
-<dd>
-<div class="block">Construct a case sensitive file path comparator instance.</div>
-</dd>
-<dt><span class="strong"><a href="./org/apache/commons/io/comparator/PathFileComparator.html#PathFileComparator(org.apache.commons.io.IOCase)">PathFileComparator(IOCase)</a></span> - Constructor for class org.apache.commons.io.comparator.<a href="./org/apache/commons/io/comparator/PathFileComparator.html" title="class in org.apache.commons.io.comparator">PathFileComparator</a></dt>
-<dd>
-<div class="block">Construct a file path comparator instance with the specified case-sensitivity.</div>
-</dd>
-<dt><span class="strong"><a href="./org/apache/commons/io/filefilter/FileFilterUtils.html#prefixFileFilter(java.lang.String)">prefixFileFilter(String)</a></span> - Static method in class org.apache.commons.io.filefilter.<a href="./org/apache/commons/io/filefilter/FileFilterUtils.html" title="class in org.apache.commons.io.filefilter">FileFilterUtils</a></dt>
-<dd>
-<div class="block">Returns a filter that returns true if the filename starts with the specified text.</div>
-</dd>
-<dt><span class="strong"><a href="./org/apache/commons/io/filefilter/FileFilterUtils.html#prefixFileFilter(java.lang.String, org.apache.commons.io.IOCase)">prefixFileFilter(String, IOCase)</a></span> - Static method in class org.apache.commons.io.filefilter.<a href="./org/apache/commons/io/filefilter/FileFilterUtils.html" title="class in org.apache.commons.io.filefilter">FileFilterUtils</a></dt>
-<dd>
-<div class="block">Returns a filter that returns true if the filename starts with the specified text.</div>
-</dd>
-<dt><a href="./org/apache/commons/io/filefilter/PrefixFileFilter.html" title="class in org.apache.commons.io.filefilter"><span class="strong">PrefixFileFilter</span></a> - Class in <a href="./org/apache/commons/io/filefilter/package-summary.html">org.apache.commons.io.filefilter</a></dt>
-<dd>
-<div class="block">Filters filenames for a certain prefix.</div>
-</dd>
-<dt><span class="strong"><a href="./org/apache/commons/io/filefilter/PrefixFileFilter.html#PrefixFileFilter(java.lang.String)">PrefixFileFilter(String)</a></span> - Constructor for class org.apache.commons.io.filefilter.<a href="./org/apache/commons/io/filefilter/PrefixFileFilter.html" title="class in org.apache.commons.io.filefilter">PrefixFileFilter</a></dt>
-<dd>
-<div class="block">Constructs a new Prefix file filter for a single prefix.</div>
-</dd>
-<dt><span class="strong"><a href="./org/apache/commons/io/filefilter/PrefixFileFilter.html#PrefixFileFilter(java.lang.String, org.apache.commons.io.IOCase)">PrefixFileFilter(String, IOCase)</a></span> - Constructor for class org.apache.commons.io.filefilter.<a href="./org/apache/commons/io/filefilter/PrefixFileFilter.html" title="class in org.apache.commons.io.filefilter">PrefixFileFilter</a></dt>
-<dd>
-<div class="block">Constructs a new Prefix file filter for a single prefix
- specifying case-sensitivity.</div>
-</dd>
-<dt><span class="strong"><a href="./org/apache/commons/io/filefilter/PrefixFileFilter.html#PrefixFileFilter(java.lang.String[])">PrefixFileFilter(String[])</a></span> - Constructor for class org.apache.commons.io.filefilter.<a href="./org/apache/commons/io/filefilter/PrefixFileFilter.html" title="class in org.apache.commons.io.filefilter">PrefixFileFilter</a></dt>
-<dd>
-<div class="block">Constructs a new Prefix file filter for any of an array of prefixes.</div>
-</dd>
-<dt><span class="strong"><a href="./org/apache/commons/io/filefilter/PrefixFileFilter.html#PrefixFileFilter(java.lang.String[], org.apache.commons.io.IOCase)">PrefixFileFilter(String[], IOCase)</a></span> - Constructor for class org.apache.commons.io.filefilter.<a href="./org/apache/commons/io/filefilter/PrefixFileFilter.html" title="class in org.apache.commons.io.filefilter">PrefixFileFilter</a></dt>
-<dd>
-<div class="block">Constructs a new Prefix file filter for any of an array of prefixes
- specifying case-sensitivity.</div>
-</dd>
-<dt><span class="strong"><a href="./org/apache/commons/io/filefilter/PrefixFileFilter.html#PrefixFileFilter(java.util.List)">PrefixFileFilter(List&lt;String&gt;)</a></span> - Constructor for class org.apache.commons.io.filefilter.<a href="./org/apache/commons/io/filefilter/PrefixFileFilter.html" title="class in org.apache.commons.io.filefilter">PrefixFileFilter</a></dt>
-<dd>
-<div class="block">Constructs a new Prefix file filter for a list of prefixes.</div>
-</dd>
-<dt><span class="strong"><a href="./org/apache/commons/io/filefilter/PrefixFileFilter.html#PrefixFileFilter(java.util.List, org.apache.commons.io.IOCase)">PrefixFileFilter(List&lt;String&gt;, IOCase)</a></span> - Constructor for class org.apache.commons.io.filefilter.<a href="./org/apache/commons/io/filefilter/PrefixFileFilter.html" title="class in org.apache.commons.io.filefilter">PrefixFileFilter</a></dt>
-<dd>
-<div class="block">Constructs a new Prefix file filter for a list of prefixes
- specifying case-sensitivity.</div>
-</dd>
-<dt><span class="strong"><a href="./org/apache/commons/io/input/NullInputStream.html#processByte()">processByte()</a></span> - Method in class org.apache.commons.io.input.<a href="./org/apache/commons/io/input/NullInputStream.html" title="class in org.apache.commons.io.input">NullInputStream</a></dt>
-<dd>
-<div class="block">Return a byte value for the  <code>read()</code> method.</div>
-</dd>
-<dt><span class="strong"><a href="./org/apache/commons/io/input/NullInputStream.html#processBytes(byte[], int, int)">processBytes(byte[], int, int)</a></span> - Method in class org.apache.commons.io.input.<a href="./org/apache/commons/io/input/NullInputStream.html" title="class in org.apache.commons.io.input">NullInputStream</a></dt>
-<dd>
-<div class="block">Process the bytes for the <code>read(byte[], offset, length)</code>
- method.</div>
-</dd>
-<dt><span class="strong"><a href="./org/apache/commons/io/input/NullReader.html#processChar()">processChar()</a></span> - Method in class org.apache.commons.io.input.<a href="./org/apache/commons/io/input/NullReader.html" title="class in org.apache.commons.io.input">NullReader</a></dt>
-<dd>
-<div class="block">Return a character value for the  <code>read()</code> method.</div>
-</dd>
-<dt><span class="strong"><a href="./org/apache/commons/io/input/NullReader.html#processChars(char[], int, int)">processChars(char[], int, int)</a></span> - Method in class org.apache.commons.io.input.<a href="./org/apache/commons/io/input/NullReader.html" title="class in org.apache.commons.io.input">NullReader</a></dt>
-<dd>
-<div class="block">Process the characters for the <code>read(char[], offset, length)</code>
- method.</div>
-</dd>
-<dt><a href="./org/apache/commons/io/input/ProxyInputStream.html" title="class in org.apache.commons.io.input"><span class="strong">ProxyInputStream</span></a> - Class in <a href="./org/apache/commons/io/input/package-summary.html">org.apache.commons.io.input</a></dt>
-<dd>
-<div class="block">A Proxy stream which acts as expected, that is it passes the method
- calls on to the proxied stream and doesn't change which methods are
- being called.</div>
-</dd>
-<dt><span class="strong"><a href="./org/apache/commons/io/input/ProxyInputStream.html#ProxyInputStream(java.io.InputStream)">ProxyInputStream(InputStream)</a></span> - Constructor for class org.apache.commons.io.input.<a href="./org/apache/commons/io/input/ProxyInputStream.html" title="class in org.apache.commons.io.input">ProxyInputStream</a></dt>
-<dd>
-<div class="block">Constructs a new ProxyInputStream.</div>
-</dd>
-<dt><a href="./org/apache/commons/io/output/ProxyOutputStream.html" title="class in org.apache.commons.io.output"><span class="strong">ProxyOutputStream</span></a> - Class in <a href="./org/apache/commons/io/output/package-summary.html">org.apache.commons.io.output</a></dt>
-<dd>
-<div class="block">A Proxy stream which acts as expected, that is it passes the method 
- calls on to the proxied stream and doesn't change which methods are 
- being called.</div>
-</dd>
-<dt><span class="strong"><a href="./org/apache/commons/io/output/ProxyOutputStream.html#ProxyOutputStream(java.io.OutputStream)">ProxyOutputStream(OutputStream)</a></span> - Constructor for class org.apache.commons.io.output.<a href="./org/apache/commons/io/output/ProxyOutputStream.html" title="class in org.apache.commons.io.output">ProxyOutputStream</a></dt>
-<dd>
-<div class="block">Constructs a new ProxyOutputStream.</div>
-</dd>
-<dt><a href="./org/apache/commons/io/input/ProxyReader.html" title="class in org.apache.commons.io.input"><span class="strong">ProxyReader</span></a> - Class in <a href="./org/apache/commons/io/input/package-summary.html">org.apache.commons.io.input</a></dt>
-<dd>
-<div class="block">A Proxy stream which acts as expected, that is it passes the method 
- calls on to the proxied stream and doesn't change which methods are 
- being called.</div>
-</dd>
-<dt><span class="strong"><a href="./org/apache/commons/io/input/ProxyReader.html#ProxyReader(java.io.Reader)">ProxyReader(Reader)</a></span> - Constructor for class org.apache.commons.io.input.<a href="./org/apache/commons/io/input/ProxyReader.html" title="class in org.apache.commons.io.input">ProxyReader</a></dt>
-<dd>
-<div class="block">Constructs a new ProxyReader.</div>
-</dd>
-<dt><a href="./org/apache/commons/io/output/ProxyWriter.html" title="class in org.apache.commons.io.output"><span class="strong">ProxyWriter</span></a> - Class in <a href="./org/apache/commons/io/output/package-summary.html">org.apache.commons.io.output</a></dt>
-<dd>
-<div class="block">A Proxy stream which acts as expected, that is it passes the method 
- calls on to the proxied stream and doesn't change which methods are 
- being called.</div>
-</dd>
-<dt><span class="strong"><a href="./org/apache/commons/io/output/ProxyWriter.html#ProxyWriter(java.io.Writer)">ProxyWriter(Writer)</a></span> - Constructor for class org.apache.commons.io.output.<a href="./org/apache/commons/io/output/ProxyWriter.html" title="class in org.apache.commons.io.output">ProxyWriter</a></dt>
-<dd>
-<div class="block">Constructs a new ProxyWriter.</div>
-</dd>
-</dl>
-<a name="_R_">
-<!--   -->
-</a>
-<h2 class="title">R</h2>
-<dl>
-<dt><span class="strong"><a href="./org/apache/commons/io/input/BOMInputStream.html#read()">read()</a></span> - Method in class org.apache.commons.io.input.<a href="./org/apache/commons/io/input/BOMInputStream.html" title="class in org.apache.commons.io.input">BOMInputStream</a></dt>
-<dd>
-<div class="block">Invokes the delegate's <code>read()</code> method, detecting and optionally skipping BOM.</div>
-</dd>
-<dt><span class="strong"><a href="./org/apache/commons/io/input/BOMInputStream.html#read(byte[], int, int)">read(byte[], int, int)</a></span> - Method in class org.apache.commons.io.input.<a href="./org/apache/commons/io/input/BOMInputStream.html" title="class in org.apache.commons.io.input">BOMInputStream</a></dt>
-<dd>
-<div class="block">Invokes the delegate's <code>read(byte[], int, int)</code> method, detecting and optionally skipping BOM.</div>
-</dd>
-<dt><span class="strong"><a href="./org/apache/commons/io/input/BOMInputStream.html#read(byte[])">read(byte[])</a></span> - Method in class org.apache.commons.io.input.<a href="./org/apache/commons/io/input/BOMInputStream.html" title="class in org.apache.commons.io.input">BOMInputStream</a></dt>
-<dd>
-<div class="block">Invokes the delegate's <code>read(byte[])</code> method, detecting and optionally skipping BOM.</div>
-</dd>
-<dt><span class="strong"><a href="./org/apache/commons/io/input/BoundedInputStream.html#read()">read()</a></span> - Method in class org.apache.commons.io.input.<a href="./org/apache/commons/io/input/BoundedInputStream.html" title="class in org.apache.commons.io.input">BoundedInputStream</a></dt>
-<dd>
-<div class="block">Invokes the delegate's <code>read()</code> method if
- the current position is less than the limit.</div>
-</dd>
-<dt><span class="strong"><a href="./org/apache/commons/io/input/BoundedInputStream.html#read(byte[])">read(byte[])</a></span> - Method in class org.apache.commons.io.input.<a href="./org/apache/commons/io/input/BoundedInputStream.html" title="class in org.apache.commons.io.input">BoundedInputStream</a></dt>
-<dd>
-<div class="block">Invokes the delegate's <code>read(byte[])</code> method.</div>
-</dd>
-<dt><span class="strong"><a href="./org/apache/commons/io/input/BoundedInputStream.html#read(byte[], int, int)">read(byte[], int, int)</a></span> - Method in class org.apache.commons.io.input.<a href="./org/apache/commons/io/input/BoundedInputStream.html" title="class in org.apache.commons.io.input">BoundedInputStream</a></dt>
-<dd>
-<div class="block">Invokes the delegate's <code>read(byte[], int, int)</code> method.</div>
-</dd>
-<dt><span class="strong"><a href="./org/apache/commons/io/input/BrokenInputStream.html#read()">read()</a></span> - Method in class org.apache.commons.io.input.<a href="./org/apache/commons/io/input/BrokenInputStream.html" title="class in org.apache.commons.io.input">BrokenInputStream</a></dt>
-<dd>
-<div class="block">Throws the configured exception.</div>
-</dd>
-<dt><span class="strong"><a href="./org/apache/commons/io/input/CharSequenceInputStream.html#read(byte[], int, int)">read(byte[], int, int)</a></span> - Method in class org.apache.commons.io.input.<a href="./org/apache/commons/io/input/CharSequenceInputStream.html" title="class in org.apache.commons.io.input">CharSequenceInputStream</a></dt>
-<dd>&nbsp;</dd>
-<dt><span class="strong"><a href="./org/apache/commons/io/input/CharSequenceInputStream.html#read()">read()</a></span> - Method in class org.apache.commons.io.input.<a href="./org/apache/commons/io/input/CharSequenceInputStream.html" title="class in org.apache.commons.io.input">CharSequenceInputStream</a></dt>
-<dd>&nbsp;</dd>
-<dt><span class="strong"><a href="./org/apache/commons/io/input/CharSequenceInputStream.html#read(byte[])">read(byte[])</a></span> - Method in class org.apache.commons.io.input.<a href="./org/apache/commons/io/input/CharSequenceInputStream.html" title="class in org.apache.commons.io.input">CharSequenceInputStream</a></dt>
-<dd>&nbsp;</dd>
-<dt><span class="strong"><a href="./org/apache/commons/io/input/CharSequenceReader.html#read()">read()</a></span> - Method in class org.apache.commons.io.input.<a href="./org/apache/commons/io/input/CharSequenceReader.html" title="class in org.apache.commons.io.input">CharSequenceReader</a></dt>
-<dd>
-<div class="block">Read a single character.</div>
-</dd>
-<dt><span class="strong"><a href="./org/apache/commons/io/input/CharSequenceReader.html#read(char[], int, int)">read(char[], int, int)</a></span> - Method in class org.apache.commons.io.input.<a href="./org/apache/commons/io/input/CharSequenceReader.html" title="class in org.apache.commons.io.input">CharSequenceReader</a></dt>
-<dd>
-<div class="block">Read the sepcified number of characters into the array.</div>
-</dd>
-<dt><span class="strong"><a href="./org/apache/commons/io/input/ClosedInputStream.html#read()">read()</a></span> - Method in class org.apache.commons.io.input.<a href="./org/apache/commons/io/input/ClosedInputStream.html" title="class in org.apache.commons.io.input">ClosedInputStream</a></dt>
-<dd>
-<div class="block">Returns -1 to indicate that the stream is closed.</div>
-</dd>
-<dt><span class="strong"><a href="./org/apache/commons/io/input/DemuxInputStream.html#read()">read()</a></span> - Method in class org.apache.commons.io.input.<a href="./org/apache/commons/io/input/DemuxInputStream.html" title="class in org.apache.commons.io.input">DemuxInputStream</a></dt>
-<dd>
-<div class="block">Read byte from stream associated with current thread.</div>
-</dd>
-<dt><span class="strong"><a href="./org/apache/commons/io/input/NullInputStream.html#read()">read()</a></span> - Method in class org.apache.commons.io.input.<a href="./org/apache/commons/io/input/NullInputStream.html" title="class in org.apache.commons.io.input">NullInputStream</a></dt>
-<dd>
-<div class="block">Read a byte.</div>
-</dd>
-<dt><span class="strong"><a href="./org/apache/commons/io/input/NullInputStream.html#read(byte[])">read(byte[])</a></span> - Method in class org.apache.commons.io.input.<a href="./org/apache/commons/io/input/NullInputStream.html" title="class in org.apache.commons.io.input">NullInputStream</a></dt>
-<dd>
-<div class="block">Read some bytes into the specified array.</div>
-</dd>
-<dt><span class="strong"><a href="./org/apache/commons/io/input/NullInputStream.html#read(byte[], int, int)">read(byte[], int, int)</a></span> - Method in class org.apache.commons.io.input.<a href="./org/apache/commons/io/input/NullInputStream.html" title="class in org.apache.commons.io.input">NullInputStream</a></dt>
-<dd>
-<div class="block">Read the specified number bytes into an array.</div>
-</dd>
-<dt><span class="strong"><a href="./org/apache/commons/io/input/NullReader.html#read()">read()</a></span> - Method in class org.apache.commons.io.input.<a href="./org/apache/commons/io/input/NullReader.html" title="class in org.apache.commons.io.input">NullReader</a></dt>
-<dd>
-<div class="block">Read a character.</div>
-</dd>
-<dt><span class="strong"><a href="./org/apache/commons/io/input/NullReader.html#read(char[])">read(char[])</a></span> - Method in class org.apache.commons.io.input.<a href="./org/apache/commons/io/input/NullReader.html" title="class in org.apache.commons.io.input">NullReader</a></dt>
-<dd>
-<div class="block">Read some characters into the specified array.</div>
-</dd>
-<dt><span class="strong"><a href="./org/apache/commons/io/input/NullReader.html#read(char[], int, int)">read(char[], int, int)</a></span> - Method in class org.apache.commons.io.input.<a href="./org/apache/commons/io/input/NullReader.html" title="class in org.apache.commons.io.input">NullReader</a></dt>
-<dd>
-<div class="block">Read the specified number characters into an array.</div>
-</dd>
-<dt><span class="strong"><a href="./org/apache/commons/io/input/ProxyInputStream.html#read()">read()</a></span> - Method in class org.apache.commons.io.input.<a href="./org/apache/commons/io/input/ProxyInputStream.html" title="class in org.apache.commons.io.input">ProxyInputStream</a></dt>
-<dd>
-<div class="block">Invokes the delegate's <code>read()</code> method.</div>
-</dd>
-<dt><span class="strong"><a href="./org/apache/commons/io/input/ProxyInputStream.html#read(byte[])">read(byte[])</a></span> - Method in class org.apache.commons.io.input.<a href="./org/apache/commons/io/input/ProxyInputStream.html" title="class in org.apache.commons.io.input">ProxyInputStream</a></dt>
-<dd>
-<div class="block">Invokes the delegate's <code>read(byte[])</code> method.</div>
-</dd>
-<dt><span class="strong"><a href="./org/apache/commons/io/input/ProxyInputStream.html#read(byte[], int, int)">read(byte[], int, int)</a></span> - Method in class org.apache.commons.io.input.<a href="./org/apache/commons/io/input/ProxyInputStream.html" title="class in org.apache.commons.io.input">ProxyInputStream</a></dt>
-<dd>
-<div class="block">Invokes the delegate's <code>read(byte[], int, int)</code> method.</div>
-</dd>
-<dt><span class="strong"><a href="./org/apache/commons/io/input/ProxyReader.html#read()">read()</a></span> - Method in class org.apache.commons.io.input.<a href="./org/apache/commons/io/input/ProxyReader.html" title="class in org.apache.commons.io.input">ProxyReader</a></dt>
-<dd>
-<div class="block">Invokes the delegate's <code>read()</code> method.</div>
-</dd>
-<dt><span class="strong"><a href="./org/apache/commons/io/input/ProxyReader.html#read(char[])">read(char[])</a></span> - Method in class org.apache.commons.io.input.<a href="./org/apache/commons/io/input/ProxyReader.html" title="class in org.apache.commons.io.input">ProxyReader</a></dt>
-<dd>
-<div class="block">Invokes the delegate's <code>read(char[])</code> method.</div>
-</dd>
-<dt><span class="strong"><a href="./org/apache/commons/io/input/ProxyReader.html#read(char[], int, int)">read(char[], int, int)</a></span> - Method in class org.apache.commons.io.input.<a href="./org/apache/commons/io/input/ProxyReader.html" title="class in org.apache.commons.io.input">ProxyReader</a></dt>
-<dd>
-<div class="block">Invokes the delegate's <code>read(char[], int, int)</code> method.</div>
-</dd>
-<dt><span class="strong"><a href="./org/apache/commons/io/input/ProxyReader.html#read(java.nio.CharBuffer)">read(CharBuffer)</a></span> - Method in class org.apache.commons.io.input.<a href="./org/apache/commons/io/input/ProxyReader.html" title="class in org.apache.commons.io.input">ProxyReader</a></dt>
-<dd>
-<div class="block">Invokes the delegate's <code>read(CharBuffer)</code> method.</div>
-</dd>
-<dt><span class="strong"><a href="./org/apache/commons/io/input/ReaderInputStream.html#read(byte[], int, int)">read(byte[], int, int)</a></span> - Method in class org.apache.commons.io.input.<a href="./org/apache/commons/io/input/ReaderInputStream.html" title="class in org.apache.commons.io.input">ReaderInputStream</a></dt>
-<dd>
-<div class="block">Read the specified number of bytes into an array.</div>
-</dd>
-<dt><span class="strong"><a href="./org/apache/commons/io/input/ReaderInputStream.html#read(byte[])">read(byte[])</a></span> - Method in class org.apache.commons.io.input.<a href="./org/apache/commons/io/input/ReaderInputStream.html" title="class in org.apache.commons.io.input">ReaderInputStream</a></dt>
-<dd>
-<div class="block">Read the specified number of bytes into an array.</div>
-</dd>
-<dt><span class="strong"><a href="./org/apache/commons/io/input/ReaderInputStream.html#read()">read()</a></span> - Method in class org.apache.commons.io.input.<a href="./org/apache/commons/io/input/ReaderInputStream.html" title="class in org.apache.commons.io.input">ReaderInputStream</a></dt>
-<dd>
-<div class="block">Read a single byte.</div>
-</dd>
-<dt><span class="strong"><a href="./org/apache/commons/io/input/TeeInputStream.html#read()">read()</a></span> - Method in class org.apache.commons.io.input.<a href="./org/apache/commons/io/input/TeeInputStream.html" title="class in org.apache.commons.io.input">TeeInputStream</a></dt>
-<dd>
-<div class="block">Reads a single byte from the proxied input stream and writes it to
- the associated output stream.</div>
-</dd>
-<dt><span class="strong"><a href="./org/apache/commons/io/input/TeeInputStream.html#read(byte[], int, int)">read(byte[], int, int)</a></span> - Method in class org.apache.commons.io.input.<a href="./org/apache/commons/io/input/TeeInputStream.html" title="class in org.apache.commons.io.input">TeeInputStream</a></dt>
-<dd>
-<div class="block">Reads bytes from the proxied input stream and writes the read bytes
- to the associated output stream.</div>
-</dd>
-<dt><span class="strong"><a href="./org/apache/commons/io/input/TeeInputStream.html#read(byte[])">read(byte[])</a></span> - Method in class org.apache.commons.io.input.<a href="./org/apache/commons/io/input/TeeInputStream.html" title="class in org.apache.commons.io.input">TeeInputStream</a></dt>
-<dd>
-<div class="block">Reads bytes from the proxied input stream and writes the read bytes
- to the associated output stream.</div>
-</dd>
-<dt><span class="strong"><a href="./org/apache/commons/io/input/XmlStreamReader.html#read(char[], int, int)">read(char[], int, int)</a></span> - Method in class org.apache.commons.io.input.<a href="./org/apache/commons/io/input/XmlStreamReader.html" title="class in org.apache.commons.io.input">XmlStreamReader</a></dt>
-<dd>
-<div class="block">Invokes the underlying reader's <code>read(char[], int, int)</code> method.</div>
-</dd>
-<dt><span class="strong"><a href="./org/apache/commons/io/IOUtils.html#read(java.io.Reader, char[], int, int)">read(Reader, char[], int, int)</a></span> - Static method in class org.apache.commons.io.<a href="./org/apache/commons/io/IOUtils.html" title="class in org.apache.commons.io">IOUtils</a></dt>
-<dd>
-<div class="block">Reads characters from an input character stream.</div>
-</dd>
-<dt><span class="strong"><a href="./org/apache/commons/io/IOUtils.html#read(java.io.Reader, char[])">read(Reader, char[])</a></span> - Static method in class org.apache.commons.io.<a href="./org/apache/commons/io/IOUtils.html" title="class in org.apache.commons.io">IOUtils</a></dt>
-<dd>
-<div class="block">Reads characters from an input character stream.</div>
-</dd>
-<dt><span class="strong"><a href="./org/apache/commons/io/IOUtils.html#read(java.io.InputStream, byte[], int, int)">read(InputStream, byte[], int, int)</a></span> - Static method in class org.apache.commons.io.<a href="./org/apache/commons/io/IOUtils.html" title="class in org.apache.commons.io">IOUtils</a></dt>
-<dd>
-<div class="block">Reads bytes from an input stream.</div>
-</dd>
-<dt><span class="strong"><a href="./org/apache/commons/io/IOUtils.html#read(java.io.InputStream, byte[])">read(InputStream, byte[])</a></span> - Static method in class org.apache.commons.io.<a href="./org/apache/commons/io/IOUtils.html" title="class in org.apache.commons.io">IOUtils</a></dt>
-<dd>
-<div class="block">Reads bytes from an input stream.</div>
-</dd>
-<dt><span class="strong"><a href="./org/apache/commons/io/IOUtils.html#read(java.nio.channels.ReadableByteChannel, java.nio.ByteBuffer)">read(ReadableByteChannel, ByteBuffer)</a></span> - Static method in class org.apache.commons.io.<a href="./org/apache/commons/io/IOUtils.html" title="class in org.apache.commons.io">IOUtils</a></dt>
-<dd>
-<div class="block">Reads bytes from a ReadableByteChannel.</div>
-</dd>
-<dt><span class="strong"><a href="./org/apache/commons/io/filefilter/CanReadFileFilter.html#READ_ONLY">READ_ONLY</a></span> - Static variable in class org.apache.commons.io.filefilter.<a href="./org/apache/commons/io/filefilter/CanReadFileFilter.html" title="class in org.apache.commons.io.filefilter">CanReadFileFilter</a></dt>
-<dd>
-<div class="block">Singleton instance of <i>read-only</i> filter</div>
-</dd>
-<dt><span class="strong"><a href="./org/apache/commons/io/input/SwappedDataInputStream.html#readBoolean()">readBoolean()</a></span> - Method in class org.apache.commons.io.input.<a href="./org/apache/commons/io/input/SwappedDataInputStream.html" title="class in org.apache.commons.io.input">SwappedDataInputStream</a></dt>
-<dd>
-<div class="block">Return <code><a href="./org/apache/commons/io/input/SwappedDataInputStream.html#readByte()"><code>SwappedDataInputStream.readByte()</code></a> != 0</code></div>
-</dd>
-<dt><span class="strong"><a href="./org/apache/commons/io/input/SwappedDataInputStream.html#readByte()">readByte()</a></span> - Method in class org.apache.commons.io.input.<a href="./org/apache/commons/io/input/SwappedDataInputStream.html" title="class in org.apache.commons.io.input">SwappedDataInputStream</a></dt>
-<dd>
-<div class="block">Invokes the delegate's <code>read()</code> method.</div>
-</dd>
-<dt><span class="strong"><a href="./org/apache/commons/io/input/SwappedDataInputStream.html#readChar()">readChar()</a></span> - Method in class org.apache.commons.io.input.<a href="./org/apache/commons/io/input/SwappedDataInputStream.html" title="class in org.apache.commons.io.input">SwappedDataInputStream</a></dt>
-<dd>
-<div class="block">Reads a character delegating to <a href="./org/apache/commons/io/input/SwappedDataInputStream.html#readShort()"><code>SwappedDataInputStream.readShort()</code></a>.</div>
-</dd>
-<dt><span class="strong"><a href="./org/apache/commons/io/input/SwappedDataInputStream.html#readDouble()">readDouble()</a></span> - Method in class org.apache.commons.io.input.<a href="./org/apache/commons/io/input/SwappedDataInputStream.html" title="class in org.apache.commons.io.input">SwappedDataInputStream</a></dt>
-<dd>
-<div class="block">Delegates to <a href="./org/apache/commons/io/EndianUtils.html#readSwappedDouble(java.io.InputStream)"><code>EndianUtils.readSwappedDouble(InputStream)</code></a>.</div>
-</dd>
-<dt><a href="./org/apache/commons/io/input/ReaderInputStream.html" title="class in org.apache.commons.io.input"><span class="strong">ReaderInputStream</span></a> - Class in <a href="./org/apache/commons/io/input/package-summary.html">org.apache.commons.io.input</a></dt>
-<dd>
-<div class="block"><a href="http://download.oracle.com/javase/6/docs/api/java/io/InputStream.html?is-external=true" title="class or interface in java.io"><code>InputStream</code></a> implementation that reads a character stream from a <a href="http://download.oracle.com/javase/6/docs/api/java/io/Reader.html?is-external=true" title="class or interface in java.io"><code>Reader</code></a>
- and transforms it to a byte stream using a specified charset encoding.</div>
-</dd>
-<dt><span class="strong"><a href="./org/apache/commons/io/input/ReaderInputStream.html#ReaderInputStream(java.io.Reader, java.nio.charset.CharsetEncoder)">ReaderInputStream(Reader, CharsetEncoder)</a></span> - Constructor for class org.apache.commons.io.input.<a href="./org/apache/commons/io/input/ReaderInputStream.html" title="class in org.apache.commons.io.input">ReaderInputStream</a></dt>
-<dd>
-<div class="block">Construct a new <a href="./org/apache/commons/io/input/ReaderInputStream.html" title="class in org.apache.commons.io.input"><code>ReaderInputStream</code></a>.</div>
-</dd>
-<dt><span class="strong"><a href="./org/apache/commons/io/input/ReaderInputStream.html#ReaderInputStream(java.io.Reader, java.nio.charset.CharsetEncoder, int)">ReaderInputStream(Reader, CharsetEncoder, int)</a></span> - Constructor for class org.apache.commons.io.input.<a href="./org/apache/commons/io/input/ReaderInputStream.html" title="class in org.apache.commons.io.input">ReaderInputStream</a></dt>
-<dd>
-<div class="block">Construct a new <a href="./org/apache/commons/io/input/ReaderInputStream.html" title="class in org.apache.commons.io.input"><code>ReaderInputStream</code></a>.</div>
-</dd>
-<dt><span class="strong"><a href="./org/apache/commons/io/input/ReaderInputStream.html#ReaderInputStream(java.io.Reader, java.nio.charset.Charset, int)">ReaderInputStream(Reader, Charset, int)</a></span> - Constructor for class org.apache.commons.io.input.<a href="./org/apache/commons/io/input/ReaderInputStream.html" title="class in org.apache.commons.io.input">ReaderInputStream</a></dt>
-<dd>
-<div class="block">Construct a new <a href="./org/apache/commons/io/input/ReaderInputStream.html" title="class in org.apache.commons.io.input"><code>ReaderInputStream</code></a>.</div>
-</dd>
-<dt><span class="strong"><a href="./org/apache/commons/io/input/ReaderInputStream.html#ReaderInputStream(java.io.Reader, java.nio.charset.Charset)">ReaderInputStream(Reader, Charset)</a></span> - Constructor for class org.apache.commons.io.input.<a href="./org/apache/commons/io/input/ReaderInputStream.html" title="class in org.apache.commons.io.input">ReaderInputStream</a></dt>
-<dd>
-<div class="block">Construct a new <a href="./org/apache/commons/io/input/ReaderInputStream.html" title="class in org.apache.commons.io.input"><code>ReaderInputStream</code></a> with a default input buffer size of
- 1024 characters.</div>
-</dd>
-<dt><span class="strong"><a href="./org/apache/commons/io/input/ReaderInputStream.html#ReaderInputStream(java.io.Reader, java.lang.String, int)">ReaderInputStream(Reader, String, int)</a></span> - Constructor for class org.apache.commons.io.input.<a href="./org/apache/commons/io/input/ReaderInputStream.html" title="class in org.apache.commons.io.input">ReaderInputStream</a></dt>
-<dd>
-<div class="block">Construct a new <a href="./org/apache/commons/io/input/ReaderInputStream.html" title="class in org.apache.commons.io.input"><code>ReaderInputStream</code></a>.</div>
-</dd>
-<dt><span class="strong"><a href="./org/apache/commons/io/input/ReaderInputStream.html#ReaderInputStream(java.io.Reader, java.lang.String)">ReaderInputStream(Reader, String)</a></span> - Constructor for class org.apache.commons.io.input.<a href="./org/apache/commons/io/input/ReaderInputStream.html" title="class in org.apache.commons.io.input">ReaderInputStream</a></dt>
-<dd>
-<div class="block">Construct a new <a href="./org/apache/commons/io/input/ReaderInputStream.html" title="class in org.apache.commons.io.input"><code>ReaderInputStream</code></a> with a default input buffer size of
- 1024 characters.</div>
-</dd>
-<dt><span class="strong"><a href="./org/apache/commons/io/input/ReaderInputStream.html#ReaderInputStream(java.io.Reader)">ReaderInputStream(Reader)</a></span> - Constructor for class org.apache.commons.io.input.<a href="./org/apache/commons/io/input/ReaderInputStream.html" title="class in org.apache.commons.io.input">ReaderInputStream</a></dt>
-<dd>
-<div class="block"><span class="strong">Deprecated.</span>
-<div class="block"><i>2.5 use <a href="./org/apache/commons/io/input/ReaderInputStream.html#ReaderInputStream(java.io.Reader, java.nio.charset.Charset)"><code>ReaderInputStream.ReaderInputStream(Reader, Charset)</code></a> instead</i></div>
-</div>
-</dd>
-<dt><span class="strong"><a href="./org/apache/commons/io/FileUtils.html#readFileToByteArray(java.io.File)">readFileToByteArray(File)</a></span> - Static method in class org.apache.commons.io.<a href="./org/apache/commons/io/FileUtils.html" title="class in org.apache.commons.io">FileUtils</a></dt>
-<dd>
-<div class="block">Reads the contents of a file into a byte array.</div>
-</dd>
-<dt><span class="strong"><a href="./org/apache/commons/io/FileUtils.html#readFileToString(java.io.File, java.nio.charset.Charset)">readFileToString(File, Charset)</a></span> - Static method in class org.apache.commons.io.<a href="./org/apache/commons/io/FileUtils.html" title="class in org.apache.commons.io">FileUtils</a></dt>
-<dd>
-<div class="block">Reads the contents of a file into a String.</div>
-</dd>
-<dt><span class="strong"><a href="./org/apache/commons/io/FileUtils.html#readFileToString(java.io.File, java.lang.String)">readFileToString(File, String)</a></span> - Static method in class org.apache.commons.io.<a href="./org/apache/commons/io/FileUtils.html" title="class in org.apache.commons.io">FileUtils</a></dt>
-<dd>
-<div class="block">Reads the contents of a file into a String.</div>
-</dd>
-<dt><span class="strong"><a href="./org/apache/commons/io/FileUtils.html#readFileToString(java.io.File)">readFileToString(File)</a></span> - Static method in class org.apache.commons.io.<a href="./org/apache/commons/io/FileUtils.html" title="class in org.apache.commons.io">FileUtils</a></dt>
-<dd>
-<div class="block"><span class="strong">Deprecated.</span>
-<div class="block"><i>2.5 use <a href="./org/apache/commons/io/FileUtils.html#readFileToString(java.io.File, java.nio.charset.Charset)"><code>FileUtils.readFileToString(File, Charset)</code></a> instead</i></div>
-</div>
-</dd>
-<dt><span class="strong"><a href="./org/apache/commons/io/input/SwappedDataInputStream.html#readFloat()">readFloat()</a></span> - Method in class org.apache.commons.io.input.<a href="./org/apache/commons/io/input/SwappedDataInputStream.html" title="class in org.apache.commons.io.input">SwappedDataInputStream</a></dt>
-<dd>
-<div class="block">Delegates to <a href="./org/apache/commons/io/EndianUtils.html#readSwappedFloat(java.io.InputStream)"><code>EndianUtils.readSwappedFloat(InputStream)</code></a>.</div>
-</dd>
-<dt><span class="strong"><a href="./org/apache/commons/io/input/SwappedDataInputStream.html#readFully(byte[])">readFully(byte[])</a></span> - Method in class org.apache.commons.io.input.<a href="./org/apache/commons/io/input/SwappedDataInputStream.html" title="class in org.apache.commons.io.input">SwappedDataInputStream</a></dt>
-<dd>
-<div class="block">Invokes the delegate's <code>read(byte[] data, int, int)</code> method.</div>
-</dd>
-<dt><span class="strong"><a href="./org/apache/commons/io/input/SwappedDataInputStream.html#readFully(byte[], int, int)">readFully(byte[], int, int)</a></span> - Method in class org.apache.commons.io.input.<a href="./org/apache/commons/io/input/SwappedDataInputStream.html" title="class in org.apache.commons.io.input">SwappedDataInputStream</a></dt>
-<dd>
-<div class="block">Invokes the delegate's <code>read(byte[] data, int, int)</code> method.</div>
-</dd>
-<dt><span class="strong"><a href="./org/apache/commons/io/IOUtils.html#readFully(java.io.Reader, char[], int, int)">readFully(Reader, char[], int, int)</a></span> - Static method in class org.apache.commons.io.<a href="./org/apache/commons/io/IOUtils.html" title="class in org.apache.commons.io">IOUtils</a></dt>
-<dd>
-<div class="block">Reads the requested number of characters or fail if there are not enough left.</div>
-</dd>
-<dt><span class="strong"><a href="./org/apache/commons/io/IOUtils.html#readFully(java.io.Reader, char[])">readFully(Reader, char[])</a></span> - Static method in class org.apache.commons.io.<a href="./org/apache/commons/io/IOUtils.html" title="class in org.apache.commons.io">IOUtils</a></dt>
-<dd>
-<div class="block">Reads the requested number of characters or fail if there are not enough left.</div>
-</dd>
-<dt><span class="strong"><a href="./org/apache/commons/io/IOUtils.html#readFully(java.io.InputStream, byte[], int, int)">readFully(InputStream, byte[], int, int)</a></span> - Static method in class org.apache.commons.io.<a href="./org/apache/commons/io/IOUtils.html" title="class in org.apache.commons.io">IOUtils</a></dt>
-<dd>
-<div class="block">Reads the requested number of bytes or fail if there are not enough left.</div>
-</dd>
-<dt><span class="strong"><a href="./org/apache/commons/io/IOUtils.html#readFully(java.io.InputStream, byte[])">readFully(InputStream, byte[])</a></span> - Static method in class org.apache.commons.io.<a href="./org/apache/commons/io/IOUtils.html" title="class in org.apache.commons.io">IOUtils</a></dt>
-<dd>
-<div class="block">Reads the requested number of bytes or fail if there are not enough left.</div>
-</dd>
-<dt><span class="strong"><a href="./org/apache/commons/io/IOUtils.html#readFully(java.nio.channels.ReadableByteChannel, java.nio.ByteBuffer)">readFully(ReadableByteChannel, ByteBuffer)</a></span> - Static method in class org.apache.commons.io.<a href="./org/apache/commons/io/IOUtils.html" title="class in org.apache.commons.io">IOUtils</a></dt>
-<dd>
-<div class="block">Reads the requested number of bytes or fail if there are not enough left.</div>
-</dd>
-<dt><span class="strong"><a href="./org/apache/commons/io/input/SwappedDataInputStream.html#readInt()">readInt()</a></span> - Method in class org.apache.commons.io.input.<a href="./org/apache/commons/io/input/SwappedDataInputStream.html" title="class in org.apache.commons.io.input">SwappedDataInputStream</a></dt>
-<dd>
-<div class="block">Delegates to <a href="./org/apache/commons/io/EndianUtils.html#readSwappedInteger(java.io.InputStream)"><code>EndianUtils.readSwappedInteger(InputStream)</code></a>.</div>
-</dd>
-<dt><span class="strong"><a href="./org/apache/commons/io/input/ReversedLinesFileReader.html#readLine()">readLine()</a></span> - Method in class org.apache.commons.io.input.<a href="./org/apache/commons/io/input/ReversedLinesFileReader.html" title="class in org.apache.commons.io.input">ReversedLinesFileReader</a></dt>
-<dd>
-<div class="block">Returns the lines of the file from bottom to top.</div>
-</dd>
-<dt><span class="strong"><a href="./org/apache/commons/io/input/SwappedDataInputStream.html#readLine()">readLine()</a></span> - Method in class org.apache.commons.io.input.<a href="./org/apache/commons/io/input/SwappedDataInputStream.html" title="class in org.apache.commons.io.input">SwappedDataInputStream</a></dt>
-<dd>
-<div class="block">Not currently supported - throws <a href="http://download.oracle.com/javase/6/docs/api/java/lang/UnsupportedOperationException.html?is-external=true" title="class or interface in java.lang"><code>UnsupportedOperationException</code></a>.</div>
-</dd>
-<dt><span class="strong"><a href="./org/apache/commons/io/FileUtils.html#readLines(java.io.File, java.nio.charset.Charset)">readLines(File, Charset)</a></span> - Static method in class org.apache.commons.io.<a href="./org/apache/commons/io/FileUtils.html" title="class in org.apache.commons.io">FileUtils</a></dt>
-<dd>
-<div class="block">Reads the contents of a file line by line to a List of Strings.</div>
-</dd>
-<dt><span class="strong"><a href="./org/apache/commons/io/FileUtils.html#readLines(java.io.File, java.lang.String)">readLines(File, String)</a></span> - Static method in class org.apache.commons.io.<a href="./org/apache/commons/io/FileUtils.html" title="class in org.apache.commons.io">FileUtils</a></dt>
-<dd>
-<div class="block">Reads the contents of a file line by line to a List of Strings.</div>
-</dd>
-<dt><span class="strong"><a href="./org/apache/commons/io/FileUtils.html#readLines(java.io.File)">readLines(File)</a></span> - Static method in class org.apache.commons.io.<a href="./org/apache/commons/io/FileUtils.html" title="class in org.apache.commons.io">FileUtils</a></dt>
-<dd>
-<div class="block"><span class="strong">Deprecated.</span>
-<div class="block"><i>2.5 use <a href="./org/apache/commons/io/FileUtils.html#readLines(java.io.File, java.nio.charset.Charset)"><code>FileUtils.readLines(File, Charset)</code></a> instead</i></div>
-</div>
-</dd>
-<dt><span class="strong"><a href="./org/apache/commons/io/IOUtils.html#readLines(java.io.InputStream)">readLines(InputStream)</a></span> - Static method in class org.apache.commons.io.<a href="./org/apache/commons/io/IOUtils.html" title="class in org.apache.commons.io">IOUtils</a></dt>
-<dd>
-<div class="block"><span class="strong">Deprecated.</span>
-<div class="block"><i>2.5 use <a href="./org/apache/commons/io/IOUtils.html#readLines(java.io.InputStream, java.nio.charset.Charset)"><code>IOUtils.readLines(InputStream, Charset)</code></a> instead</i></div>
-</div>
-</dd>
-<dt><span class="strong"><a href="./org/apache/commons/io/IOUtils.html#readLines(java.io.InputStream, java.nio.charset.Charset)">readLines(InputStream, Charset)</a></span> - Static method in class org.apache.commons.io.<a href="./org/apache/commons/io/IOUtils.html" title="class in org.apache.commons.io">IOUtils</a></dt>
-<dd>
-<div class="block">Gets the contents of an <code>InputStream</code> as a list of Strings,
- one entry per line, using the specified character encoding.</div>
-</dd>
-<dt><span class="strong"><a href="./org/apache/commons/io/IOUtils.html#readLines(java.io.InputStream, java.lang.String)">readLines(InputStream, String)</a></span> - Static method in class org.apache.commons.io.<a href="./org/apache/commons/io/IOUtils.html" title="class in org.apache.commons.io">IOUtils</a></dt>
-<dd>
-<div class="block">Gets the contents of an <code>InputStream</code> as a list of Strings,
- one entry per line, using the specified character encoding.</div>
-</dd>
-<dt><span class="strong"><a href="./org/apache/commons/io/IOUtils.html#readLines(java.io.Reader)">readLines(Reader)</a></span> - Static method in class org.apache.commons.io.<a href="./org/apache/commons/io/IOUtils.html" title="class in org.apache.commons.io">IOUtils</a></dt>
-<dd>
-<div class="block">Gets the contents of a <code>Reader</code> as a list of Strings,
- one entry per line.</div>
-</dd>
-<dt><span class="strong"><a href="./org/apache/commons/io/input/SwappedDataInputStream.html#readLong()">readLong()</a></span> - Method in class org.apache.commons.io.input.<a href="./org/apache/commons/io/input/SwappedDataInputStream.html" title="class in org.apache.commons.io.input">SwappedDataInputStream</a></dt>
-<dd>
-<div class="block">Delegates to <a href="./org/apache/commons/io/EndianUtils.html#readSwappedLong(java.io.InputStream)"><code>EndianUtils.readSwappedLong(InputStream)</code></a>.</div>
-</dd>
-<dt><span class="strong"><a href="./org/apache/commons/io/input/SwappedDataInputStream.html#readShort()">readShort()</a></span> - Method in class org.apache.commons.io.input.<a href="./org/apache/commons/io/input/SwappedDataInputStream.html" title="class in org.apache.commons.io.input">SwappedDataInputStream</a></dt>
-<dd>
-<div class="block">Delegates to <a href="./org/apache/commons/io/EndianUtils.html#readSwappedShort(java.io.InputStream)"><code>EndianUtils.readSwappedShort(InputStream)</code></a>.</div>
-</dd>
-<dt><span class="strong"><a href="./org/apache/commons/io/EndianUtils.html#readSwappedDouble(byte[], int)">readSwappedDouble(byte[], int)</a></span> - Static method in class org.apache.commons.io.<a href="./org/apache/commons/io/EndianUtils.html" title="class in org.apache.commons.io">EndianUtils</a></dt>
-<dd>
-<div class="block">Reads a "double" value from a byte array at a given offset.</div>
-</dd>
-<dt><span class="strong"><a href="./org/apache/commons/io/EndianUtils.html#readSwappedDouble(java.io.InputStream)">readSwappedDouble(InputStream)</a></span> - Static method in class org.apache.commons.io.<a href="./org/apache/commons/io/EndianUtils.html" title="class in org.apache.commons.io">EndianUtils</a></dt>
-<dd>
-<div class="block">Reads a "double" value from an InputStream.</div>
-</dd>
-<dt><span class="strong"><a href="./org/apache/commons/io/EndianUtils.html#readSwappedFloat(byte[], int)">readSwappedFloat(byte[], int)</a></span> - Static method in class org.apache.commons.io.<a href="./org/apache/commons/io/EndianUtils.html" title="class in org.apache.commons.io">EndianUtils</a></dt>
-<dd>
-<div class="block">Reads a "float" value from a byte array at a given offset.</div>
-</dd>
-<dt><span class="strong"><a href="./org/apache/commons/io/EndianUtils.html#readSwappedFloat(java.io.InputStream)">readSwappedFloat(InputStream)</a></span> - Static method in class org.apache.commons.io.<a href="./org/apache/commons/io/EndianUtils.html" title="class in org.apache.commons.io">EndianUtils</a></dt>
-<dd>
-<div class="block">Reads a "float" value from an InputStream.</div>
-</dd>
-<dt><span class="strong"><a href="./org/apache/commons/io/EndianUtils.html#readSwappedInteger(byte[], int)">readSwappedInteger(byte[], int)</a></span> - Static method in class org.apache.commons.io.<a href="./org/apache/commons/io/EndianUtils.html" title="class in org.apache.commons.io">EndianUtils</a></dt>
-<dd>
-<div class="block">Reads a "int" value from a byte array at a given offset.</div>
-</dd>
-<dt><span class="strong"><a href="./org/apache/commons/io/EndianUtils.html#readSwappedInteger(java.io.InputStream)">readSwappedInteger(InputStream)</a></span> - Static method in class org.apache.commons.io.<a href="./org/apache/commons/io/EndianUtils.html" title="class in org.apache.commons.io">EndianUtils</a></dt>
-<dd>
-<div class="block">Reads a "int" value from an InputStream.</div>
-</dd>
-<dt><span class="strong"><a href="./org/apache/commons/io/EndianUtils.html#readSwappedLong(byte[], int)">readSwappedLong(byte[], int)</a></span> - Static method in class org.apache.commons.io.<a href="./org/apache/commons/io/EndianUtils.html" title="class in org.apache.commons.io">EndianUtils</a></dt>
-<dd>
-<div class="block">Reads a "long" value from a byte array at a given offset.</div>
-</dd>
-<dt><span class="strong"><a href="./org/apache/commons/io/EndianUtils.html#readSwappedLong(java.io.InputStream)">readSwappedLong(InputStream)</a></span> - Static method in class org.apache.commons.io.<a href="./org/apache/commons/io/EndianUtils.html" title="class in org.apache.commons.io">EndianUtils</a></dt>
-<dd>
-<div class="block">Reads a "long" value from an InputStream.</div>
-</dd>
-<dt><span class="strong"><a href="./org/apache/commons/io/EndianUtils.html#readSwappedShort(byte[], int)">readSwappedShort(byte[], int)</a></span> - Static method in class org.apache.commons.io.<a href="./org/apache/commons/io/EndianUtils.html" title="class in org.apache.commons.io">EndianUtils</a></dt>
-<dd>
-<div class="block">Reads a "short" value from a byte array at a given offset.</div>
-</dd>
-<dt><span class="strong"><a href="./org/apache/commons/io/EndianUtils.html#readSwappedShort(java.io.InputStream)">readSwappedShort(InputStream)</a></span> - Static method in class org.apache.commons.io.<a href="./org/apache/commons/io/EndianUtils.html" title="class in org.apache.commons.io">EndianUtils</a></dt>
-<dd>
-<div class="block">Reads a "short" value from an InputStream.</div>
-</dd>
-<dt><span class="strong"><a href="./org/apache/commons/io/EndianUtils.html#readSwappedUnsignedInteger(byte[], int)">readSwappedUnsignedInteger(byte[], int)</a></span> - Static method in class org.apache.commons.io.<a href="./org/apache/commons/io/EndianUtils.html" title="class in org.apache.commons.io">EndianUtils</a></dt>
-<dd>
-<div class="block">Reads an unsigned integer (32-bit) value from a byte array at a given
- offset.</div>
-</dd>
-<dt><span class="strong"><a href="./org/apache/commons/io/EndianUtils.html#readSwappedUnsignedInteger(java.io.InputStream)">readSwappedUnsignedInteger(InputStream)</a></span> - Static method in class org.apache.commons.io.<a href="./org/apache/commons/io/EndianUtils.html" title="class in org.apache.commons.io">EndianUtils</a></dt>
-<dd>
-<div class="block">Reads a unsigned integer (32-bit) from an InputStream.</div>
-</dd>
-<dt><span class="strong"><a href="./org/apache/commons/io/EndianUtils.html#readSwappedUnsignedShort(byte[], int)">readSwappedUnsignedShort(byte[], int)</a></span> - Static method in class org.apache.commons.io.<a href="./org/apache/commons/io/EndianUtils.html" title="class in org.apache.commons.io">EndianUtils</a></dt>
-<dd>
-<div class="block">Reads an unsigned short (16-bit) value from a byte array at a given
- offset.</div>
-</dd>
-<dt><span class="strong"><a href="./org/apache/commons/io/EndianUtils.html#readSwappedUnsignedShort(java.io.InputStream)">readSwappedUnsignedShort(InputStream)</a></span> - Static method in class org.apache.commons.io.<a href="./org/apache/commons/io/EndianUtils.html" title="class in org.apache.commons.io">EndianUtils</a></dt>
-<dd>
-<div class="block">Reads a unsigned short (16-bit) from an InputStream.</div>
-</dd>
-<dt><span class="strong"><a href="./org/apache/commons/io/input/SwappedDataInputStream.html#readUnsignedByte()">readUnsignedByte()</a></span> - Method in class org.apache.commons.io.input.<a href="./org/apache/commons/io/input/SwappedDataInputStream.html" title="class in org.apache.commons.io.input">SwappedDataInputStream</a></dt>
-<dd>
-<div class="block">Invokes the delegate's <code>read()</code> method.</div>
-</dd>
-<dt><span class="strong"><a href="./org/apache/commons/io/input/SwappedDataInputStream.html#readUnsignedShort()">readUnsignedShort()</a></span> - Method in class org.apache.commons.io.input.<a href="./org/apache/commons/io/input/SwappedDataInputStream.html" title="class in org.apache.commons.io.input">SwappedDataInputStream</a></dt>
-<dd>
-<div class="block">Delegates to <a href="./org/apache/commons/io/EndianUtils.html#readSwappedUnsignedShort(java.io.InputStream)"><code>EndianUtils.readSwappedUnsignedShort(InputStream)</code></a>.</div>
-</dd>
-<dt><span class="strong"><a href="./org/apache/commons/io/input/SwappedDataInputStream.html#readUTF()">readUTF()</a></span> - Method in class org.apache.commons.io.input.<a href="./org/apache/commons/io/input/SwappedDataInputStream.html" title="class in org.apache.commons.io.input">SwappedDataInputStream</a></dt>
-<dd>
-<div class="block">Not currently supported - throws <a href="http://download.oracle.com/javase/6/docs/api/java/lang/UnsupportedOperationException.html?is-external=true" title="class or interface in java.lang"><code>UnsupportedOperationException</code></a>.</div>
-</dd>
-<dt><span class="strong"><a href="./org/apache/commons/io/input/ProxyReader.html#ready()">ready()</a></span> - Method in class org.apache.commons.io.input.<a href="./org/apache/commons/io/input/ProxyReader.html" title="class in org.apache.commons.io.input">ProxyReader</a></dt>
-<dd>
-<div class="block">Invokes the delegate's <code>ready()</code> method.</div>
-</dd>
-<dt><span class="strong"><a href="./org/apache/commons/io/monitor/FileEntry.html#refresh(java.io.File)">refresh(File)</a></span> - Method in class org.apache.commons.io.monitor.<a href="./org/apache/commons/io/monitor/FileEntry.html" title="class in org.apache.commons.io.monitor">FileEntry</a></dt>
-<dd>
-<div class="block">Refresh the attributes from the <a href="http://download.oracle.com/javase/6/docs/api/java/io/File.html?is-external=true" title="class or interface in java.io"><code>File</code></a>, indicating
- whether the file has changed.</div>
-</dd>
-<dt><a href="./org/apache/commons/io/filefilter/RegexFileFilter.html" title="class in org.apache.commons.io.filefilter"><span class="strong">RegexFileFilter</span></a> - Class in <a href="./org/apache/commons/io/filefilter/package-summary.html">org.apache.commons.io.filefilter</a></dt>
-<dd>
-<div class="block">Filters files using supplied regular expression(s).</div>
-</dd>
-<dt><span class="strong"><a href="./org/apache/commons/io/filefilter/RegexFileFilter.html#RegexFileFilter(java.lang.String)">RegexFileFilter(String)</a></span> - Constructor for class org.apache.commons.io.filefilter.<a href="./org/apache/commons/io/filefilter/RegexFileFilter.html" title="class in org.apache.commons.io.filefilter">RegexFileFilter</a></dt>
-<dd>
-<div class="block">Construct a new regular expression filter.</div>
-</dd>
-<dt><span class="strong"><a href="./org/apache/commons/io/filefilter/RegexFileFilter.html#RegexFileFilter(java.lang.String, org.apache.commons.io.IOCase)">RegexFileFilter(String, IOCase)</a></span> - Constructor for class org.apache.commons.io.filefilter.<a href="./org/apache/commons/io/filefilter/RegexFileFilter.html" title="class in org.apache.commons.io.filefilter">RegexFileFilter</a></dt>
-<dd>
-<div class="block">Construct a new regular expression filter with the specified flags case sensitivity.</div>
-</dd>
-<dt><span class="strong"><a href="./org/apache/commons/io/filefilter/RegexFileFilter.html#RegexFileFilter(java.lang.String, int)">RegexFileFilter(String, int)</a></span> - Constructor for class org.apache.commons.io.filefilter.<a href="./org/apache/commons/io/filefilter/RegexFileFilter.html" title="class in org.apache.commons.io.filefilter">RegexFileFilter</a></dt>
-<dd>
-<div class="block">Construct a new regular expression filter with the specified flags.</div>
-</dd>
-<dt><span class="strong"><a href="./org/apache/commons/io/filefilter/RegexFileFilter.html#RegexFileFilter(java.util.regex.Pattern)">RegexFileFilter(Pattern)</a></span> - Constructor for class org.apache.commons.io.filefilter.<a href="./org/apache/commons/io/filefilter/RegexFileFilter.html" title="class in org.apache.commons.io.filefilter">RegexFileFilter</a></dt>
-<dd>
-<div class="block">Construct a new regular expression filter for a compiled regular expression</div>
-</dd>
-<dt><span class="strong"><a href="./org/apache/commons/io/LineIterator.html#remove()">remove()</a></span> - Method in class org.apache.commons.io.<a href="./org/apache/commons/io/LineIterator.html" title="class in org.apache.commons.io">LineIterator</a></dt>
-<dd>
-<div class="block">Unsupported.</div>
-</dd>
-<dt><span class="strong"><a href="./org/apache/commons/io/FilenameUtils.html#removeExtension(java.lang.String)">removeExtension(String)</a></span> - Static method in class org.apache.commons.io.<a href="./org/apache/commons/io/FilenameUtils.html" title="class in org.apache.commons.io">FilenameUtils</a></dt>
-<dd>
-<div class="block">Removes the extension from a filename.</div>
-</dd>
-<dt><span class="strong"><a href="./org/apache/commons/io/filefilter/AndFileFilter.html#removeFileFilter(org.apache.commons.io.filefilter.IOFileFilter)">removeFileFilter(IOFileFilter)</a></span> - Method in class org.apache.commons.io.filefilter.<a href="./org/apache/commons/io/filefilter/AndFileFilter.html" title="class in org.apache.commons.io.filefilter">AndFileFilter</a></dt>
-<dd>
-<div class="block">Removes the specified file filter.</div>
-</dd>
-<dt><span class="strong"><a href="./org/apache/commons/io/filefilter/ConditionalFileFilter.html#removeFileFilter(org.apache.commons.io.filefilter.IOFileFilter)">removeFileFilter(IOFileFilter)</a></span> - Method in interface org.apache.commons.io.filefilter.<a href="./org/apache/commons/io/filefilter/ConditionalFileFilter.html" title="interface in org.apache.commons.io.filefilter">ConditionalFileFilter</a></dt>
-<dd>
-<div class="block">Removes the specified file filter.</div>
-</dd>
-<dt><span class="strong"><a href="./org/apache/commons/io/filefilter/OrFileFilter.html#removeFileFilter(org.apache.commons.io.filefilter.IOFileFilter)">removeFileFilter(IOFileFilter)</a></span> - Method in class org.apache.commons.io.filefilter.<a href="./org/apache/commons/io/filefilter/OrFileFilter.html" title="class in org.apache.commons.io.filefilter">OrFileFilter</a></dt>
-<dd>
-<div class="block">Removes the specified file filter.</div>
-</dd>
-<dt><span class="strong"><a href="./org/apache/commons/io/monitor/FileAlterationObserver.html#removeListener(org.apache.commons.io.monitor.FileAlterationListener)">removeListener(FileAlterationListener)</a></span> - Method in class org.apache.commons.io.monitor.<a href="./org/apache/commons/io/monitor/FileAlterationObserver.html" title="class in org.apache.commons.io.monitor">FileAlterationObserver</a></dt>
-<dd>
-<div class="block">Remove a file system listener.</div>
-</dd>
-<dt><span class="strong"><a href="./org/apache/commons/io/monitor/FileAlterationMonitor.html#removeObserver(org.apache.commons.io.monitor.FileAlterationObserver)">removeObserver(FileAlterationObserver)</a></span> - Method in class org.apache.commons.io.monitor.<a href="./org/apache/commons/io/monitor/FileAlterationMonitor.html" title="class in org.apache.commons.io.monitor">FileAlterationMonitor</a></dt>
-<dd>
-<div class="block">Remove a file system observer from this monitor.</div>
-</dd>
-<dt><span class="strong"><a href="./org/apache/commons/io/Charsets.html#requiredCharsets()">requiredCharsets()</a></span> - Static method in class org.apache.commons.io.<a href="./org/apache/commons/io/Charsets.html" title="class in org.apache.commons.io">Charsets</a></dt>
-<dd>
-<div class="block">Constructs a sorted map from canonical charset names to charset objects required of every implementation of the
- Java platform.</div>
-</dd>
-<dt><span class="strong"><a href="./org/apache/commons/io/input/BOMInputStream.html#reset()">reset()</a></span> - Method in class org.apache.commons.io.input.<a href="./org/apache/commons/io/input/BOMInputStream.html" title="class in org.apache.commons.io.input">BOMInputStream</a></dt>
-<dd>
-<div class="block">Invokes the delegate's <code>reset()</code> method.</div>
-</dd>
-<dt><span class="strong"><a href="./org/apache/commons/io/input/BoundedInputStream.html#reset()">reset()</a></span> - Method in class org.apache.commons.io.input.<a href="./org/apache/commons/io/input/BoundedInputStream.html" title="class in org.apache.commons.io.input">BoundedInputStream</a></dt>
-<dd>
-<div class="block">Invokes the delegate's <code>reset()</code> method.</div>
-</dd>
-<dt><span class="strong"><a href="./org/apache/commons/io/input/BrokenInputStream.html#reset()">reset()</a></span> - Method in class org.apache.commons.io.input.<a href="./org/apache/commons/io/input/BrokenInputStream.html" title="class in org.apache.commons.io.input">BrokenInputStream</a></dt>
-<dd>
-<div class="block">Throws the configured exception.</div>
-</dd>
-<dt><span class="strong"><a href="./org/apache/commons/io/input/CharSequenceInputStream.html#reset()">reset()</a></span> - Method in class org.apache.commons.io.input.<a href="./org/apache/commons/io/input/CharSequenceInputStream.html" title="class in org.apache.commons.io.input">CharSequenceInputStream</a></dt>
-<dd>&nbsp;</dd>
-<dt><span class="strong"><a href="./org/apache/commons/io/input/CharSequenceReader.html#reset()">reset()</a></span> - Method in class org.apache.commons.io.input.<a href="./org/apache/commons/io/input/CharSequenceReader.html" title="class in org.apache.commons.io.input">CharSequenceReader</a></dt>
-<dd>
-<div class="block">Reset the reader to the last marked position (or the beginning if
- mark has not been called).</div>
-</dd>
-<dt><span class="strong"><a href="./org/apache/commons/io/input/NullInputStream.html#reset()">reset()</a></span> - Method in class org.apache.commons.io.input.<a href="./org/apache/commons/io/input/NullInputStream.html" title="class in org.apache.commons.io.input">NullInputStream</a></dt>
-<dd>
-<div class="block">Reset the stream to the point when mark was last called.</div>
-</dd>
-<dt><span class="strong"><a href="./org/apache/commons/io/input/NullReader.html#reset()">reset()</a></span> - Method in class org.apache.commons.io.input.<a href="./org/apache/commons/io/input/NullReader.html" title="class in org.apache.commons.io.input">NullReader</a></dt>
-<dd>
-<div class="block">Reset the stream to the point when mark was last called.</div>
-</dd>
-<dt><span class="strong"><a href="./org/apache/commons/io/input/ProxyInputStream.html#reset()">reset()</a></span> - Method in class org.apache.commons.io.input.<a href="./org/apache/commons/io/input/ProxyInputStream.html" title="class in org.apache.commons.io.input">ProxyInputStream</a></dt>
-<dd>
-<div class="block">Invokes the delegate's <code>reset()</code> method.</div>
-</dd>
-<dt><span class="strong"><a href="./org/apache/commons/io/input/ProxyReader.html#reset()">reset()</a></span> - Method in class org.apache.commons.io.input.<a href="./org/apache/commons/io/input/ProxyReader.html" title="class in org.apache.commons.io.input">ProxyReader</a></dt>
-<dd>
-<div class="block">Invokes the delegate's <code>reset()</code> method.</div>
-</dd>
-<dt><span class="strong"><a href="./org/apache/commons/io/output/ByteArrayOutputStream.html#reset()">reset()</a></span> - Method in class org.apache.commons.io.output.<a href="./org/apache/commons/io/output/ByteArrayOutputStream.html" title="class in org.apache.commons.io.output">ByteArrayOutputStream</a></dt>
-<dd>&nbsp;</dd>
-<dt><span class="strong"><a href="./org/apache/commons/io/input/CountingInputStream.html#resetByteCount()">resetByteCount()</a></span> - Method in class org.apache.commons.io.input.<a href="./org/apache/commons/io/input/CountingInputStream.html" title="class in org.apache.commons.io.input">CountingInputStream</a></dt>
-<dd>
-<div class="block">Set the byte count back to 0.</div>
-</dd>
-<dt><span class="strong"><a href="./org/apache/commons/io/output/CountingOutputStream.html#resetByteCount()">resetByteCount()</a></span> - Method in class org.apache.commons.io.output.<a href="./org/apache/commons/io/output/CountingOutputStream.html" title="class in org.apache.commons.io.output">CountingOutputStream</a></dt>
-<dd>
-<div class="block">Set the byte count back to 0.</div>
-</dd>
-<dt><span class="strong"><a href="./org/apache/commons/io/output/ThresholdingOutputStream.html#resetByteCount()">resetByteCount()</a></span> - Method in class org.apache.commons.io.output.<a href="./org/apache/commons/io/output/ThresholdingOutputStream.html" title="class in org.apache.commons.io.output">ThresholdingOutputStream</a></dt>
-<dd>
-<div class="block">Resets the byteCount to zero.</div>
-</dd>
-<dt><span class="strong"><a href="./org/apache/commons/io/input/CountingInputStream.html#resetCount()">resetCount()</a></span> - Method in class org.apache.commons.io.input.<a href="./org/apache/commons/io/input/CountingInputStream.html" title="class in org.apache.commons.io.input">CountingInputStream</a></dt>
-<dd>
-<div class="block">Set the byte count back to 0.</div>
-</dd>
-<dt><span class="strong"><a href="./org/apache/commons/io/output/CountingOutputStream.html#resetCount()">resetCount()</a></span> - Method in class org.apache.commons.io.output.<a href="./org/apache/commons/io/output/CountingOutputStream.html" title="class in org.apache.commons.io.output">CountingOutputStream</a></dt>
-<dd>
-<div class="block">Set the byte count back to 0.</div>
-</dd>
-<dt><span class="strong"><a href="./org/apache/commons/io/input/ClassLoaderObjectInputStream.html#resolveClass(java.io.ObjectStreamClass)">resolveClass(ObjectStreamClass)</a></span> - Method in class org.apache.commons.io.input.<a href="./org/apache/commons/io/input/ClassLoaderObjectInputStream.html" title="class in org.apache.commons.io.input">ClassLoaderObjectInputStream</a></dt>
-<dd>
-<div class="block">Resolve a class specified by the descriptor using the
- specified ClassLoader or the super ClassLoader.</div>
-</dd>
-<dt><span class="strong"><a href="./org/apache/commons/io/input/ClassLoaderObjectInputStream.html#resolveProxyClass(java.lang.String[])">resolveProxyClass(String[])</a></span> - Method in class org.apache.commons.io.input.<a href="./org/apache/commons/io/input/ClassLoaderObjectInputStream.html" title="class in org.apache.commons.io.input">ClassLoaderObjectInputStream</a></dt>
-<dd>
-<div class="block">Create a proxy class that implements the specified interfaces using
- the specified ClassLoader or the super ClassLoader.</div>
-</dd>
-<dt><a href="./org/apache/commons/io/input/ReversedLinesFileReader.html" title="class in org.apache.commons.io.input"><span class="strong">ReversedLinesFileReader</span></a> - Class in <a href="./org/apache/commons/io/input/package-summary.html">org.apache.commons.io.input</a></dt>
-<dd>
-<div class="block">Reads lines in a file reversely (similar to a BufferedReader, but starting at
- the last line).</div>
-</dd>
-<dt><span class="strong"><a href="./org/apache/commons/io/input/ReversedLinesFileReader.html#ReversedLinesFileReader(java.io.File)">ReversedLinesFileReader(File)</a></span> - Constructor for class org.apache.commons.io.input.<a href="./org/apache/commons/io/input/ReversedLinesFileReader.html" title="class in org.apache.commons.io.input">ReversedLinesFileReader</a></dt>
-<dd>
-<div class="block"><span class="strong">Deprecated.</span>
-<div class="block"><i>2.5 use <a href="./org/apache/commons/io/input/ReversedLinesFileReader.html#ReversedLinesFileReader(java.io.File, java.nio.charset.Charset)"><code>ReversedLinesFileReader.ReversedLinesFileReader(File, Charset)</code></a> instead</i></div>
-</div>
-</dd>
-<dt><span class="strong"><a href="./org/apache/commons/io/input/ReversedLinesFileReader.html#ReversedLinesFileReader(java.io.File, java.nio.charset.Charset)">ReversedLinesFileReader(File, Charset)</a></span> - Constructor for class org.apache.commons.io.input.<a href="./org/apache/commons/io/input/ReversedLinesFileReader.html" title="class in org.apache.commons.io.input">ReversedLinesFileReader</a></dt>
-<dd>
-<div class="block">Creates a ReversedLinesFileReader with default block size of 4KB and the
- specified encoding.</div>
-</dd>
-<dt><span class="strong"><a href="./org/apache/commons/io/input/ReversedLinesFileReader.html#ReversedLinesFileReader(java.io.File, int, java.nio.charset.Charset)">ReversedLinesFileReader(File, int, Charset)</a></span> - Constructor for class org.apache.commons.io.input.<a href="./org/apache/commons/io/input/ReversedLinesFileReader.html" title="class in org.apache.commons.io.input">ReversedLinesFileReader</a></dt>
-<dd>
-<div class="block">Creates a ReversedLinesFileReader with the given block size and encoding.</div>
-</dd>
-<dt><span class="strong"><a href="./org/apache/commons/io/input/ReversedLinesFileReader.html#ReversedLinesFileReader(java.io.File, int, java.lang.String)">ReversedLinesFileReader(File, int, String)</a></span> - Constructor for class org.apache.commons.io.input.<a href="./org/apache/commons/io/input/ReversedLinesFileReader.html" title="class in org.apache.commons.io.input">ReversedLinesFileReader</a></dt>
-<dd>
-<div class="block">Creates a ReversedLinesFileReader with the given block size and encoding.</div>
-</dd>
-<dt><span class="strong"><a href="./org/apache/commons/io/input/Tailer.html#run()">run()</a></span> - Method in class org.apache.commons.io.input.<a href="./org/apache/commons/io/input/Tailer.html" title="class in org.apache.commons.io.input">Tailer</a></dt>
-<dd>
-<div class="block">Follows changes in the file, calling the TailerListener's handle method for each new line.</div>
-</dd>
-<dt><span class="strong"><a href="./org/apache/commons/io/monitor/FileAlterationMonitor.html#run()">run()</a></span> - Method in class org.apache.commons.io.monitor.<a href="./org/apache/commons/io/monitor/FileAlterationMonitor.html" title="class in org.apache.commons.io.monitor">FileAlterationMonitor</a></dt>
-<dd>
-<div class="block">Run.</div>
-</dd>
-</dl>
-<a name="_S_">
-<!--   -->
-</a>
-<h2 class="title">S</h2>
-<dl>
-<dt><span class="strong"><a href="./org/apache/commons/io/IOCase.html#SENSITIVE">SENSITIVE</a></span> - Static variable in class org.apache.commons.io.<a href="./org/apache/commons/io/IOCase.html" title="class in org.apache.commons.io">IOCase</a></dt>
-<dd>
-<div class="block">The constant for case sensitive regardless of operating system.</div>
-</dd>
-<dt><span class="strong"><a href="./org/apache/commons/io/FilenameUtils.html#separatorsToSystem(java.lang.String)">separatorsToSystem(String)</a></span> - Static method in class org.apache.commons.io.<a href="./org/apache/commons/io/FilenameUtils.html" title="class in org.apache.commons.io">FilenameUtils</a></dt>
-<dd>
-<div class="block">Converts all separators to the system separator.</div>
-</dd>
-<dt><span class="strong"><a href="./org/apache/commons/io/FilenameUtils.html#separatorsToUnix(java.lang.String)">separatorsToUnix(String)</a></span> - Static method in class org.apache.commons.io.<a href="./org/apache/commons/io/FilenameUtils.html" title="class in org.apache.commons.io">FilenameUtils</a></dt>
-<dd>
-<div class="block">Converts all separators to the Unix separator of forward slash.</div>
-</dd>
-<dt><span class="strong"><a href="./org/apache/commons/io/FilenameUtils.html#separatorsToWindows(java.lang.String)">separatorsToWindows(String)</a></span> - Static method in class org.apache.commons.io.<a href="./org/apache/commons/io/FilenameUtils.html" title="class in org.apache.commons.io">FilenameUtils</a></dt>
-<dd>
-<div class="block">Converts all separators to the Windows separator of backslash.</div>
-</dd>
-<dt><span class="strong"><a href="./org/apache/commons/io/monitor/FileEntry.html#setChildren(org.apache.commons.io.monitor.FileEntry[])">setChildren(FileEntry[])</a></span> - Method in class org.apache.commons.io.monitor.<a href="./org/apache/commons/io/monitor/FileEntry.html" title="class in org.apache.commons.io.monitor">FileEntry</a></dt>
-<dd>
-<div class="block">Set the directory's files.</div>
-</dd>
-<dt><span class="strong"><a href="./org/apache/commons/io/monitor/FileEntry.html#setDirectory(boolean)">setDirectory(boolean)</a></span> - Method in class org.apache.commons.io.monitor.<a href="./org/apache/commons/io/monitor/FileEntry.html" title="class in org.apache.commons.io.monitor">FileEntry</a></dt>
-<dd>
-<div class="block">Set whether the file is a directory or not.</div>
-</dd>
-<dt><span class="strong"><a href="./org/apache/commons/io/monitor/FileEntry.html#setExists(boolean)">setExists(boolean)</a></span> - Method in class org.apache.commons.io.monitor.<a href="./org/apache/commons/io/monitor/FileEntry.html" title="class in org.apache.commons.io.monitor">FileEntry</a></dt>
-<dd>
-<div class="block">Set whether the file existed the last time it
- was checked.</div>
-</dd>
-<dt><span class="strong"><a href="./org/apache/commons/io/filefilter/AndFileFilter.html#setFileFilters(java.util.List)">setFileFilters(List&lt;IOFileFilter&gt;)</a></span> - Method in class org.apache.commons.io.filefilter.<a href="./org/apache/commons/io/filefilter/AndFileFilter.html" title="class in org.apache.commons.io.filefilter">AndFileFilter</a></dt>
-<dd>
-<div class="block">Sets the list of file filters, replacing any previously configured
- file filters on this filter.</div>
-</dd>
-<dt><span class="strong"><a href="./org/apache/commons/io/filefilter/ConditionalFileFilter.html#setFileFilters(java.util.List)">setFileFilters(List&lt;IOFileFilter&gt;)</a></span> - Method in interface org.apache.commons.io.filefilter.<a href="./org/apache/commons/io/filefilter/ConditionalFileFilter.html" title="interface in org.apache.commons.io.filefilter">ConditionalFileFilter</a></dt>
-<dd>
-<div class="block">Sets the list of file filters, replacing any previously configured
- file filters on this filter.</div>
-</dd>
-<dt><span class="strong"><a href="./org/apache/commons/io/filefilter/OrFileFilter.html#setFileFilters(java.util.List)">setFileFilters(List&lt;IOFileFilter&gt;)</a></span> - Method in class org.apache.commons.io.filefilter.<a href="./org/apache/commons/io/filefilter/OrFileFilter.html" title="class in org.apache.commons.io.filefilter">OrFileFilter</a></dt>
-<dd>
-<div class="block">Sets the list of file filters, replacing any previously configured
- file filters on this filter.</div>
-</dd>
-<dt><span class="strong"><a href="./org/apache/commons/io/monitor/FileEntry.html#setLastModified(long)">setLastModified(long)</a></span> - Method in class org.apache.commons.io.monitor.<a href="./org/apache/commons/io/monitor/FileEntry.html" title="class in org.apache.commons.io.monitor">FileEntry</a></dt>
-<dd>
-<div class="block">Return the last modified time from the last time it
- was checked.</div>
-</dd>
-<dt><span class="strong"><a href="./org/apache/commons/io/monitor/FileEntry.html#setLength(long)">setLength(long)</a></span> - Method in class org.apache.commons.io.monitor.<a href="./org/apache/commons/io/monitor/FileEntry.html" title="class in org.apache.commons.io.monitor">FileEntry</a></dt>
-<dd>
-<div class="block">Set the length.</div>
-</dd>
-<dt><span class="strong"><a href="./org/apache/commons/io/monitor/FileEntry.html#setName(java.lang.String)">setName(String)</a></span> - Method in class org.apache.commons.io.monitor.<a href="./org/apache/commons/io/monitor/FileEntry.html" title="class in org.apache.commons.io.monitor">FileEntry</a></dt>
-<dd>
-<div class="block">Set the file name.</div>
-</dd>
-<dt><span class="strong"><a href="./org/apache/commons/io/input/BoundedInputStream.html#setPropagateClose(boolean)">setPropagateClose(boolean)</a></span> - Method in class org.apache.commons.io.input.<a href="./org/apache/commons/io/input/BoundedInputStream.html" title="class in org.apache.commons.io.input">BoundedInputStream</a></dt>
-<dd>
-<div class="block">Set whether the <a href="./org/apache/commons/io/input/BoundedInputStream.html#close()"><code>BoundedInputStream.close()</code></a> method
- should propagate to the underling <a href="http://download.oracle.com/javase/6/docs/api/java/io/InputStream.html?is-external=true" title="class or interface in java.io"><code>InputStream</code></a>.</div>
-</dd>
-<dt><span class="strong"><a href="./org/apache/commons/io/monitor/FileAlterationMonitor.html#setThreadFactory(java.util.concurrent.ThreadFactory)">setThreadFactory(ThreadFactory)</a></span> - Method in class org.apache.commons.io.monitor.<a href="./org/apache/commons/io/monitor/FileAlterationMonitor.html" title="class in org.apache.commons.io.monitor">FileAlterationMonitor</a></dt>
-<dd>
-<div class="block">Set the thread factory.</div>
-</dd>
-<dt><span class="strong"><a href="./org/apache/commons/io/output/ByteArrayOutputStream.html#size()">size()</a></span> - Method in class org.apache.commons.io.output.<a href="./org/apache/commons/io/output/ByteArrayOutputStream.html" title="class in org.apache.commons.io.output">ByteArrayOutputStream</a></dt>
-<dd>
-<div class="block">Return the current size of the byte array.</div>
-</dd>
-<dt><span class="strong"><a href="./org/apache/commons/io/comparator/SizeFileComparator.html#SIZE_COMPARATOR">SIZE_COMPARATOR</a></span> - Static variable in class org.apache.commons.io.comparator.<a href="./org/apache/commons/io/comparator/SizeFileComparator.html" title="class in org.apache.commons.io.comparator">SizeFileComparator</a></dt>
-<dd>
-<div class="block">Size comparator instance - directories are treated as zero size</div>
-</dd>
-<dt><span class="strong"><a href="./org/apache/commons/io/comparator/SizeFileComparator.html#SIZE_REVERSE">SIZE_REVERSE</a></span> - Static variable in class org.apache.commons.io.comparator.<a href="./org/apache/commons/io/comparator/SizeFileComparator.html" title="class in org.apache.commons.io.comparator">SizeFileComparator</a></dt>
-<dd>
-<div class="block">Reverse size comparator instance - directories are treated as zero size</div>
-</dd>
-<dt><span class="strong"><a href="./org/apache/commons/io/comparator/SizeFileComparator.html#SIZE_SUMDIR_COMPARATOR">SIZE_SUMDIR_COMPARATOR</a></span> - Static variable in class org.apache.commons.io.comparator.<a href="./org/apache/commons/io/comparator/SizeFileComparator.html" title="class in org.apache.commons.io.comparator">SizeFileComparator</a></dt>
-<dd>
-<div class="block">Size comparator instance which sums the size of a directory's contents
- using <a href="./org/apache/commons/io/FileUtils.html#sizeOfDirectory(java.io.File)"><code>FileUtils.sizeOfDirectory(File)</code></a></div>
-</dd>
-<dt><span class="strong"><a href="./org/apache/commons/io/comparator/SizeFileComparator.html#SIZE_SUMDIR_REVERSE">SIZE_SUMDIR_REVERSE</a></span> - Static variable in class org.apache.commons.io.comparator.<a href="./org/apache/commons/io/comparator/SizeFileComparator.html" title="class in org.apache.commons.io.comparator">SizeFileComparator</a></dt>
-<dd>
-<div class="block">Reverse size comparator instance which sums the size of a directory's contents
- using <a href="./org/apache/commons/io/FileUtils.html#sizeOfDirectory(java.io.File)"><code>FileUtils.sizeOfDirectory(File)</code></a></div>
-</dd>
-<dt><a href="./org/apache/commons/io/comparator/SizeFileComparator.html" title="class in org.apache.commons.io.comparator"><span class="strong">SizeFileComparator</span></a> - Class in <a href="./org/apache/commons/io/comparator/package-summary.html">org.apache.commons.io.comparator</a></dt>
-<dd>
-<div class="block">Compare the <b>length/size</b> of two files for order (see
- <a href="http://download.oracle.com/javase/6/docs/api/java/io/File.html?is-external=true#length()" title="class or interface in java.io"><code>File.length()</code></a> and <a href="./org/apache/commons/io/FileUtils.html#sizeOfDirectory(java.io.File)"><code>FileUtils.sizeOfDirectory(File)</code></a>).</div>
-</dd>
-<dt><span class="strong"><a href="./org/apache/commons/io/comparator/SizeFileComparator.html#SizeFileComparator()">SizeFileComparator()</a></span> - Constructor for class org.apache.commons.io.comparator.<a href="./org/apache/commons/io/comparator/SizeFileComparator.html" title="class in org.apache.commons.io.comparator">SizeFileComparator</a></dt>
-<dd>
-<div class="block">Construct a file size comparator instance (directories treated as zero size).</div>
-</dd>
-<dt><span class="strong"><a href="./org/apache/commons/io/comparator/SizeFileComparator.html#SizeFileComparator(boolean)">SizeFileComparator(boolean)</a></span> - Constructor for class org.apache.commons.io.comparator.<a href="./org/apache/commons/io/comparator/SizeFileComparator.html" title="class in org.apache.commons.io.comparator">SizeFileComparator</a></dt>
-<dd>
-<div class="block">Construct a file size comparator instance specifying whether the size of
- the directory contents should be aggregated.</div>
-</dd>
-<dt><span class="strong"><a href="./org/apache/commons/io/filefilter/FileFilterUtils.html#sizeFileFilter(long)">sizeFileFilter(long)</a></span> - Static method in class org.apache.commons.io.filefilter.<a href="./org/apache/commons/io/filefilter/FileFilterUtils.html" title="class in org.apache.commons.io.filefilter">FileFilterUtils</a></dt>
-<dd>
-<div class="block">Returns a filter that returns true if the file is bigger than a certain size.</div>
-</dd>
-<dt><span class="strong"><a href="./org/apache/commons/io/filefilter/FileFilterUtils.html#sizeFileFilter(long, boolean)">sizeFileFilter(long, boolean)</a></span> - Static method in class org.apache.commons.io.filefilter.<a href="./org/apache/commons/io/filefilter/FileFilterUtils.html" title="class in org.apache.commons.io.filefilter">FileFilterUtils</a></dt>
-<dd>
-<div class="block">Returns a filter that filters based on file size.</div>
-</dd>
-<dt><a href="./org/apache/commons/io/filefilter/SizeFileFilter.html" title="class in org.apache.commons.io.filefilter"><span class="strong">SizeFileFilter</span></a> - Class in <a href="./org/apache/commons/io/filefilter/package-summary.html">org.apache.commons.io.filefilter</a></dt>
-<dd>
-<div class="block">Filters files based on size, can filter either smaller files or
- files equal to or larger than a given threshold.</div>
-</dd>
-<dt><span class="strong"><a href="./org/apache/commons/io/filefilter/SizeFileFilter.html#SizeFileFilter(long)">SizeFileFilter(long)</a></span> - Constructor for class org.apache.commons.io.filefilter.<a href="./org/apache/commons/io/filefilter/SizeFileFilter.html" title="class in org.apache.commons.io.filefilter">SizeFileFilter</a></dt>
-<dd>
-<div class="block">Constructs a new size file filter for files equal to or 
- larger than a certain size.</div>
-</dd>
-<dt><span class="strong"><a href="./org/apache/commons/io/filefilter/SizeFileFilter.html#SizeFileFilter(long, boolean)">SizeFileFilter(long, boolean)</a></span> - Constructor for class org.apache.commons.io.filefilter.<a href="./org/apache/commons/io/filefilter/SizeFileFilter.html" title="class in org.apache.commons.io.filefilter">SizeFileFilter</a></dt>
-<dd>
-<div class="block">Constructs a new size file filter for files based on a certain size
- threshold.</div>
-</dd>
-<dt><span class="strong"><a href="./org/apache/commons/io/FileUtils.html#sizeOf(java.io.File)">sizeOf(File)</a></span> - Static method in class org.apache.commons.io.<a href="./org/apache/commons/io/FileUtils.html" title="class in org.apache.commons.io">FileUtils</a></dt>
-<dd>
-<div class="block">Returns the size of the specified file or directory.</div>
-</dd>
-<dt><span class="strong"><a href="./org/apache/commons/io/FileUtils.html#sizeOfAsBigInteger(java.io.File)">sizeOfAsBigInteger(File)</a></span> - Static method in class org.apache.commons.io.<a href="./org/apache/commons/io/FileUtils.html" title="class in org.apache.commons.io">FileUtils</a></dt>
-<dd>
-<div class="block">Returns the size of the specified file or directory.</div>
-</dd>
-<dt><span class="strong"><a href="./org/apache/commons/io/FileUtils.html#sizeOfDirectory(java.io.File)">sizeOfDirectory(File)</a></span> - Static method in class org.apache.commons.io.<a href="./org/apache/commons/io/FileUtils.html" title="class in org.apache.commons.io">FileUtils</a></dt>
-<dd>
-<div class="block">Counts the size of a directory recursively (sum of the length of all files).</div>
-</dd>
-<dt><span class="strong"><a href="./org/apache/commons/io/FileUtils.html#sizeOfDirectoryAsBigInteger(java.io.File)">sizeOfDirectoryAsBigInteger(File)</a></span> - Static method in class org.apache.commons.io.<a href="./org/apache/commons/io/FileUtils.html" title="class in org.apache.commons.io">FileUtils</a></dt>
-<dd>
-<div class="block">Counts the size of a directory recursively (sum of the length of all files).</div>
-</dd>
-<dt><span class="strong"><a href="./org/apache/commons/io/filefilter/FileFilterUtils.html#sizeRangeFileFilter(long, long)">sizeRangeFileFilter(long, long)</a></span> - Static method in class org.apache.commons.io.filefilter.<a href="./org/apache/commons/io/filefilter/FileFilterUtils.html" title="class in org.apache.commons.io.filefilter">FileFilterUtils</a></dt>
-<dd>
-<div class="block">Returns a filter that accepts files whose size is &gt;= minimum size
- and &lt;= maximum size.</div>
-</dd>
-<dt><span class="strong"><a href="./org/apache/commons/io/input/BOMInputStream.html#skip(long)">skip(long)</a></span> - Method in class org.apache.commons.io.input.<a href="./org/apache/commons/io/input/BOMInputStream.html" title="class in org.apache.commons.io.input">BOMInputStream</a></dt>
-<dd>
-<div class="block">Invokes the delegate's <code>skip(long)</code> method, detecting and optionallyskipping BOM.</div>
-</dd>
-<dt><span class="strong"><a href="./org/apache/commons/io/input/BoundedInputStream.html#skip(long)">skip(long)</a></span> - Method in class org.apache.commons.io.input.<a href="./org/apache/commons/io/input/BoundedInputStream.html" title="class in org.apache.commons.io.input">BoundedInputStream</a></dt>
-<dd>
-<div class="block">Invokes the delegate's <code>skip(long)</code> method.</div>
-</dd>
-<dt><span class="strong"><a href="./org/apache/commons/io/input/BrokenInputStream.html#skip(long)">skip(long)</a></span> - Method in class org.apache.commons.io.input.<a href="./org/apache/commons/io/input/BrokenInputStream.html" title="class in org.apache.commons.io.input">BrokenInputStream</a></dt>
-<dd>
-<div class="block">Throws the configured exception.</div>
-</dd>
-<dt><span class="strong"><a href="./org/apache/commons/io/input/CharSequenceInputStream.html#skip(long)">skip(long)</a></span> - Method in class org.apache.commons.io.input.<a href="./org/apache/commons/io/input/CharSequenceInputStream.html" title="class in org.apache.commons.io.input">CharSequenceInputStream</a></dt>
-<dd>&nbsp;</dd>
-<dt><span class="strong"><a href="./org/apache/commons/io/input/CharSequenceReader.html#skip(long)">skip(long)</a></span> - Method in class org.apache.commons.io.input.<a href="./org/apache/commons/io/input/CharSequenceReader.html" title="class in org.apache.commons.io.input">CharSequenceReader</a></dt>
-<dd>
-<div class="block">Skip the specified number of characters.</div>
-</dd>
-<dt><span class="strong"><a href="./org/apache/commons/io/input/CountingInputStream.html#skip(long)">skip(long)</a></span> - Method in class org.apache.commons.io.input.<a href="./org/apache/commons/io/input/CountingInputStream.html" title="class in org.apache.commons.io.input">CountingInputStream</a></dt>
-<dd>
-<div class="block">Skips the stream over the specified number of bytes, adding the skipped
- amount to the count.</div>
-</dd>
-<dt><span class="strong"><a href="./org/apache/commons/io/input/NullInputStream.html#skip(long)">skip(long)</a></span> - Method in class org.apache.commons.io.input.<a href="./org/apache/commons/io/input/NullInputStream.html" title="class in org.apache.commons.io.input">NullInputStream</a></dt>
-<dd>
-<div class="block">Skip a specified number of bytes.</div>
-</dd>
-<dt><span class="strong"><a href="./org/apache/commons/io/input/NullReader.html#skip(long)">skip(long)</a></span> - Method in class org.apache.commons.io.input.<a href="./org/apache/commons/io/input/NullReader.html" title="class in org.apache.commons.io.input">NullReader</a></dt>
-<dd>
-<div class="block">Skip a specified number of characters.</div>
-</dd>
-<dt><span class="strong"><a href="./org/apache/commons/io/input/ProxyInputStream.html#skip(long)">skip(long)</a></span> - Method in class org.apache.commons.io.input.<a href="./org/apache/commons/io/input/ProxyInputStream.html" title="class in org.apache.commons.io.input">ProxyInputStream</a></dt>
-<dd>
-<div class="block">Invokes the delegate's <code>skip(long)</code> method.</div>
-</dd>
-<dt><span class="strong"><a href="./org/apache/commons/io/input/ProxyReader.html#skip(long)">skip(long)</a></span> - Method in class org.apache.commons.io.input.<a href="./org/apache/commons/io/input/ProxyReader.html" title="class in org.apache.commons.io.input">ProxyReader</a></dt>
-<dd>
-<div class="block">Invokes the delegate's <code>skip(long)</code> method.</div>
-</dd>
-<dt><span class="strong"><a href="./org/apache/commons/io/IOUtils.html#skip(java.io.InputStream, long)">skip(InputStream, long)</a></span> - Static method in class org.apache.commons.io.<a href="./org/apache/commons/io/IOUtils.html" title="class in org.apache.commons.io">IOUtils</a></dt>
-<dd>
-<div class="block">Skips bytes from an input byte stream.</div>
-</dd>
-<dt><span class="strong"><a href="./org/apache/commons/io/IOUtils.html#skip(java.nio.channels.ReadableByteChannel, long)">skip(ReadableByteChannel, long)</a></span> - Static method in class org.apache.commons.io.<a href="./org/apache/commons/io/IOUtils.html" title="class in org.apache.commons.io">IOUtils</a></dt>
-<dd>
-<div class="block">Skips bytes from a ReadableByteChannel.</div>
-</dd>
-<dt><span class="strong"><a href="./org/apache/commons/io/IOUtils.html#skip(java.io.Reader, long)">skip(Reader, long)</a></span> - Static method in class org.apache.commons.io.<a href="./org/apache/commons/io/IOUtils.html" title="class in org.apache.commons.io">IOUtils</a></dt>
-<dd>
-<div class="block">Skips characters from an input character stream.</div>
-</dd>
-<dt><span class="strong"><a href="./org/apache/commons/io/input/SwappedDataInputStream.html#skipBytes(int)">skipBytes(int)</a></span> - Method in class org.apache.commons.io.input.<a href="./org/apache/commons/io/input/SwappedDataInputStream.html" title="class in org.apache.commons.io.input">SwappedDataInputStream</a></dt>
-<dd>
-<div class="block">Invokes the delegate's <code>skip(int)</code> method.</div>
-</dd>
-<dt><span class="strong"><a href="./org/apache/commons/io/IOUtils.html#skipFully(java.io.InputStream, long)">skipFully(InputStream, long)</a></span> - Static method in class org.apache.commons.io.<a href="./org/apache/commons/io/IOUtils.html" title="class in org.apache.commons.io">IOUtils</a></dt>
-<dd>
-<div class="block">Skips the requested number of bytes or fail if there are not enough left.</div>
-</dd>
-<dt><span class="strong"><a href="./org/apache/commons/io/IOUtils.html#skipFully(java.nio.channels.ReadableByteChannel, long)">skipFully(ReadableByteChannel, long)</a></span> - Static method in class org.apache.commons.io.<a href="./org/apache/commons/io/IOUtils.html" title="class in org.apache.commons.io">IOUtils</a></dt>
-<dd>
-<div class="block">Skips the requested number of bytes or fail if there are not enough left.</div>
-</dd>
-<dt><span class="strong"><a href="./org/apache/commons/io/IOUtils.html#skipFully(java.io.Reader, long)">skipFully(Reader, long)</a></span> - Static method in class org.apache.commons.io.<a href="./org/apache/commons/io/IOUtils.html" title="class in org.apache.commons.io">IOUtils</a></dt>
-<dd>
-<div class="block">Skips the requested number of characters or fail if there are not enough left.</div>
-</dd>
-<dt><span class="strong"><a href="./org/apache/commons/io/monitor/FileAlterationMonitor.html#start()">start()</a></span> - Method in class org.apache.commons.io.monitor.<a href="./org/apache/commons/io/monitor/FileAlterationMonitor.html" title="class in org.apache.commons.io.monitor">FileAlterationMonitor</a></dt>
-<dd>
-<div class="block">Start monitoring.</div>
-</dd>
-<dt><span class="strong"><a href="./org/apache/commons/io/input/Tailer.html#stop()">stop()</a></span> - Method in class org.apache.commons.io.input.<a href="./org/apache/commons/io/input/Tailer.html" title="class in org.apache.commons.io.input">Tailer</a></dt>
-<dd>
-<div class="block">Allows the tailer to complete its current loop and return.</div>
-</dd>
-<dt><span class="strong"><a href="./org/apache/commons/io/monitor/FileAlterationMonitor.html#stop()">stop()</a></span> - Method in class org.apache.commons.io.monitor.<a href="./org/apache/commons/io/monitor/FileAlterationMonitor.html" title="class in org.apache.commons.io.monitor">FileAlterationMonitor</a></dt>
-<dd>
-<div class="block">Stop monitoring.</div>
-</dd>
-<dt><span class="strong"><a href="./org/apache/commons/io/monitor/FileAlterationMonitor.html#stop(long)">stop(long)</a></span> - Method in class org.apache.commons.io.monitor.<a href="./org/apache/commons/io/monitor/FileAlterationMonitor.html" title="class in org.apache.commons.io.monitor">FileAlterationMonitor</a></dt>
-<dd>
-<div class="block">Stop monitoring.</div>
-</dd>
-<dt><a href="./org/apache/commons/io/output/StringBuilderWriter.html" title="class in org.apache.commons.io.output"><span class="strong">StringBuilderWriter</span></a> - Class in <a href="./org/apache/commons/io/output/package-summary.html">org.apache.commons.io.output</a></dt>
-<dd>
-<div class="block"><a href="http://download.oracle.com/javase/6/docs/api/java/io/Writer.html?is-external=true" title="class or interface in java.io"><code>Writer</code></a> implementation that outputs to a <a href="http://download.oracle.com/javase/6/docs/api/java/lang/StringBuilder.html?is-external=true" title="class or interface in java.lang"><code>StringBuilder</code></a>.</div>
-</dd>
-<dt><span class="strong"><a href="./org/apache/commons/io/output/StringBuilderWriter.html#StringBuilderWriter()">StringBuilderWriter()</a></span> - Constructor for class org.apache.commons.io.output.<a href="./org/apache/commons/io/output/StringBuilderWriter.html" title="class in org.apache.commons.io.output">StringBuilderWriter</a></dt>
-<dd>
-<div class="block">Construct a new <a href="http://download.oracle.com/javase/6/docs/api/java/lang/StringBuilder.html?is-external=true" title="class or interface in java.lang"><code>StringBuilder</code></a> instance with default capacity.</div>
-</dd>
-<dt><span class="strong"><a href="./org/apache/commons/io/output/StringBuilderWriter.html#StringBuilderWriter(int)">StringBuilderWriter(int)</a></span> - Constructor for class org.apache.commons.io.output.<a href="./org/apache/commons/io/output/StringBuilderWriter.html" title="class in org.apache.commons.io.output">StringBuilderWriter</a></dt>
-<dd>
-<div class="block">Construct a new <a href="http://download.oracle.com/javase/6/docs/api/java/lang/StringBuilder.html?is-external=true" title="class or interface in java.lang"><code>StringBuilder</code></a> instance with the specified capacity.</div>
-</dd>
-<dt><span class="strong"><a href="./org/apache/commons/io/output/StringBuilderWriter.html#StringBuilderWriter(java.lang.StringBuilder)">StringBuilderWriter(StringBuilder)</a></span> - Constructor for class org.apache.commons.io.output.<a href="./org/apache/commons/io/output/StringBuilderWriter.html" title="class in org.apache.commons.io.output">StringBuilderWriter</a></dt>
-<dd>
-<div class="block">Construct a new instance with the specified <a href="http://download.oracle.com/javase/6/docs/api/java/lang/StringBuilder.html?is-external=true" title="class or interface in java.lang"><code>StringBuilder</code></a>.</div>
-</dd>
-<dt><span class="strong"><a href="./org/apache/commons/io/filefilter/FileFilterUtils.html#suffixFileFilter(java.lang.String)">suffixFileFilter(String)</a></span> - Static method in class org.apache.commons.io.filefilter.<a href="./org/apache/commons/io/filefilter/FileFilterUtils.html" title="class in org.apache.commons.io.filefilter">FileFilterUtils</a></dt>
-<dd>
-<div class="block">Returns a filter that returns true if the filename ends with the specified text.</div>
-</dd>
-<dt><span class="strong"><a href="./org/apache/commons/io/filefilter/FileFilterUtils.html#suffixFileFilter(java.lang.String, org.apache.commons.io.IOCase)">suffixFileFilter(String, IOCase)</a></span> - Static method in class org.apache.commons.io.filefilter.<a href="./org/apache/commons/io/filefilter/FileFilterUtils.html" title="class in org.apache.commons.io.filefilter">FileFilterUtils</a></dt>
-<dd>
-<div class="block">Returns a filter that returns true if the filename ends with the specified text.</div>
-</dd>
-<dt><a href="./org/apache/commons/io/filefilter/SuffixFileFilter.html" title="class in org.apache.commons.io.filefilter"><span class="strong">SuffixFileFilter</span></a> - Class in <a href="./org/apache/commons/io/filefilter/package-summary.html">org.apache.commons.io.filefilter</a></dt>
-<dd>
-<div class="block">Filters files based on the suffix (what the filename ends with).</div>
-</dd>
-<dt><span class="strong"><a href="./org/apache/commons/io/filefilter/SuffixFileFilter.html#SuffixFileFilter(java.lang.String)">SuffixFileFilter(String)</a></span> - Constructor for class org.apache.commons.io.filefilter.<a href="./org/apache/commons/io/filefilter/SuffixFileFilter.html" title="class in org.apache.commons.io.filefilter">SuffixFileFilter</a></dt>
-<dd>
-<div class="block">Constructs a new Suffix file filter for a single extension.</div>
-</dd>
-<dt><span class="strong"><a href="./org/apache/commons/io/filefilter/SuffixFileFilter.html#SuffixFileFilter(java.lang.String, org.apache.commons.io.IOCase)">SuffixFileFilter(String, IOCase)</a></span> - Constructor for class org.apache.commons.io.filefilter.<a href="./org/apache/commons/io/filefilter/SuffixFileFilter.html" title="class in org.apache.commons.io.filefilter">SuffixFileFilter</a></dt>
-<dd>
-<div class="block">Constructs a new Suffix file filter for a single extension
- specifying case-sensitivity.</div>
-</dd>
-<dt><span class="strong"><a href="./org/apache/commons/io/filefilter/SuffixFileFilter.html#SuffixFileFilter(java.lang.String[])">SuffixFileFilter(String[])</a></span> - Constructor for class org.apache.commons.io.filefilter.<a href="./org/apache/commons/io/filefilter/SuffixFileFilter.html" title="class in org.apache.commons.io.filefilter">SuffixFileFilter</a></dt>
-<dd>
-<div class="block">Constructs a new Suffix file filter for an array of suffixs.</div>
-</dd>
-<dt><span class="strong"><a href="./org/apache/commons/io/filefilter/SuffixFileFilter.html#SuffixFileFilter(java.lang.String[], org.apache.commons.io.IOCase)">SuffixFileFilter(String[], IOCase)</a></span> - Constructor for class org.apache.commons.io.filefilter.<a href="./org/apache/commons/io/filefilter/SuffixFileFilter.html" title="class in org.apache.commons.io.filefilter">SuffixFileFilter</a></dt>
-<dd>
-<div class="block">Constructs a new Suffix file filter for an array of suffixs
- specifying case-sensitivity.</div>
-</dd>
-<dt><span class="strong"><a href="./org/apache/commons/io/filefilter/SuffixFileFilter.html#SuffixFileFilter(java.util.List)">SuffixFileFilter(List&lt;String&gt;)</a></span> - Constructor for class org.apache.commons.io.filefilter.<a href="./org/apache/commons/io/filefilter/SuffixFileFilter.html" title="class in org.apache.commons.io.filefilter">SuffixFileFilter</a></dt>
-<dd>
-<div class="block">Constructs a new Suffix file filter for a list of suffixes.</div>
-</dd>
-<dt><span class="strong"><a href="./org/apache/commons/io/filefilter/SuffixFileFilter.html#SuffixFileFilter(java.util.List, org.apache.commons.io.IOCase)">SuffixFileFilter(List&lt;String&gt;, IOCase)</a></span> - Constructor for class org.apache.commons.io.filefilter.<a href="./org/apache/commons/io/filefilter/SuffixFileFilter.html" title="class in org.apache.commons.io.filefilter">SuffixFileFilter</a></dt>
-<dd>
-<div class="block">Constructs a new Suffix file filter for a list of suffixes
- specifying case-sensitivity.</div>
-</dd>
-<dt><span class="strong"><a href="./org/apache/commons/io/EndianUtils.html#swapDouble(double)">swapDouble(double)</a></span> - Static method in class org.apache.commons.io.<a href="./org/apache/commons/io/EndianUtils.html" title="class in org.apache.commons.io">EndianUtils</a></dt>
-<dd>
-<div class="block">Converts a "double" value between endian systems.</div>
-</dd>
-<dt><span class="strong"><a href="./org/apache/commons/io/EndianUtils.html#swapFloat(float)">swapFloat(float)</a></span> - Static method in class org.apache.commons.io.<a href="./org/apache/commons/io/EndianUtils.html" title="class in org.apache.commons.io">EndianUtils</a></dt>
-<dd>
-<div class="block">Converts a "float" value between endian systems.</div>
-</dd>
-<dt><span class="strong"><a href="./org/apache/commons/io/EndianUtils.html#swapInteger(int)">swapInteger(int)</a></span> - Static method in class org.apache.commons.io.<a href="./org/apache/commons/io/EndianUtils.html" title="class in org.apache.commons.io">EndianUtils</a></dt>
-<dd>
-<div class="block">Converts a "int" value between endian systems.</div>
-</dd>
-<dt><span class="strong"><a href="./org/apache/commons/io/EndianUtils.html#swapLong(long)">swapLong(long)</a></span> - Static method in class org.apache.commons.io.<a href="./org/apache/commons/io/EndianUtils.html" title="class in org.apache.commons.io">EndianUtils</a></dt>
-<dd>
-<div class="block">Converts a "long" value between endian systems.</div>
-</dd>
-<dt><a href="./org/apache/commons/io/input/SwappedDataInputStream.html" title="class in org.apache.commons.io.input"><span class="strong">SwappedDataInputStream</span></a> - Class in <a href="./org/apache/commons/io/input/package-summary.html">org.apache.commons.io.input</a></dt>
-<dd>
-<div class="block">DataInput for systems relying on little endian data formats.</div>
-</dd>
-<dt><span class="strong"><a href="./org/apache/commons/io/input/SwappedDataInputStream.html#SwappedDataInputStream(java.io.InputStream)">SwappedDataInputStream(InputStream)</a></span> - Constructor for class org.apache.commons.io.input.<a href="./org/apache/commons/io/input/SwappedDataInputStream.html" title="class in org.apache.commons.io.input">SwappedDataInputStream</a></dt>
-<dd>
-<div class="block">Constructs a SwappedDataInputStream.</div>
-</dd>
-<dt><span class="strong"><a href="./org/apache/commons/io/EndianUtils.html#swapShort(short)">swapShort(short)</a></span> - Static method in class org.apache.commons.io.<a href="./org/apache/commons/io/EndianUtils.html" title="class in org.apache.commons.io">EndianUtils</a></dt>
-<dd>
-<div class="block">Converts a "short" value between endian systems.</div>
-</dd>
-<dt><span class="strong"><a href="./org/apache/commons/io/IOCase.html#SYSTEM">SYSTEM</a></span> - Static variable in class org.apache.commons.io.<a href="./org/apache/commons/io/IOCase.html" title="class in org.apache.commons.io">IOCase</a></dt>
-<dd>
-<div class="block">The constant for case sensitivity determined by the current operating system.</div>
-</dd>
-</dl>
-<a name="_T_">
-<!--   -->
-</a>
-<h2 class="title">T</h2>
-<dl>
-<dt><a href="./org/apache/commons/io/input/TaggedInputStream.html" title="class in org.apache.commons.io.input"><span class="strong">TaggedInputStream</span></a> - Class in <a href="./org/apache/commons/io/input/package-summary.html">org.apache.commons.io.input</a></dt>
-<dd>
-<div class="block">An input stream decorator that tags potential exceptions so that the
- stream that caused the exception can easily be identified.</div>
-</dd>
-<dt><span class="strong"><a href="./org/apache/commons/io/input/TaggedInputStream.html#TaggedInputStream(java.io.InputStream)">TaggedInputStream(InputStream)</a></span> - Constructor for class org.apache.commons.io.input.<a href="./org/apache/commons/io/input/TaggedInputStream.html" title="class in org.apache.commons.io.input">TaggedInputStream</a></dt>
-<dd>
-<div class="block">Creates a tagging decorator for the given input stream.</div>
-</dd>
-<dt><a href="./org/apache/commons/io/TaggedIOException.html" title="class in org.apache.commons.io"><span class="strong">TaggedIOException</span></a> - Exception in <a href="./org/apache/commons/io/package-summary.html">org.apache.commons.io</a></dt>
-<dd>
-<div class="block">An <a href="http://download.oracle.com/javase/6/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io"><code>IOException</code></a> decorator that adds a serializable tag to the
- wrapped exception.</div>
-</dd>
-<dt><span class="strong"><a href="./org/apache/commons/io/TaggedIOException.html#TaggedIOException(java.io.IOException, java.io.Serializable)">TaggedIOException(IOException, Serializable)</a></span> - Constructor for exception org.apache.commons.io.<a href="./org/apache/commons/io/TaggedIOException.html" title="class in org.apache.commons.io">TaggedIOException</a></dt>
-<dd>
-<div class="block">Creates a tagged wrapper for the given exception.</div>
-</dd>
-<dt><a href="./org/apache/commons/io/output/TaggedOutputStream.html" title="class in org.apache.commons.io.output"><span class="strong">TaggedOutputStream</span></a> - Class in <a href="./org/apache/commons/io/output/package-summary.html">org.apache.commons.io.output</a></dt>
-<dd>
-<div class="block">An output stream decorator that tags potential exceptions so that the
- stream that caused the exception can easily be identified.</div>
-</dd>
-<dt><span class="strong"><a href="./org/apache/commons/io/output/TaggedOutputStream.html#TaggedOutputStream(java.io.OutputStream)">TaggedOutputStream(OutputStream)</a></span> - Constructor for class org.apache.commons.io.output.<a href="./org/apache/commons/io/output/TaggedOutputStream.html" title="class in org.apache.commons.io.output">TaggedOutputStream</a></dt>
-<dd>
-<div class="block">Creates a tagging decorator for the given output stream.</div>
-</dd>
-<dt><a href="./org/apache/commons/io/input/Tailer.html" title="class in org.apache.commons.io.input"><span class="strong">Tailer</span></a> - Class in <a href="./org/apache/commons/io/input/package-summary.html">org.apache.commons.io.input</a></dt>
-<dd>
-<div class="block">Simple implementation of the unix "tail -f" functionality.</div>
-</dd>
-<dt><span class="strong"><a href="./org/apache/commons/io/input/Tailer.html#Tailer(java.io.File, org.apache.commons.io.input.TailerListener)">Tailer(File, TailerListener)</a></span> - Constructor for class org.apache.commons.io.input.<a href="./org/apache/commons/io/input/Tailer.html" title="class in org.apache.commons.io.input">Tailer</a></dt>
-<dd>
-<div class="block">Creates a Tailer for the given file, starting from the beginning, with the default delay of 1.0s.</div>
-</dd>
-<dt><span class="strong"><a href="./org/apache/commons/io/input/Tailer.html#Tailer(java.io.File, org.apache.commons.io.input.TailerListener, long)">Tailer(File, TailerListener, long)</a></span> - Constructor for class org.apache.commons.io.input.<a href="./org/apache/commons/io/input/Tailer.html" title="class in org.apache.commons.io.input">Tailer</a></dt>
-<dd>
-<div class="block">Creates a Tailer for the given file, starting from the beginning.</div>
-</dd>
-<dt><span class="strong"><a href="./org/apache/commons/io/input/Tailer.html#Tailer(java.io.File, org.apache.commons.io.input.TailerListener, long, boolean)">Tailer(File, TailerListener, long, boolean)</a></span> - Constructor for class org.apache.commons.io.input.<a href="./org/apache/commons/io/input/Tailer.html" title="class in org.apache.commons.io.input">Tailer</a></dt>
-<dd>
-<div class="block">Creates a Tailer for the given file, with a delay other than the default 1.0s.</div>
-</dd>
-<dt><span class="strong"><a href="./org/apache/commons/io/input/Tailer.html#Tailer(java.io.File, org.apache.commons.io.input.TailerListener, long, boolean, boolean)">Tailer(File, TailerListener, long, boolean, boolean)</a></span> - Constructor for class org.apache.commons.io.input.<a href="./org/apache/commons/io/input/Tailer.html" title="class in org.apache.commons.io.input">Tailer</a></dt>
-<dd>
-<div class="block">Creates a Tailer for the given file, with a delay other than the default 1.0s.</div>
-</dd>
-<dt><span class="strong"><a href="./org/apache/commons/io/input/Tailer.html#Tailer(java.io.File, org.apache.commons.io.input.TailerListener, long, boolean, int)">Tailer(File, TailerListener, long, boolean, int)</a></span> - Constructor for class org.apache.commons.io.input.<a href="./org/apache/commons/io/input/Tailer.html" title="class in org.apache.commons.io.input">Tailer</a></dt>
-<dd>
-<div class="block">Creates a Tailer for the given file, with a specified buffer size.</div>
-</dd>
-<dt><span class="strong"><a href="./org/apache/commons/io/input/Tailer.html#Tailer(java.io.File, org.apache.commons.io.input.TailerListener, long, boolean, boolean, int)">Tailer(File, TailerListener, long, boolean, boolean, int)</a></span> - Constructor for class org.apache.commons.io.input.<a href="./org/apache/commons/io/input/Tailer.html" title="class in org.apache.commons.io.input">Tailer</a></dt>
-<dd>
-<div class="block">Creates a Tailer for the given file, with a specified buffer size.</div>
-</dd>
-<dt><a href="./org/apache/commons/io/input/TailerListener.html" title="interface in org.apache.commons.io.input"><span class="strong">TailerListener</span></a> - Interface in <a href="./org/apache/commons/io/input/package-summary.html">org.apache.commons.io.input</a></dt>
-<dd>
-<div class="block">Listener for events from a <a href="./org/apache/commons/io/input/Tailer.html" title="class in org.apache.commons.io.input"><code>Tailer</code></a>.</div>
-</dd>
-<dt><a href="./org/apache/commons/io/input/TailerListenerAdapter.html" title="class in org.apache.commons.io.input"><span class="strong">TailerListenerAdapter</span></a> - Class in <a href="./org/apache/commons/io/input/package-summary.html">org.apache.commons.io.input</a></dt>
-<dd>
-<div class="block"><a href="./org/apache/commons/io/input/TailerListener.html" title="interface in org.apache.commons.io.input"><code>TailerListener</code></a> Adapter.</div>
-</dd>
-<dt><span class="strong"><a href="./org/apache/commons/io/input/TailerListenerAdapter.html#TailerListenerAdapter()">TailerListenerAdapter()</a></span> - Constructor for class org.apache.commons.io.input.<a href="./org/apache/commons/io/input/TailerListenerAdapter.html" title="class in org.apache.commons.io.input">TailerListenerAdapter</a></dt>
-<dd>&nbsp;</dd>
-<dt><a href="./org/apache/commons/io/input/TeeInputStream.html" title="class in org.apache.commons.io.input"><span class="strong">TeeInputStream</span></a> - Class in <a href="./org/apache/commons/io/input/package-summary.html">org.apache.commons.io.input</a></dt>
-<dd>
-<div class="block">InputStream proxy that transparently writes a copy of all bytes read
- from the proxied stream to a given OutputStream.</div>
-</dd>
-<dt><span class="strong"><a href="./org/apache/commons/io/input/TeeInputStream.html#TeeInputStream(java.io.InputStream, java.io.OutputStream)">TeeInputStream(InputStream, OutputStream)</a></span> - Constructor for class org.apache.commons.io.input.<a href="./org/apache/commons/io/input/TeeInputStream.html" title="class in org.apache.commons.io.input">TeeInputStream</a></dt>
-<dd>
-<div class="block">Creates a TeeInputStream that proxies the given <a href="http://download.oracle.com/javase/6/docs/api/java/io/InputStream.html?is-external=true" title="class or interface in java.io"><code>InputStream</code></a>
- and copies all read bytes to the given <a href="http://download.oracle.com/javase/6/docs/api/java/io/OutputStream.html?is-external=true" title="class or interface in java.io"><code>OutputStream</code></a>.</div>
-</dd>
-<dt><span class="strong"><a href="./org/apache/commons/io/input/TeeInputStream.html#TeeInputStream(java.io.InputStream, java.io.OutputStream, boolean)">TeeInputStream(InputStream, OutputStream, boolean)</a></span> - Constructor for class org.apache.commons.io.input.<a href="./org/apache/commons/io/input/TeeInputStream.html" title="class in org.apache.commons.io.input">TeeInputStream</a></dt>
-<dd>
-<div class="block">Creates a TeeInputStream that proxies the given <a href="http://download.oracle.com/javase/6/docs/api/java/io/InputStream.html?is-external=true" title="class or interface in java.io"><code>InputStream</code></a>
- and copies all read bytes to the given <a href="http://download.oracle.com/javase/6/docs/api/java/io/OutputStream.html?is-external=true" title="class or interface in java.io"><code>OutputStream</code></a>.</div>
-</dd>
-<dt><a href="./org/apache/commons/io/output/TeeOutputStream.html" title="class in org.apache.commons.io.output"><span class="strong">TeeOutputStream</span></a> - Class in <a href="./org/apache/commons/io/output/package-summary.html">org.apache.commons.io.output</a></dt>
-<dd>
-<div class="block">Classic splitter of OutputStream.</div>
-</dd>
-<dt><span class="strong"><a href="./org/apache/commons/io/output/TeeOutputStream.html#TeeOutputStream(java.io.OutputStream, java.io.OutputStream)">TeeOutputStream(OutputStream, OutputStream)</a></span> - Constructor for class org.apache.commons.io.output.<a href="./org/apache/commons/io/output/TeeOutputStream.html" title="class in org.apache.commons.io.output">TeeOutputStream</a></dt>
-<dd>
-<div class="block">Constructs a TeeOutputStream.</div>
-</dd>
-<dt><a href="./org/apache/commons/io/output/ThresholdingOutputStream.html" title="class in org.apache.commons.io.output"><span class="strong">ThresholdingOutputStream</span></a> - Class in <a href="./org/apache/commons/io/output/package-summary.html">org.apache.commons.io.output</a></dt>
-<dd>
-<div class="block">An output stream which triggers an event when a specified number of bytes of
- data have been written to it.</div>
-</dd>
-<dt><span class="strong"><a href="./org/apache/commons/io/output/ThresholdingOutputStream.html#ThresholdingOutputStream(int)">ThresholdingOutputStream(int)</a></span> - Constructor for class org.apache.commons.io.output.<a href="./org/apache/commons/io/output/ThresholdingOutputStream.html" title="class in org.apache.commons.io.output">ThresholdingOutputStream</a></dt>
-<dd>
-<div class="block">Constructs an instance of this class which will trigger an event at the
- specified threshold.</div>
-</dd>
-<dt><span class="strong"><a href="./org/apache/commons/io/output/DeferredFileOutputStream.html#thresholdReached()">thresholdReached()</a></span> - Method in class org.apache.commons.io.output.<a href="./org/apache/commons/io/output/DeferredFileOutputStream.html" title="class in org.apache.commons.io.output">DeferredFileOutputStream</a></dt>
-<dd>
-<div class="block">Switches the underlying output stream from a memory based stream to one
- that is backed by disk.</div>
-</dd>
-<dt><span class="strong"><a href="./org/apache/commons/io/output/ThresholdingOutputStream.html#thresholdReached()">thresholdReached()</a></span> - Method in class org.apache.commons.io.output.<a href="./org/apache/commons/io/output/ThresholdingOutputStream.html" title="class in org.apache.commons.io.output">ThresholdingOutputStream</a></dt>
-<dd>
-<div class="block">Indicates that the configured threshold has been reached, and that a
- subclass should take whatever action necessary on this event.</div>
-</dd>
-<dt><span class="strong"><a href="./org/apache/commons/io/TaggedIOException.html#throwCauseIfTaggedWith(java.lang.Throwable, java.lang.Object)">throwCauseIfTaggedWith(Throwable, Object)</a></span> - Static method in exception org.apache.commons.io.<a href="./org/apache/commons/io/TaggedIOException.html" title="class in org.apache.commons.io">TaggedIOException</a></dt>
-<dd>
-<div class="block">Throws the original <a href="http://download.oracle.com/javase/6/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io"><code>IOException</code></a> if the given throwable is
- a <a href="./org/apache/commons/io/TaggedIOException.html" title="class in org.apache.commons.io"><code>TaggedIOException</code></a> decorator the given tag.</div>
-</dd>
-<dt><span class="strong"><a href="./org/apache/commons/io/input/TaggedInputStream.html#throwIfCauseOf(java.lang.Throwable)">throwIfCauseOf(Throwable)</a></span> - Method in class org.apache.commons.io.input.<a href="./org/apache/commons/io/input/TaggedInputStream.html" title="class in org.apache.commons.io.input">TaggedInputStream</a></dt>
-<dd>
-<div class="block">Re-throws the original exception thrown by this stream.</div>
-</dd>
-<dt><span class="strong"><a href="./org/apache/commons/io/output/TaggedOutputStream.html#throwIfCauseOf(java.lang.Exception)">throwIfCauseOf(Exception)</a></span> - Method in class org.apache.commons.io.output.<a href="./org/apache/commons/io/output/TaggedOutputStream.html" title="class in org.apache.commons.io.output">TaggedOutputStream</a></dt>
-<dd>
-<div class="block">Re-throws the original exception thrown by this stream.</div>
-</dd>
-<dt><span class="strong"><a href="./org/apache/commons/io/IOUtils.html#toBufferedInputStream(java.io.InputStream)">toBufferedInputStream(InputStream)</a></span> - Static method in class org.apache.commons.io.<a href="./org/apache/commons/io/IOUtils.html" title="class in org.apache.commons.io">IOUtils</a></dt>
-<dd>
-<div class="block">Fetches entire contents of an <code>InputStream</code> and represent
- same data as result InputStream.</div>
-</dd>
-<dt><span class="strong"><a href="./org/apache/commons/io/output/ByteArrayOutputStream.html#toBufferedInputStream(java.io.InputStream)">toBufferedInputStream(InputStream)</a></span> - Static method in class org.apache.commons.io.output.<a href="./org/apache/commons/io/output/ByteArrayOutputStream.html" title="class in org.apache.commons.io.output">ByteArrayOutputStream</a></dt>
-<dd>
-<div class="block">Fetches entire contents of an <code>InputStream</code> and represent
- same data as result InputStream.</div>
-</dd>
-<dt><span class="strong"><a href="./org/apache/commons/io/IOUtils.html#toBufferedReader(java.io.Reader)">toBufferedReader(Reader)</a></span> - Static method in class org.apache.commons.io.<a href="./org/apache/commons/io/IOUtils.html" title="class in org.apache.commons.io">IOUtils</a></dt>
-<dd>
-<div class="block">Returns the given reader if it is a <a href="http://download.oracle.com/javase/6/docs/api/java/io/BufferedReader.html?is-external=true" title="class or interface in java.io"><code>BufferedReader</code></a>, otherwise creates a BufferedReader from the given
- reader.</div>
-</dd>
-<dt><span class="strong"><a href="./org/apache/commons/io/IOUtils.html#toByteArray(java.io.InputStream)">toByteArray(InputStream)</a></span> - Static method in class org.apache.commons.io.<a href="./org/apache/commons/io/IOUtils.html" title="class in org.apache.commons.io">IOUtils</a></dt>
-<dd>
-<div class="block">Gets the contents of an <code>InputStream</code> as a <code>byte[]</code>.</div>
-</dd>
-<dt><span class="strong"><a href="./org/apache/commons/io/IOUtils.html#toByteArray(java.io.InputStream, long)">toByteArray(InputStream, long)</a></span> - Static method in class org.apache.commons.io.<a href="./org/apache/commons/io/IOUtils.html" title="class in org.apache.commons.io">IOUtils</a></dt>
-<dd>
-<div class="block">Gets contents of an <code>InputStream</code> as a <code>byte[]</code>.</div>
-</dd>
-<dt><span class="strong"><a href="./org/apache/commons/io/IOUtils.html#toByteArray(java.io.InputStream, int)">toByteArray(InputStream, int)</a></span> - Static method in class org.apache.commons.io.<a href="./org/apache/commons/io/IOUtils.html" title="class in org.apache.commons.io">IOUtils</a></dt>
-<dd>
-<div class="block">Gets the contents of an <code>InputStream</code> as a <code>byte[]</code>.</div>
-</dd>
-<dt><span class="strong"><a href="./org/apache/commons/io/IOUtils.html#toByteArray(java.io.Reader)">toByteArray(Reader)</a></span> - Static method in class org.apache.commons.io.<a href="./org/apache/commons/io/IOUtils.html" title="class in org.apache.commons.io">IOUtils</a></dt>
-<dd>
-<div class="block"><span class="strong">Deprecated.</span>
-<div class="block"><i>2.5 use <a href="./org/apache/commons/io/IOUtils.html#toByteArray(java.io.Reader, java.nio.charset.Charset)"><code>IOUtils.toByteArray(Reader, Charset)</code></a> instead</i></div>
-</div>
-</dd>
-<dt><span class="strong"><a href="./org/apache/commons/io/IOUtils.html#toByteArray(java.io.Reader, java.nio.charset.Charset)">toByteArray(Reader, Charset)</a></span> - Static method in class org.apache.commons.io.<a href="./org/apache/commons/io/IOUtils.html" title="class in org.apache.commons.io">IOUtils</a></dt>
-<dd>
-<div class="block">Gets the contents of a <code>Reader</code> as a <code>byte[]</code>
- using the specified character encoding.</div>
-</dd>
-<dt><span class="strong"><a href="./org/apache/commons/io/IOUtils.html#toByteArray(java.io.Reader, java.lang.String)">toByteArray(Reader, String)</a></span> - Static method in class org.apache.commons.io.<a href="./org/apache/commons/io/IOUtils.html" title="class in org.apache.commons.io">IOUtils</a></dt>
-<dd>
-<div class="block">Gets the contents of a <code>Reader</code> as a <code>byte[]</code>
- using the specified character encoding.</div>
-</dd>
-<dt><span class="strong"><a href="./org/apache/commons/io/IOUtils.html#toByteArray(java.lang.String)">toByteArray(String)</a></span> - Static method in class org.apache.commons.io.<a href="./org/apache/commons/io/IOUtils.html" title="class in org.apache.commons.io">IOUtils</a></dt>
-<dd>
-<div class="block"><span class="strong">Deprecated.</span>
-<div class="block"><i>2.5 Use <a href="http://download.oracle.com/javase/6/docs/api/java/lang/String.html?is-external=true#getBytes()" title="class or interface in java.lang"><code>String.getBytes()</code></a> instead</i></div>
-</div>
-</dd>
-<dt><span class="strong"><a href="./org/apache/commons/io/IOUtils.html#toByteArray(java.net.URI)">toByteArray(URI)</a></span> - Static method in class org.apache.commons.io.<a href="./org/apache/commons/io/IOUtils.html" title="class in org.apache.commons.io">IOUtils</a></dt>
-<dd>
-<div class="block">Gets the contents of a <code>URI</code> as a <code>byte[]</code>.</div>
-</dd>
-<dt><span class="strong"><a href="./org/apache/commons/io/IOUtils.html#toByteArray(java.net.URL)">toByteArray(URL)</a></span> - Static method in class org.apache.commons.io.<a href="./org/apache/commons/io/IOUtils.html" title="class in org.apache.commons.io">IOUtils</a></dt>
-<dd>
-<div class="block">Gets the contents of a <code>URL</code> as a <code>byte[]</code>.</div>
-</dd>
-<dt><span class="strong"><a href="./org/apache/commons/io/IOUtils.html#toByteArray(java.net.URLConnection)">toByteArray(URLConnection)</a></span> - Static method in class org.apache.commons.io.<a href="./org/apache/commons/io/IOUtils.html" title="class in org.apache.commons.io">IOUtils</a></dt>
-<dd>
-<div class="block">Gets the contents of a <code>URLConnection</code> as a <code>byte[]</code>.</div>
-</dd>
-<dt><span class="strong"><a href="./org/apache/commons/io/output/ByteArrayOutputStream.html#toByteArray()">toByteArray()</a></span> - Method in class org.apache.commons.io.output.<a href="./org/apache/commons/io/output/ByteArrayOutputStream.html" title="class in org.apache.commons.io.output">ByteArrayOutputStream</a></dt>
-<dd>
-<div class="block">Gets the curent contents of this byte stream as a byte array.</div>
-</dd>
-<dt><span class="strong"><a href="./org/apache/commons/io/IOUtils.html#toCharArray(java.io.InputStream)">toCharArray(InputStream)</a></span> - Static method in class org.apache.commons.io.<a href="./org/apache/commons/io/IOUtils.html" title="class in org.apache.commons.io">IOUtils</a></dt>
-<dd>
-<div class="block"><span class="strong">Deprecated.</span>
-<div class="block"><i>2.5 use <a href="./org/apache/commons/io/IOUtils.html#toCharArray(java.io.InputStream, java.nio.charset.Charset)"><code>IOUtils.toCharArray(InputStream, Charset)</code></a> instead</i></div>
-</div>
-</dd>
-<dt><span class="strong"><a href="./org/apache/commons/io/IOUtils.html#toCharArray(java.io.InputStream, java.nio.charset.Charset)">toCharArray(InputStream, Charset)</a></span> - Static method in class org.apache.commons.io.<a href="./org/apache/commons/io/IOUtils.html" title="class in org.apache.commons.io">IOUtils</a></dt>
-<dd>
-<div class="block">Gets the contents of an <code>InputStream</code> as a character array
- using the specified character encoding.</div>
-</dd>
-<dt><span class="strong"><a href="./org/apache/commons/io/IOUtils.html#toCharArray(java.io.InputStream, java.lang.String)">toCharArray(InputStream, String)</a></span> - Static method in class org.apache.commons.io.<a href="./org/apache/commons/io/IOUtils.html" title="class in org.apache.commons.io">IOUtils</a></dt>
-<dd>
-<div class="block">Gets the contents of an <code>InputStream</code> as a character array
- using the specified character encoding.</div>
-</dd>
-<dt><span class="strong"><a href="./org/apache/commons/io/IOUtils.html#toCharArray(java.io.Reader)">toCharArray(Reader)</a></span> - Static method in class org.apache.commons.io.<a href="./org/apache/commons/io/IOUtils.html" title="class in org.apache.commons.io">IOUtils</a></dt>
-<dd>
-<div class="block">Gets the contents of a <code>Reader</code> as a character array.</div>
-</dd>
-<dt><span class="strong"><a href="./org/apache/commons/io/Charsets.html#toCharset(java.nio.charset.Charset)">toCharset(Charset)</a></span> - Static method in class org.apache.commons.io.<a href="./org/apache/commons/io/Charsets.html" title="class in org.apache.commons.io">Charsets</a></dt>
-<dd>
-<div class="block">Returns the given Charset or the default Charset if the given Charset is null.</div>
-</dd>
-<dt><span class="strong"><a href="./org/apache/commons/io/Charsets.html#toCharset(java.lang.String)">toCharset(String)</a></span> - Static method in class org.apache.commons.io.<a href="./org/apache/commons/io/Charsets.html" title="class in org.apache.commons.io">Charsets</a></dt>
-<dd>
-<div class="block">Returns a Charset for the named charset.</div>
-</dd>
-<dt><span class="strong"><a href="./org/apache/commons/io/FileUtils.html#toFile(java.net.URL)">toFile(URL)</a></span> - Static method in class org.apache.commons.io.<a href="./org/apache/commons/io/FileUtils.html" title="class in org.apache.commons.io">FileUtils</a></dt>
-<dd>
-<div class="block">Convert from a <code>URL</code> to a <code>File</code>.</div>
-</dd>
-<dt><span class="strong"><a href="./org/apache/commons/io/FileUtils.html#toFiles(java.net.URL[])">toFiles(URL[])</a></span> - Static method in class org.apache.commons.io.<a href="./org/apache/commons/io/FileUtils.html" title="class in org.apache.commons.io">FileUtils</a></dt>
-<dd>
-<div class="block">Converts each of an array of <code>URL</code> to a <code>File</code>.</div>
-</dd>
-<dt><span class="strong"><a href="./org/apache/commons/io/IOUtils.html#toInputStream(java.lang.CharSequence)">toInputStream(CharSequence)</a></span> - Static method in class org.apache.commons.io.<a href="./org/apache/commons/io/IOUtils.html" title="class in org.apache.commons.io">IOUtils</a></dt>
-<dd>
-<div class="block"><span class="strong">Deprecated.</span>
-<div class="block"><i>2.5 use <a href="./org/apache/commons/io/IOUtils.html#toInputStream(java.lang.CharSequence, java.nio.charset.Charset)"><code>IOUtils.toInputStream(CharSequence, Charset)</code></a> instead</i></div>
-</div>
-</dd>
-<dt><span class="strong"><a href="./org/apache/commons/io/IOUtils.html#toInputStream(java.lang.CharSequence, java.nio.charset.Charset)">toInputStream(CharSequence, Charset)</a></span> - Static method in class org.apache.commons.io.<a href="./org/apache/commons/io/IOUtils.html" title="class in org.apache.commons.io">IOUtils</a></dt>
-<dd>
-<div class="block">Converts the specified CharSequence to an input stream, encoded as bytes
- using the specified character encoding.</div>
-</dd>
-<dt><span class="strong"><a href="./org/apache/commons/io/IOUtils.html#toInputStream(java.lang.CharSequence, java.lang.String)">toInputStream(CharSequence, String)</a></span> - Static method in class org.apache.commons.io.<a href="./org/apache/commons/io/IOUtils.html" title="class in org.apache.commons.io">IOUtils</a></dt>
-<dd>
-<div class="block">Converts the specified CharSequence to an input stream, encoded as bytes
- using the specified character encoding.</div>
-</dd>
-<dt><span class="strong"><a href="./org/apache/commons/io/IOUtils.html#toInputStream(java.lang.String)">toInputStream(String)</a></span> - Static method in class org.apache.commons.io.<a href="./org/apache/commons/io/IOUtils.html" title="class in org.apache.commons.io">IOUtils</a></dt>
-<dd>
-<div class="block"><span class="strong">Deprecated.</span>
-<div class="block"><i>2.5 use <a href="./org/apache/commons/io/IOUtils.html#toInputStream(java.lang.String, java.nio.charset.Charset)"><code>IOUtils.toInputStream(String, Charset)</code></a> instead</i></div>
-</div>
-</dd>
-<dt><span class="strong"><a href="./org/apache/commons/io/IOUtils.html#toInputStream(java.lang.String, java.nio.charset.Charset)">toInputStream(String, Charset)</a></span> - Static method in class org.apache.commons.io.<a href="./org/apache/commons/io/IOUtils.html" title="class in org.apache.commons.io">IOUtils</a></dt>
-<dd>
-<div class="block">Converts the specified string to an input stream, encoded as bytes
- using the specified character encoding.</div>
-</dd>
-<dt><span class="strong"><a href="./org/apache/commons/io/IOUtils.html#toInputStream(java.lang.String, java.lang.String)">toInputStream(String, String)</a></span> - Static method in class org.apache.commons.io.<a href="./org/apache/commons/io/IOUtils.html" title="class in org.apache.commons.io">IOUtils</a></dt>
-<dd>
-<div class="block">Converts the specified string to an input stream, encoded as bytes
- using the specified character encoding.</div>
-</dd>
-<dt><span class="strong"><a href="./org/apache/commons/io/output/ByteArrayOutputStream.html#toInputStream()">toInputStream()</a></span> - Method in class org.apache.commons.io.output.<a href="./org/apache/commons/io/output/ByteArrayOutputStream.html" title="class in org.apache.commons.io.output">ByteArrayOutputStream</a></dt>
-<dd>
-<div class="block">Gets the current contents of this byte stream as a Input Stream.</div>
-</dd>
-<dt><span class="strong"><a href="./org/apache/commons/io/filefilter/FileFilterUtils.html#toList(org.apache.commons.io.filefilter.IOFileFilter...)">toList(IOFileFilter...)</a></span> - Static method in class org.apache.commons.io.filefilter.<a href="./org/apache/commons/io/filefilter/FileFilterUtils.html" title="class in org.apache.commons.io.filefilter">FileFilterUtils</a></dt>
-<dd>
-<div class="block">Create a List of file filters.</div>
-</dd>
-<dt><span class="strong"><a href="./org/apache/commons/io/ByteOrderMark.html#toString()">toString()</a></span> - Method in class org.apache.commons.io.<a href="./org/apache/commons/io/ByteOrderMark.html" title="class in org.apache.commons.io">ByteOrderMark</a></dt>
-<dd>
-<div class="block">Provide a String representation of the BOM.</div>
-</dd>
-<dt><span class="strong"><a href="./org/apache/commons/io/comparator/CompositeFileComparator.html#toString()">toString()</a></span> - Method in class org.apache.commons.io.comparator.<a href="./org/apache/commons/io/comparator/CompositeFileComparator.html" title="class in org.apache.commons.io.comparator">CompositeFileComparator</a></dt>
-<dd>
-<div class="block">String representation of this file comparator.</div>
-</dd>
-<dt><span class="strong"><a href="./org/apache/commons/io/comparator/ExtensionFileComparator.html#toString()">toString()</a></span> - Method in class org.apache.commons.io.comparator.<a href="./org/apache/commons/io/comparator/ExtensionFileComparator.html" title="class in org.apache.commons.io.comparator">ExtensionFileComparator</a></dt>
-<dd>
-<div class="block">String representation of this file comparator.</div>
-</dd>
-<dt><span class="strong"><a href="./org/apache/commons/io/comparator/NameFileComparator.html#toString()">toString()</a></span> - Method in class org.apache.commons.io.comparator.<a href="./org/apache/commons/io/comparator/NameFileComparator.html" title="class in org.apache.commons.io.comparator">NameFileComparator</a></dt>
-<dd>
-<div class="block">String representation of this file comparator.</div>
-</dd>
-<dt><span class="strong"><a href="./org/apache/commons/io/comparator/PathFileComparator.html#toString()">toString()</a></span> - Method in class org.apache.commons.io.comparator.<a href="./org/apache/commons/io/comparator/PathFileComparator.html" title="class in org.apache.commons.io.comparator">PathFileComparator</a></dt>
-<dd>
-<div class="block">String representation of this file comparator.</div>
-</dd>
-<dt><span class="strong"><a href="./org/apache/commons/io/comparator/SizeFileComparator.html#toString()">toString()</a></span> - Method in class org.apache.commons.io.comparator.<a href="./org/apache/commons/io/comparator/SizeFileComparator.html" title="class in org.apache.commons.io.comparator">SizeFileComparator</a></dt>
-<dd>
-<div class="block">String representation of this file comparator.</div>
-</dd>
-<dt><span class="strong"><a href="./org/apache/commons/io/FileDeleteStrategy.html#toString()">toString()</a></span> - Method in class org.apache.commons.io.<a href="./org/apache/commons/io/FileDeleteStrategy.html" title="class in org.apache.commons.io">FileDeleteStrategy</a></dt>
-<dd>
-<div class="block">Gets a string describing the delete strategy.</div>
-</dd>
-<dt><span class="strong"><a href="./org/apache/commons/io/filefilter/AbstractFileFilter.html#toString()">toString()</a></span> - Method in class org.apache.commons.io.filefilter.<a href="./org/apache/commons/io/filefilter/AbstractFileFilter.html" title="class in org.apache.commons.io.filefilter">AbstractFileFilter</a></dt>
-<dd>
-<div class="block">Provide a String representaion of this file filter.</div>
-</dd>
-<dt><span class="strong"><a href="./org/apache/commons/io/filefilter/AgeFileFilter.html#toString()">toString()</a></span> - Method in class org.apache.commons.io.filefilter.<a href="./org/apache/commons/io/filefilter/AgeFileFilter.html" title="class in org.apache.commons.io.filefilter">AgeFileFilter</a></dt>
-<dd>
-<div class="block">Provide a String representaion of this file filter.</div>
-</dd>
-<dt><span class="strong"><a href="./org/apache/commons/io/filefilter/AndFileFilter.html#toString()">toString()</a></span> - Method in class org.apache.commons.io.filefilter.<a href="./org/apache/commons/io/filefilter/AndFileFilter.html" title="class in org.apache.commons.io.filefilter">AndFileFilter</a></dt>
-<dd>
-<div class="block">Provide a String representaion of this file filter.</div>
-</dd>
-<dt><span class="strong"><a href="./org/apache/commons/io/filefilter/DelegateFileFilter.html#toString()">toString()</a></span> - Method in class org.apache.commons.io.filefilter.<a href="./org/apache/commons/io/filefilter/DelegateFileFilter.html" title="class in org.apache.commons.io.filefilter">DelegateFileFilter</a></dt>
-<dd>
-<div class="block">Provide a String representaion of this file filter.</div>
-</dd>
-<dt><span class="strong"><a href="./org/apache/commons/io/filefilter/MagicNumberFileFilter.html#toString()">toString()</a></span> - Method in class org.apache.commons.io.filefilter.<a href="./org/apache/commons/io/filefilter/MagicNumberFileFilter.html" title="class in org.apache.commons.io.filefilter">MagicNumberFileFilter</a></dt>
-<dd>
-<div class="block">Returns a String representation of the file filter, which includes the
- magic number bytes and byte offset.</div>
-</dd>
-<dt><span class="strong"><a href="./org/apache/commons/io/filefilter/NameFileFilter.html#toString()">toString()</a></span> - Method in class org.apache.commons.io.filefilter.<a href="./org/apache/commons/io/filefilter/NameFileFilter.html" title="class in org.apache.commons.io.filefilter">NameFileFilter</a></dt>
-<dd>
-<div class="block">Provide a String representaion of this file filter.</div>
-</dd>
-<dt><span class="strong"><a href="./org/apache/commons/io/filefilter/NotFileFilter.html#toString()">toString()</a></span> - Method in class org.apache.commons.io.filefilter.<a href="./org/apache/commons/io/filefilter/NotFileFilter.html" title="class in org.apache.commons.io.filefilter">NotFileFilter</a></dt>
-<dd>
-<div class="block">Provide a String representaion of this file filter.</div>
-</dd>
-<dt><span class="strong"><a href="./org/apache/commons/io/filefilter/OrFileFilter.html#toString()">toString()</a></span> - Method in class org.apache.commons.io.filefilter.<a href="./org/apache/commons/io/filefilter/OrFileFilter.html" title="class in org.apache.commons.io.filefilter">OrFileFilter</a></dt>
-<dd>
-<div class="block">Provide a String representaion of this file filter.</div>
-</dd>
-<dt><span class="strong"><a href="./org/apache/commons/io/filefilter/PrefixFileFilter.html#toString()">toString()</a></span> - Method in class org.apache.commons.io.filefilter.<a href="./org/apache/commons/io/filefilter/PrefixFileFilter.html" title="class in org.apache.commons.io.filefilter">PrefixFileFilter</a></dt>
-<dd>
-<div class="block">Provide a String representaion of this file filter.</div>
-</dd>
-<dt><span class="strong"><a href="./org/apache/commons/io/filefilter/SizeFileFilter.html#toString()">toString()</a></span> - Method in class org.apache.commons.io.filefilter.<a href="./org/apache/commons/io/filefilter/SizeFileFilter.html" title="class in org.apache.commons.io.filefilter">SizeFileFilter</a></dt>
-<dd>
-<div class="block">Provide a String representaion of this file filter.</div>
-</dd>
-<dt><span class="strong"><a href="./org/apache/commons/io/filefilter/SuffixFileFilter.html#toString()">toString()</a></span> - Method in class org.apache.commons.io.filefilter.<a href="./org/apache/commons/io/filefilter/SuffixFileFilter.html" title="class in org.apache.commons.io.filefilter">SuffixFileFilter</a></dt>
-<dd>
-<div class="block">Provide a String representaion of this file filter.</div>
-</dd>
-<dt><span class="strong"><a href="./org/apache/commons/io/filefilter/WildcardFileFilter.html#toString()">toString()</a></span> - Method in class org.apache.commons.io.filefilter.<a href="./org/apache/commons/io/filefilter/WildcardFileFilter.html" title="class in org.apache.commons.io.filefilter">WildcardFileFilter</a></dt>
-<dd>
-<div class="block">Provide a String representation of this file filter.</div>
-</dd>
-<dt><span class="strong"><a href="./org/apache/commons/io/input/BoundedInputStream.html#toString()">toString()</a></span> - Method in class org.apache.commons.io.input.<a href="./org/apache/commons/io/input/BoundedInputStream.html" title="class in org.apache.commons.io.input">BoundedInputStream</a></dt>
-<dd>
-<div class="block">Invokes the delegate's <code>toString()</code> method.</div>
-</dd>
-<dt><span class="strong"><a href="./org/apache/commons/io/input/CharSequenceReader.html#toString()">toString()</a></span> - Method in class org.apache.commons.io.input.<a href="./org/apache/commons/io/input/CharSequenceReader.html" title="class in org.apache.commons.io.input">CharSequenceReader</a></dt>
-<dd>
-<div class="block">Return a String representation of the underlying
- character sequence.</div>
-</dd>
-<dt><span class="strong"><a href="./org/apache/commons/io/IOCase.html#toString()">toString()</a></span> - Method in class org.apache.commons.io.<a href="./org/apache/commons/io/IOCase.html" title="class in org.apache.commons.io">IOCase</a></dt>
-<dd>
-<div class="block">Gets a string describing the sensitivity.</div>
-</dd>
-<dt><span class="strong"><a href="./org/apache/commons/io/IOUtils.html#toString(java.io.InputStream)">toString(InputStream)</a></span> - Static method in class org.apache.commons.io.<a href="./org/apache/commons/io/IOUtils.html" title="class in org.apache.commons.io">IOUtils</a></dt>
-<dd>
-<div class="block"><span class="strong">Deprecated.</span>
-<div class="block"><i>2.5 use <a href="./org/apache/commons/io/IOUtils.html#toString(java.io.InputStream, java.nio.charset.Charset)"><code>IOUtils.toString(InputStream, Charset)</code></a> instead</i></div>
-</div>
-</dd>
-<dt><span class="strong"><a href="./org/apache/commons/io/IOUtils.html#toString(java.io.InputStream, java.nio.charset.Charset)">toString(InputStream, Charset)</a></span> - Static method in class org.apache.commons.io.<a href="./org/apache/commons/io/IOUtils.html" title="class in org.apache.commons.io">IOUtils</a></dt>
-<dd>
-<div class="block">Gets the contents of an <code>InputStream</code> as a String
- using the specified character encoding.</div>
-</dd>
-<dt><span class="strong"><a href="./org/apache/commons/io/IOUtils.html#toString(java.io.InputStream, java.lang.String)">toString(InputStream, String)</a></span> - Static method in class org.apache.commons.io.<a href="./org/apache/commons/io/IOUtils.html" title="class in org.apache.commons.io">IOUtils</a></dt>
-<dd>
-<div class="block">Gets the contents of an <code>InputStream</code> as a String
- using the specified character encoding.</div>
-</dd>
-<dt><span class="strong"><a href="./org/apache/commons/io/IOUtils.html#toString(java.io.Reader)">toString(Reader)</a></span> - Static method in class org.apache.commons.io.<a href="./org/apache/commons/io/IOUtils.html" title="class in org.apache.commons.io">IOUtils</a></dt>
-<dd>
-<div class="block">Gets the contents of a <code>Reader</code> as a String.</div>
-</dd>
-<dt><span class="strong"><a href="./org/apache/commons/io/IOUtils.html#toString(java.net.URI)">toString(URI)</a></span> - Static method in class org.apache.commons.io.<a href="./org/apache/commons/io/IOUtils.html" title="class in org.apache.commons.io">IOUtils</a></dt>
-<dd>
-<div class="block"><span class="strong">Deprecated.</span>
-<div class="block"><i>2.5 use <a href="./org/apache/commons/io/IOUtils.html#toString(java.net.URI, java.nio.charset.Charset)"><code>IOUtils.toString(URI, Charset)</code></a> instead</i></div>
-</div>
-</dd>
-<dt><span class="strong"><a href="./org/apache/commons/io/IOUtils.html#toString(java.net.URI, java.nio.charset.Charset)">toString(URI, Charset)</a></span> - Static method in class org.apache.commons.io.<a href="./org/apache/commons/io/IOUtils.html" title="class in org.apache.commons.io">IOUtils</a></dt>
-<dd>
-<div class="block">Gets the contents at the given URI.</div>
-</dd>
-<dt><span class="strong"><a href="./org/apache/commons/io/IOUtils.html#toString(java.net.URI, java.lang.String)">toString(URI, String)</a></span> - Static method in class org.apache.commons.io.<a href="./org/apache/commons/io/IOUtils.html" title="class in org.apache.commons.io">IOUtils</a></dt>
-<dd>
-<div class="block">Gets the contents at the given URI.</div>
-</dd>
-<dt><span class="strong"><a href="./org/apache/commons/io/IOUtils.html#toString(java.net.URL)">toString(URL)</a></span> - Static method in class org.apache.commons.io.<a href="./org/apache/commons/io/IOUtils.html" title="class in org.apache.commons.io">IOUtils</a></dt>
-<dd>
-<div class="block"><span class="strong">Deprecated.</span>
-<div class="block"><i>2.5 use <a href="./org/apache/commons/io/IOUtils.html#toString(java.net.URL, java.nio.charset.Charset)"><code>IOUtils.toString(URL, Charset)</code></a> instead</i></div>
-</div>
-</dd>
-<dt><span class="strong"><a href="./org/apache/commons/io/IOUtils.html#toString(java.net.URL, java.nio.charset.Charset)">toString(URL, Charset)</a></span> - Static method in class org.apache.commons.io.<a href="./org/apache/commons/io/IOUtils.html" title="class in org.apache.commons.io">IOUtils</a></dt>
-<dd>
-<div class="block">Gets the contents at the given URL.</div>
-</dd>
-<dt><span class="strong"><a href="./org/apache/commons/io/IOUtils.html#toString(java.net.URL, java.lang.String)">toString(URL, String)</a></span> - Static method in class org.apache.commons.io.<a href="./org/apache/commons/io/IOUtils.html" title="class in org.apache.commons.io">IOUtils</a></dt>
-<dd>
-<div class="block">Gets the contents at the given URL.</div>
-</dd>
-<dt><span class="strong"><a href="./org/apache/commons/io/IOUtils.html#toString(byte[])">toString(byte[])</a></span> - Static method in class org.apache.commons.io.<a href="./org/apache/commons/io/IOUtils.html" title="class in org.apache.commons.io">IOUtils</a></dt>
-<dd>
-<div class="block"><span class="strong">Deprecated.</span>
-<div class="block"><i>2.5 Use <a href="http://download.oracle.com/javase/6/docs/api/java/lang/String.html?is-external=true#String(byte[])" title="class or interface in java.lang"><code>String.String(byte[])</code></a> instead</i></div>
-</div>
-</dd>
-<dt><span class="strong"><a href="./org/apache/commons/io/IOUtils.html#toString(byte[], java.lang.String)">toString(byte[], String)</a></span> - Static method in class org.apache.commons.io.<a href="./org/apache/commons/io/IOUtils.html" title="class in org.apache.commons.io">IOUtils</a></dt>
-<dd>
-<div class="block">Gets the contents of a <code>byte[]</code> as a String
- using the specified character encoding.</div>
-</dd>
-<dt><span class="strong"><a href="./org/apache/commons/io/monitor/FileAlterationObserver.html#toString()">toString()</a></span> - Method in class org.apache.commons.io.monitor.<a href="./org/apache/commons/io/monitor/FileAlterationObserver.html" title="class in org.apache.commons.io.monitor">FileAlterationObserver</a></dt>
-<dd>
-<div class="block">Provide a String representation of this observer.</div>
-</dd>
-<dt><span class="strong"><a href="./org/apache/commons/io/output/ByteArrayOutputStream.html#toString()">toString()</a></span> - Method in class org.apache.commons.io.output.<a href="./org/apache/commons/io/output/ByteArrayOutputStream.html" title="class in org.apache.commons.io.output">ByteArrayOutputStream</a></dt>
-<dd>
-<div class="block"><span class="strong">Deprecated.</span>
-<div class="block"><i>2.5 use <a href="./org/apache/commons/io/output/ByteArrayOutputStream.html#toString(java.lang.String)"><code>ByteArrayOutputStream.toString(String)</code></a> instead</i></div>
-</div>
-</dd>
-<dt><span class="strong"><a href="./org/apache/commons/io/output/ByteArrayOutputStream.html#toString(java.lang.String)">toString(String)</a></span> - Method in class org.apache.commons.io.output.<a href="./org/apache/commons/io/output/ByteArrayOutputStream.html" title="class in org.apache.commons.io.output">ByteArrayOutputStream</a></dt>
-<dd>
-<div class="block">Gets the curent contents of this byte stream as a string
- using the specified encoding.</div>
-</dd>
-<dt><span class="strong"><a href="./org/apache/commons/io/output/ByteArrayOutputStream.html#toString(java.nio.charset.Charset)">toString(Charset)</a></span> - Method in class org.apache.commons.io.output.<a href="./org/apache/commons/io/output/ByteArrayOutputStream.html" title="class in org.apache.commons.io.output">ByteArrayOutputStream</a></dt>
-<dd>
-<div class="block">Gets the curent contents of this byte stream as a string
- using the specified encoding.</div>
-</dd>
-<dt><span class="strong"><a href="./org/apache/commons/io/output/StringBuilderWriter.html#toString()">toString()</a></span> - Method in class org.apache.commons.io.output.<a href="./org/apache/commons/io/output/StringBuilderWriter.html" title="class in org.apache.commons.io.output">StringBuilderWriter</a></dt>
-<dd>
-<div class="block">Returns <a href="http://download.oracle.com/javase/6/docs/api/java/lang/StringBuilder.html?is-external=true#toString()" title="class or interface in java.lang"><code>StringBuilder.toString()</code></a>.</div>
-</dd>
-<dt><span class="strong"><a href="./org/apache/commons/io/FileUtils.html#touch(java.io.File)">touch(File)</a></span> - Static method in class org.apache.commons.io.<a href="./org/apache/commons/io/FileUtils.html" title="class in org.apache.commons.io">FileUtils</a></dt>
-<dd>
-<div class="block">Implements the same behaviour as the "touch" utility on Unix.</div>
-</dd>
-<dt><span class="strong"><a href="./org/apache/commons/io/FileUtils.html#toURLs(java.io.File[])">toURLs(File[])</a></span> - Static method in class org.apache.commons.io.<a href="./org/apache/commons/io/FileUtils.html" title="class in org.apache.commons.io">FileUtils</a></dt>
-<dd>
-<div class="block">Converts each of an array of <code>File</code> to a <code>URL</code>.</div>
-</dd>
-<dt><span class="strong"><a href="./org/apache/commons/io/FileCleaner.html#track(java.io.File, java.lang.Object)">track(File, Object)</a></span> - Static method in class org.apache.commons.io.<a href="./org/apache/commons/io/FileCleaner.html" title="class in org.apache.commons.io">FileCleaner</a></dt>
-<dd>
-<div class="block"><span class="strong">Deprecated.</span>
-<div class="block"><i>Use <a href="./org/apache/commons/io/FileCleaningTracker.html#track(java.io.File, java.lang.Object)"><code>FileCleaningTracker.track(File, Object)</code></a>.</i></div>
-</div>
-</dd>
-<dt><span class="strong"><a href="./org/apache/commons/io/FileCleaner.html#track(java.io.File, java.lang.Object, org.apache.commons.io.FileDeleteStrategy)">track(File, Object, FileDeleteStrategy)</a></span> - Static method in class org.apache.commons.io.<a href="./org/apache/commons/io/FileCleaner.html" title="class in org.apache.commons.io">FileCleaner</a></dt>
-<dd>
-<div class="block"><span class="strong">Deprecated.</span>
-<div class="block"><i>Use <a href="./org/apache/commons/io/FileCleaningTracker.html#track(java.io.File, java.lang.Object, org.apache.commons.io.FileDeleteStrategy)"><code>FileCleaningTracker.track(File, Object, FileDeleteStrategy)</code></a>.</i></div>
-</div>
-</dd>
-<dt><span class="strong"><a href="./org/apache/commons/io/FileCleaner.html#track(java.lang.String, java.lang.Object)">track(String, Object)</a></span> - Static method in class org.apache.commons.io.<a href="./org/apache/commons/io/FileCleaner.html" title="class in org.apache.commons.io">FileCleaner</a></dt>
-<dd>
-<div class="block"><span class="strong">Deprecated.</span>
-<div class="block"><i>Use <a href="./org/apache/commons/io/FileCleaningTracker.html#track(java.lang.String, java.lang.Object)"><code>FileCleaningTracker.track(String, Object)</code></a>.</i></div>
-</div>
-</dd>
-<dt><span class="strong"><a href="./org/apache/commons/io/FileCleaner.html#track(java.lang.String, java.lang.Object, org.apache.commons.io.FileDeleteStrategy)">track(String, Object, FileDeleteStrategy)</a></span> - Static method in class org.apache.commons.io.<a href="./org/apache/commons/io/FileCleaner.html" title="class in org.apache.commons.io">FileCleaner</a></dt>
-<dd>
-<div class="block"><span class="strong">Deprecated.</span>
-<div class="block"><i>Use <a href="./org/apache/commons/io/FileCleaningTracker.html#track(java.lang.String, java.lang.Object, org.apache.commons.io.FileDeleteStrategy)"><code>FileCleaningTracker.track(String, Object, FileDeleteStrategy)</code></a>.</i></div>
-</div>
-</dd>
-<dt><span class="strong"><a href="./org/apache/commons/io/FileCleaningTracker.html#track(java.io.File, java.lang.Object)">track(File, Object)</a></span> - Method in class org.apache.commons.io.<a href="./org/apache/commons/io/FileCleaningTracker.html" title="class in org.apache.commons.io">FileCleaningTracker</a></dt>
-<dd>
-<div class="block">Track the specified file, using the provided marker, deleting the file
- when the marker instance is garbage collected.</div>
-</dd>
-<dt><span class="strong"><a href="./org/apache/commons/io/FileCleaningTracker.html#track(java.io.File, java.lang.Object, org.apache.commons.io.FileDeleteStrategy)">track(File, Object, FileDeleteStrategy)</a></span> - Method in class org.apache.commons.io.<a href="./org/apache/commons/io/FileCleaningTracker.html" title="class in org.apache.commons.io">FileCleaningTracker</a></dt>
-<dd>
-<div class="block">Track the specified file, using the provided marker, deleting the file
- when the marker instance is garbage collected.</div>
-</dd>
-<dt><span class="strong"><a href="./org/apache/commons/io/FileCleaningTracker.html#track(java.lang.String, java.lang.Object)">track(String, Object)</a></span> - Method in class org.apache.commons.io.<a href="./org/apache/commons/io/FileCleaningTracker.html" title="class in org.apache.commons.io">FileCleaningTracker</a></dt>
-<dd>
-<div class="block">Track the specified file, using the provided marker, deleting the file
- when the marker instance is garbage collected.</div>
-</dd>
-<dt><span class="strong"><a href="./org/apache/commons/io/FileCleaningTracker.html#track(java.lang.String, java.lang.Object, org.apache.commons.io.FileDeleteStrategy)">track(String, Object, FileDeleteStrategy)</a></span> - Method in class org.apache.commons.io.<a href="./org/apache/commons/io/FileCleaningTracker.html" title="class in org.apache.commons.io">FileCleaningTracker</a></dt>
-<dd>
-<div class="block">Track the specified file, using the provided marker, deleting the file
- when the marker instance is garbage collected.</div>
-</dd>
-<dt><span class="strong"><a href="./org/apache/commons/io/filefilter/TrueFileFilter.html#TRUE">TRUE</a></span> - Static variable in class org.apache.commons.io.filefilter.<a href="./org/apache/commons/io/filefilter/TrueFileFilter.html" title="class in org.apache.commons.io.filefilter">TrueFileFilter</a></dt>
-<dd>
-<div class="block">Singleton instance of true filter.</div>
-</dd>
-<dt><span class="strong"><a href="./org/apache/commons/io/filefilter/FileFilterUtils.html#trueFileFilter()">trueFileFilter()</a></span> - Static method in class org.apache.commons.io.filefilter.<a href="./org/apache/commons/io/filefilter/FileFilterUtils.html" title="class in org.apache.commons.io.filefilter">FileFilterUtils</a></dt>
-<dd>
-<div class="block">Returns a filter that always returns true.</div>
-</dd>
-<dt><a href="./org/apache/commons/io/filefilter/TrueFileFilter.html" title="class in org.apache.commons.io.filefilter"><span class="strong">TrueFileFilter</span></a> - Class in <a href="./org/apache/commons/io/filefilter/package-summary.html">org.apache.commons.io.filefilter</a></dt>
-<dd>
-<div class="block">A file filter that always returns true.</div>
-</dd>
-<dt><span class="strong"><a href="./org/apache/commons/io/filefilter/TrueFileFilter.html#TrueFileFilter()">TrueFileFilter()</a></span> - Constructor for class org.apache.commons.io.filefilter.<a href="./org/apache/commons/io/filefilter/TrueFileFilter.html" title="class in org.apache.commons.io.filefilter">TrueFileFilter</a></dt>
-<dd>
-<div class="block">Restrictive constructor.</div>
-</dd>
-</dl>
-<a name="_U_">
-<!--   -->
-</a>
-<h2 class="title">U</h2>
-<dl>
-<dt><span class="strong"><a href="./org/apache/commons/io/Charsets.html#US_ASCII">US_ASCII</a></span> - Static variable in class org.apache.commons.io.<a href="./org/apache/commons/io/Charsets.html" title="class in org.apache.commons.io">Charsets</a></dt>
-<dd>
-<div class="block">
- Seven-bit ASCII, also known as ISO646-US, also known as the Basic Latin block of the Unicode character set.</div>
-</dd>
-<dt><span class="strong"><a href="./org/apache/commons/io/Charsets.html#UTF_16">UTF_16</a></span> - Static variable in class org.apache.commons.io.<a href="./org/apache/commons/io/Charsets.html" title="class in org.apache.commons.io">Charsets</a></dt>
-<dd>
-<div class="block">
- Sixteen-bit Unicode Transformation Format, The byte order specified by a mandatory initial byte-order mark
- (either order accepted on input, big-endian used on output)</div>
-</dd>
-<dt><span class="strong"><a href="./org/apache/commons/io/ByteOrderMark.html#UTF_16BE">UTF_16BE</a></span> - Static variable in class org.apache.commons.io.<a href="./org/apache/commons/io/ByteOrderMark.html" title="class in org.apache.commons.io">ByteOrderMark</a></dt>
-<dd>
-<div class="block">UTF-16BE BOM (Big-Endian)</div>
-</dd>
-<dt><span class="strong"><a href="./org/apache/commons/io/Charsets.html#UTF_16BE">UTF_16BE</a></span> - Static variable in class org.apache.commons.io.<a href="./org/apache/commons/io/Charsets.html" title="class in org.apache.commons.io">Charsets</a></dt>
-<dd>
-<div class="block">
- Sixteen-bit Unicode Transformation Format, big-endian byte order.</div>
-</dd>
-<dt><span class="strong"><a href="./org/apache/commons/io/ByteOrderMark.html#UTF_16LE">UTF_16LE</a></span> - Static variable in class org.apache.commons.io.<a href="./org/apache/commons/io/ByteOrderMark.html" title="class in org.apache.commons.io">ByteOrderMark</a></dt>
-<dd>
-<div class="block">UTF-16LE BOM (Little-Endian)</div>
-</dd>
-<dt><span class="strong"><a href="./org/apache/commons/io/Charsets.html#UTF_16LE">UTF_16LE</a></span> - Static variable in class org.apache.commons.io.<a href="./org/apache/commons/io/Charsets.html" title="class in org.apache.commons.io">Charsets</a></dt>
-<dd>
-<div class="block">
- Sixteen-bit Unicode Transformation Format, little-endian byte order.</div>
-</dd>
-<dt><span class="strong"><a href="./org/apache/commons/io/ByteOrderMark.html#UTF_32BE">UTF_32BE</a></span> - Static variable in class org.apache.commons.io.<a href="./org/apache/commons/io/ByteOrderMark.html" title="class in org.apache.commons.io">ByteOrderMark</a></dt>
-<dd>
-<div class="block">UTF-32BE BOM (Big-Endian)</div>
-</dd>
-<dt><span class="strong"><a href="./org/apache/commons/io/ByteOrderMark.html#UTF_32LE">UTF_32LE</a></span> - Static variable in class org.apache.commons.io.<a href="./org/apache/commons/io/ByteOrderMark.html" title="class in org.apache.commons.io">ByteOrderMark</a></dt>
-<dd>
-<div class="block">UTF-32LE BOM (Little-Endian)</div>
-</dd>
-<dt><span class="strong"><a href="./org/apache/commons/io/ByteOrderMark.html#UTF_8">UTF_8</a></span> - Static variable in class org.apache.commons.io.<a href="./org/apache/commons/io/ByteOrderMark.html" title="class in org.apache.commons.io">ByteOrderMark</a></dt>
-<dd>
-<div class="block">UTF-8 BOM</div>
-</dd>
-<dt><span class="strong"><a href="./org/apache/commons/io/Charsets.html#UTF_8">UTF_8</a></span> - Static variable in class org.apache.commons.io.<a href="./org/apache/commons/io/Charsets.html" title="class in org.apache.commons.io">Charsets</a></dt>
-<dd>
-<div class="block">
- Eight-bit Unicode Transformation Format.</div>
-</dd>
-<dt><span class="strong"><a href="./org/apache/commons/io/ByteOrderMark.html#UTF_BOM">UTF_BOM</a></span> - Static variable in class org.apache.commons.io.<a href="./org/apache/commons/io/ByteOrderMark.html" title="class in org.apache.commons.io">ByteOrderMark</a></dt>
-<dd>
-<div class="block">Unicode BOM character; external form depends on the encoding.</div>
-</dd>
-</dl>
-<a name="_V_">
-<!--   -->
-</a>
-<h2 class="title">V</h2>
-<dl>
-<dt><span class="strong"><a href="./org/apache/commons/io/filefilter/HiddenFileFilter.html#VISIBLE">VISIBLE</a></span> - Static variable in class org.apache.commons.io.filefilter.<a href="./org/apache/commons/io/filefilter/HiddenFileFilter.html" title="class in org.apache.commons.io.filefilter">HiddenFileFilter</a></dt>
-<dd>
-<div class="block">Singleton instance of <i>visible</i> filter</div>
-</dd>
-</dl>
-<a name="_W_">
-<!--   -->
-</a>
-<h2 class="title">W</h2>
-<dl>
-<dt><span class="strong"><a href="./org/apache/commons/io/FileUtils.html#waitFor(java.io.File, int)">waitFor(File, int)</a></span> - Static method in class org.apache.commons.io.<a href="./org/apache/commons/io/FileUtils.html" title="class in org.apache.commons.io">FileUtils</a></dt>
-<dd>
-<div class="block">Waits for NFS to propagate a file creation, imposing a timeout.</div>
-</dd>
-<dt><span class="strong"><a href="./org/apache/commons/io/DirectoryWalker.html#walk(java.io.File, java.util.Collection)">walk(File, Collection&lt;T&gt;)</a></span> - Method in class org.apache.commons.io.<a href="./org/apache/commons/io/DirectoryWalker.html" title="class in org.apache.commons.io">DirectoryWalker</a></dt>
-<dd>
-<div class="block">Internal method that walks the directory hierarchy in a depth-first manner.</div>
-</dd>
-<dt><a href="./org/apache/commons/io/filefilter/WildcardFileFilter.html" title="class in org.apache.commons.io.filefilter"><span class="strong">WildcardFileFilter</span></a> - Class in <a href="./org/apache/commons/io/filefilter/package-summary.html">org.apache.commons.io.filefilter</a></dt>
-<dd>
-<div class="block">Filters files using the supplied wildcards.</div>
-</dd>
-<dt><span class="strong"><a href="./org/apache/commons/io/filefilter/WildcardFileFilter.html#WildcardFileFilter(java.lang.String)">WildcardFileFilter(String)</a></span> - Constructor for class org.apache.commons.io.filefilter.<a href="./org/apache/commons/io/filefilter/WildcardFileFilter.html" title="class in org.apache.commons.io.filefilter">WildcardFileFilter</a></dt>
-<dd>
-<div class="block">Construct a new case-sensitive wildcard filter for a single wildcard.</div>
-</dd>
-<dt><span class="strong"><a href="./org/apache/commons/io/filefilter/WildcardFileFilter.html#WildcardFileFilter(java.lang.String, org.apache.commons.io.IOCase)">WildcardFileFilter(String, IOCase)</a></span> - Constructor for class org.apache.commons.io.filefilter.<a href="./org/apache/commons/io/filefilter/WildcardFileFilter.html" title="class in org.apache.commons.io.filefilter">WildcardFileFilter</a></dt>
-<dd>
-<div class="block">Construct a new wildcard filter for a single wildcard specifying case-sensitivity.</div>
-</dd>
-<dt><span class="strong"><a href="./org/apache/commons/io/filefilter/WildcardFileFilter.html#WildcardFileFilter(java.lang.String[])">WildcardFileFilter(String[])</a></span> - Constructor for class org.apache.commons.io.filefilter.<a href="./org/apache/commons/io/filefilter/WildcardFileFilter.html" title="class in org.apache.commons.io.filefilter">WildcardFileFilter</a></dt>
-<dd>
-<div class="block">Construct a new case-sensitive wildcard filter for an array of wildcards.</div>
-</dd>
-<dt><span class="strong"><a href="./org/apache/commons/io/filefilter/WildcardFileFilter.html#WildcardFileFilter(java.lang.String[], org.apache.commons.io.IOCase)">WildcardFileFilter(String[], IOCase)</a></span> - Constructor for class org.apache.commons.io.filefilter.<a href="./org/apache/commons/io/filefilter/WildcardFileFilter.html" title="class in org.apache.commons.io.filefilter">WildcardFileFilter</a></dt>
-<dd>
-<div class="block">Construct a new wildcard filter for an array of wildcards specifying case-sensitivity.</div>
-</dd>
-<dt><span class="strong"><a href="./org/apache/commons/io/filefilter/WildcardFileFilter.html#WildcardFileFilter(java.util.List)">WildcardFileFilter(List&lt;String&gt;)</a></span> - Constructor for class org.apache.commons.io.filefilter.<a href="./org/apache/commons/io/filefilter/WildcardFileFilter.html" title="class in org.apache.commons.io.filefilter">WildcardFileFilter</a></dt>
-<dd>
-<div class="block">Construct a new case-sensitive wildcard filter for a list of wildcards.</div>
-</dd>
-<dt><span class="strong"><a href="./org/apache/commons/io/filefilter/WildcardFileFilter.html#WildcardFileFilter(java.util.List, org.apache.commons.io.IOCase)">WildcardFileFilter(List&lt;String&gt;, IOCase)</a></span> - Constructor for class org.apache.commons.io.filefilter.<a href="./org/apache/commons/io/filefilter/WildcardFileFilter.html" title="class in org.apache.commons.io.filefilter">WildcardFileFilter</a></dt>
-<dd>
-<div class="block">Construct a new wildcard filter for a list of wildcards specifying case-sensitivity.</div>
-</dd>
-<dt><a href="./org/apache/commons/io/filefilter/WildcardFilter.html" title="class in org.apache.commons.io.filefilter"><span class="strong">WildcardFilter</span></a> - Class in <a href="./org/apache/commons/io/filefilter/package-summary.html">org.apache.commons.io.filefilter</a></dt>
-<dd>
-<div class="block"><span class="strong">Deprecated.</span>
-<div class="block"><i>Use WilcardFileFilter. Deprecated as this class performs directory
- filtering which it shouldn't do, but that can't be removed due to compatability.</i></div>
-</div>
-</dd>
-<dt><span class="strong"><a href="./org/apache/commons/io/filefilter/WildcardFilter.html#WildcardFilter(java.lang.String)">WildcardFilter(String)</a></span> - Constructor for class org.apache.commons.io.filefilter.<a href="./org/apache/commons/io/filefilter/WildcardFilter.html" title="class in org.apache.commons.io.filefilter">WildcardFilter</a></dt>
-<dd>
-<div class="block"><span class="strong">Deprecated.</span></div>
-<div class="block">Construct a new case-sensitive wildcard filter for a single wildcard.</div>
-</dd>
-<dt><span class="strong"><a href="./org/apache/commons/io/filefilter/WildcardFilter.html#WildcardFilter(java.lang.String[])">WildcardFilter(String[])</a></span> - Constructor for class org.apache.commons.io.filefilter.<a href="./org/apache/commons/io/filefilter/WildcardFilter.html" title="class in org.apache.commons.io.filefilter">WildcardFilter</a></dt>
-<dd>
-<div class="block"><span class="strong">Deprecated.</span></div>
-<div class="block">Construct a new case-sensitive wildcard filter for an array of wildcards.</div>
-</dd>
-<dt><span class="strong"><a href="./org/apache/commons/io/filefilter/WildcardFilter.html#WildcardFilter(java.util.List)">WildcardFilter(List&lt;String&gt;)</a></span> - Constructor for class org.apache.commons.io.filefilter.<a href="./org/apache/commons/io/filefilter/WildcardFilter.html" title="class in org.apache.commons.io.filefilter">WildcardFilter</a></dt>
-<dd>
-<div class="block"><span class="strong">Deprecated.</span></div>
-<div class="block">Construct a new case-sensitive wildcard filter for a list of wildcards.</div>
-</dd>
-<dt><span class="strong"><a href="./org/apache/commons/io/FilenameUtils.html#wildcardMatch(java.lang.String, java.lang.String)">wildcardMatch(String, String)</a></span> - Static method in class org.apache.commons.io.<a href="./org/apache/commons/io/FilenameUtils.html" title="class in org.apache.commons.io">FilenameUtils</a></dt>
-<dd>
-<div class="block">Checks a filename to see if it matches the specified wildcard matcher,
- always testing case-sensitive.</div>
-</dd>
-<dt><span class="strong"><a href="./org/apache/commons/io/FilenameUtils.html#wildcardMatch(java.lang.String, java.lang.String, org.apache.commons.io.IOCase)">wildcardMatch(String, String, IOCase)</a></span> - Static method in class org.apache.commons.io.<a href="./org/apache/commons/io/FilenameUtils.html" title="class in org.apache.commons.io">FilenameUtils</a></dt>
-<dd>
-<div class="block">Checks a filename to see if it matches the specified wildcard matcher
- allowing control over case-sensitivity.</div>
-</dd>
-<dt><span class="strong"><a href="./org/apache/commons/io/FilenameUtils.html#wildcardMatchOnSystem(java.lang.String, java.lang.String)">wildcardMatchOnSystem(String, String)</a></span> - Static method in class org.apache.commons.io.<a href="./org/apache/commons/io/FilenameUtils.html" title="class in org.apache.commons.io">FilenameUtils</a></dt>
-<dd>
-<div class="block">Checks a filename to see if it matches the specified wildcard matcher
- using the case rules of the system.</div>
-</dd>
-<dt><span class="strong"><a href="./org/apache/commons/io/FileUtils.html#write(java.io.File, java.lang.CharSequence)">write(File, CharSequence)</a></span> - Static method in class org.apache.commons.io.<a href="./org/apache/commons/io/FileUtils.html" title="class in org.apache.commons.io">FileUtils</a></dt>
-<dd>
-<div class="block"><span class="strong">Deprecated.</span>
-<div class="block"><i>2.5 use <a href="./org/apache/commons/io/FileUtils.html#write(java.io.File, java.lang.CharSequence, java.nio.charset.Charset)"><code>FileUtils.write(File, CharSequence, Charset)</code></a> instead</i></div>
-</div>
-</dd>
-<dt><span class="strong"><a href="./org/apache/commons/io/FileUtils.html#write(java.io.File, java.lang.CharSequence, boolean)">write(File, CharSequence, boolean)</a></span> - Static method in class org.apache.commons.io.<a href="./org/apache/commons/io/FileUtils.html" title="class in org.apache.commons.io">FileUtils</a></dt>
-<dd>
-<div class="block"><span class="strong">Deprecated.</span>
-<div class="block"><i>2.5 use <a href="./org/apache/commons/io/FileUtils.html#write(java.io.File, java.lang.CharSequence, java.nio.charset.Charset, boolean)"><code>FileUtils.write(File, CharSequence, Charset, boolean)</code></a> instead</i></div>
-</div>
-</dd>
-<dt><span class="strong"><a href="./org/apache/commons/io/FileUtils.html#write(java.io.File, java.lang.CharSequence, java.nio.charset.Charset)">write(File, CharSequence, Charset)</a></span> - Static method in class org.apache.commons.io.<a href="./org/apache/commons/io/FileUtils.html" title="class in org.apache.commons.io">FileUtils</a></dt>
-<dd>
-<div class="block">Writes a CharSequence to a file creating the file if it does not exist.</div>
-</dd>
-<dt><span class="strong"><a href="./org/apache/commons/io/FileUtils.html#write(java.io.File, java.lang.CharSequence, java.lang.String)">write(File, CharSequence, String)</a></span> - Static method in class org.apache.commons.io.<a href="./org/apache/commons/io/FileUtils.html" title="class in org.apache.commons.io">FileUtils</a></dt>
-<dd>
-<div class="block">Writes a CharSequence to a file creating the file if it does not exist.</div>
-</dd>
-<dt><span class="strong"><a href="./org/apache/commons/io/FileUtils.html#write(java.io.File, java.lang.CharSequence, java.nio.charset.Charset, boolean)">write(File, CharSequence, Charset, boolean)</a></span> - Static method in class org.apache.commons.io.<a href="./org/apache/commons/io/FileUtils.html" title="class in org.apache.commons.io">FileUtils</a></dt>
-<dd>
-<div class="block">Writes a CharSequence to a file creating the file if it does not exist.</div>
-</dd>
-<dt><span class="strong"><a href="./org/apache/commons/io/FileUtils.html#write(java.io.File, java.lang.CharSequence, java.lang.String, boolean)">write(File, CharSequence, String, boolean)</a></span> - Static method in class org.apache.commons.io.<a href="./org/apache/commons/io/FileUtils.html" title="class in org.apache.commons.io">FileUtils</a></dt>
-<dd>
-<div class="block">Writes a CharSequence to a file creating the file if it does not exist.</div>
-</dd>
-<dt><span class="strong"><a href="./org/apache/commons/io/IOUtils.html#write(byte[], java.io.OutputStream)">write(byte[], OutputStream)</a></span> - Static method in class org.apache.commons.io.<a href="./org/apache/commons/io/IOUtils.html" title="class in org.apache.commons.io">IOUtils</a></dt>
-<dd>
-<div class="block">Writes bytes from a <code>byte[]</code> to an <code>OutputStream</code>.</div>
-</dd>
-<dt><span class="strong"><a href="./org/apache/commons/io/IOUtils.html#write(byte[], java.io.Writer)">write(byte[], Writer)</a></span> - Static method in class org.apache.commons.io.<a href="./org/apache/commons/io/IOUtils.html" title="class in org.apache.commons.io">IOUtils</a></dt>
-<dd>
-<div class="block"><span class="strong">Deprecated.</span>
-<div class="block"><i>2.5 use <a href="./org/apache/commons/io/IOUtils.html#write(byte[], java.io.Writer, java.nio.charset.Charset)"><code>IOUtils.write(byte[], Writer, Charset)</code></a> instead</i></div>
-</div>
-</dd>
-<dt><span class="strong"><a href="./org/apache/commons/io/IOUtils.html#write(byte[], java.io.Writer, java.nio.charset.Charset)">write(byte[], Writer, Charset)</a></span> - Static method in class org.apache.commons.io.<a href="./org/apache/commons/io/IOUtils.html" title="class in org.apache.commons.io">IOUtils</a></dt>
-<dd>
-<div class="block">Writes bytes from a <code>byte[]</code> to chars on a <code>Writer</code>
- using the specified character encoding.</div>
-</dd>
-<dt><span class="strong"><a href="./org/apache/commons/io/IOUtils.html#write(byte[], java.io.Writer, java.lang.String)">write(byte[], Writer, String)</a></span> - Static method in class org.apache.commons.io.<a href="./org/apache/commons/io/IOUtils.html" title="class in org.apache.commons.io">IOUtils</a></dt>
-<dd>
-<div class="block">Writes bytes from a <code>byte[]</code> to chars on a <code>Writer</code>
- using the specified character encoding.</div>
-</dd>
-<dt><span class="strong"><a href="./org/apache/commons/io/IOUtils.html#write(char[], java.io.Writer)">write(char[], Writer)</a></span> - Static method in class org.apache.commons.io.<a href="./org/apache/commons/io/IOUtils.html" title="class in org.apache.commons.io">IOUtils</a></dt>
-<dd>
-<div class="block">Writes chars from a <code>char[]</code> to a <code>Writer</code>
- using the default character encoding of the platform.</div>
-</dd>
-<dt><span class="strong"><a href="./org/apache/commons/io/IOUtils.html#write(char[], java.io.OutputStream)">write(char[], OutputStream)</a></span> - Static method in class org.apache.commons.io.<a href="./org/apache/commons/io/IOUtils.html" title="class in org.apache.commons.io">IOUtils</a></dt>
-<dd>
-<div class="block"><span class="strong">Deprecated.</span>
-<div class="block"><i>2.5 use <a href="./org/apache/commons/io/IOUtils.html#write(char[], java.io.OutputStream, java.nio.charset.Charset)"><code>IOUtils.write(char[], OutputStream, Charset)</code></a> instead</i></div>
-</div>
-</dd>
-<dt><span class="strong"><a href="./org/apache/commons/io/IOUtils.html#write(char[], java.io.OutputStream, java.nio.charset.Charset)">write(char[], OutputStream, Charset)</a></span> - Static method in class org.apache.commons.io.<a href="./org/apache/commons/io/IOUtils.html" title="class in org.apache.commons.io">IOUtils</a></dt>
-<dd>
-<div class="block">Writes chars from a <code>char[]</code> to bytes on an
- <code>OutputStream</code> using the specified character encoding.</div>
-</dd>
-<dt><span class="strong"><a href="./org/apache/commons/io/IOUtils.html#write(char[], java.io.OutputStream, java.lang.String)">write(char[], OutputStream, String)</a></span> - Static method in class org.apache.commons.io.<a href="./org/apache/commons/io/IOUtils.html" title="class in org.apache.commons.io">IOUtils</a></dt>
-<dd>
-<div class="block">Writes chars from a <code>char[]</code> to bytes on an
- <code>OutputStream</code> using the specified character encoding.</div>
-</dd>
-<dt><span class="strong"><a href="./org/apache/commons/io/IOUtils.html#write(java.lang.CharSequence, java.io.Writer)">write(CharSequence, Writer)</a></span> - Static method in class org.apache.commons.io.<a href="./org/apache/commons/io/IOUtils.html" title="class in org.apache.commons.io">IOUtils</a></dt>
-<dd>
-<div class="block">Writes chars from a <code>CharSequence</code> to a <code>Writer</code>.</div>
-</dd>
-<dt><span class="strong"><a href="./org/apache/commons/io/IOUtils.html#write(java.lang.CharSequence, java.io.OutputStream)">write(CharSequence, OutputStream)</a></span> - Static method in class org.apache.commons.io.<a href="./org/apache/commons/io/IOUtils.html" title="class in org.apache.commons.io">IOUtils</a></dt>
-<dd>
-<div class="block"><span class="strong">Deprecated.</span>
-<div class="block"><i>2.5 use <a href="./org/apache/commons/io/IOUtils.html#write(java.lang.CharSequence, java.io.OutputStream, java.nio.charset.Charset)"><code>IOUtils.write(CharSequence, OutputStream, Charset)</code></a> instead</i></div>
-</div>
-</dd>
-<dt><span class="strong"><a href="./org/apache/commons/io/IOUtils.html#write(java.lang.CharSequence, java.io.OutputStream, java.nio.charset.Charset)">write(CharSequence, OutputStream, Charset)</a></span> - Static method in class org.apache.commons.io.<a href="./org/apache/commons/io/IOUtils.html" title="class in org.apache.commons.io">IOUtils</a></dt>
-<dd>
-<div class="block">Writes chars from a <code>CharSequence</code> to bytes on an
- <code>OutputStream</code> using the specified character encoding.</div>
-</dd>
-<dt><span class="strong"><a href="./org/apache/commons/io/IOUtils.html#write(java.lang.CharSequence, java.io.OutputStream, java.lang.String)">write(CharSequence, OutputStream, String)</a></span> - Static method in class org.apache.commons.io.<a href="./org/apache/commons/io/IOUtils.html" title="class in org.apache.commons.io">IOUtils</a></dt>
-<dd>
-<div class="block">Writes chars from a <code>CharSequence</code> to bytes on an
- <code>OutputStream</code> using the specified character encoding.</div>
-</dd>
-<dt><span class="strong"><a href="./org/apache/commons/io/IOUtils.html#write(java.lang.String, java.io.Writer)">write(String, Writer)</a></span> - Static method in class org.apache.commons.io.<a href="./org/apache/commons/io/IOUtils.html" title="class in org.apache.commons.io">IOUtils</a></dt>
-<dd>
-<div class="block">Writes chars from a <code>String</code> to a <code>Writer</code>.</div>
-</dd>
-<dt><span class="strong"><a href="./org/apache/commons/io/IOUtils.html#write(java.lang.String, java.io.OutputStream)">write(String, OutputStream)</a></span> - Static method in class org.apache.commons.io.<a href="./org/apache/commons/io/IOUtils.html" title="class in org.apache.commons.io">IOUtils</a></dt>
-<dd>
-<div class="block"><span class="strong">Deprecated.</span>
-<div class="block"><i>2.5 use <a href="./org/apache/commons/io/IOUtils.html#write(java.lang.String, java.io.OutputStream, java.nio.charset.Charset)"><code>IOUtils.write(String, OutputStream, Charset)</code></a> instead</i></div>
-</div>
-</dd>
-<dt><span class="strong"><a href="./org/apache/commons/io/IOUtils.html#write(java.lang.String, java.io.OutputStream, java.nio.charset.Charset)">write(String, OutputStream, Charset)</a></span> - Static method in class org.apache.commons.io.<a href="./org/apache/commons/io/IOUtils.html" title="class in org.apache.commons.io">IOUtils</a></dt>
-<dd>
-<div class="block">Writes chars from a <code>String</code> to bytes on an
- <code>OutputStream</code> using the specified character encoding.</div>
-</dd>
-<dt><span class="strong"><a href="./org/apache/commons/io/IOUtils.html#write(java.lang.String, java.io.OutputStream, java.lang.String)">write(String, OutputStream, String)</a></span> - Static method in class org.apache.commons.io.<a href="./org/apache/commons/io/IOUtils.html" title="class in org.apache.commons.io">IOUtils</a></dt>
-<dd>
-<div class="block">Writes chars from a <code>String</code> to bytes on an
- <code>OutputStream</code> using the specified character encoding.</div>
-</dd>
-<dt><span class="strong"><a href="./org/apache/commons/io/IOUtils.html#write(java.lang.StringBuffer, java.io.Writer)">write(StringBuffer, Writer)</a></span> - Static method in class org.apache.commons.io.<a href="./org/apache/commons/io/IOUtils.html" title="class in org.apache.commons.io">IOUtils</a></dt>
-<dd>
-<div class="block"><span class="strong">Deprecated.</span>
-<div class="block"><i>replaced by write(CharSequence, Writer)</i></div>
-</div>
-</dd>
-<dt><span class="strong"><a href="./org/apache/commons/io/IOUtils.html#write(java.lang.StringBuffer, java.io.OutputStream)">write(StringBuffer, OutputStream)</a></span> - Static method in class org.apache.commons.io.<a href="./org/apache/commons/io/IOUtils.html" title="class in org.apache.commons.io">IOUtils</a></dt>
-<dd>
-<div class="block"><span class="strong">Deprecated.</span>
-<div class="block"><i>replaced by write(CharSequence, OutputStream)</i></div>
-</div>
-</dd>
-<dt><span class="strong"><a href="./org/apache/commons/io/IOUtils.html#write(java.lang.StringBuffer, java.io.OutputStream, java.lang.String)">write(StringBuffer, OutputStream, String)</a></span> - Static method in class org.apache.commons.io.<a href="./org/apache/commons/io/IOUtils.html" title="class in org.apache.commons.io">IOUtils</a></dt>
-<dd>
-<div class="block"><span class="strong">Deprecated.</span>
-<div class="block"><i>replaced by write(CharSequence, OutputStream, String)</i></div>
-</div>
-</dd>
-<dt><span class="strong"><a href="./org/apache/commons/io/output/BrokenOutputStream.html#write(int)">write(int)</a></span> - Method in class org.apache.commons.io.output.<a href="./org/apache/commons/io/output/BrokenOutputStream.html" title="class in org.apache.commons.io.output">BrokenOutputStream</a></dt>
-<dd>
-<div class="block">Throws the configured exception.</div>
-</dd>
-<dt><span class="strong"><a href="./org/apache/commons/io/output/ByteArrayOutputStream.html#write(byte[], int, int)">write(byte[], int, int)</a></span> - Method in class org.apache.commons.io.output.<a href="./org/apache/commons/io/output/ByteArrayOutputStream.html" title="class in org.apache.commons.io.output">ByteArrayOutputStream</a></dt>
-<dd>
-<div class="block">Write the bytes to byte array.</div>
-</dd>
-<dt><span class="strong"><a href="./org/apache/commons/io/output/ByteArrayOutputStream.html#write(int)">write(int)</a></span> - Method in class org.apache.commons.io.output.<a href="./org/apache/commons/io/output/ByteArrayOutputStream.html" title="class in org.apache.commons.io.output">ByteArrayOutputStream</a></dt>
-<dd>
-<div class="block">Write a byte to byte array.</div>
-</dd>
-<dt><span class="strong"><a href="./org/apache/commons/io/output/ByteArrayOutputStream.html#write(java.io.InputStream)">write(InputStream)</a></span> - Method in class org.apache.commons.io.output.<a href="./org/apache/commons/io/output/ByteArrayOutputStream.html" title="class in org.apache.commons.io.output">ByteArrayOutputStream</a></dt>
-<dd>
-<div class="block">Writes the entire contents of the specified input stream to this
- byte stream.</div>
-</dd>
-<dt><span class="strong"><a href="./org/apache/commons/io/output/ClosedOutputStream.html#write(int)">write(int)</a></span> - Method in class org.apache.commons.io.output.<a href="./org/apache/commons/io/output/ClosedOutputStream.html" title="class in org.apache.commons.io.output">ClosedOutputStream</a></dt>
-<dd>
-<div class="block">Throws an <a href="http://download.oracle.com/javase/6/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io"><code>IOException</code></a> to indicate that the stream is closed.</div>
-</dd>
-<dt><span class="strong"><a href="./org/apache/commons/io/output/DemuxOutputStream.html#write(int)">write(int)</a></span> - Method in class org.apache.commons.io.output.<a href="./org/apache/commons/io/output/DemuxOutputStream.html" title="class in org.apache.commons.io.output">DemuxOutputStream</a></dt>
-<dd>
-<div class="block">Writes byte to stream associated with current thread.</div>
-</dd>
-<dt><span class="strong"><a href="./org/apache/commons/io/output/FileWriterWithEncoding.html#write(int)">write(int)</a></span> - Method in class org.apache.commons.io.output.<a href="./org/apache/commons/io/output/FileWriterWithEncoding.html" title="class in org.apache.commons.io.output">FileWriterWithEncoding</a></dt>
-<dd>
-<div class="block">Write a character.</div>
-</dd>
-<dt><span class="strong"><a href="./org/apache/commons/io/output/FileWriterWithEncoding.html#write(char[])">write(char[])</a></span> - Method in class org.apache.commons.io.output.<a href="./org/apache/commons/io/output/FileWriterWithEncoding.html" title="class in org.apache.commons.io.output">FileWriterWithEncoding</a></dt>
-<dd>
-<div class="block">Write the characters from an array.</div>
-</dd>
-<dt><span class="strong"><a href="./org/apache/commons/io/output/FileWriterWithEncoding.html#write(char[], int, int)">write(char[], int, int)</a></span> - Method in class org.apache.commons.io.output.<a href="./org/apache/commons/io/output/FileWriterWithEncoding.html" title="class in org.apache.commons.io.output">FileWriterWithEncoding</a></dt>
-<dd>
-<div class="block">Write the specified characters from an array.</div>
-</dd>
-<dt><span class="strong"><a href="./org/apache/commons/io/output/FileWriterWithEncoding.html#write(java.lang.String)">write(String)</a></span> - Method in class org.apache.commons.io.output.<a href="./org/apache/commons/io/output/FileWriterWithEncoding.html" title="class in org.apache.commons.io.output">FileWriterWithEncoding</a></dt>
-<dd>
-<div class="block">Write the characters from a string.</div>
-</dd>
-<dt><span class="strong"><a href="./org/apache/commons/io/output/FileWriterWithEncoding.html#write(java.lang.String, int, int)">write(String, int, int)</a></span> - Method in class org.apache.commons.io.output.<a href="./org/apache/commons/io/output/FileWriterWithEncoding.html" title="class in org.apache.commons.io.output">FileWriterWithEncoding</a></dt>
-<dd>
-<div class="block">Write the specified characters from a string.</div>
-</dd>
-<dt><span class="strong"><a href="./org/apache/commons/io/output/LockableFileWriter.html#write(int)">write(int)</a></span> - Method in class org.apache.commons.io.output.<a href="./org/apache/commons/io/output/LockableFileWriter.html" title="class in org.apache.commons.io.output">LockableFileWriter</a></dt>
-<dd>
-<div class="block">Write a character.</div>
-</dd>
-<dt><span class="strong"><a href="./org/apache/commons/io/output/LockableFileWriter.html#write(char[])">write(char[])</a></span> - Method in class org.apache.commons.io.output.<a href="./org/apache/commons/io/output/LockableFileWriter.html" title="class in org.apache.commons.io.output">LockableFileWriter</a></dt>
-<dd>
-<div class="block">Write the characters from an array.</div>
-</dd>
-<dt><span class="strong"><a href="./org/apache/commons/io/output/LockableFileWriter.html#write(char[], int, int)">write(char[], int, int)</a></span> - Method in class org.apache.commons.io.output.<a href="./org/apache/commons/io/output/LockableFileWriter.html" title="class in org.apache.commons.io.output">LockableFileWriter</a></dt>
-<dd>
-<div class="block">Write the specified characters from an array.</div>
-</dd>
-<dt><span class="strong"><a href="./org/apache/commons/io/output/LockableFileWriter.html#write(java.lang.String)">write(String)</a></span> - Method in class org.apache.commons.io.output.<a href="./org/apache/commons/io/output/LockableFileWriter.html" title="class in org.apache.commons.io.output">LockableFileWriter</a></dt>
-<dd>
-<div class="block">Write the characters from a string.</div>
-</dd>
-<dt><span class="strong"><a href="./org/apache/commons/io/output/LockableFileWriter.html#write(java.lang.String, int, int)">write(String, int, int)</a></span> - Method in class org.apache.commons.io.output.<a href="./org/apache/commons/io/output/LockableFileWriter.html" title="class in org.apache.commons.io.output">LockableFileWriter</a></dt>
-<dd>
-<div class="block">Write the specified characters from a string.</div>
-</dd>
-<dt><span class="strong"><a href="./org/apache/commons/io/output/NullOutputStream.html#write(byte[], int, int)">write(byte[], int, int)</a></span> - Method in class org.apache.commons.io.output.<a href="./org/apache/commons/io/output/NullOutputStream.html" title="class in org.apache.commons.io.output">NullOutputStream</a></dt>
-<dd>
-<div class="block">Does nothing - output to <code>/dev/null</code>.</div>
-</dd>
-<dt><span class="strong"><a href="./org/apache/commons/io/output/NullOutputStream.html#write(int)">write(int)</a></span> - Method in class org.apache.commons.io.output.<a href="./org/apache/commons/io/output/NullOutputStream.html" title="class in org.apache.commons.io.output">NullOutputStream</a></dt>
-<dd>
-<div class="block">Does nothing - output to <code>/dev/null</code>.</div>
-</dd>
-<dt><span class="strong"><a href="./org/apache/commons/io/output/NullOutputStream.html#write(byte[])">write(byte[])</a></span> - Method in class org.apache.commons.io.output.<a href="./org/apache/commons/io/output/NullOutputStream.html" title="class in org.apache.commons.io.output">NullOutputStream</a></dt>
-<dd>
-<div class="block">Does nothing - output to <code>/dev/null</code>.</div>
-</dd>
-<dt><span class="strong"><a href="./org/apache/commons/io/output/NullWriter.html#write(int)">write(int)</a></span> - Method in class org.apache.commons.io.output.<a href="./org/apache/commons/io/output/NullWriter.html" title="class in org.apache.commons.io.output">NullWriter</a></dt>
-<dd>
-<div class="block">Does nothing - output to <code>/dev/null</code>.</div>
-</dd>
-<dt><span class="strong"><a href="./org/apache/commons/io/output/NullWriter.html#write(char[])">write(char[])</a></span> - Method in class org.apache.commons.io.output.<a href="./org/apache/commons/io/output/NullWriter.html" title="class in org.apache.commons.io.output">NullWriter</a></dt>
-<dd>
-<div class="block">Does nothing - output to <code>/dev/null</code>.</div>
-</dd>
-<dt><span class="strong"><a href="./org/apache/commons/io/output/NullWriter.html#write(char[], int, int)">write(char[], int, int)</a></span> - Method in class org.apache.commons.io.output.<a href="./org/apache/commons/io/output/NullWriter.html" title="class in org.apache.commons.io.output">NullWriter</a></dt>
-<dd>
-<div class="block">Does nothing - output to <code>/dev/null</code>.</div>
-</dd>
-<dt><span class="strong"><a href="./org/apache/commons/io/output/NullWriter.html#write(java.lang.String)">write(String)</a></span> - Method in class org.apache.commons.io.output.<a href="./org/apache/commons/io/output/NullWriter.html" title="class in org.apache.commons.io.output">NullWriter</a></dt>
-<dd>
-<div class="block">Does nothing - output to <code>/dev/null</code>.</div>
-</dd>
-<dt><span class="strong"><a href="./org/apache/commons/io/output/NullWriter.html#write(java.lang.String, int, int)">write(String, int, int)</a></span> - Method in class org.apache.commons.io.output.<a href="./org/apache/commons/io/output/NullWriter.html" title="class in org.apache.commons.io.output">NullWriter</a></dt>
-<dd>
-<div class="block">Does nothing - output to <code>/dev/null</code>.</div>
-</dd>
-<dt><span class="strong"><a href="./org/apache/commons/io/output/ProxyOutputStream.html#write(int)">write(int)</a></span> - Method in class org.apache.commons.io.output.<a href="./org/apache/commons/io/output/ProxyOutputStream.html" title="class in org.apache.commons.io.output">ProxyOutputStream</a></dt>
-<dd>
-<div class="block">Invokes the delegate's <code>write(int)</code> method.</div>
-</dd>
-<dt><span class="strong"><a href="./org/apache/commons/io/output/ProxyOutputStream.html#write(byte[])">write(byte[])</a></span> - Method in class org.apache.commons.io.output.<a href="./org/apache/commons/io/output/ProxyOutputStream.html" title="class in org.apache.commons.io.output">ProxyOutputStream</a></dt>
-<dd>
-<div class="block">Invokes the delegate's <code>write(byte[])</code> method.</div>
-</dd>
-<dt><span class="strong"><a href="./org/apache/commons/io/output/ProxyOutputStream.html#write(byte[], int, int)">write(byte[], int, int)</a></span> - Method in class org.apache.commons.io.output.<a href="./org/apache/commons/io/output/ProxyOutputStream.html" title="class in org.apache.commons.io.output">ProxyOutputStream</a></dt>
-<dd>
-<div class="block">Invokes the delegate's <code>write(byte[])</code> method.</div>
-</dd>
-<dt><span class="strong"><a href="./org/apache/commons/io/output/ProxyWriter.html#write(int)">write(int)</a></span> - Method in class org.apache.commons.io.output.<a href="./org/apache/commons/io/output/ProxyWriter.html" title="class in org.apache.commons.io.output">ProxyWriter</a></dt>
-<dd>
-<div class="block">Invokes the delegate's <code>write(int)</code> method.</div>
-</dd>
-<dt><span class="strong"><a href="./org/apache/commons/io/output/ProxyWriter.html#write(char[])">write(char[])</a></span> - Method in class org.apache.commons.io.output.<a href="./org/apache/commons/io/output/ProxyWriter.html" title="class in org.apache.commons.io.output">ProxyWriter</a></dt>
-<dd>
-<div class="block">Invokes the delegate's <code>write(char[])</code> method.</div>
-</dd>
-<dt><span class="strong"><a href="./org/apache/commons/io/output/ProxyWriter.html#write(char[], int, int)">write(char[], int, int)</a></span> - Method in class org.apache.commons.io.output.<a href="./org/apache/commons/io/output/ProxyWriter.html" title="class in org.apache.commons.io.output">ProxyWriter</a></dt>
-<dd>
-<div class="block">Invokes the delegate's <code>write(char[], int, int)</code> method.</div>
-</dd>
-<dt><span class="strong"><a href="./org/apache/commons/io/output/ProxyWriter.html#write(java.lang.String)">write(String)</a></span> - Method in class org.apache.commons.io.output.<a href="./org/apache/commons/io/output/ProxyWriter.html" title="class in org.apache.commons.io.output">ProxyWriter</a></dt>
-<dd>
-<div class="block">Invokes the delegate's <code>write(String)</code> method.</div>
-</dd>
-<dt><span class="strong"><a href="./org/apache/commons/io/output/ProxyWriter.html#write(java.lang.String, int, int)">write(String, int, int)</a></span> - Method in class org.apache.commons.io.output.<a href="./org/apache/commons/io/output/ProxyWriter.html" title="class in org.apache.commons.io.output">ProxyWriter</a></dt>
-<dd>
-<div class="block">Invokes the delegate's <code>write(String)</code> method.</div>
-</dd>
-<dt><span class="strong"><a href="./org/apache/commons/io/output/StringBuilderWriter.html#write(java.lang.String)">write(String)</a></span> - Method in class org.apache.commons.io.output.<a href="./org/apache/commons/io/output/StringBuilderWriter.html" title="class in org.apache.commons.io.output">StringBuilderWriter</a></dt>
-<dd>
-<div class="block">Write a String to the <a href="http://download.oracle.com/javase/6/docs/api/java/lang/StringBuilder.html?is-external=true" title="class or interface in java.lang"><code>StringBuilder</code></a>.</div>
-</dd>
-<dt><span class="strong"><a href="./org/apache/commons/io/output/StringBuilderWriter.html#write(char[], int, int)">write(char[], int, int)</a></span> - Method in class org.apache.commons.io.output.<a href="./org/apache/commons/io/output/StringBuilderWriter.html" title="class in org.apache.commons.io.output">StringBuilderWriter</a></dt>
-<dd>
-<div class="block">Write a portion of a character array to the <a href="http://download.oracle.com/javase/6/docs/api/java/lang/StringBuilder.html?is-external=true" title="class or interface in java.lang"><code>StringBuilder</code></a>.</div>
-</dd>
-<dt><span class="strong"><a href="./org/apache/commons/io/output/TeeOutputStream.html#write(byte[])">write(byte[])</a></span> - Method in class org.apache.commons.io.output.<a href="./org/apache/commons/io/output/TeeOutputStream.html" title="class in org.apache.commons.io.output">TeeOutputStream</a></dt>
-<dd>
-<div class="block">Write the bytes to both streams.</div>
-</dd>
-<dt><span class="strong"><a href="./org/apache/commons/io/output/TeeOutputStream.html#write(byte[], int, int)">write(byte[], int, int)</a></span> - Method in class org.apache.commons.io.output.<a href="./org/apache/commons/io/output/TeeOutputStream.html" title="class in org.apache.commons.io.output">TeeOutputStream</a></dt>
-<dd>
-<div class="block">Write the specified bytes to both streams.</div>
-</dd>
-<dt><span class="strong"><a href="./org/apache/commons/io/output/TeeOutputStream.html#write(int)">write(int)</a></span> - Method in class org.apache.commons.io.output.<a href="./org/apache/commons/io/output/TeeOutputStream.html" title="class in org.apache.commons.io.output">TeeOutputStream</a></dt>
-<dd>
-<div class="block">Write a byte to both streams.</div>
-</dd>
-<dt><span class="strong"><a href="./org/apache/commons/io/output/ThresholdingOutputStream.html#write(int)">write(int)</a></span> - Method in class org.apache.commons.io.output.<a href="./org/apache/commons/io/output/ThresholdingOutputStream.html" title="class in org.apache.commons.io.output">ThresholdingOutputStream</a></dt>
-<dd>
-<div class="block">Writes the specified byte to this output stream.</div>
-</dd>
-<dt><span class="strong"><a href="./org/apache/commons/io/output/ThresholdingOutputStream.html#write(byte[])">write(byte[])</a></span> - Method in class org.apache.commons.io.output.<a href="./org/apache/commons/io/output/ThresholdingOutputStream.html" title="class in org.apache.commons.io.output">ThresholdingOutputStream</a></dt>
-<dd>
-<div class="block">Writes <code>b.length</code> bytes from the specified byte array to this
- output stream.</div>
-</dd>
-<dt><span class="strong"><a href="./org/apache/commons/io/output/ThresholdingOutputStream.html#write(byte[], int, int)">write(byte[], int, int)</a></span> - Method in class org.apache.commons.io.output.<a href="./org/apache/commons/io/output/ThresholdingOutputStream.html" title="class in org.apache.commons.io.output">ThresholdingOutputStream</a></dt>
-<dd>
-<div class="block">Writes <code>len</code> bytes from the specified byte array starting at
- offset <code>off</code> to this output stream.</div>
-</dd>
-<dt><span class="strong"><a href="./org/apache/commons/io/output/WriterOutputStream.html#write(byte[], int, int)">write(byte[], int, int)</a></span> - Method in class org.apache.commons.io.output.<a href="./org/apache/commons/io/output/WriterOutputStream.html" title="class in org.apache.commons.io.output">WriterOutputStream</a></dt>
-<dd>
-<div class="block">Write bytes from the specified byte array to the stream.</div>
-</dd>
-<dt><span class="strong"><a href="./org/apache/commons/io/output/WriterOutputStream.html#write(byte[])">write(byte[])</a></span> - Method in class org.apache.commons.io.output.<a href="./org/apache/commons/io/output/WriterOutputStream.html" title="class in org.apache.commons.io.output">WriterOutputStream</a></dt>
-<dd>
-<div class="block">Write bytes from the specified byte array to the stream.</div>
-</dd>
-<dt><span class="strong"><a href="./org/apache/commons/io/output/WriterOutputStream.html#write(int)">write(int)</a></span> - Method in class org.apache.commons.io.output.<a href="./org/apache/commons/io/output/WriterOutputStream.html" title="class in org.apache.commons.io.output">WriterOutputStream</a></dt>
-<dd>
-<div class="block">Write a single byte to the stream.</div>
-</dd>
-<dt><span class="strong"><a href="./org/apache/commons/io/output/XmlStreamWriter.html#write(char[], int, int)">write(char[], int, int)</a></span> - Method in class org.apache.commons.io.output.<a href="./org/apache/commons/io/output/XmlStreamWriter.html" title="class in org.apache.commons.io.output">XmlStreamWriter</a></dt>
-<dd>
-<div class="block">Write the characters to the underlying writer, detecing encoding.</div>
-</dd>
-<dt><span class="strong"><a href="./org/apache/commons/io/FileUtils.html#writeByteArrayToFile(java.io.File, byte[])">writeByteArrayToFile(File, byte[])</a></span> - Static method in class org.apache.commons.io.<a href="./org/apache/commons/io/FileUtils.html" title="class in org.apache.commons.io">FileUtils</a></dt>
-<dd>
-<div class="block">Writes a byte array to a file creating the file if it does not exist.</div>
-</dd>
-<dt><span class="strong"><a href="./org/apache/commons/io/FileUtils.html#writeByteArrayToFile(java.io.File, byte[], boolean)">writeByteArrayToFile(File, byte[], boolean)</a></span> - Static method in class org.apache.commons.io.<a href="./org/apache/commons/io/FileUtils.html" title="class in org.apache.commons.io">FileUtils</a></dt>
-<dd>
-<div class="block">Writes a byte array to a file creating the file if it does not exist.</div>
-</dd>
-<dt><span class="strong"><a href="./org/apache/commons/io/FileUtils.html#writeByteArrayToFile(java.io.File, byte[], int, int)">writeByteArrayToFile(File, byte[], int, int)</a></span> - Static method in class org.apache.commons.io.<a href="./org/apache/commons/io/FileUtils.html" title="class in org.apache.commons.io">FileUtils</a></dt>
-<dd>
-<div class="block">Writes <code>len</code> bytes from the specified byte array starting
- at offset <code>off</code> to a file, creating the file if it does
- not exist.</div>
-</dd>
-<dt><span class="strong"><a href="./org/apache/commons/io/FileUtils.html#writeByteArrayToFile(java.io.File, byte[], int, int, boolean)">writeByteArrayToFile(File, byte[], int, int, boolean)</a></span> - Static method in class org.apache.commons.io.<a href="./org/apache/commons/io/FileUtils.html" title="class in org.apache.commons.io">FileUtils</a></dt>
-<dd>
-<div class="block">Writes <code>len</code> bytes from the specified byte array starting
- at offset <code>off</code> to a file, creating the file if it does
- not exist.</div>
-</dd>
-<dt><span class="strong"><a href="./org/apache/commons/io/FileUtils.html#writeLines(java.io.File, java.lang.String, java.util.Collection)">writeLines(File, String, Collection&lt;?&gt;)</a></span> - Static method in class org.apache.commons.io.<a href="./org/apache/commons/io/FileUtils.html" title="class in org.apache.commons.io">FileUtils</a></dt>
-<dd>
-<div class="block">Writes the <code>toString()</code> value of each item in a collection to
- the specified <code>File</code> line by line.</div>
-</dd>
-<dt><span class="strong"><a href="./org/apache/commons/io/FileUtils.html#writeLines(java.io.File, java.lang.String, java.util.Collection, boolean)">writeLines(File, String, Collection&lt;?&gt;, boolean)</a></span> - Static method in class org.apache.commons.io.<a href="./org/apache/commons/io/FileUtils.html" title="class in org.apache.commons.io">FileUtils</a></dt>
-<dd>
-<div class="block">Writes the <code>toString()</code> value of each item in a collection to
- the specified <code>File</code> line by line, optionally appending.</div>
-</dd>
-<dt><span class="strong"><a href="./org/apache/commons/io/FileUtils.html#writeLines(java.io.File, java.util.Collection)">writeLines(File, Collection&lt;?&gt;)</a></span> - Static method in class org.apache.commons.io.<a href="./org/apache/commons/io/FileUtils.html" title="class in org.apache.commons.io">FileUtils</a></dt>
-<dd>
-<div class="block">Writes the <code>toString()</code> value of each item in a collection to
- the specified <code>File</code> line by line.</div>
-</dd>
-<dt><span class="strong"><a href="./org/apache/commons/io/FileUtils.html#writeLines(java.io.File, java.util.Collection, boolean)">writeLines(File, Collection&lt;?&gt;, boolean)</a></span> - Static method in class org.apache.commons.io.<a href="./org/apache/commons/io/FileUtils.html" title="class in org.apache.commons.io">FileUtils</a></dt>
-<dd>
-<div class="block">Writes the <code>toString()</code> value of each item in a collection to
- the specified <code>File</code> line by line.</div>
-</dd>
-<dt><span class="strong"><a href="./org/apache/commons/io/FileUtils.html#writeLines(java.io.File, java.lang.String, java.util.Collection, java.lang.String)">writeLines(File, String, Collection&lt;?&gt;, String)</a></span> - Static method in class org.apache.commons.io.<a href="./org/apache/commons/io/FileUtils.html" title="class in org.apache.commons.io">FileUtils</a></dt>
-<dd>
-<div class="block">Writes the <code>toString()</code> value of each item in a collection to
- the specified <code>File</code> line by line.</div>
-</dd>
-<dt><span class="strong"><a href="./org/apache/commons/io/FileUtils.html#writeLines(java.io.File, java.lang.String, java.util.Collection, java.lang.String, boolean)">writeLines(File, String, Collection&lt;?&gt;, String, boolean)</a></span> - Static method in class org.apache.commons.io.<a href="./org/apache/commons/io/FileUtils.html" title="class in org.apache.commons.io">FileUtils</a></dt>
-<dd>
-<div class="block">Writes the <code>toString()</code> value of each item in a collection to
- the specified <code>File</code> line by line.</div>
-</dd>
-<dt><span class="strong"><a href="./org/apache/commons/io/FileUtils.html#writeLines(java.io.File, java.util.Collection, java.lang.String)">writeLines(File, Collection&lt;?&gt;, String)</a></span> - Static method in class org.apache.commons.io.<a href="./org/apache/commons/io/FileUtils.html" title="class in org.apache.commons.io">FileUtils</a></dt>
-<dd>
-<div class="block">Writes the <code>toString()</code> value of each item in a collection to
- the specified <code>File</code> line by line.</div>
-</dd>
-<dt><span class="strong"><a href="./org/apache/commons/io/FileUtils.html#writeLines(java.io.File, java.util.Collection, java.lang.String, boolean)">writeLines(File, Collection&lt;?&gt;, String, boolean)</a></span> - Static method in class org.apache.commons.io.<a href="./org/apache/commons/io/FileUtils.html" title="class in org.apache.commons.io">FileUtils</a></dt>
-<dd>
-<div class="block">Writes the <code>toString()</code> value of each item in a collection to
- the specified <code>File</code> line by line.</div>
-</dd>
-<dt><span class="strong"><a href="./org/apache/commons/io/IOUtils.html#writeLines(java.util.Collection, java.lang.String, java.io.OutputStream)">writeLines(Collection&lt;?&gt;, String, OutputStream)</a></span> - Static method in class org.apache.commons.io.<a href="./org/apache/commons/io/IOUtils.html" title="class in org.apache.commons.io">IOUtils</a></dt>
-<dd>
-<div class="block"><span class="strong">Deprecated.</span>
-<div class="block"><i>2.5 use <a href="./org/apache/commons/io/IOUtils.html#writeLines(java.util.Collection, java.lang.String, java.io.OutputStream, java.nio.charset.Charset)"><code>IOUtils.writeLines(Collection, String, OutputStream, Charset)</code></a> instead</i></div>
-</div>
-</dd>
-<dt><span class="strong"><a href="./org/apache/commons/io/IOUtils.html#writeLines(java.util.Collection, java.lang.String, java.io.OutputStream, java.nio.charset.Charset)">writeLines(Collection&lt;?&gt;, String, OutputStream, Charset)</a></span> - Static method in class org.apache.commons.io.<a href="./org/apache/commons/io/IOUtils.html" title="class in org.apache.commons.io">IOUtils</a></dt>
-<dd>
-<div class="block">Writes the <code>toString()</code> value of each item in a collection to
- an <code>OutputStream</code> line by line, using the specified character
- encoding and the specified line ending.</div>
-</dd>
-<dt><span class="strong"><a href="./org/apache/commons/io/IOUtils.html#writeLines(java.util.Collection, java.lang.String, java.io.OutputStream, java.lang.String)">writeLines(Collection&lt;?&gt;, String, OutputStream, String)</a></span> - Static method in class org.apache.commons.io.<a href="./org/apache/commons/io/IOUtils.html" title="class in org.apache.commons.io">IOUtils</a></dt>
-<dd>
-<div class="block">Writes the <code>toString()</code> value of each item in a collection to
- an <code>OutputStream</code> line by line, using the specified character
- encoding and the specified line ending.</div>
-</dd>
-<dt><span class="strong"><a href="./org/apache/commons/io/IOUtils.html#writeLines(java.util.Collection, java.lang.String, java.io.Writer)">writeLines(Collection&lt;?&gt;, String, Writer)</a></span> - Static method in class org.apache.commons.io.<a href="./org/apache/commons/io/IOUtils.html" title="class in org.apache.commons.io">IOUtils</a></dt>
-<dd>
-<div class="block">Writes the <code>toString()</code> value of each item in a collection to
- a <code>Writer</code> line by line, using the specified line ending.</div>
-</dd>
-<dt><a href="./org/apache/commons/io/output/WriterOutputStream.html" title="class in org.apache.commons.io.output"><span class="strong">WriterOutputStream</span></a> - Class in <a href="./org/apache/commons/io/output/package-summary.html">org.apache.commons.io.output</a></dt>
-<dd>
-<div class="block"><a href="http://download.oracle.com/javase/6/docs/api/java/io/OutputStream.html?is-external=true" title="class or interface in java.io"><code>OutputStream</code></a> implementation that transforms a byte stream to a
- character stream using a specified charset encoding and writes the resulting
- stream to a <a href="http://download.oracle.com/javase/6/docs/api/java/io/Writer.html?is-external=true" title="class or interface in java.io"><code>Writer</code></a>.</div>
-</dd>
-<dt><span class="strong"><a href="./org/apache/commons/io/output/WriterOutputStream.html#WriterOutputStream(java.io.Writer, java.nio.charset.CharsetDecoder)">WriterOutputStream(Writer, CharsetDecoder)</a></span> - Constructor for class org.apache.commons.io.output.<a href="./org/apache/commons/io/output/WriterOutputStream.html" title="class in org.apache.commons.io.output">WriterOutputStream</a></dt>
-<dd>
-<div class="block">Constructs a new <a href="./org/apache/commons/io/output/WriterOutputStream.html" title="class in org.apache.commons.io.output"><code>WriterOutputStream</code></a> with a default output buffer size of
- 1024 characters.</div>
-</dd>
-<dt><span class="strong"><a href="./org/apache/commons/io/output/WriterOutputStream.html#WriterOutputStream(java.io.Writer, java.nio.charset.CharsetDecoder, int, boolean)">WriterOutputStream(Writer, CharsetDecoder, int, boolean)</a></span> - Constructor for class org.apache.commons.io.output.<a href="./org/apache/commons/io/output/WriterOutputStream.html" title="class in org.apache.commons.io.output">WriterOutputStream</a></dt>
-<dd>
-<div class="block">Constructs a new <a href="./org/apache/commons/io/output/WriterOutputStream.html" title="class in org.apache.commons.io.output"><code>WriterOutputStream</code></a>.</div>
-</dd>
-<dt><span class="strong"><a href="./org/apache/commons/io/output/WriterOutputStream.html#WriterOutputStream(java.io.Writer, java.nio.charset.Charset, int, boolean)">WriterOutputStream(Writer, Charset, int, boolean)</a></span> - Constructor for class org.apache.commons.io.output.<a href="./org/apache/commons/io/output/WriterOutputStream.html" title="class in org.apache.commons.io.output">WriterOutputStream</a></dt>
-<dd>
-<div class="block">Constructs a new <a href="./org/apache/commons/io/output/WriterOutputStream.html" title="class in org.apache.commons.io.output"><code>WriterOutputStream</code></a>.</div>
-</dd>
-<dt><span class="strong"><a href="./org/apache/commons/io/output/WriterOutputStream.html#WriterOutputStream(java.io.Writer, java.nio.charset.Charset)">WriterOutputStream(Writer, Charset)</a></span> - Constructor for class org.apache.commons.io.output.<a href="./org/apache/commons/io/output/WriterOutputStream.html" title="class in org.apache.commons.io.output">WriterOutputStream</a></dt>
-<dd>
-<div class="block">Constructs a new <a href="./org/apache/commons/io/output/WriterOutputStream.html" title="class in org.apache.commons.io.output"><code>WriterOutputStream</code></a> with a default output buffer size of
- 1024 characters.</div>
-</dd>
-<dt><span class="strong"><a href="./org/apache/commons/io/output/WriterOutputStream.html#WriterOutputStream(java.io.Writer, java.lang.String, int, boolean)">WriterOutputStream(Writer, String, int, boolean)</a></span> - Constructor for class org.apache.commons.io.output.<a href="./org/apache/commons/io/output/WriterOutputStream.html" title="class in org.apache.commons.io.output">WriterOutputStream</a></dt>
-<dd>
-<div class="block">Constructs a new <a href="./org/apache/commons/io/output/WriterOutputStream.html" title="class in org.apache.commons.io.output"><code>WriterOutputStream</code></a>.</div>
-</dd>
-<dt><span class="strong"><a href="./org/apache/commons/io/output/WriterOutputStream.html#WriterOutputStream(java.io.Writer, java.lang.String)">WriterOutputStream(Writer, String)</a></span> - Constructor for class org.apache.commons.io.output.<a href="./org/apache/commons/io/output/WriterOutputStream.html" title="class in org.apache.commons.io.output">WriterOutputStream</a></dt>
-<dd>
-<div class="block">Constructs a new <a href="./org/apache/commons/io/output/WriterOutputStream.html" title="class in org.apache.commons.io.output"><code>WriterOutputStream</code></a> with a default output buffer size of
- 1024 characters.</div>
-</dd>
-<dt><span class="strong"><a href="./org/apache/commons/io/output/WriterOutputStream.html#WriterOutputStream(java.io.Writer)">WriterOutputStream(Writer)</a></span> - Constructor for class org.apache.commons.io.output.<a href="./org/apache/commons/io/output/WriterOutputStream.html" title="class in org.apache.commons.io.output">WriterOutputStream</a></dt>
-<dd>
-<div class="block"><span class="strong">Deprecated.</span>
-<div class="block"><i>2.5 use <a href="./org/apache/commons/io/output/WriterOutputStream.html#WriterOutputStream(java.io.Writer, java.nio.charset.Charset)"><code>WriterOutputStream.WriterOutputStream(Writer, Charset)</code></a> instead</i></div>
-</div>
-</dd>
-<dt><span class="strong"><a href="./org/apache/commons/io/FileUtils.html#writeStringToFile(java.io.File, java.lang.String, java.nio.charset.Charset)">writeStringToFile(File, String, Charset)</a></span> - Static method in class org.apache.commons.io.<a href="./org/apache/commons/io/FileUtils.html" title="class in org.apache.commons.io">FileUtils</a></dt>
-<dd>
-<div class="block">Writes a String to a file creating the file if it does not exist.</div>
-</dd>
-<dt><span class="strong"><a href="./org/apache/commons/io/FileUtils.html#writeStringToFile(java.io.File, java.lang.String, java.lang.String)">writeStringToFile(File, String, String)</a></span> - Static method in class org.apache.commons.io.<a href="./org/apache/commons/io/FileUtils.html" title="class in org.apache.commons.io">FileUtils</a></dt>
-<dd>
-<div class="block">Writes a String to a file creating the file if it does not exist.</div>
-</dd>
-<dt><span class="strong"><a href="./org/apache/commons/io/FileUtils.html#writeStringToFile(java.io.File, java.lang.String, java.nio.charset.Charset, boolean)">writeStringToFile(File, String, Charset, boolean)</a></span> - Static method in class org.apache.commons.io.<a href="./org/apache/commons/io/FileUtils.html" title="class in org.apache.commons.io">FileUtils</a></dt>
-<dd>
-<div class="block">Writes a String to a file creating the file if it does not exist.</div>
-</dd>
-<dt><span class="strong"><a href="./org/apache/commons/io/FileUtils.html#writeStringToFile(java.io.File, java.lang.String, java.lang.String, boolean)">writeStringToFile(File, String, String, boolean)</a></span> - Static method in class org.apache.commons.io.<a href="./org/apache/commons/io/FileUtils.html" title="class in org.apache.commons.io">FileUtils</a></dt>
-<dd>
-<div class="block">Writes a String to a file creating the file if it does not exist.</div>
-</dd>
-<dt><span class="strong"><a href="./org/apache/commons/io/FileUtils.html#writeStringToFile(java.io.File, java.lang.String)">writeStringToFile(File, String)</a></span> - Static method in class org.apache.commons.io.<a href="./org/apache/commons/io/FileUtils.html" title="class in org.apache.commons.io">FileUtils</a></dt>
-<dd>
-<div class="block"><span class="strong">Deprecated.</span>
-<div class="block"><i>2.5 use <a href="./org/apache/commons/io/FileUtils.html#writeStringToFile(java.io.File, java.lang.String, java.nio.charset.Charset)"><code>FileUtils.writeStringToFile(File, String, Charset)</code></a> instead</i></div>
-</div>
-</dd>
-<dt><span class="strong"><a href="./org/apache/commons/io/FileUtils.html#writeStringToFile(java.io.File, java.lang.String, boolean)">writeStringToFile(File, String, boolean)</a></span> - Static method in class org.apache.commons.io.<a href="./org/apache/commons/io/FileUtils.html" title="class in org.apache.commons.io">FileUtils</a></dt>
-<dd>
-<div class="block"><span class="strong">Deprecated.</span>
-<div class="block"><i>2.5 use <a href="./org/apache/commons/io/FileUtils.html#writeStringToFile(java.io.File, java.lang.String, java.nio.charset.Charset, boolean)"><code>FileUtils.writeStringToFile(File, String, Charset, boolean)</code></a> instead</i></div>
-</div>
-</dd>
-<dt><span class="strong"><a href="./org/apache/commons/io/EndianUtils.html#writeSwappedDouble(byte[], int, double)">writeSwappedDouble(byte[], int, double)</a></span> - Static method in class org.apache.commons.io.<a href="./org/apache/commons/io/EndianUtils.html" title="class in org.apache.commons.io">EndianUtils</a></dt>
-<dd>
-<div class="block">Writes a "double" value to a byte array at a given offset.</div>
-</dd>
-<dt><span class="strong"><a href="./org/apache/commons/io/EndianUtils.html#writeSwappedDouble(java.io.OutputStream, double)">writeSwappedDouble(OutputStream, double)</a></span> - Static method in class org.apache.commons.io.<a href="./org/apache/commons/io/EndianUtils.html" title="class in org.apache.commons.io">EndianUtils</a></dt>
-<dd>
-<div class="block">Writes a "double" value to an OutputStream.</div>
-</dd>
-<dt><span class="strong"><a href="./org/apache/commons/io/EndianUtils.html#writeSwappedFloat(byte[], int, float)">writeSwappedFloat(byte[], int, float)</a></span> - Static method in class org.apache.commons.io.<a href="./org/apache/commons/io/EndianUtils.html" title="class in org.apache.commons.io">EndianUtils</a></dt>
-<dd>
-<div class="block">Writes a "float" value to a byte array at a given offset.</div>
-</dd>
-<dt><span class="strong"><a href="./org/apache/commons/io/EndianUtils.html#writeSwappedFloat(java.io.OutputStream, float)">writeSwappedFloat(OutputStream, float)</a></span> - Static method in class org.apache.commons.io.<a href="./org/apache/commons/io/EndianUtils.html" title="class in org.apache.commons.io">EndianUtils</a></dt>
-<dd>
-<div class="block">Writes a "float" value to an OutputStream.</div>
-</dd>
-<dt><span class="strong"><a href="./org/apache/commons/io/EndianUtils.html#writeSwappedInteger(byte[], int, int)">writeSwappedInteger(byte[], int, int)</a></span> - Static method in class org.apache.commons.io.<a href="./org/apache/commons/io/EndianUtils.html" title="class in org.apache.commons.io">EndianUtils</a></dt>
-<dd>
-<div class="block">Writes a "int" value to a byte array at a given offset.</div>
-</dd>
-<dt><span class="strong"><a href="./org/apache/commons/io/EndianUtils.html#writeSwappedInteger(java.io.OutputStream, int)">writeSwappedInteger(OutputStream, int)</a></span> - Static method in class org.apache.commons.io.<a href="./org/apache/commons/io/EndianUtils.html" title="class in org.apache.commons.io">EndianUtils</a></dt>
-<dd>
-<div class="block">Writes a "int" value to an OutputStream.</div>
-</dd>
-<dt><span class="strong"><a href="./org/apache/commons/io/EndianUtils.html#writeSwappedLong(byte[], int, long)">writeSwappedLong(byte[], int, long)</a></span> - Static method in class org.apache.commons.io.<a href="./org/apache/commons/io/EndianUtils.html" title="class in org.apache.commons.io">EndianUtils</a></dt>
-<dd>
-<div class="block">Writes a "long" value to a byte array at a given offset.</div>
-</dd>
-<dt><span class="strong"><a href="./org/apache/commons/io/EndianUtils.html#writeSwappedLong(java.io.OutputStream, long)">writeSwappedLong(OutputStream, long)</a></span> - Static method in class org.apache.commons.io.<a href="./org/apache/commons/io/EndianUtils.html" title="class in org.apache.commons.io">EndianUtils</a></dt>
-<dd>
-<div class="block">Writes a "long" value to an OutputStream.</div>
-</dd>
-<dt><span class="strong"><a href="./org/apache/commons/io/EndianUtils.html#writeSwappedShort(byte[], int, short)">writeSwappedShort(byte[], int, short)</a></span> - Static method in class org.apache.commons.io.<a href="./org/apache/commons/io/EndianUtils.html" title="class in org.apache.commons.io">EndianUtils</a></dt>
-<dd>
-<div class="block">Writes a "short" value to a byte array at a given offset.</div>
-</dd>
-<dt><span class="strong"><a href="./org/apache/commons/io/EndianUtils.html#writeSwappedShort(java.io.OutputStream, short)">writeSwappedShort(OutputStream, short)</a></span> - Static method in class org.apache.commons.io.<a href="./org/apache/commons/io/EndianUtils.html" title="class in org.apache.commons.io">EndianUtils</a></dt>
-<dd>
-<div class="block">Writes a "short" value to an OutputStream.</div>
-</dd>
-<dt><span class="strong"><a href="./org/apache/commons/io/output/ByteArrayOutputStream.html#writeTo(java.io.OutputStream)">writeTo(OutputStream)</a></span> - Method in class org.apache.commons.io.output.<a href="./org/apache/commons/io/output/ByteArrayOutputStream.html" title="class in org.apache.commons.io.output">ByteArrayOutputStream</a></dt>
-<dd>
-<div class="block">Writes the entire contents of this byte stream to the
- specified output stream.</div>
-</dd>
-<dt><span class="strong"><a href="./org/apache/commons/io/output/DeferredFileOutputStream.html#writeTo(java.io.OutputStream)">writeTo(OutputStream)</a></span> - Method in class org.apache.commons.io.output.<a href="./org/apache/commons/io/output/DeferredFileOutputStream.html" title="class in org.apache.commons.io.output">DeferredFileOutputStream</a></dt>
-<dd>
-<div class="block">Writes the data from this output stream to the specified output stream,
- after it has been closed.</div>
-</dd>
-</dl>
-<a name="_X_">
-<!--   -->
-</a>
-<h2 class="title">X</h2>
-<dl>
-<dt><a href="./org/apache/commons/io/input/XmlStreamReader.html" title="class in org.apache.commons.io.input"><span class="strong">XmlStreamReader</span></a> - Class in <a href="./org/apache/commons/io/input/package-summary.html">org.apache.commons.io.input</a></dt>
-<dd>
-<div class="block">Character stream that handles all the necessary Voodo to figure out the
- charset encoding of the XML document within the stream.</div>
-</dd>
-<dt><span class="strong"><a href="./org/apache/commons/io/input/XmlStreamReader.html#XmlStreamReader(java.io.File)">XmlStreamReader(File)</a></span> - Constructor for class org.apache.commons.io.input.<a href="./org/apache/commons/io/input/XmlStreamReader.html" title="class in org.apache.commons.io.input">XmlStreamReader</a></dt>
-<dd>
-<div class="block">Creates a Reader for a File.</div>
-</dd>
-<dt><span class="strong"><a href="./org/apache/commons/io/input/XmlStreamReader.html#XmlStreamReader(java.io.InputStream)">XmlStreamReader(InputStream)</a></span> - Constructor for class org.apache.commons.io.input.<a href="./org/apache/commons/io/input/XmlStreamReader.html" title="class in org.apache.commons.io.input">XmlStreamReader</a></dt>
-<dd>
-<div class="block">Creates a Reader for a raw InputStream.</div>
-</dd>
-<dt><span class="strong"><a href="./org/apache/commons/io/input/XmlStreamReader.html#XmlStreamReader(java.io.InputStream, boolean)">XmlStreamReader(InputStream, boolean)</a></span> - Constructor for class org.apache.commons.io.input.<a href="./org/apache/commons/io/input/XmlStreamReader.html" title="class in org.apache.commons.io.input">XmlStreamReader</a></dt>
-<dd>
-<div class="block">Creates a Reader for a raw InputStream.</div>
-</dd>
-<dt><span class="strong"><a href="./org/apache/commons/io/input/XmlStreamReader.html#XmlStreamReader(java.io.InputStream, boolean, java.lang.String)">XmlStreamReader(InputStream, boolean, String)</a></span> - Constructor for class org.apache.commons.io.input.<a href="./org/apache/commons/io/input/XmlStreamReader.html" title="class in org.apache.commons.io.input">XmlStreamReader</a></dt>
-<dd>
-<div class="block">Creates a Reader for a raw InputStream.</div>
-</dd>
-<dt><span class="strong"><a href="./org/apache/commons/io/input/XmlStreamReader.html#XmlStreamReader(java.net.URL)">XmlStreamReader(URL)</a></span> - Constructor for class org.apache.commons.io.input.<a href="./org/apache/commons/io/input/XmlStreamReader.html" title="class in org.apache.commons.io.input">XmlStreamReader</a></dt>
-<dd>
-<div class="block">Creates a Reader using the InputStream of a URL.</div>
-</dd>
-<dt><span class="strong"><a href="./org/apache/commons/io/input/XmlStreamReader.html#XmlStreamReader(java.net.URLConnection, java.lang.String)">XmlStreamReader(URLConnection, String)</a></span> - Constructor for class org.apache.commons.io.input.<a href="./org/apache/commons/io/input/XmlStreamReader.html" title="class in org.apache.commons.io.input">XmlStreamReader</a></dt>
-<dd>
-<div class="block">Creates a Reader using the InputStream of a URLConnection.</div>
-</dd>
-<dt><span class="strong"><a href="./org/apache/commons/io/input/XmlStreamReader.html#XmlStreamReader(java.io.InputStream, java.lang.String)">XmlStreamReader(InputStream, String)</a></span> - Constructor for class org.apache.commons.io.input.<a href="./org/apache/commons/io/input/XmlStreamReader.html" title="class in org.apache.commons.io.input">XmlStreamReader</a></dt>
-<dd>
-<div class="block">Creates a Reader using an InputStream an the associated content-type
- header.</div>
-</dd>
-<dt><span class="strong"><a href="./org/apache/commons/io/input/XmlStreamReader.html#XmlStreamReader(java.io.InputStream, java.lang.String, boolean, java.lang.String)">XmlStreamReader(InputStream, String, boolean, String)</a></span> - Constructor for class org.apache.commons.io.input.<a href="./org/apache/commons/io/input/XmlStreamReader.html" title="class in org.apache.commons.io.input">XmlStreamReader</a></dt>
-<dd>
-<div class="block">Creates a Reader using an InputStream an the associated content-type
- header.</div>
-</dd>
-<dt><span class="strong"><a href="./org/apache/commons/io/input/XmlStreamReader.html#XmlStreamReader(java.io.InputStream, java.lang.String, boolean)">XmlStreamReader(InputStream, String, boolean)</a></span> - Constructor for class org.apache.commons.io.input.<a href="./org/apache/commons/io/input/XmlStreamReader.html" title="class in org.apache.commons.io.input">XmlStreamReader</a></dt>
-<dd>
-<div class="block">Creates a Reader using an InputStream an the associated content-type
- header.</div>
-</dd>
-<dt><a href="./org/apache/commons/io/input/XmlStreamReaderException.html" title="class in org.apache.commons.io.input"><span class="strong">XmlStreamReaderException</span></a> - Exception in <a href="./org/apache/commons/io/input/package-summary.html">org.apache.commons.io.input</a></dt>
-<dd>
-<div class="block">The XmlStreamReaderException is thrown by the XmlStreamReader constructors if
- the charset encoding can not be determined according to the XML 1.0
- specification and RFC 3023.</div>
-</dd>
-<dt><span class="strong"><a href="./org/apache/commons/io/input/XmlStreamReaderException.html#XmlStreamReaderException(java.lang.String, java.lang.String, java.lang.String, java.lang.String)">XmlStreamReaderException(String, String, String, String)</a></span> - Constructor for exception org.apache.commons.io.input.<a href="./org/apache/commons/io/input/XmlStreamReaderException.html" title="class in org.apache.commons.io.input">XmlStreamReaderException</a></dt>
-<dd>
-<div class="block">Creates an exception instance if the charset encoding could not be
- determined.</div>
-</dd>
-<dt><span class="strong"><a href="./org/apache/commons/io/input/XmlStreamReaderException.html#XmlStreamReaderException(java.lang.String, java.lang.String, java.lang.String, java.lang.String, java.lang.String, java.lang.String)">XmlStreamReaderException(String, String, String, String, String, String)</a></span> - Constructor for exception org.apache.commons.io.input.<a href="./org/apache/commons/io/input/XmlStreamReaderException.html" title="class in org.apache.commons.io.input">XmlStreamReaderException</a></dt>
-<dd>
-<div class="block">Creates an exception instance if the charset encoding could not be
- determined.</div>
-</dd>
-<dt><a href="./org/apache/commons/io/output/XmlStreamWriter.html" title="class in org.apache.commons.io.output"><span class="strong">XmlStreamWriter</span></a> - Class in <a href="./org/apache/commons/io/output/package-summary.html">org.apache.commons.io.output</a></dt>
-<dd>
-<div class="block">Character stream that handles all the necessary Voodo to figure out the
- charset encoding of the XML document written to the stream.</div>
-</dd>
-<dt><span class="strong"><a href="./org/apache/commons/io/output/XmlStreamWriter.html#XmlStreamWriter(java.io.OutputStream)">XmlStreamWriter(OutputStream)</a></span> - Constructor for class org.apache.commons.io.output.<a href="./org/apache/commons/io/output/XmlStreamWriter.html" title="class in org.apache.commons.io.output">XmlStreamWriter</a></dt>
-<dd>
-<div class="block">Construct an new XML stream writer for the specified output stream
- with a default encoding of UTF-8.</div>
-</dd>
-<dt><span class="strong"><a href="./org/apache/commons/io/output/XmlStreamWriter.html#XmlStreamWriter(java.io.OutputStream, java.lang.String)">XmlStreamWriter(OutputStream, String)</a></span> - Constructor for class org.apache.commons.io.output.<a href="./org/apache/commons/io/output/XmlStreamWriter.html" title="class in org.apache.commons.io.output">XmlStreamWriter</a></dt>
-<dd>
-<div class="block">Construct an new XML stream writer for the specified output stream
- with the specified default encoding.</div>
-</dd>
-<dt><span class="strong"><a href="./org/apache/commons/io/output/XmlStreamWriter.html#XmlStreamWriter(java.io.File)">XmlStreamWriter(File)</a></span> - Constructor for class org.apache.commons.io.output.<a href="./org/apache/commons/io/output/XmlStreamWriter.html" title="class in org.apache.commons.io.output">XmlStreamWriter</a></dt>
-<dd>
-<div class="block">Construct an new XML stream writer for the specified file
- with a default encoding of UTF-8.</div>
-</dd>
-<dt><span class="strong"><a href="./org/apache/commons/io/output/XmlStreamWriter.html#XmlStreamWriter(java.io.File, java.lang.String)">XmlStreamWriter(File, String)</a></span> - Constructor for class org.apache.commons.io.output.<a href="./org/apache/commons/io/output/XmlStreamWriter.html" title="class in org.apache.commons.io.output">XmlStreamWriter</a></dt>
-<dd>
-<div class="block">Construct an new XML stream writer for the specified file
- with the specified default encoding.</div>
-</dd>
-</dl>
-<a href="#_A_">A</a>&nbsp;<a href="#_B_">B</a>&nbsp;<a href="#_C_">C</a>&nbsp;<a href="#_D_">D</a>&nbsp;<a href="#_E_">E</a>&nbsp;<a href="#_F_">F</a>&nbsp;<a href="#_G_">G</a>&nbsp;<a href="#_H_">H</a>&nbsp;<a href="#_I_">I</a>&nbsp;<a href="#_L_">L</a>&nbsp;<a href="#_M_">M</a>&nbsp;<a href="#_N_">N</a>&nbsp;<a href="#_O_">O</a>&nbsp;<a href="#_P_">P</a>&nbsp;<a href="#_R_">R</a>&nbsp;<a href="#_S_">S</a>&nbsp;<a href="#_T_">T</a>&nbsp;<a href="#_U_">U</a>&nbsp;<a href="#_V_">V</a>&nbsp;<a href="#_W_">W</a>&nbsp;<a href="#_X_">X</a>&nbsp;</div>
-<!-- ======= START OF BOTTOM NAVBAR ====== -->
-<div class="bottomNav"><a name="navbar_bottom">
-<!--   -->
-</a><a href="#skip-navbar_bottom" title="Skip navigation links"></a><a name="navbar_bottom_firstrow">
-<!--   -->
-</a>
-<ul class="navList" title="Navigation">
-<li><a href="./overview-summary.html">Overview</a></li>
-<li>Package</li>
-<li>Class</li>
-<li>Use</li>
-<li><a href="./overview-tree.html">Tree</a></li>
-<li><a href="./deprecated-list.html">Deprecated</a></li>
-<li class="navBarCell1Rev">Index</li>
-<li><a href="./help-doc.html">Help</a></li>
-</ul>
-</div>
-<div class="subNav">
-<ul class="navList">
-<li>Prev</li>
-<li>Next</li>
-</ul>
-<ul class="navList">
-<li><a href="./index.html?index-all.html" target="_top">Frames</a></li>
-<li><a href="index-all.html" target="_top">No Frames</a></li>
-</ul>
-<ul class="navList" id="allclasses_navbar_bottom">
-<li><a href="./allclasses-noframe.html">All Classes</a></li>
-</ul>
-<div>
-<script type="text/javascript"><!--
-  allClassesLink = document.getElementById("allclasses_navbar_bottom");
-  if(window==top) {
-    allClassesLink.style.display = "block";
-  }
-  else {
-    allClassesLink.style.display = "none";
-  }
-  //-->
-</script>
-</div>
-<a name="skip-navbar_bottom">
-<!--   -->
-</a></div>
-<!-- ======== END OF BOTTOM NAVBAR ======= -->
-<p class="legalCopy"><small>Copyright &#169; 2002-2013 <a href="http://www.apache.org/">The Apache Software Foundation</a>. All Rights Reserved.</small></p>
-</body>
-</html>
\ No newline at end of file
diff --git a/0.12-release/apache-rat-core/src/test/resources/appliedAL20/good/aal20good1.txt b/0.12-release/apache-rat-core/src/test/resources/appliedAL20/good/aal20good1.txt
deleted file mode 100644
index 0e0f322..0000000
--- a/0.12-release/apache-rat-core/src/test/resources/appliedAL20/good/aal20good1.txt
+++ /dev/null
@@ -1,15 +0,0 @@
-/*
- * Copyright 2012-2013 FooBar. All Rights Reserved.
- *
- *  Licensed under the Apache License, Version 2.0 (the \"License\");
- *  you may not use this file except in compliance with the License.
- *
- *  You may obtain a copy of the License at
- *       http://www.apache.org/licenses/LICENSE-2.0
- *
- *  Unless required by applicable law or agreed to in writing, software
- *  distributed under the License is distributed on an \"AS IS\" BASIS,
- *  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- *  See the License for the specific language governing permissions and
- *  limitations under the License.
- */ 
diff --git a/0.12-release/apache-rat-core/src/test/resources/artifacts/dummy.tar.gz b/0.12-release/apache-rat-core/src/test/resources/artifacts/dummy.tar.gz
deleted file mode 100644
index 3354fb7..0000000
--- a/0.12-release/apache-rat-core/src/test/resources/artifacts/dummy.tar.gz
+++ /dev/null
Binary files differ
diff --git a/0.12-release/apache-rat-core/src/test/resources/binaries/Image-png.not b/0.12-release/apache-rat-core/src/test/resources/binaries/Image-png.not
deleted file mode 100644
index 10577d4..0000000
--- a/0.12-release/apache-rat-core/src/test/resources/binaries/Image-png.not
+++ /dev/null
Binary files differ
diff --git a/0.12-release/apache-rat-core/src/test/resources/binaries/UTF16_with_signature.xml b/0.12-release/apache-rat-core/src/test/resources/binaries/UTF16_with_signature.xml
deleted file mode 100644
index 9e9104e..0000000
--- a/0.12-release/apache-rat-core/src/test/resources/binaries/UTF16_with_signature.xml
+++ /dev/null
Binary files differ
diff --git a/0.12-release/apache-rat-core/src/test/resources/binaries/UTF8_with_signature.xml b/0.12-release/apache-rat-core/src/test/resources/binaries/UTF8_with_signature.xml
deleted file mode 100644
index b82c0ee..0000000
--- a/0.12-release/apache-rat-core/src/test/resources/binaries/UTF8_with_signature.xml
+++ /dev/null
@@ -1,29 +0,0 @@
-﻿<?xml version="1.0" encoding="UTF-8"?>
-    
-        <!--
-     ***************************************************************
-     * Licensed to the Apache Software Foundation (ASF) under one
-     * or more contributor license agreements.  See the NOTICE file
-     * distributed with this work for additional information
-     * regarding copyright ownership.  The ASF licenses this file
-     * to you under the Apache License, Version 2.0 (the
-     * "License"); you may not use this file except in compliance
-     * with the License.  You may obtain a copy of the License at
-         *
-     *   http://www.apache.org/licenses/LICENSE-2.0
-     * 
-     * Unless required by applicable law or agreed to in writing,
-     * software distributed under the License is distributed on an
-     * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
-     * KIND, either express or implied.  See the License for the
-     * specific language governing permissions and limitations
-     * under the License.
-     ***************************************************************
-   -->
-
-
-<xmlRoot>
-<descrition>
-The file encoding is UTF-8 with signature. (Special chars: äöü)
-</descrition>
-</xmlRoot>
diff --git a/0.12-release/apache-rat-core/src/test/resources/elements/ILoggerFactory.java b/0.12-release/apache-rat-core/src/test/resources/elements/ILoggerFactory.java
deleted file mode 100644
index 9b259f9..0000000
--- a/0.12-release/apache-rat-core/src/test/resources/elements/ILoggerFactory.java
+++ /dev/null
@@ -1,57 +0,0 @@
-/**
- * Copyright (c) 2004-2011 QOS.ch
- * All rights reserved.
- *
- * Permission is hereby granted, free  of charge, to any person obtaining
- * a  copy  of this  software  and  associated  documentation files  (the
- * "Software"), to  deal in  the Software without  restriction, including
- * without limitation  the rights to  use, copy, modify,  merge, publish,
- * distribute,  sublicense, and/or sell  copies of  the Software,  and to
- * permit persons to whom the Software  is furnished to do so, subject to
- * the following conditions:
- *
- * The  above  copyright  notice  and  this permission  notice  shall  be
- * included in all copies or substantial portions of the Software.
- *
- * THE  SOFTWARE IS  PROVIDED  "AS  IS", WITHOUT  WARRANTY  OF ANY  KIND,
- * EXPRESS OR  IMPLIED, INCLUDING  BUT NOT LIMITED  TO THE  WARRANTIES OF
- * MERCHANTABILITY,    FITNESS    FOR    A   PARTICULAR    PURPOSE    AND
- * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
- * LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
- * OF CONTRACT, TORT OR OTHERWISE,  ARISING FROM, OUT OF OR IN CONNECTION
- * WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
- *
- */
-package org.slf4j;
-
-
-/**
- * <code>ILoggerFactory</code> instances manufacture {@link Logger}
- * instances by name.
- * 
- * <p>Most users retrieve {@link Logger} instances through the static
- * {@link LoggerFactory#getLogger(String)} method. An instance of of this
- * interface is bound internally with {@link LoggerFactory} class at 
- * compile time. 
- * 
- * @author Ceki G&uuml;lc&uuml;
- */
-public interface ILoggerFactory {
-  
-  /**
-   * Return an appropriate {@link Logger} instance as specified by the
-   * <code>name</code> parameter.
-   * 
-   * <p>If the name parameter is equal to {@link Logger#ROOT_LOGGER_NAME}, that is 
-   * the string value "ROOT" (case insensitive), then the root logger of the 
-   * underlying logging system is returned.
-   * 
-   * <p>Null-valued name arguments are considered invalid.
-   *
-   * <p>Certain extremely simple logging systems, e.g. NOP, may always
-   * return the same logger instance regardless of the requested name.
-   * 
-   * @param name the name of the Logger to return
-   */
-  public Logger getLogger(String name);
-}
diff --git a/0.12-release/apache-rat-core/src/test/resources/elements/Image.png b/0.12-release/apache-rat-core/src/test/resources/elements/Image.png
deleted file mode 100644
index ed8f507..0000000
--- a/0.12-release/apache-rat-core/src/test/resources/elements/Image.png
+++ /dev/null
Binary files differ
diff --git a/0.12-release/apache-rat-core/src/test/resources/elements/LICENSE b/0.12-release/apache-rat-core/src/test/resources/elements/LICENSE
deleted file mode 100644
index 7a4a3ea..0000000
--- a/0.12-release/apache-rat-core/src/test/resources/elements/LICENSE
+++ /dev/null
@@ -1,202 +0,0 @@
-
-                                 Apache License
-                           Version 2.0, January 2004
-                        http://www.apache.org/licenses/
-
-   TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
-
-   1. Definitions.
-
-      "License" shall mean the terms and conditions for use, reproduction,
-      and distribution as defined by Sections 1 through 9 of this document.
-
-      "Licensor" shall mean the copyright owner or entity authorized by
-      the copyright owner that is granting the License.
-
-      "Legal Entity" shall mean the union of the acting entity and all
-      other entities that control, are controlled by, or are under common
-      control with that entity. For the purposes of this definition,
-      "control" means (i) the power, direct or indirect, to cause the
-      direction or management of such entity, whether by contract or
-      otherwise, or (ii) ownership of fifty percent (50%) or more of the
-      outstanding shares, or (iii) beneficial ownership of such entity.
-
-      "You" (or "Your") shall mean an individual or Legal Entity
-      exercising permissions granted by this License.
-
-      "Source" form shall mean the preferred form for making modifications,
-      including but not limited to software source code, documentation
-      source, and configuration files.
-
-      "Object" form shall mean any form resulting from mechanical
-      transformation or translation of a Source form, including but
-      not limited to compiled object code, generated documentation,
-      and conversions to other media types.
-
-      "Work" shall mean the work of authorship, whether in Source or
-      Object form, made available under the License, as indicated by a
-      copyright notice that is included in or attached to the work
-      (an example is provided in the Appendix below).
-
-      "Derivative Works" shall mean any work, whether in Source or Object
-      form, that is based on (or derived from) the Work and for which the
-      editorial revisions, annotations, elaborations, or other modifications
-      represent, as a whole, an original work of authorship. For the purposes
-      of this License, Derivative Works shall not include works that remain
-      separable from, or merely link (or bind by name) to the interfaces of,
-      the Work and Derivative Works thereof.
-
-      "Contribution" shall mean any work of authorship, including
-      the original version of the Work and any modifications or additions
-      to that Work or Derivative Works thereof, that is intentionally
-      submitted to Licensor for inclusion in the Work by the copyright owner
-      or by an individual or Legal Entity authorized to submit on behalf of
-      the copyright owner. For the purposes of this definition, "submitted"
-      means any form of electronic, verbal, or written communication sent
-      to the Licensor or its representatives, including but not limited to
-      communication on electronic mailing lists, source code control systems,
-      and issue tracking systems that are managed by, or on behalf of, the
-      Licensor for the purpose of discussing and improving the Work, but
-      excluding communication that is conspicuously marked or otherwise
-      designated in writing by the copyright owner as "Not a Contribution."
-
-      "Contributor" shall mean Licensor and any individual or Legal Entity
-      on behalf of whom a Contribution has been received by Licensor and
-      subsequently incorporated within the Work.
-
-   2. Grant of Copyright License. Subject to the terms and conditions of
-      this License, each Contributor hereby grants to You a perpetual,
-      worldwide, non-exclusive, no-charge, royalty-free, irrevocable
-      copyright license to reproduce, prepare Derivative Works of,
-      publicly display, publicly perform, sublicense, and distribute the
-      Work and such Derivative Works in Source or Object form.
-
-   3. Grant of Patent License. Subject to the terms and conditions of
-      this License, each Contributor hereby grants to You a perpetual,
-      worldwide, non-exclusive, no-charge, royalty-free, irrevocable
-      (except as stated in this section) patent license to make, have made,
-      use, offer to sell, sell, import, and otherwise transfer the Work,
-      where such license applies only to those patent claims licensable
-      by such Contributor that are necessarily infringed by their
-      Contribution(s) alone or by combination of their Contribution(s)
-      with the Work to which such Contribution(s) was submitted. If You
-      institute patent litigation against any entity (including a
-      cross-claim or counterclaim in a lawsuit) alleging that the Work
-      or a Contribution incorporated within the Work constitutes direct
-      or contributory patent infringement, then any patent licenses
-      granted to You under this License for that Work shall terminate
-      as of the date such litigation is filed.
-
-   4. Redistribution. You may reproduce and distribute copies of the
-      Work or Derivative Works thereof in any medium, with or without
-      modifications, and in Source or Object form, provided that You
-      meet the following conditions:
-
-      (a) You must give any other recipients of the Work or
-          Derivative Works a copy of this License; and
-
-      (b) You must cause any modified files to carry prominent notices
-          stating that You changed the files; and
-
-      (c) You must retain, in the Source form of any Derivative Works
-          that You distribute, all copyright, patent, trademark, and
-          attribution notices from the Source form of the Work,
-          excluding those notices that do not pertain to any part of
-          the Derivative Works; and
-
-      (d) If the Work includes a "NOTICE" text file as part of its
-          distribution, then any Derivative Works that You distribute must
-          include a readable copy of the attribution notices contained
-          within such NOTICE file, excluding those notices that do not
-          pertain to any part of the Derivative Works, in at least one
-          of the following places: within a NOTICE text file distributed
-          as part of the Derivative Works; within the Source form or
-          documentation, if provided along with the Derivative Works; or,
-          within a display generated by the Derivative Works, if and
-          wherever such third-party notices normally appear. The contents
-          of the NOTICE file are for informational purposes only and
-          do not modify the License. You may add Your own attribution
-          notices within Derivative Works that You distribute, alongside
-          or as an addendum to the NOTICE text from the Work, provided
-          that such additional attribution notices cannot be construed
-          as modifying the License.
-
-      You may add Your own copyright statement to Your modifications and
-      may provide additional or different license terms and conditions
-      for use, reproduction, or distribution of Your modifications, or
-      for any such Derivative Works as a whole, provided Your use,
-      reproduction, and distribution of the Work otherwise complies with
-      the conditions stated in this License.
-
-   5. Submission of Contributions. Unless You explicitly state otherwise,
-      any Contribution intentionally submitted for inclusion in the Work
-      by You to the Licensor shall be under the terms and conditions of
-      this License, without any additional terms or conditions.
-      Notwithstanding the above, nothing herein shall supersede or modify
-      the terms of any separate license agreement you may have executed
-      with Licensor regarding such Contributions.
-
-   6. Trademarks. This License does not grant permission to use the trade
-      names, trademarks, service marks, or product names of the Licensor,
-      except as required for reasonable and customary use in describing the
-      origin of the Work and reproducing the content of the NOTICE file.
-
-   7. Disclaimer of Warranty. Unless required by applicable law or
-      agreed to in writing, Licensor provides the Work (and each
-      Contributor provides its Contributions) on an "AS IS" BASIS,
-      WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
-      implied, including, without limitation, any warranties or conditions
-      of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A
-      PARTICULAR PURPOSE. You are solely responsible for determining the
-      appropriateness of using or redistributing the Work and assume any
-      risks associated with Your exercise of permissions under this License.
-
-   8. Limitation of Liability. In no event and under no legal theory,
-      whether in tort (including negligence), contract, or otherwise,
-      unless required by applicable law (such as deliberate and grossly
-      negligent acts) or agreed to in writing, shall any Contributor be
-      liable to You for damages, including any direct, indirect, special,
-      incidental, or consequential damages of any character arising as a
-      result of this License or out of the use or inability to use the
-      Work (including but not limited to damages for loss of goodwill,
-      work stoppage, computer failure or malfunction, or any and all
-      other commercial damages or losses), even if such Contributor
-      has been advised of the possibility of such damages.
-
-   9. Accepting Warranty or Additional Liability. While redistributing
-      the Work or Derivative Works thereof, You may choose to offer,
-      and charge a fee for, acceptance of support, warranty, indemnity,
-      or other liability obligations and/or rights consistent with this
-      License. However, in accepting such obligations, You may act only
-      on Your own behalf and on Your sole responsibility, not on behalf
-      of any other Contributor, and only if You agree to indemnify,
-      defend, and hold each Contributor harmless for any liability
-      incurred by, or claims asserted against, such Contributor by reason
-      of your accepting any such warranty or additional liability.
-
-   END OF TERMS AND CONDITIONS
-
-   APPENDIX: How to apply the Apache License to your work.
-
-      To apply the Apache License to your work, attach the following
-      boilerplate notice, with the fields enclosed by brackets "[]"
-      replaced with your own identifying information. (Don't include
-      the brackets!)  The text should be enclosed in the appropriate
-      comment syntax for the file format. We also recommend that a
-      file or class name and description of purpose be included on the
-      same "printed page" as the copyright notice for easier
-      identification within third-party archives.
-
-   Copyright [yyyy] [name of copyright owner]
-
-   Licensed under the Apache License, Version 2.0 (the "License");
-   you may not use this file except in compliance with the License.
-   You may obtain a copy of the License at
-
-       http://www.apache.org/licenses/LICENSE-2.0
-
-   Unless required by applicable law or agreed to in writing, software
-   distributed under the License is distributed on an "AS IS" BASIS,
-   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-   See the License for the specific language governing permissions and
-   limitations under the License.
\ No newline at end of file
diff --git a/0.12-release/apache-rat-core/src/test/resources/elements/NOTICE b/0.12-release/apache-rat-core/src/test/resources/elements/NOTICE
deleted file mode 100644
index 967464b..0000000
--- a/0.12-release/apache-rat-core/src/test/resources/elements/NOTICE
+++ /dev/null
@@ -1,7 +0,0 @@
-=========================================================================
-==  NOTICE file corresponding to section 4(d) of the Apache License,   ==
-==  Version 2.0.                                                       ==
-=========================================================================
-
-This product includes software developed by
-The Apache Software Foundation (http://www.apache.org/).
\ No newline at end of file
diff --git a/0.12-release/apache-rat-core/src/test/resources/elements/Source.java b/0.12-release/apache-rat-core/src/test/resources/elements/Source.java
deleted file mode 100644
index b14d93e..0000000
--- a/0.12-release/apache-rat-core/src/test/resources/elements/Source.java
+++ /dev/null
@@ -1,9 +0,0 @@
-package elements;
-
-/*
- * This file does intentionally *NOT* contain an AL license header,
- * because it is used in the test suite.
- */
-public class Source {
-
-}
diff --git a/0.12-release/apache-rat-core/src/test/resources/elements/Text.txt b/0.12-release/apache-rat-core/src/test/resources/elements/Text.txt
deleted file mode 100644
index 2eef8cb..0000000
--- a/0.12-release/apache-rat-core/src/test/resources/elements/Text.txt
+++ /dev/null
@@ -1,20 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *    http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations
- * under the License.    
- */
-
-            
diff --git a/0.12-release/apache-rat-core/src/test/resources/elements/Xml.xml b/0.12-release/apache-rat-core/src/test/resources/elements/Xml.xml
deleted file mode 100644
index 76138fc..0000000
--- a/0.12-release/apache-rat-core/src/test/resources/elements/Xml.xml
+++ /dev/null
@@ -1,20 +0,0 @@
-<?xml version='1.0'?>
-<!--
- Licensed to the Apache Software Foundation (ASF) under one   *
- or more contributor license agreements.  See the NOTICE file *
- distributed with this work for additional information        *
- regarding copyright ownership.  The ASF licenses this file   *
- to you under the Apache License, Version 2.0 (the            *
- "License"); you may not use this file except in compliance   *
- with the License.  You may obtain a copy of the License at   *
-                                                              *
-   http://www.apache.org/licenses/LICENSE-2.0                 *
-                                                              *
- Unless required by applicable law or agreed to in writing,   *
- software distributed under the License is distributed on an  *
- "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY       *
- KIND, either express or implied.  See the License for the    *
- specific language governing permissions and limitations      *
- under the License.                                           *
--->
-<document/>
diff --git a/0.12-release/apache-rat-core/src/test/resources/elements/buildr.rb b/0.12-release/apache-rat-core/src/test/resources/elements/buildr.rb
deleted file mode 100644
index 00e4e8e..0000000
--- a/0.12-release/apache-rat-core/src/test/resources/elements/buildr.rb
+++ /dev/null
@@ -1,44 +0,0 @@
-# Licensed to the Apache Software Foundation (ASF) under one or more
-# contributor license agreements.  See the NOTICE file distributed with this
-# work for additional information regarding copyright ownership.  The ASF
-# licenses this file to you under the Apache License, Version 2.0 (the
-# "License"); you may not use this file except in compliance with the License.
-# You may obtain a copy of the License at
-#
-#    http://www.apache.org/licenses/LICENSE-2.0
-#
-# Unless required by applicable law or agreed to in writing, software
-# distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
-# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.  See the
-# License for the specific language governing permissions and limitations under
-# the License.
-
-unless defined?(Buildr::VERSION)
-  require 'buildr/version'
-end
-
-require 'buildr/core'
-require 'buildr/packaging'
-require 'buildr/java'
-require 'buildr/ide'
-require 'buildr/shell'
-require 'buildr/run'
-
-# Methods defined in Buildr are both instance methods (e.g. when included in Project)
-# and class methods when invoked like Buildr.artifacts().
-module Buildr ; extend self ; end
-
-# The Buildfile object (self) has access to all the Buildr methods and constants.
-class << self ; include Buildr ; end
-
-# All modules defined under Buildr::* can be referenced without Buildr:: prefix
-# unless a conflict exists (e.g.  Buildr::RSpec vs ::RSpec)
-class Object #:nodoc:
-  Buildr.constants.each do |name|
-    const = Buildr.const_get(name)
-    if const.is_a?(Module)
-      const_set name, const unless const_defined?(name)
-    end
-  end
-end
-
diff --git a/0.12-release/apache-rat-core/src/test/resources/elements/dummy.jar b/0.12-release/apache-rat-core/src/test/resources/elements/dummy.jar
deleted file mode 100644
index ccbf9f3..0000000
--- a/0.12-release/apache-rat-core/src/test/resources/elements/dummy.jar
+++ /dev/null
Binary files differ
diff --git a/0.12-release/apache-rat-core/src/test/resources/elements/sub/Empty.txt b/0.12-release/apache-rat-core/src/test/resources/elements/sub/Empty.txt
deleted file mode 100644
index 8b13789..0000000
--- a/0.12-release/apache-rat-core/src/test/resources/elements/sub/Empty.txt
+++ /dev/null
@@ -1 +0,0 @@
-
diff --git a/0.12-release/apache-rat-core/src/test/resources/javadocs/ArchiveElement.html b/0.12-release/apache-rat-core/src/test/resources/javadocs/ArchiveElement.html
deleted file mode 100644
index d86f968..0000000
--- a/0.12-release/apache-rat-core/src/test/resources/javadocs/ArchiveElement.html
+++ /dev/null
@@ -1,417 +0,0 @@
-<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
-<!--NewPage-->
-<HTML>
-<HEAD>
-<!-- Generated by javadoc (build 1.5.0_08) on Sun Oct 01 15:23:55 GMT 2006 -->
-<TITLE>
-ArchiveElement
-</TITLE>
-
-<META NAME="keywords" CONTENT="rat.ArchiveElement class">
-
-<LINK REL ="stylesheet" TYPE="text/css" HREF="../stylesheet.css" TITLE="Style">
-
-<SCRIPT type="text/javascript">
-function windowTitle()
-{
-    parent.document.title="ArchiveElement";
-}
-</SCRIPT>
-<NOSCRIPT>
-</NOSCRIPT>
-
-</HEAD>
-
-<BODY BGCOLOR="white" onload="windowTitle();">
-
-
-<!-- ========= START OF TOP NAVBAR ======= -->
-<A NAME="navbar_top"><!-- --></A>
-<A HREF="#skip-navbar_top" title="Skip navigation links"></A>
-<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0" SUMMARY="">
-<TR>
-<TD COLSPAN=2 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
-<A NAME="navbar_top_firstrow"><!-- --></A>
-<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3" SUMMARY="">
-  <TR ALIGN="center" VALIGN="top">
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../overview-summary.html"><FONT CLASS="NavBarFont1"><B>Overview</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="package-summary.html"><FONT CLASS="NavBarFont1"><B>Package</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#FFFFFF" CLASS="NavBarCell1Rev"> &nbsp;<FONT CLASS="NavBarFont1Rev"><B>Class</B></FONT>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="package-tree.html"><FONT CLASS="NavBarFont1"><B>Tree</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../deprecated-list.html"><FONT CLASS="NavBarFont1"><B>Deprecated</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../index-all.html"><FONT CLASS="NavBarFont1"><B>Index</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../help-doc.html"><FONT CLASS="NavBarFont1"><B>Help</B></FONT></A>&nbsp;</TD>
-  </TR>
-</TABLE>
-</TD>
-<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
-</EM>
-</TD>
-</TR>
-
-<TR>
-<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
-&nbsp;PREV CLASS&nbsp;
-&nbsp;<A HREF="../rat/DirectoryLastComparator.html" title="class in rat"><B>NEXT CLASS</B></A></FONT></TD>
-<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
-  <A HREF="../index.html?rat/ArchiveElement.html" target="_top"><B>FRAMES</B></A>  &nbsp;
-&nbsp;<A HREF="ArchiveElement.html" target="_top"><B>NO FRAMES</B></A>  &nbsp;
-&nbsp;<SCRIPT type="text/javascript">
-  <!--
-  if(window==top) {
-    document.writeln('<A HREF="../allclasses-noframe.html"><B>All Classes</B></A>');
-  }
-  //-->
-</SCRIPT>
-<NOSCRIPT>
-  <A HREF="../allclasses-noframe.html"><B>All Classes</B></A>
-</NOSCRIPT>
-
-
-</FONT></TD>
-</TR>
-<TR>
-<TD VALIGN="top" CLASS="NavBarCell3"><FONT SIZE="-2">
-  SUMMARY:&nbsp;NESTED&nbsp;|&nbsp;<A HREF="#field_summary">FIELD</A>&nbsp;|&nbsp;<A HREF="#constructor_summary">CONSTR</A>&nbsp;|&nbsp;<A HREF="#method_summary">METHOD</A></FONT></TD>
-<TD VALIGN="top" CLASS="NavBarCell3"><FONT SIZE="-2">
-DETAIL:&nbsp;<A HREF="#field_detail">FIELD</A>&nbsp;|&nbsp;<A HREF="#constructor_detail">CONSTR</A>&nbsp;|&nbsp;<A HREF="#method_detail">METHOD</A></FONT></TD>
-</TR>
-</TABLE>
-<A NAME="skip-navbar_top"></A>
-<!-- ========= END OF TOP NAVBAR ========= -->
-
-<HR>
-<!-- ======== START OF CLASS DATA ======== -->
-<H2>
-<FONT SIZE="-1">
-rat</FONT>
-<BR>
-Class ArchiveElement</H2>
-<PRE>
-java.lang.Object
-  <IMG SRC="../resources/inherit.gif" ALT="extended by "><B>rat.ArchiveElement</B>
-</PRE>
-<DL>
-<DT><B>All Implemented Interfaces:</B> <DD>java.lang.Comparable</DD>
-</DL>
-<HR>
-<DL>
-<DT><PRE>public class <B>ArchiveElement</B><DT>extends java.lang.Object</DL>
-</PRE>
-
-<P>
-<HR>
-
-<P>
-<!-- =========== FIELD SUMMARY =========== -->
-
-<A NAME="field_summary"><!-- --></A>
-<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
-<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
-<TH ALIGN="left" COLSPAN="2"><FONT SIZE="+2">
-<B>Field Summary</B></FONT></TH>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>protected &nbsp;java.io.File</CODE></FONT></TD>
-<TD><CODE><B><A HREF="../rat/ArchiveElement.html#file">file</A></B></CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>protected &nbsp;java.lang.String</CODE></FONT></TD>
-<TD><CODE><B><A HREF="../rat/ArchiveElement.html#name">name</A></B></CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</TD>
-</TR>
-</TABLE>
-&nbsp;
-<!-- ======== CONSTRUCTOR SUMMARY ======== -->
-
-<A NAME="constructor_summary"><!-- --></A>
-<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
-<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
-<TH ALIGN="left" COLSPAN="2"><FONT SIZE="+2">
-<B>Constructor Summary</B></FONT></TH>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD><CODE><B><A HREF="../rat/ArchiveElement.html#ArchiveElement(java.io.File)">ArchiveElement</A></B>(java.io.File&nbsp;file)</CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</TD>
-</TR>
-</TABLE>
-&nbsp;
-<!-- ========== METHOD SUMMARY =========== -->
-
-<A NAME="method_summary"><!-- --></A>
-<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
-<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
-<TH ALIGN="left" COLSPAN="2"><FONT SIZE="+2">
-<B>Method Summary</B></FONT></TH>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>&nbsp;void</CODE></FONT></TD>
-<TD><CODE><B><A HREF="../rat/ArchiveElement.html#accept(rat.IElementVisitor)">accept</A></B>(rat.IElementVisitor&nbsp;visitor)</CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>&nbsp;int</CODE></FONT></TD>
-<TD><CODE><B><A HREF="../rat/ArchiveElement.html#compareTo(java.lang.Object)">compareTo</A></B>(java.lang.Object&nbsp;subject)</CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>&nbsp;java.lang.String</CODE></FONT></TD>
-<TD><CODE><B><A HREF="../rat/ArchiveElement.html#getName()">getName</A></B>()</CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>&nbsp;java.lang.String</CODE></FONT></TD>
-<TD><CODE><B><A HREF="../rat/ArchiveElement.html#getPath()">getPath</A></B>()</CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>protected &nbsp;java.io.Reader</CODE></FONT></TD>
-<TD><CODE><B><A HREF="../rat/ArchiveElement.html#getReader()">getReader</A></B>()</CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>&nbsp;java.lang.String</CODE></FONT></TD>
-<TD><CODE><B><A HREF="../rat/ArchiveElement.html#toString()">toString</A></B>()</CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</TD>
-</TR>
-</TABLE>
-&nbsp;<A NAME="methods_inherited_from_class_java.lang.Object"><!-- --></A>
-<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
-<TR BGCOLOR="#EEEEFF" CLASS="TableSubHeadingColor">
-<TH ALIGN="left"><B>Methods inherited from class java.lang.Object</B></TH>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD><CODE>clone, equals, finalize, getClass, hashCode, notify, notifyAll, wait, wait, wait</CODE></TD>
-</TR>
-</TABLE>
-&nbsp;
-<P>
-
-<!-- ============ FIELD DETAIL =========== -->
-
-<A NAME="field_detail"><!-- --></A>
-<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
-<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
-<TH ALIGN="left" COLSPAN="1"><FONT SIZE="+2">
-<B>Field Detail</B></FONT></TH>
-</TR>
-</TABLE>
-
-<A NAME="file"><!-- --></A><H3>
-file</H3>
-<PRE>
-protected final java.io.File <B>file</B></PRE>
-<DL>
-<DL>
-</DL>
-</DL>
-<HR>
-
-<A NAME="name"><!-- --></A><H3>
-name</H3>
-<PRE>
-protected final java.lang.String <B>name</B></PRE>
-<DL>
-<DL>
-</DL>
-</DL>
-
-<!-- ========= CONSTRUCTOR DETAIL ======== -->
-
-<A NAME="constructor_detail"><!-- --></A>
-<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
-<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
-<TH ALIGN="left" COLSPAN="1"><FONT SIZE="+2">
-<B>Constructor Detail</B></FONT></TH>
-</TR>
-</TABLE>
-
-<A NAME="ArchiveElement(java.io.File)"><!-- --></A><H3>
-ArchiveElement</H3>
-<PRE>
-public <B>ArchiveElement</B>(java.io.File&nbsp;file)</PRE>
-<DL>
-</DL>
-
-<!-- ============ METHOD DETAIL ========== -->
-
-<A NAME="method_detail"><!-- --></A>
-<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
-<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
-<TH ALIGN="left" COLSPAN="1"><FONT SIZE="+2">
-<B>Method Detail</B></FONT></TH>
-</TR>
-</TABLE>
-
-<A NAME="accept(rat.IElementVisitor)"><!-- --></A><H3>
-accept</H3>
-<PRE>
-public void <B>accept</B>(rat.IElementVisitor&nbsp;visitor)</PRE>
-<DL>
-<DD><DL>
-</DL>
-</DD>
-</DL>
-<HR>
-
-<A NAME="toString()"><!-- --></A><H3>
-toString</H3>
-<PRE>
-public java.lang.String <B>toString</B>()</PRE>
-<DL>
-<DD><DL>
-<DT><B>Overrides:</B><DD><CODE>toString</CODE> in class <CODE>java.lang.Object</CODE></DL>
-</DD>
-<DD><DL>
-</DL>
-</DD>
-</DL>
-<HR>
-
-<A NAME="getName()"><!-- --></A><H3>
-getName</H3>
-<PRE>
-public final java.lang.String <B>getName</B>()</PRE>
-<DL>
-<DD><DL>
-</DL>
-</DD>
-<DD><DL>
-</DL>
-</DD>
-</DL>
-<HR>
-
-<A NAME="getPath()"><!-- --></A><H3>
-getPath</H3>
-<PRE>
-public final java.lang.String <B>getPath</B>()</PRE>
-<DL>
-<DD><DL>
-</DL>
-</DD>
-<DD><DL>
-</DL>
-</DD>
-</DL>
-<HR>
-
-<A NAME="getReader()"><!-- --></A><H3>
-getReader</H3>
-<PRE>
-protected final java.io.Reader <B>getReader</B>()
-                                  throws java.io.IOException</PRE>
-<DL>
-<DD><DL>
-</DL>
-</DD>
-<DD><DL>
-
-<DT><B>Throws:</B>
-<DD><CODE>java.io.IOException</CODE></DL>
-</DD>
-</DL>
-<HR>
-
-<A NAME="compareTo(java.lang.Object)"><!-- --></A><H3>
-compareTo</H3>
-<PRE>
-public int <B>compareTo</B>(java.lang.Object&nbsp;subject)</PRE>
-<DL>
-<DD><DL>
-<DT><B>Specified by:</B><DD><CODE>compareTo</CODE> in interface <CODE>java.lang.Comparable</CODE></DL>
-</DD>
-<DD><DL>
-</DL>
-</DD>
-</DL>
-<!-- ========= END OF CLASS DATA ========= -->
-<HR>
-
-
-<!-- ======= START OF BOTTOM NAVBAR ====== -->
-<A NAME="navbar_bottom"><!-- --></A>
-<A HREF="#skip-navbar_bottom" title="Skip navigation links"></A>
-<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0" SUMMARY="">
-<TR>
-<TD COLSPAN=2 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
-<A NAME="navbar_bottom_firstrow"><!-- --></A>
-<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3" SUMMARY="">
-  <TR ALIGN="center" VALIGN="top">
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../overview-summary.html"><FONT CLASS="NavBarFont1"><B>Overview</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="package-summary.html"><FONT CLASS="NavBarFont1"><B>Package</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#FFFFFF" CLASS="NavBarCell1Rev"> &nbsp;<FONT CLASS="NavBarFont1Rev"><B>Class</B></FONT>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="package-tree.html"><FONT CLASS="NavBarFont1"><B>Tree</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../deprecated-list.html"><FONT CLASS="NavBarFont1"><B>Deprecated</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../index-all.html"><FONT CLASS="NavBarFont1"><B>Index</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../help-doc.html"><FONT CLASS="NavBarFont1"><B>Help</B></FONT></A>&nbsp;</TD>
-  </TR>
-</TABLE>
-</TD>
-<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
-</EM>
-</TD>
-</TR>
-
-<TR>
-<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
-&nbsp;PREV CLASS&nbsp;
-&nbsp;<A HREF="../rat/DirectoryLastComparator.html" title="class in rat"><B>NEXT CLASS</B></A></FONT></TD>
-<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
-  <A HREF="../index.html?rat/ArchiveElement.html" target="_top"><B>FRAMES</B></A>  &nbsp;
-&nbsp;<A HREF="ArchiveElement.html" target="_top"><B>NO FRAMES</B></A>  &nbsp;
-&nbsp;<SCRIPT type="text/javascript">
-  <!--
-  if(window==top) {
-    document.writeln('<A HREF="../allclasses-noframe.html"><B>All Classes</B></A>');
-  }
-  //-->
-</SCRIPT>
-<NOSCRIPT>
-  <A HREF="../allclasses-noframe.html"><B>All Classes</B></A>
-</NOSCRIPT>
-
-
-</FONT></TD>
-</TR>
-<TR>
-<TD VALIGN="top" CLASS="NavBarCell3"><FONT SIZE="-2">
-  SUMMARY:&nbsp;NESTED&nbsp;|&nbsp;<A HREF="#field_summary">FIELD</A>&nbsp;|&nbsp;<A HREF="#constructor_summary">CONSTR</A>&nbsp;|&nbsp;<A HREF="#method_summary">METHOD</A></FONT></TD>
-<TD VALIGN="top" CLASS="NavBarCell3"><FONT SIZE="-2">
-DETAIL:&nbsp;<A HREF="#field_detail">FIELD</A>&nbsp;|&nbsp;<A HREF="#constructor_detail">CONSTR</A>&nbsp;|&nbsp;<A HREF="#method_detail">METHOD</A></FONT></TD>
-</TR>
-</TABLE>
-<A NAME="skip-navbar_bottom"></A>
-<!-- ======== END OF BOTTOM NAVBAR ======= -->
-
-<HR>
-
-</BODY>
-</HTML>
diff --git a/0.12-release/apache-rat-core/src/test/resources/javadocs/index.html b/0.12-release/apache-rat-core/src/test/resources/javadocs/index.html
deleted file mode 100644
index 3cd09f3..0000000
--- a/0.12-release/apache-rat-core/src/test/resources/javadocs/index.html
+++ /dev/null
@@ -1,37 +0,0 @@
-<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Frameset//EN" "http://www.w3.org/TR/html4/frameset.dtd">
-<!--NewPage-->
-<HTML>
-<HEAD>
-<!-- Generated by javadoc on Sun Oct 01 15:23:59 GMT 2006-->
-<TITLE>
-Generated Documentation (Untitled)
-</TITLE>
-<SCRIPT type="text/javascript">
-    targetPage = "" + window.location.search;
-    if (targetPage != "" && targetPage != "undefined")
-       targetPage = targetPage.substring(1);
-    function loadFrames() {
-        if (targetPage != "" && targetPage != "undefined")
-             top.classFrame.location = top.targetPage;
-    }
-</SCRIPT>
-<NOSCRIPT>
-</NOSCRIPT>
-</HEAD>
-<FRAMESET cols="20%,80%" title="" onLoad="top.loadFrames()">
-<FRAMESET rows="30%,70%" title="" onLoad="top.loadFrames()">
-<FRAME src="overview-frame.html" name="packageListFrame" title="All Packages">
-<FRAME src="allclasses-frame.html" name="packageFrame" title="All classes and interfaces (except non-static nested types)">
-</FRAMESET>
-<FRAME src="overview-summary.html" name="classFrame" title="Package, class and interface descriptions" scrolling="yes">
-<NOFRAMES>
-<H2>
-Frame Alert</H2>
-
-<P>
-This document is designed to be viewed using the frames feature. If you see this message, you are using a non-frame-capable web client.
-<BR>
-Link to<A HREF="overview-summary.html">Non-frame version.</A>
-</NOFRAMES>
-</FRAMESET>
-</HTML>
diff --git a/0.12-release/apache-rat-core/src/test/resources/javadocs/notjavadoc.html b/0.12-release/apache-rat-core/src/test/resources/javadocs/notjavadoc.html
deleted file mode 100644
index b67939c..0000000
--- a/0.12-release/apache-rat-core/src/test/resources/javadocs/notjavadoc.html
+++ /dev/null
@@ -1,26 +0,0 @@
-<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
-<!--
-  Licensed to the Apache Software Foundation (ASF) under one or more
-  contributor license agreements.  See the NOTICE file distributed with
-  this work for additional information regarding copyright ownership.
-  The ASF licenses this file to You under the Apache License, Version 2.0
-  (the "License"); you may not use this file except in compliance with
-  the License.  You may obtain a copy of the License at
-
-      http://www.apache.org/licenses/LICENSE-2.0
-
-  Unless required by applicable law or agreed to in writing, software
-  distributed under the License is distributed on an "AS IS" BASIS,
-  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-  See the License for the specific language governing permissions and
-  limitations under the License.
--->
-<html>
-<head>
-<meta http-equiv="Content-Type" content="text/html; charset=US-ASCII">
-<title>This is not a java doc!</title>
-</head>
-<body>
-Not a java doc
-</body>
-</html>
diff --git a/0.12-release/apache-rat-core/src/test/resources/oasis/bad/oasisbad1.txt b/0.12-release/apache-rat-core/src/test/resources/oasis/bad/oasisbad1.txt
deleted file mode 100644
index 720dcc3..0000000
--- a/0.12-release/apache-rat-core/src/test/resources/oasis/bad/oasisbad1.txt
+++ /dev/null
@@ -1,6 +0,0 @@
-CopyrightOASIS Open
-
-This document and translations of it may be copied and furnished to
-others, and derivative works that comment on or otherwise explain it
-or assist in its implementation may be prepared, copied, published,
-and distributed
\ No newline at end of file
diff --git a/0.12-release/apache-rat-core/src/test/resources/oasis/bad/oasisbad2.txt b/0.12-release/apache-rat-core/src/test/resources/oasis/bad/oasisbad2.txt
deleted file mode 100644
index 6a4a036..0000000
--- a/0.12-release/apache-rat-core/src/test/resources/oasis/bad/oasisbad2.txt
+++ /dev/null
@@ -1,5553 +0,0 @@
-<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
-<!-- NewPage -->
-<html lang="en">
-<!-- This file causes RAT 0.8 and 0.9 to run very slowly: see RAT-138 -->
-Copyright OASIS Open
-<head>
-<meta http-equiv="Content-Type" content="text/html" charset="iso-8859-1">
-<title>Index (Commons IO 2.5-SNAPSHOT API)</title>
-<link rel="stylesheet" type="text/css" href="./stylesheet.css" title="Style">
-</head>
-<body>
-<script type="text/javascript"><!--
-    if (location.href.indexOf('is-external=true') == -1) {
-        parent.document.title="Index (Commons IO 2.5-SNAPSHOT API)";
-    }
-//-->
-</script>
-<noscript>
-<div>JavaScript is disabled on your browser.</div>
-</noscript>
-<!-- ========= START OF TOP NAVBAR ======= -->
-<div class="topNav"><a name="navbar_top">
-<!--   -->
-</a><a href="#skip-navbar_top" title="Skip navigation links"></a><a name="navbar_top_firstrow">
-<!--   -->
-</a>
-<ul class="navList" title="Navigation">
-<li><a href="./overview-summary.html">Overview</a></li>
-<li>Package</li>
-<li>Class</li>
-<li>Use</li>
-<li><a href="./overview-tree.html">Tree</a></li>
-<li><a href="./deprecated-list.html">Deprecated</a></li>
-<li class="navBarCell1Rev">Index</li>
-<li><a href="./help-doc.html">Help</a></li>
-</ul>
-</div>
-<div class="subNav">
-<ul class="navList">
-<li>Prev</li>
-<li>Next</li>
-</ul>
-<ul class="navList">
-<li><a href="./index.html?index-all.html" target="_top">Frames</a></li>
-<li><a href="index-all.html" target="_top">No Frames</a></li>
-</ul>
-<ul class="navList" id="allclasses_navbar_top">
-<li><a href="./allclasses-noframe.html">All Classes</a></li>
-</ul>
-<div>
-<script type="text/javascript"><!--
-  allClassesLink = document.getElementById("allclasses_navbar_top");
-  if(window==top) {
-    allClassesLink.style.display = "block";
-  }
-  else {
-    allClassesLink.style.display = "none";
-  }
-  //-->
-</script>
-</div>
-<a name="skip-navbar_top">
-<!--   -->
-</a></div>
-<!-- ========= END OF TOP NAVBAR ========= -->
-<div class="contentContainer"><a href="#_A_">A</a>&nbsp;<a href="#_B_">B</a>&nbsp;<a href="#_C_">C</a>&nbsp;<a href="#_D_">D</a>&nbsp;<a href="#_E_">E</a>&nbsp;<a href="#_F_">F</a>&nbsp;<a href="#_G_">G</a>&nbsp;<a href="#_H_">H</a>&nbsp;<a href="#_I_">I</a>&nbsp;<a href="#_L_">L</a>&nbsp;<a href="#_M_">M</a>&nbsp;<a href="#_N_">N</a>&nbsp;<a href="#_O_">O</a>&nbsp;<a href="#_P_">P</a>&nbsp;<a href="#_R_">R</a>&nbsp;<a href="#_S_">S</a>&nbsp;<a href="#_T_">T</a>&nbsp;<a href="#_U_">U</a>&nbsp;<a href="#_V_">V</a>&nbsp;<a href="#_W_">W</a>&nbsp;<a href="#_X_">X</a>&nbsp;<a name="_A_">
-<!--   -->
-</a>
-<h2 class="title">A</h2>
-<dl>
-<dt><a href="./org/apache/commons/io/filefilter/AbstractFileFilter.html" title="class in org.apache.commons.io.filefilter"><span class="strong">AbstractFileFilter</span></a> - Class in <a href="./org/apache/commons/io/filefilter/package-summary.html">org.apache.commons.io.filefilter</a></dt>
-<dd>
-<div class="block">An abstract class which implements the Java FileFilter and FilenameFilter 
- interfaces via the IOFileFilter interface.</div>
-</dd>
-<dt><span class="strong"><a href="./org/apache/commons/io/filefilter/AbstractFileFilter.html#AbstractFileFilter()">AbstractFileFilter()</a></span> - Constructor for class org.apache.commons.io.filefilter.<a href="./org/apache/commons/io/filefilter/AbstractFileFilter.html" title="class in org.apache.commons.io.filefilter">AbstractFileFilter</a></dt>
-<dd>&nbsp;</dd>
-<dt><span class="strong"><a href="./org/apache/commons/io/filefilter/AbstractFileFilter.html#accept(java.io.File)">accept(File)</a></span> - Method in class org.apache.commons.io.filefilter.<a href="./org/apache/commons/io/filefilter/AbstractFileFilter.html" title="class in org.apache.commons.io.filefilter">AbstractFileFilter</a></dt>
-<dd>
-<div class="block">Checks to see if the File should be accepted by this filter.</div>
-</dd>
-<dt><span class="strong"><a href="./org/apache/commons/io/filefilter/AbstractFileFilter.html#accept(java.io.File, java.lang.String)">accept(File, String)</a></span> - Method in class org.apache.commons.io.filefilter.<a href="./org/apache/commons/io/filefilter/AbstractFileFilter.html" title="class in org.apache.commons.io.filefilter">AbstractFileFilter</a></dt>
-<dd>
-<div class="block">Checks to see if the File should be accepted by this filter.</div>
-</dd>
-<dt><span class="strong"><a href="./org/apache/commons/io/filefilter/AgeFileFilter.html#accept(java.io.File)">accept(File)</a></span> - Method in class org.apache.commons.io.filefilter.<a href="./org/apache/commons/io/filefilter/AgeFileFilter.html" title="class in org.apache.commons.io.filefilter">AgeFileFilter</a></dt>
-<dd>
-<div class="block">Checks to see if the last modification of the file matches cutoff
- favorably.</div>
-</dd>
-<dt><span class="strong"><a href="./org/apache/commons/io/filefilter/AndFileFilter.html#accept(java.io.File)">accept(File)</a></span> - Method in class org.apache.commons.io.filefilter.<a href="./org/apache/commons/io/filefilter/AndFileFilter.html" title="class in org.apache.commons.io.filefilter">AndFileFilter</a></dt>
-<dd>
-<div class="block">Checks to see if the File should be accepted by this filter.</div>
-</dd>
-<dt><span class="strong"><a href="./org/apache/commons/io/filefilter/AndFileFilter.html#accept(java.io.File, java.lang.String)">accept(File, String)</a></span> - Method in class org.apache.commons.io.filefilter.<a href="./org/apache/commons/io/filefilter/AndFileFilter.html" title="class in org.apache.commons.io.filefilter">AndFileFilter</a></dt>
-<dd>
-<div class="block">Checks to see if the File should be accepted by this filter.</div>
-</dd>
-<dt><span class="strong"><a href="./org/apache/commons/io/filefilter/CanReadFileFilter.html#accept(java.io.File)">accept(File)</a></span> - Method in class org.apache.commons.io.filefilter.<a href="./org/apache/commons/io/filefilter/CanReadFileFilter.html" title="class in org.apache.commons.io.filefilter">CanReadFileFilter</a></dt>
-<dd>
-<div class="block">Checks to see if the file can be read.</div>
-</dd>
-<dt><span class="strong"><a href="./org/apache/commons/io/filefilter/CanWriteFileFilter.html#accept(java.io.File)">accept(File)</a></span> - Method in class org.apache.commons.io.filefilter.<a href="./org/apache/commons/io/filefilter/CanWriteFileFilter.html" title="class in org.apache.commons.io.filefilter">CanWriteFileFilter</a></dt>
-<dd>
-<div class="block">Checks to see if the file can be written to.</div>
-</dd>
-<dt><span class="strong"><a href="./org/apache/commons/io/filefilter/DelegateFileFilter.html#accept(java.io.File)">accept(File)</a></span> - Method in class org.apache.commons.io.filefilter.<a href="./org/apache/commons/io/filefilter/DelegateFileFilter.html" title="class in org.apache.commons.io.filefilter">DelegateFileFilter</a></dt>
-<dd>
-<div class="block">Checks the filter.</div>
-</dd>
-<dt><span class="strong"><a href="./org/apache/commons/io/filefilter/DelegateFileFilter.html#accept(java.io.File, java.lang.String)">accept(File, String)</a></span> - Method in class org.apache.commons.io.filefilter.<a href="./org/apache/commons/io/filefilter/DelegateFileFilter.html" title="class in org.apache.commons.io.filefilter">DelegateFileFilter</a></dt>
-<dd>
-<div class="block">Checks the filter.</div>
-</dd>
-<dt><span class="strong"><a href="./org/apache/commons/io/filefilter/DirectoryFileFilter.html#accept(java.io.File)">accept(File)</a></span> - Method in class org.apache.commons.io.filefilter.<a href="./org/apache/commons/io/filefilter/DirectoryFileFilter.html" title="class in org.apache.commons.io.filefilter">DirectoryFileFilter</a></dt>
-<dd>
-<div class="block">Checks to see if the file is a directory.</div>
-</dd>
-<dt><span class="strong"><a href="./org/apache/commons/io/filefilter/EmptyFileFilter.html#accept(java.io.File)">accept(File)</a></span> - Method in class org.apache.commons.io.filefilter.<a href="./org/apache/commons/io/filefilter/EmptyFileFilter.html" title="class in org.apache.commons.io.filefilter">EmptyFileFilter</a></dt>
-<dd>
-<div class="block">Checks to see if the file is empty.</div>
-</dd>
-<dt><span class="strong"><a href="./org/apache/commons/io/filefilter/FalseFileFilter.html#accept(java.io.File)">accept(File)</a></span> - Method in class org.apache.commons.io.filefilter.<a href="./org/apache/commons/io/filefilter/FalseFileFilter.html" title="class in org.apache.commons.io.filefilter">FalseFileFilter</a></dt>
-<dd>
-<div class="block">Returns false.</div>
-</dd>
-<dt><span class="strong"><a href="./org/apache/commons/io/filefilter/FalseFileFilter.html#accept(java.io.File, java.lang.String)">accept(File, String)</a></span> - Method in class org.apache.commons.io.filefilter.<a href="./org/apache/commons/io/filefilter/FalseFileFilter.html" title="class in org.apache.commons.io.filefilter">FalseFileFilter</a></dt>
-<dd>
-<div class="block">Returns false.</div>
-</dd>
-<dt><span class="strong"><a href="./org/apache/commons/io/filefilter/FileFileFilter.html#accept(java.io.File)">accept(File)</a></span> - Method in class org.apache.commons.io.filefilter.<a href="./org/apache/commons/io/filefilter/FileFileFilter.html" title="class in org.apache.commons.io.filefilter">FileFileFilter</a></dt>
-<dd>
-<div class="block">Checks to see if the file is a file.</div>
-</dd>
-<dt><span class="strong"><a href="./org/apache/commons/io/filefilter/HiddenFileFilter.html#accept(java.io.File)">accept(File)</a></span> - Method in class org.apache.commons.io.filefilter.<a href="./org/apache/commons/io/filefilter/HiddenFileFilter.html" title="class in org.apache.commons.io.filefilter">HiddenFileFilter</a></dt>
-<dd>
-<div class="block">Checks to see if the file is hidden.</div>
-</dd>
-<dt><span class="strong"><a href="./org/apache/commons/io/filefilter/IOFileFilter.html#accept(java.io.File)">accept(File)</a></span> - Method in interface org.apache.commons.io.filefilter.<a href="./org/apache/commons/io/filefilter/IOFileFilter.html" title="interface in org.apache.commons.io.filefilter">IOFileFilter</a></dt>
-<dd>
-<div class="block">Checks to see if the File should be accepted by this filter.</div>
-</dd>
-<dt><span class="strong"><a href="./org/apache/commons/io/filefilter/IOFileFilter.html#accept(java.io.File, java.lang.String)">accept(File, String)</a></span> - Method in interface org.apache.commons.io.filefilter.<a href="./org/apache/commons/io/filefilter/IOFileFilter.html" title="interface in org.apache.commons.io.filefilter">IOFileFilter</a></dt>
-<dd>
-<div class="block">Checks to see if the File should be accepted by this filter.</div>
-</dd>
-<dt><span class="strong"><a href="./org/apache/commons/io/filefilter/MagicNumberFileFilter.html#accept(java.io.File)">accept(File)</a></span> - Method in class org.apache.commons.io.filefilter.<a href="./org/apache/commons/io/filefilter/MagicNumberFileFilter.html" title="class in org.apache.commons.io.filefilter">MagicNumberFileFilter</a></dt>
-<dd>
-<div class="block">
- Accepts the provided file if the file contains the file filter's magic
- number at the specified offset.</div>
-</dd>
-<dt><span class="strong"><a href="./org/apache/commons/io/filefilter/NameFileFilter.html#accept(java.io.File)">accept(File)</a></span> - Method in class org.apache.commons.io.filefilter.<a href="./org/apache/commons/io/filefilter/NameFileFilter.html" title="class in org.apache.commons.io.filefilter">NameFileFilter</a></dt>
-<dd>
-<div class="block">Checks to see if the filename matches.</div>
-</dd>
-<dt><span class="strong"><a href="./org/apache/commons/io/filefilter/NameFileFilter.html#accept(java.io.File, java.lang.String)">accept(File, String)</a></span> - Method in class org.apache.commons.io.filefilter.<a href="./org/apache/commons/io/filefilter/NameFileFilter.html" title="class in org.apache.commons.io.filefilter">NameFileFilter</a></dt>
-<dd>
-<div class="block">Checks to see if the filename matches.</div>
-</dd>
-<dt><span class="strong"><a href="./org/apache/commons/io/filefilter/NotFileFilter.html#accept(java.io.File)">accept(File)</a></span> - Method in class org.apache.commons.io.filefilter.<a href="./org/apache/commons/io/filefilter/NotFileFilter.html" title="class in org.apache.commons.io.filefilter">NotFileFilter</a></dt>
-<dd>
-<div class="block">Returns the logical NOT of the underlying filter's return value for the same File.</div>
-</dd>
-<dt><span class="strong"><a href="./org/apache/commons/io/filefilter/NotFileFilter.html#accept(java.io.File, java.lang.String)">accept(File, String)</a></span> - Method in class org.apache.commons.io.filefilter.<a href="./org/apache/commons/io/filefilter/NotFileFilter.html" title="class in org.apache.commons.io.filefilter">NotFileFilter</a></dt>
-<dd>
-<div class="block">Returns the logical NOT of the underlying filter's return value for the same arguments.</div>
-</dd>
-<dt><span class="strong"><a href="./org/apache/commons/io/filefilter/OrFileFilter.html#accept(java.io.File)">accept(File)</a></span> - Method in class org.apache.commons.io.filefilter.<a href="./org/apache/commons/io/filefilter/OrFileFilter.html" title="class in org.apache.commons.io.filefilter">OrFileFilter</a></dt>
-<dd>
-<div class="block">Checks to see if the File should be accepted by this filter.</div>
-</dd>
-<dt><span class="strong"><a href="./org/apache/commons/io/filefilter/OrFileFilter.html#accept(java.io.File, java.lang.String)">accept(File, String)</a></span> - Method in class org.apache.commons.io.filefilter.<a href="./org/apache/commons/io/filefilter/OrFileFilter.html" title="class in org.apache.commons.io.filefilter">OrFileFilter</a></dt>
-<dd>
-<div class="block">Checks to see if the File should be accepted by this filter.</div>
-</dd>
-<dt><span class="strong"><a href="./org/apache/commons/io/filefilter/PrefixFileFilter.html#accept(java.io.File)">accept(File)</a></span> - Method in class org.apache.commons.io.filefilter.<a href="./org/apache/commons/io/filefilter/PrefixFileFilter.html" title="class in org.apache.commons.io.filefilter">PrefixFileFilter</a></dt>
-<dd>
-<div class="block">Checks to see if the filename starts with the prefix.</div>
-</dd>
-<dt><span class="strong"><a href="./org/apache/commons/io/filefilter/PrefixFileFilter.html#accept(java.io.File, java.lang.String)">accept(File, String)</a></span> - Method in class org.apache.commons.io.filefilter.<a href="./org/apache/commons/io/filefilter/PrefixFileFilter.html" title="class in org.apache.commons.io.filefilter">PrefixFileFilter</a></dt>
-<dd>
-<div class="block">Checks to see if the filename starts with the prefix.</div>
-</dd>
-<dt><span class="strong"><a href="./org/apache/commons/io/filefilter/RegexFileFilter.html#accept(java.io.File, java.lang.String)">accept(File, String)</a></span> - Method in class org.apache.commons.io.filefilter.<a href="./org/apache/commons/io/filefilter/RegexFileFilter.html" title="class in org.apache.commons.io.filefilter">RegexFileFilter</a></dt>
-<dd>
-<div class="block">Checks to see if the filename matches one of the regular expressions.</div>
-</dd>
-<dt><span class="strong"><a href="./org/apache/commons/io/filefilter/SizeFileFilter.html#accept(java.io.File)">accept(File)</a></span> - Method in class org.apache.commons.io.filefilter.<a href="./org/apache/commons/io/filefilter/SizeFileFilter.html" title="class in org.apache.commons.io.filefilter">SizeFileFilter</a></dt>
-<dd>
-<div class="block">Checks to see if the size of the file is favorable.</div>
-</dd>
-<dt><span class="strong"><a href="./org/apache/commons/io/filefilter/SuffixFileFilter.html#accept(java.io.File)">accept(File)</a></span> - Method in class org.apache.commons.io.filefilter.<a href="./org/apache/commons/io/filefilter/SuffixFileFilter.html" title="class in org.apache.commons.io.filefilter">SuffixFileFilter</a></dt>
-<dd>
-<div class="block">Checks to see if the filename ends with the suffix.</div>
-</dd>
-<dt><span class="strong"><a href="./org/apache/commons/io/filefilter/SuffixFileFilter.html#accept(java.io.File, java.lang.String)">accept(File, String)</a></span> - Method in class org.apache.commons.io.filefilter.<a href="./org/apache/commons/io/filefilter/SuffixFileFilter.html" title="class in org.apache.commons.io.filefilter">SuffixFileFilter</a></dt>
-<dd>
-<div class="block">Checks to see if the filename ends with the suffix.</div>
-</dd>
-<dt><span class="strong"><a href="./org/apache/commons/io/filefilter/TrueFileFilter.html#accept(java.io.File)">accept(File)</a></span> - Method in class org.apache.commons.io.filefilter.<a href="./org/apache/commons/io/filefilter/TrueFileFilter.html" title="class in org.apache.commons.io.filefilter">TrueFileFilter</a></dt>
-<dd>
-<div class="block">Returns true.</div>
-</dd>
-<dt><span class="strong"><a href="./org/apache/commons/io/filefilter/TrueFileFilter.html#accept(java.io.File, java.lang.String)">accept(File, String)</a></span> - Method in class org.apache.commons.io.filefilter.<a href="./org/apache/commons/io/filefilter/TrueFileFilter.html" title="class in org.apache.commons.io.filefilter">TrueFileFilter</a></dt>
-<dd>
-<div class="block">Returns true.</div>
-</dd>
-<dt><span class="strong"><a href="./org/apache/commons/io/filefilter/WildcardFileFilter.html#accept(java.io.File, java.lang.String)">accept(File, String)</a></span> - Method in class org.apache.commons.io.filefilter.<a href="./org/apache/commons/io/filefilter/WildcardFileFilter.html" title="class in org.apache.commons.io.filefilter">WildcardFileFilter</a></dt>
-<dd>
-<div class="block">Checks to see if the filename matches one of the wildcards.</div>
-</dd>
-<dt><span class="strong"><a href="./org/apache/commons/io/filefilter/WildcardFileFilter.html#accept(java.io.File)">accept(File)</a></span> - Method in class org.apache.commons.io.filefilter.<a href="./org/apache/commons/io/filefilter/WildcardFileFilter.html" title="class in org.apache.commons.io.filefilter">WildcardFileFilter</a></dt>
-<dd>
-<div class="block">Checks to see if the filename matches one of the wildcards.</div>
-</dd>
-<dt><span class="strong"><a href="./org/apache/commons/io/filefilter/WildcardFilter.html#accept(java.io.File, java.lang.String)">accept(File, String)</a></span> - Method in class org.apache.commons.io.filefilter.<a href="./org/apache/commons/io/filefilter/WildcardFilter.html" title="class in org.apache.commons.io.filefilter">WildcardFilter</a></dt>
-<dd>
-<div class="block"><span class="strong">Deprecated.</span></div>
-<div class="block">Checks to see if the filename matches one of the wildcards.</div>
-</dd>
-<dt><span class="strong"><a href="./org/apache/commons/io/filefilter/WildcardFilter.html#accept(java.io.File)">accept(File)</a></span> - Method in class org.apache.commons.io.filefilter.<a href="./org/apache/commons/io/filefilter/WildcardFilter.html" title="class in org.apache.commons.io.filefilter">WildcardFilter</a></dt>
-<dd>
-<div class="block"><span class="strong">Deprecated.</span></div>
-<div class="block">Checks to see if the filename matches one of the wildcards.</div>
-</dd>
-<dt><span class="strong"><a href="./org/apache/commons/io/filefilter/AndFileFilter.html#addFileFilter(org.apache.commons.io.filefilter.IOFileFilter)">addFileFilter(IOFileFilter)</a></span> - Method in class org.apache.commons.io.filefilter.<a href="./org/apache/commons/io/filefilter/AndFileFilter.html" title="class in org.apache.commons.io.filefilter">AndFileFilter</a></dt>
-<dd>
-<div class="block">Adds the specified file filter to the list of file filters at the end of
- the list.</div>
-</dd>
-<dt><span class="strong"><a href="./org/apache/commons/io/filefilter/ConditionalFileFilter.html#addFileFilter(org.apache.commons.io.filefilter.IOFileFilter)">addFileFilter(IOFileFilter)</a></span> - Method in interface org.apache.commons.io.filefilter.<a href="./org/apache/commons/io/filefilter/ConditionalFileFilter.html" title="interface in org.apache.commons.io.filefilter">ConditionalFileFilter</a></dt>
-<dd>
-<div class="block">Adds the specified file filter to the list of file filters at the end of
- the list.</div>
-</dd>
-<dt><span class="strong"><a href="./org/apache/commons/io/filefilter/OrFileFilter.html#addFileFilter(org.apache.commons.io.filefilter.IOFileFilter)">addFileFilter(IOFileFilter)</a></span> - Method in class org.apache.commons.io.filefilter.<a href="./org/apache/commons/io/filefilter/OrFileFilter.html" title="class in org.apache.commons.io.filefilter">OrFileFilter</a></dt>
-<dd>
-<div class="block">Adds the specified file filter to the list of file filters at the end of
- the list.</div>
-</dd>
-<dt><span class="strong"><a href="./org/apache/commons/io/monitor/FileAlterationObserver.html#addListener(org.apache.commons.io.monitor.FileAlterationListener)">addListener(FileAlterationListener)</a></span> - Method in class org.apache.commons.io.monitor.<a href="./org/apache/commons/io/monitor/FileAlterationObserver.html" title="class in org.apache.commons.io.monitor">FileAlterationObserver</a></dt>
-<dd>
-<div class="block">Add a file system listener.</div>
-</dd>
-<dt><span class="strong"><a href="./org/apache/commons/io/monitor/FileAlterationMonitor.html#addObserver(org.apache.commons.io.monitor.FileAlterationObserver)">addObserver(FileAlterationObserver)</a></span> - Method in class org.apache.commons.io.monitor.<a href="./org/apache/commons/io/monitor/FileAlterationMonitor.html" title="class in org.apache.commons.io.monitor">FileAlterationMonitor</a></dt>
-<dd>
-<div class="block">Add a file system observer to this monitor.</div>
-</dd>
-<dt><span class="strong"><a href="./org/apache/commons/io/input/AutoCloseInputStream.html#afterRead(int)">afterRead(int)</a></span> - Method in class org.apache.commons.io.input.<a href="./org/apache/commons/io/input/AutoCloseInputStream.html" title="class in org.apache.commons.io.input">AutoCloseInputStream</a></dt>
-<dd>
-<div class="block">Automatically closes the stream if the end of stream was reached.</div>
-</dd>
-<dt><span class="strong"><a href="./org/apache/commons/io/input/CountingInputStream.html#afterRead(int)">afterRead(int)</a></span> - Method in class org.apache.commons.io.input.<a href="./org/apache/commons/io/input/CountingInputStream.html" title="class in org.apache.commons.io.input">CountingInputStream</a></dt>
-<dd>
-<div class="block">Adds the number of read bytes to the count.</div>
-</dd>
-<dt><span class="strong"><a href="./org/apache/commons/io/input/ProxyInputStream.html#afterRead(int)">afterRead(int)</a></span> - Method in class org.apache.commons.io.input.<a href="./org/apache/commons/io/input/ProxyInputStream.html" title="class in org.apache.commons.io.input">ProxyInputStream</a></dt>
-<dd>
-<div class="block">Invoked by the read methods after the proxied call has returned
- successfully.</div>
-</dd>
-<dt><span class="strong"><a href="./org/apache/commons/io/input/ProxyReader.html#afterRead(int)">afterRead(int)</a></span> - Method in class org.apache.commons.io.input.<a href="./org/apache/commons/io/input/ProxyReader.html" title="class in org.apache.commons.io.input">ProxyReader</a></dt>
-<dd>
-<div class="block">Invoked by the read methods after the proxied call has returned
- successfully.</div>
-</dd>
-<dt><span class="strong"><a href="./org/apache/commons/io/output/ProxyOutputStream.html#afterWrite(int)">afterWrite(int)</a></span> - Method in class org.apache.commons.io.output.<a href="./org/apache/commons/io/output/ProxyOutputStream.html" title="class in org.apache.commons.io.output">ProxyOutputStream</a></dt>
-<dd>
-<div class="block">Invoked by the write methods after the proxied call has returned
- successfully.</div>
-</dd>
-<dt><span class="strong"><a href="./org/apache/commons/io/output/ProxyWriter.html#afterWrite(int)">afterWrite(int)</a></span> - Method in class org.apache.commons.io.output.<a href="./org/apache/commons/io/output/ProxyWriter.html" title="class in org.apache.commons.io.output">ProxyWriter</a></dt>
-<dd>
-<div class="block">Invoked by the write methods after the proxied call has returned
- successfully.</div>
-</dd>
-<dt><a href="./org/apache/commons/io/filefilter/AgeFileFilter.html" title="class in org.apache.commons.io.filefilter"><span class="strong">AgeFileFilter</span></a> - Class in <a href="./org/apache/commons/io/filefilter/package-summary.html">org.apache.commons.io.filefilter</a></dt>
-<dd>
-<div class="block">Filters files based on a cutoff time, can filter either newer
- files or files equal to or older.</div>
-</dd>
-<dt><span class="strong"><a href="./org/apache/commons/io/filefilter/AgeFileFilter.html#AgeFileFilter(long)">AgeFileFilter(long)</a></span> - Constructor for class org.apache.commons.io.filefilter.<a href="./org/apache/commons/io/filefilter/AgeFileFilter.html" title="class in org.apache.commons.io.filefilter">AgeFileFilter</a></dt>
-<dd>
-<div class="block">Constructs a new age file filter for files equal to or older than
- a certain cutoff</div>
-</dd>
-<dt><span class="strong"><a href="./org/apache/commons/io/filefilter/AgeFileFilter.html#AgeFileFilter(long, boolean)">AgeFileFilter(long, boolean)</a></span> - Constructor for class org.apache.commons.io.filefilter.<a href="./org/apache/commons/io/filefilter/AgeFileFilter.html" title="class in org.apache.commons.io.filefilter">AgeFileFilter</a></dt>
-<dd>
-<div class="block">Constructs a new age file filter for files on any one side
- of a certain cutoff.</div>
-</dd>
-<dt><span class="strong"><a href="./org/apache/commons/io/filefilter/AgeFileFilter.html#AgeFileFilter(java.util.Date)">AgeFileFilter(Date)</a></span> - Constructor for class org.apache.commons.io.filefilter.<a href="./org/apache/commons/io/filefilter/AgeFileFilter.html" title="class in org.apache.commons.io.filefilter">AgeFileFilter</a></dt>
-<dd>
-<div class="block">Constructs a new age file filter for files older than (at or before)
- a certain cutoff date.</div>
-</dd>
-<dt><span class="strong"><a href="./org/apache/commons/io/filefilter/AgeFileFilter.html#AgeFileFilter(java.util.Date, boolean)">AgeFileFilter(Date, boolean)</a></span> - Constructor for class org.apache.commons.io.filefilter.<a href="./org/apache/commons/io/filefilter/AgeFileFilter.html" title="class in org.apache.commons.io.filefilter">AgeFileFilter</a></dt>
-<dd>
-<div class="block">Constructs a new age file filter for files on any one side
- of a certain cutoff date.</div>
-</dd>
-<dt><span class="strong"><a href="./org/apache/commons/io/filefilter/AgeFileFilter.html#AgeFileFilter(java.io.File)">AgeFileFilter(File)</a></span> - Constructor for class org.apache.commons.io.filefilter.<a href="./org/apache/commons/io/filefilter/AgeFileFilter.html" title="class in org.apache.commons.io.filefilter">AgeFileFilter</a></dt>
-<dd>
-<div class="block">Constructs a new age file filter for files older than (at or before)
- a certain File (whose last modification time will be used as reference).</div>
-</dd>
-<dt><span class="strong"><a href="./org/apache/commons/io/filefilter/AgeFileFilter.html#AgeFileFilter(java.io.File, boolean)">AgeFileFilter(File, boolean)</a></span> - Constructor for class org.apache.commons.io.filefilter.<a href="./org/apache/commons/io/filefilter/AgeFileFilter.html" title="class in org.apache.commons.io.filefilter">AgeFileFilter</a></dt>
-<dd>
-<div class="block">Constructs a new age file filter for files on any one side
- of a certain File (whose last modification time will be used as
- reference).</div>
-</dd>
-<dt><span class="strong"><a href="./org/apache/commons/io/filefilter/FileFilterUtils.html#ageFileFilter(long)">ageFileFilter(long)</a></span> - Static method in class org.apache.commons.io.filefilter.<a href="./org/apache/commons/io/filefilter/FileFilterUtils.html" title="class in org.apache.commons.io.filefilter">FileFilterUtils</a></dt>
-<dd>
-<div class="block">Returns a filter that returns true if the file was last modified after
- the specified cutoff time.</div>
-</dd>
-<dt><span class="strong"><a href="./org/apache/commons/io/filefilter/FileFilterUtils.html#ageFileFilter(long, boolean)">ageFileFilter(long, boolean)</a></span> - Static method in class org.apache.commons.io.filefilter.<a href="./org/apache/commons/io/filefilter/FileFilterUtils.html" title="class in org.apache.commons.io.filefilter">FileFilterUtils</a></dt>
-<dd>
-<div class="block">Returns a filter that filters files based on a cutoff time.</div>
-</dd>
-<dt><span class="strong"><a href="./org/apache/commons/io/filefilter/FileFilterUtils.html#ageFileFilter(java.util.Date)">ageFileFilter(Date)</a></span> - Static method in class org.apache.commons.io.filefilter.<a href="./org/apache/commons/io/filefilter/FileFilterUtils.html" title="class in org.apache.commons.io.filefilter">FileFilterUtils</a></dt>
-<dd>
-<div class="block">Returns a filter that returns true if the file was last modified after
- the specified cutoff date.</div>
-</dd>
-<dt><span class="strong"><a href="./org/apache/commons/io/filefilter/FileFilterUtils.html#ageFileFilter(java.util.Date, boolean)">ageFileFilter(Date, boolean)</a></span> - Static method in class org.apache.commons.io.filefilter.<a href="./org/apache/commons/io/filefilter/FileFilterUtils.html" title="class in org.apache.commons.io.filefilter">FileFilterUtils</a></dt>
-<dd>
-<div class="block">Returns a filter that filters files based on a cutoff date.</div>
-</dd>
-<dt><span class="strong"><a href="./org/apache/commons/io/filefilter/FileFilterUtils.html#ageFileFilter(java.io.File)">ageFileFilter(File)</a></span> - Static method in class org.apache.commons.io.filefilter.<a href="./org/apache/commons/io/filefilter/FileFilterUtils.html" title="class in org.apache.commons.io.filefilter">FileFilterUtils</a></dt>
-<dd>
-<div class="block">Returns a filter that returns true if the file was last modified after
- the specified reference file.</div>
-</dd>
-<dt><span class="strong"><a href="./org/apache/commons/io/filefilter/FileFilterUtils.html#ageFileFilter(java.io.File, boolean)">ageFileFilter(File, boolean)</a></span> - Static method in class org.apache.commons.io.filefilter.<a href="./org/apache/commons/io/filefilter/FileFilterUtils.html" title="class in org.apache.commons.io.filefilter">FileFilterUtils</a></dt>
-<dd>
-<div class="block">Returns a filter that filters files based on a cutoff reference file.</div>
-</dd>
-<dt><span class="strong"><a href="./org/apache/commons/io/filefilter/FileFilterUtils.html#and(org.apache.commons.io.filefilter.IOFileFilter...)">and(IOFileFilter...)</a></span> - Static method in class org.apache.commons.io.filefilter.<a href="./org/apache/commons/io/filefilter/FileFilterUtils.html" title="class in org.apache.commons.io.filefilter">FileFilterUtils</a></dt>
-<dd>
-<div class="block">Returns a filter that ANDs the specified filters.</div>
-</dd>
-<dt><a href="./org/apache/commons/io/filefilter/AndFileFilter.html" title="class in org.apache.commons.io.filefilter"><span class="strong">AndFileFilter</span></a> - Class in <a href="./org/apache/commons/io/filefilter/package-summary.html">org.apache.commons.io.filefilter</a></dt>
-<dd>
-<div class="block">A <a href="http://download.oracle.com/javase/6/docs/api/java/io/FileFilter.html?is-external=true" title="class or interface in java.io"><code>FileFilter</code></a> providing conditional AND logic across a list of
- file filters.</div>
-</dd>
-<dt><span class="strong"><a href="./org/apache/commons/io/filefilter/AndFileFilter.html#AndFileFilter()">AndFileFilter()</a></span> - Constructor for class org.apache.commons.io.filefilter.<a href="./org/apache/commons/io/filefilter/AndFileFilter.html" title="class in org.apache.commons.io.filefilter">AndFileFilter</a></dt>
-<dd>
-<div class="block">Constructs a new instance of <code>AndFileFilter</code>.</div>
-</dd>
-<dt><span class="strong"><a href="./org/apache/commons/io/filefilter/AndFileFilter.html#AndFileFilter(java.util.List)">AndFileFilter(List&lt;IOFileFilter&gt;)</a></span> - Constructor for class org.apache.commons.io.filefilter.<a href="./org/apache/commons/io/filefilter/AndFileFilter.html" title="class in org.apache.commons.io.filefilter">AndFileFilter</a></dt>
-<dd>
-<div class="block">Constructs a new instance of <code>AndFileFilter</code>
- with the specified list of filters.</div>
-</dd>
-<dt><span class="strong"><a href="./org/apache/commons/io/filefilter/AndFileFilter.html#AndFileFilter(org.apache.commons.io.filefilter.IOFileFilter, org.apache.commons.io.filefilter.IOFileFilter)">AndFileFilter(IOFileFilter, IOFileFilter)</a></span> - Constructor for class org.apache.commons.io.filefilter.<a href="./org/apache/commons/io/filefilter/AndFileFilter.html" title="class in org.apache.commons.io.filefilter">AndFileFilter</a></dt>
-<dd>
-<div class="block">Constructs a new file filter that ANDs the result of two other filters.</div>
-</dd>
-<dt><span class="strong"><a href="./org/apache/commons/io/filefilter/FileFilterUtils.html#andFileFilter(org.apache.commons.io.filefilter.IOFileFilter, org.apache.commons.io.filefilter.IOFileFilter)">andFileFilter(IOFileFilter, IOFileFilter)</a></span> - Static method in class org.apache.commons.io.filefilter.<a href="./org/apache/commons/io/filefilter/FileFilterUtils.html" title="class in org.apache.commons.io.filefilter">FileFilterUtils</a></dt>
-<dd>
-<div class="block"><span class="strong">Deprecated.</span>
-<div class="block"><i>use <a href="./org/apache/commons/io/filefilter/FileFilterUtils.html#and(org.apache.commons.io.filefilter.IOFileFilter...)"><code>FileFilterUtils.and(IOFileFilter...)</code></a></i></div>
-</div>
-</dd>
-<dt><span class="strong"><a href="./org/apache/commons/io/output/NullWriter.html#append(char)">append(char)</a></span> - Method in class org.apache.commons.io.output.<a href="./org/apache/commons/io/output/NullWriter.html" title="class in org.apache.commons.io.output">NullWriter</a></dt>
-<dd>
-<div class="block">Does nothing - output to <code>/dev/null</code>.</div>
-</dd>
-<dt><span class="strong"><a href="./org/apache/commons/io/output/NullWriter.html#append(java.lang.CharSequence, int, int)">append(CharSequence, int, int)</a></span> - Method in class org.apache.commons.io.output.<a href="./org/apache/commons/io/output/NullWriter.html" title="class in org.apache.commons.io.output">NullWriter</a></dt>
-<dd>
-<div class="block">Does nothing - output to <code>/dev/null</code>.</div>
-</dd>
-<dt><span class="strong"><a href="./org/apache/commons/io/output/NullWriter.html#append(java.lang.CharSequence)">append(CharSequence)</a></span> - Method in class org.apache.commons.io.output.<a href="./org/apache/commons/io/output/NullWriter.html" title="class in org.apache.commons.io.output">NullWriter</a></dt>
-<dd>
-<div class="block">Does nothing - output to <code>/dev/null</code>.</div>
-</dd>
-<dt><span class="strong"><a href="./org/apache/commons/io/output/ProxyWriter.html#append(char)">append(char)</a></span> - Method in class org.apache.commons.io.output.<a href="./org/apache/commons/io/output/ProxyWriter.html" title="class in org.apache.commons.io.output">ProxyWriter</a></dt>
-<dd>
-<div class="block">Invokes the delegate's <code>append(char)</code> method.</div>
-</dd>
-<dt><span class="strong"><a href="./org/apache/commons/io/output/ProxyWriter.html#append(java.lang.CharSequence, int, int)">append(CharSequence, int, int)</a></span> - Method in class org.apache.commons.io.output.<a href="./org/apache/commons/io/output/ProxyWriter.html" title="class in org.apache.commons.io.output">ProxyWriter</a></dt>
-<dd>
-<div class="block">Invokes the delegate's <code>append(CharSequence, int, int)</code> method.</div>
-</dd>
-<dt><span class="strong"><a href="./org/apache/commons/io/output/ProxyWriter.html#append(java.lang.CharSequence)">append(CharSequence)</a></span> - Method in class org.apache.commons.io.output.<a href="./org/apache/commons/io/output/ProxyWriter.html" title="class in org.apache.commons.io.output">ProxyWriter</a></dt>
-<dd>
-<div class="block">Invokes the delegate's <code>append(CharSequence)</code> method.</div>
-</dd>
-<dt><span class="strong"><a href="./org/apache/commons/io/output/StringBuilderWriter.html#append(char)">append(char)</a></span> - Method in class org.apache.commons.io.output.<a href="./org/apache/commons/io/output/StringBuilderWriter.html" title="class in org.apache.commons.io.output">StringBuilderWriter</a></dt>
-<dd>
-<div class="block">Append a single character to this Writer.</div>
-</dd>
-<dt><span class="strong"><a href="./org/apache/commons/io/output/StringBuilderWriter.html#append(java.lang.CharSequence)">append(CharSequence)</a></span> - Method in class org.apache.commons.io.output.<a href="./org/apache/commons/io/output/StringBuilderWriter.html" title="class in org.apache.commons.io.output">StringBuilderWriter</a></dt>
-<dd>
-<div class="block">Append a character sequence to this Writer.</div>
-</dd>
-<dt><span class="strong"><a href="./org/apache/commons/io/output/StringBuilderWriter.html#append(java.lang.CharSequence, int, int)">append(CharSequence, int, int)</a></span> - Method in class org.apache.commons.io.output.<a href="./org/apache/commons/io/output/StringBuilderWriter.html" title="class in org.apache.commons.io.output">StringBuilderWriter</a></dt>
-<dd>
-<div class="block">Append a portion of a character sequence to the <a href="http://download.oracle.com/javase/6/docs/api/java/lang/StringBuilder.html?is-external=true" title="class or interface in java.lang"><code>StringBuilder</code></a>.</div>
-</dd>
-<dt><span class="strong"><a href="./org/apache/commons/io/IOUtils.html#asBufferedInputStream(java.io.InputStream)">asBufferedInputStream(InputStream)</a></span> - Static method in class org.apache.commons.io.<a href="./org/apache/commons/io/IOUtils.html" title="class in org.apache.commons.io">IOUtils</a></dt>
-<dd>
-<div class="block">Returns the given InputStream if it is already a <a href="http://download.oracle.com/javase/6/docs/api/java/io/BufferedInputStream.html?is-external=true" title="class or interface in java.io"><code>BufferedInputStream</code></a>, otherwise creates a BufferedInputStream from the given
- InputStream.</div>
-</dd>
-<dt><span class="strong"><a href="./org/apache/commons/io/IOUtils.html#asBufferedOutputStream(java.io.OutputStream)">asBufferedOutputStream(OutputStream)</a></span> - Static method in class org.apache.commons.io.<a href="./org/apache/commons/io/IOUtils.html" title="class in org.apache.commons.io">IOUtils</a></dt>
-<dd>
-<div class="block">Returns the given OutputStream if it is already a <a href="http://download.oracle.com/javase/6/docs/api/java/io/BufferedOutputStream.html?is-external=true" title="class or interface in java.io"><code>BufferedOutputStream</code></a>, otherwise creates a BufferedOutputStream from the given
- OutputStream.</div>
-</dd>
-<dt><span class="strong"><a href="./org/apache/commons/io/IOUtils.html#asBufferedReader(java.io.Reader)">asBufferedReader(Reader)</a></span> - Static method in class org.apache.commons.io.<a href="./org/apache/commons/io/IOUtils.html" title="class in org.apache.commons.io">IOUtils</a></dt>
-<dd>
-<div class="block">Returns the given reader if it is already a <a href="http://download.oracle.com/javase/6/docs/api/java/io/BufferedReader.html?is-external=true" title="class or interface in java.io"><code>BufferedReader</code></a>, otherwise creates a BufferedReader from the given
- reader.</div>
-</dd>
-<dt><span class="strong"><a href="./org/apache/commons/io/IOUtils.html#asBufferedWriter(java.io.Writer)">asBufferedWriter(Writer)</a></span> - Static method in class org.apache.commons.io.<a href="./org/apache/commons/io/IOUtils.html" title="class in org.apache.commons.io">IOUtils</a></dt>
-<dd>
-<div class="block">Returns the given Writer if it is already a <a href="http://download.oracle.com/javase/6/docs/api/java/io/BufferedWriter.html?is-external=true" title="class or interface in java.io"><code>BufferedWriter</code></a>, otherwise creates a BufferedWriter from the given
- Writer.</div>
-</dd>
-<dt><span class="strong"><a href="./org/apache/commons/io/filefilter/FileFilterUtils.html#asFileFilter(java.io.FileFilter)">asFileFilter(FileFilter)</a></span> - Static method in class org.apache.commons.io.filefilter.<a href="./org/apache/commons/io/filefilter/FileFilterUtils.html" title="class in org.apache.commons.io.filefilter">FileFilterUtils</a></dt>
-<dd>
-<div class="block">Returns an <code>IOFileFilter</code> that wraps the
- <code>FileFilter</code> instance.</div>
-</dd>
-<dt><span class="strong"><a href="./org/apache/commons/io/filefilter/FileFilterUtils.html#asFileFilter(java.io.FilenameFilter)">asFileFilter(FilenameFilter)</a></span> - Static method in class org.apache.commons.io.filefilter.<a href="./org/apache/commons/io/filefilter/FileFilterUtils.html" title="class in org.apache.commons.io.filefilter">FileFilterUtils</a></dt>
-<dd>
-<div class="block">Returns an <code>IOFileFilter</code> that wraps the
- <code>FilenameFilter</code> instance.</div>
-</dd>
-<dt><a href="./org/apache/commons/io/input/AutoCloseInputStream.html" title="class in org.apache.commons.io.input"><span class="strong">AutoCloseInputStream</span></a> - Class in <a href="./org/apache/commons/io/input/package-summary.html">org.apache.commons.io.input</a></dt>
-<dd>
-<div class="block">Proxy stream that closes and discards the underlying stream as soon as the
- end of input has been reached or when the stream is explicitly closed.</div>
-</dd>
-<dt><span class="strong"><a href="./org/apache/commons/io/input/AutoCloseInputStream.html#AutoCloseInputStream(java.io.InputStream)">AutoCloseInputStream(InputStream)</a></span> - Constructor for class org.apache.commons.io.input.<a href="./org/apache/commons/io/input/AutoCloseInputStream.html" title="class in org.apache.commons.io.input">AutoCloseInputStream</a></dt>
-<dd>
-<div class="block">Creates an automatically closing proxy for the given input stream.</div>
-</dd>
-<dt><span class="strong"><a href="./org/apache/commons/io/input/BoundedInputStream.html#available()">available()</a></span> - Method in class org.apache.commons.io.input.<a href="./org/apache/commons/io/input/BoundedInputStream.html" title="class in org.apache.commons.io.input">BoundedInputStream</a></dt>
-<dt><span class="strong"><a href="./org/apache/commons/io/input/BrokenInputStream.html#available()">available()</a></span> - Method in class org.apache.commons.io.input.<a href="./org/apache/commons/io/input/BrokenInputStream.html" title="class in org.apache.commons.io.input">BrokenInputStream</a></dt>
-<dd>
-<div class="block">Throws the configured exception.</div>
-</dd>
-<dt><span class="strong"><a href="./org/apache/commons/io/input/CharSequenceInputStream.html#available()">available()</a></span> - Method in class org.apache.commons.io.input.<a href="./org/apache/commons/io/input/CharSequenceInputStream.html" title="class in org.apache.commons.io.input">CharSequenceInputStream</a></dt>
-<dd>
-<div class="block">Return an estimate of the number of bytes remaining in the byte stream.</div>
-</dd>
-<dt><span class="strong"><a href="./org/apache/commons/io/input/NullInputStream.html#available()">available()</a></span> - Method in class org.apache.commons.io.input.<a href="./org/apache/commons/io/input/NullInputStream.html" title="class in org.apache.commons.io.input">NullInputStream</a></dt>
-<dd>
-<div class="block">Return the number of bytes that can be read.</div>
-</dd>
-<dt><span class="strong"><a href="./org/apache/commons/io/input/ProxyInputStream.html#available()">available()</a></span> - Method in class org.apache.commons.io.input.<a href="./org/apache/commons/io/input/ProxyInputStream.html" title="class in org.apache.commons.io.input">ProxyInputStream</a></dt>
-<dd>
-<div class="block">Invokes the delegate's <code>available()</code> method.</div>
-</dd>
-</dl>
-<a name="_B_">
-<!--   -->
-</a>
-<h2 class="title">B</h2>
-<dl>
-<dt><span class="strong"><a href="./org/apache/commons/io/input/ProxyInputStream.html#beforeRead(int)">beforeRead(int)</a></span> - Method in class org.apache.commons.io.input.<a href="./org/apache/commons/io/input/ProxyInputStream.html" title="class in org.apache.commons.io.input">ProxyInputStream</a></dt>
-<dd>
-<div class="block">Invoked by the read methods before the call is proxied.</div>
-</dd>
-<dt><span class="strong"><a href="./org/apache/commons/io/input/ProxyReader.html#beforeRead(int)">beforeRead(int)</a></span> - Method in class org.apache.commons.io.input.<a href="./org/apache/commons/io/input/ProxyReader.html" title="class in org.apache.commons.io.input">ProxyReader</a></dt>
-<dd>
-<div class="block">Invoked by the read methods before the call is proxied.</div>
-</dd>
-<dt><span class="strong"><a href="./org/apache/commons/io/output/CountingOutputStream.html#beforeWrite(int)">beforeWrite(int)</a></span> - Method in class org.apache.commons.io.output.<a href="./org/apache/commons/io/output/CountingOutputStream.html" title="class in org.apache.commons.io.output">CountingOutputStream</a></dt>
-<dd>
-<div class="block">Updates the count with the number of bytes that are being written.</div>
-</dd>
-<dt><span class="strong"><a href="./org/apache/commons/io/output/ProxyOutputStream.html#beforeWrite(int)">beforeWrite(int)</a></span> - Method in class org.apache.commons.io.output.<a href="./org/apache/commons/io/output/ProxyOutputStream.html" title="class in org.apache.commons.io.output">ProxyOutputStream</a></dt>
-<dd>
-<div class="block">Invoked by the write methods before the call is proxied.</div>
-</dd>
-<dt><span class="strong"><a href="./org/apache/commons/io/output/ProxyWriter.html#beforeWrite(int)">beforeWrite(int)</a></span> - Method in class org.apache.commons.io.output.<a href="./org/apache/commons/io/output/ProxyWriter.html" title="class in org.apache.commons.io.output">ProxyWriter</a></dt>
-<dd>
-<div class="block">Invoked by the write methods before the call is proxied.</div>
-</dd>
-<dt><span class="strong"><a href="./org/apache/commons/io/input/DemuxInputStream.html#bindStream(java.io.InputStream)">bindStream(InputStream)</a></span> - Method in class org.apache.commons.io.input.<a href="./org/apache/commons/io/input/DemuxInputStream.html" title="class in org.apache.commons.io.input">DemuxInputStream</a></dt>
-<dd>
-<div class="block">Bind the specified stream to the current thread.</div>
-</dd>
-<dt><span class="strong"><a href="./org/apache/commons/io/output/DemuxOutputStream.html#bindStream(java.io.OutputStream)">bindStream(OutputStream)</a></span> - Method in class org.apache.commons.io.output.<a href="./org/apache/commons/io/output/DemuxOutputStream.html" title="class in org.apache.commons.io.output">DemuxOutputStream</a></dt>
-<dd>
-<div class="block">Bind the specified stream to the current thread.</div>
-</dd>
-<dt><a href="./org/apache/commons/io/input/BOMInputStream.html" title="class in org.apache.commons.io.input"><span class="strong">BOMInputStream</span></a> - Class in <a href="./org/apache/commons/io/input/package-summary.html">org.apache.commons.io.input</a></dt>
-<dd>
-<div class="block">This class is used to wrap a stream that includes an encoded <a href="./org/apache/commons/io/ByteOrderMark.html" title="class in org.apache.commons.io"><code>ByteOrderMark</code></a> as its first bytes.</div>
-</dd>
-<dt><span class="strong"><a href="./org/apache/commons/io/input/BOMInputStream.html#BOMInputStream(java.io.InputStream)">BOMInputStream(InputStream)</a></span> - Constructor for class org.apache.commons.io.input.<a href="./org/apache/commons/io/input/BOMInputStream.html" title="class in org.apache.commons.io.input">BOMInputStream</a></dt>
-<dd>
-<div class="block">Constructs a new BOM InputStream that excludes a <a href="./org/apache/commons/io/ByteOrderMark.html#UTF_8"><code>ByteOrderMark.UTF_8</code></a> BOM.</div>
-</dd>
-<dt><span class="strong"><a href="./org/apache/commons/io/input/BOMInputStream.html#BOMInputStream(java.io.InputStream, boolean)">BOMInputStream(InputStream, boolean)</a></span> - Constructor for class org.apache.commons.io.input.<a href="./org/apache/commons/io/input/BOMInputStream.html" title="class in org.apache.commons.io.input">BOMInputStream</a></dt>
-<dd>
-<div class="block">Constructs a new BOM InputStream that detects a a <a href="./org/apache/commons/io/ByteOrderMark.html#UTF_8"><code>ByteOrderMark.UTF_8</code></a> and optionally includes it.</div>
-</dd>
-<dt><span class="strong"><a href="./org/apache/commons/io/input/BOMInputStream.html#BOMInputStream(java.io.InputStream, org.apache.commons.io.ByteOrderMark...)">BOMInputStream(InputStream, ByteOrderMark...)</a></span> - Constructor for class org.apache.commons.io.input.<a href="./org/apache/commons/io/input/BOMInputStream.html" title="class in org.apache.commons.io.input">BOMInputStream</a></dt>
-<dd>
-<div class="block">Constructs a new BOM InputStream that excludes the specified BOMs.</div>
-</dd>
-<dt><span class="strong"><a href="./org/apache/commons/io/input/BOMInputStream.html#BOMInputStream(java.io.InputStream, boolean, org.apache.commons.io.ByteOrderMark...)">BOMInputStream(InputStream, boolean, ByteOrderMark...)</a></span> - Constructor for class org.apache.commons.io.input.<a href="./org/apache/commons/io/input/BOMInputStream.html" title="class in org.apache.commons.io.input">BOMInputStream</a></dt>
-<dd>
-<div class="block">Constructs a new BOM InputStream that detects the specified BOMs and optionally includes them.</div>
-</dd>
-<dt><a href="./org/apache/commons/io/input/BoundedInputStream.html" title="class in org.apache.commons.io.input"><span class="strong">BoundedInputStream</span></a> - Class in <a href="./org/apache/commons/io/input/package-summary.html">org.apache.commons.io.input</a></dt>
-<dd>
-<div class="block">This is a stream that will only supply bytes up to a certain length - if its
- position goes above that, it will stop.</div>
-</dd>
-<dt><span class="strong"><a href="./org/apache/commons/io/input/BoundedInputStream.html#BoundedInputStream(java.io.InputStream, long)">BoundedInputStream(InputStream, long)</a></span> - Constructor for class org.apache.commons.io.input.<a href="./org/apache/commons/io/input/BoundedInputStream.html" title="class in org.apache.commons.io.input">BoundedInputStream</a></dt>
-<dd>
-<div class="block">Creates a new <code>BoundedInputStream</code> that wraps the given input
- stream and limits it to a certain size.</div>
-</dd>
-<dt><span class="strong"><a href="./org/apache/commons/io/input/BoundedInputStream.html#BoundedInputStream(java.io.InputStream)">BoundedInputStream(InputStream)</a></span> - Constructor for class org.apache.commons.io.input.<a href="./org/apache/commons/io/input/BoundedInputStream.html" title="class in org.apache.commons.io.input">BoundedInputStream</a></dt>
-<dd>
-<div class="block">Creates a new <code>BoundedInputStream</code> that wraps the given input
- stream and is unlimited.</div>
-</dd>
-<dt><span class="strong"><a href="./org/apache/commons/io/output/TeeOutputStream.html#branch">branch</a></span> - Variable in class org.apache.commons.io.output.<a href="./org/apache/commons/io/output/TeeOutputStream.html" title="class in org.apache.commons.io.output">TeeOutputStream</a></dt>
-<dd>
-<div class="block">the second OutputStream to write to</div>
-</dd>
-<dt><a href="./org/apache/commons/io/input/BrokenInputStream.html" title="class in org.apache.commons.io.input"><span class="strong">BrokenInputStream</span></a> - Class in <a href="./org/apache/commons/io/input/package-summary.html">org.apache.commons.io.input</a></dt>
-<dd>
-<div class="block">Broken input stream.</div>
-</dd>
-<dt><span class="strong"><a href="./org/apache/commons/io/input/BrokenInputStream.html#BrokenInputStream(java.io.IOException)">BrokenInputStream(IOException)</a></span> - Constructor for class org.apache.commons.io.input.<a href="./org/apache/commons/io/input/BrokenInputStream.html" title="class in org.apache.commons.io.input">BrokenInputStream</a></dt>
-<dd>
-<div class="block">Creates a new stream that always throws the given exception.</div>
-</dd>
-<dt><span class="strong"><a href="./org/apache/commons/io/input/BrokenInputStream.html#BrokenInputStream()">BrokenInputStream()</a></span> - Constructor for class org.apache.commons.io.input.<a href="./org/apache/commons/io/input/BrokenInputStream.html" title="class in org.apache.commons.io.input">BrokenInputStream</a></dt>
-<dd>
-<div class="block">Creates a new stream that always throws an <a href="http://download.oracle.com/javase/6/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io"><code>IOException</code></a></div>
-</dd>
-<dt><a href="./org/apache/commons/io/output/BrokenOutputStream.html" title="class in org.apache.commons.io.output"><span class="strong">BrokenOutputStream</span></a> - Class in <a href="./org/apache/commons/io/output/package-summary.html">org.apache.commons.io.output</a></dt>
-<dd>
-<div class="block">Broken output stream.</div>
-</dd>
-<dt><span class="strong"><a href="./org/apache/commons/io/output/BrokenOutputStream.html#BrokenOutputStream(java.io.IOException)">BrokenOutputStream(IOException)</a></span> - Constructor for class org.apache.commons.io.output.<a href="./org/apache/commons/io/output/BrokenOutputStream.html" title="class in org.apache.commons.io.output">BrokenOutputStream</a></dt>
-<dd>
-<div class="block">Creates a new stream that always throws the given exception.</div>
-</dd>
-<dt><span class="strong"><a href="./org/apache/commons/io/output/BrokenOutputStream.html#BrokenOutputStream()">BrokenOutputStream()</a></span> - Constructor for class org.apache.commons.io.output.<a href="./org/apache/commons/io/output/BrokenOutputStream.html" title="class in org.apache.commons.io.output">BrokenOutputStream</a></dt>
-<dd>
-<div class="block">Creates a new stream that always throws an <a href="http://download.oracle.com/javase/6/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io"><code>IOException</code></a></div>
-</dd>
-<dt><a href="./org/apache/commons/io/output/ByteArrayOutputStream.html" title="class in org.apache.commons.io.output"><span class="strong">ByteArrayOutputStream</span></a> - Class in <a href="./org/apache/commons/io/output/package-summary.html">org.apache.commons.io.output</a></dt>
-<dd>
-<div class="block">This class implements an output stream in which the data is
- written into a byte array.</div>
-</dd>
-<dt><span class="strong"><a href="./org/apache/commons/io/output/ByteArrayOutputStream.html#ByteArrayOutputStream()">ByteArrayOutputStream()</a></span> - Constructor for class org.apache.commons.io.output.<a href="./org/apache/commons/io/output/ByteArrayOutputStream.html" title="class in org.apache.commons.io.output">ByteArrayOutputStream</a></dt>
-<dd>
-<div class="block">Creates a new byte array output stream.</div>
-</dd>
-<dt><span class="strong"><a href="./org/apache/commons/io/output/ByteArrayOutputStream.html#ByteArrayOutputStream(int)">ByteArrayOutputStream(int)</a></span> - Constructor for class org.apache.commons.io.output.<a href="./org/apache/commons/io/output/ByteArrayOutputStream.html" title="class in org.apache.commons.io.output">ByteArrayOutputStream</a></dt>
-<dd>
-<div class="block">Creates a new byte array output stream, with a buffer capacity of
- the specified size, in bytes.</div>
-</dd>
-<dt><span class="strong"><a href="./org/apache/commons/io/FileUtils.html#byteCountToDisplaySize(java.math.BigInteger)">byteCountToDisplaySize(BigInteger)</a></span> - Static method in class org.apache.commons.io.<a href="./org/apache/commons/io/FileUtils.html" title="class in org.apache.commons.io">FileUtils</a></dt>
-<dd>
-<div class="block">Returns a human-readable version of the file size, where the input represents a specific number of bytes.</div>
-</dd>
-<dt><span class="strong"><a href="./org/apache/commons/io/FileUtils.html#byteCountToDisplaySize(long)">byteCountToDisplaySize(long)</a></span> - Static method in class org.apache.commons.io.<a href="./org/apache/commons/io/FileUtils.html" title="class in org.apache.commons.io">FileUtils</a></dt>
-<dd>
-<div class="block">Returns a human-readable version of the file size, where the input represents a specific number of bytes.</div>
-</dd>
-<dt><a href="./org/apache/commons/io/ByteOrderMark.html" title="class in org.apache.commons.io"><span class="strong">ByteOrderMark</span></a> - Class in <a href="./org/apache/commons/io/package-summary.html">org.apache.commons.io</a></dt>
-<dd>
-<div class="block">Byte Order Mark (BOM) representation - see <a href="./org/apache/commons/io/input/BOMInputStream.html" title="class in org.apache.commons.io.input"><code>BOMInputStream</code></a>.</div>
-</dd>
-<dt><span class="strong"><a href="./org/apache/commons/io/ByteOrderMark.html#ByteOrderMark(java.lang.String, int...)">ByteOrderMark(String, int...)</a></span> - Constructor for class org.apache.commons.io.<a href="./org/apache/commons/io/ByteOrderMark.html" title="class in org.apache.commons.io">ByteOrderMark</a></dt>
-<dd>
-<div class="block">Construct a new BOM.</div>
-</dd>
-</dl>
-<a name="_C_">
-<!--   -->
-</a>
-<h2 class="title">C</h2>
-<dl>
-<dt><span class="strong"><a href="./org/apache/commons/io/filefilter/CanReadFileFilter.html#CAN_READ">CAN_READ</a></span> - Static variable in class org.apache.commons.io.filefilter.<a href="./org/apache/commons/io/filefilter/CanReadFileFilter.html" title="class in org.apache.commons.io.filefilter">CanReadFileFilter</a></dt>
-<dd>
-<div class="block">Singleton instance of <i>readable</i> filter</div>
-</dd>
-<dt><span class="strong"><a href="./org/apache/commons/io/filefilter/CanWriteFileFilter.html#CAN_WRITE">CAN_WRITE</a></span> - Static variable in class org.apache.commons.io.filefilter.<a href="./org/apache/commons/io/filefilter/CanWriteFileFilter.html" title="class in org.apache.commons.io.filefilter">CanWriteFileFilter</a></dt>
-<dd>
-<div class="block">Singleton instance of <i>writable</i> filter</div>
-</dd>
-<dt><span class="strong"><a href="./org/apache/commons/io/filefilter/CanReadFileFilter.html#CANNOT_READ">CANNOT_READ</a></span> - Static variable in class org.apache.commons.io.filefilter.<a href="./org/apache/commons/io/filefilter/CanReadFileFilter.html" title="class in org.apache.commons.io.filefilter">CanReadFileFilter</a></dt>
-<dd>
-<div class="block">Singleton instance of not <i>readable</i> filter</div>
-</dd>
-<dt><span class="strong"><a href="./org/apache/commons/io/filefilter/CanWriteFileFilter.html#CANNOT_WRITE">CANNOT_WRITE</a></span> - Static variable in class org.apache.commons.io.filefilter.<a href="./org/apache/commons/io/filefilter/CanWriteFileFilter.html" title="class in org.apache.commons.io.filefilter">CanWriteFileFilter</a></dt>
-<dd>
-<div class="block">Singleton instance of not <i>writable</i> filter</div>
-</dd>
-<dt><a href="./org/apache/commons/io/filefilter/CanReadFileFilter.html" title="class in org.apache.commons.io.filefilter"><span class="strong">CanReadFileFilter</span></a> - Class in <a href="./org/apache/commons/io/filefilter/package-summary.html">org.apache.commons.io.filefilter</a></dt>
-<dd>
-<div class="block">This filter accepts <code>File</code>s that can be read.</div>
-</dd>
-<dt><span class="strong"><a href="./org/apache/commons/io/filefilter/CanReadFileFilter.html#CanReadFileFilter()">CanReadFileFilter()</a></span> - Constructor for class org.apache.commons.io.filefilter.<a href="./org/apache/commons/io/filefilter/CanReadFileFilter.html" title="class in org.apache.commons.io.filefilter">CanReadFileFilter</a></dt>
-<dd>
-<div class="block">Restrictive consructor.</div>
-</dd>
-<dt><a href="./org/apache/commons/io/filefilter/CanWriteFileFilter.html" title="class in org.apache.commons.io.filefilter"><span class="strong">CanWriteFileFilter</span></a> - Class in <a href="./org/apache/commons/io/filefilter/package-summary.html">org.apache.commons.io.filefilter</a></dt>
-<dd>
-<div class="block">This filter accepts <code>File</code>s that can be written to.</div>
-</dd>
-<dt><span class="strong"><a href="./org/apache/commons/io/filefilter/CanWriteFileFilter.html#CanWriteFileFilter()">CanWriteFileFilter()</a></span> - Constructor for class org.apache.commons.io.filefilter.<a href="./org/apache/commons/io/filefilter/CanWriteFileFilter.html" title="class in org.apache.commons.io.filefilter">CanWriteFileFilter</a></dt>
-<dd>
-<div class="block">Restrictive consructor.</div>
-</dd>
-<dt><a href="./org/apache/commons/io/input/CharSequenceInputStream.html" title="class in org.apache.commons.io.input"><span class="strong">CharSequenceInputStream</span></a> - Class in <a href="./org/apache/commons/io/input/package-summary.html">org.apache.commons.io.input</a></dt>
-<dd>
-<div class="block"><a href="http://download.oracle.com/javase/6/docs/api/java/io/InputStream.html?is-external=true" title="class or interface in java.io"><code>InputStream</code></a> implementation that can read from String, StringBuffer,
- StringBuilder or CharBuffer.</div>
-</dd>
-<dt><span class="strong"><a href="./org/apache/commons/io/input/CharSequenceInputStream.html#CharSequenceInputStream(java.lang.CharSequence, java.nio.charset.Charset, int)">CharSequenceInputStream(CharSequence, Charset, int)</a></span> - Constructor for class org.apache.commons.io.input.<a href="./org/apache/commons/io/input/CharSequenceInputStream.html" title="class in org.apache.commons.io.input">CharSequenceInputStream</a></dt>
-<dd>
-<div class="block">Constructor.</div>
-</dd>
-<dt><span class="strong"><a href="./org/apache/commons/io/input/CharSequenceInputStream.html#CharSequenceInputStream(java.lang.CharSequence, java.lang.String, int)">CharSequenceInputStream(CharSequence, String, int)</a></span> - Constructor for class org.apache.commons.io.input.<a href="./org/apache/commons/io/input/CharSequenceInputStream.html" title="class in org.apache.commons.io.input">CharSequenceInputStream</a></dt>
-<dd>
-<div class="block">Constructor, calls <a href="./org/apache/commons/io/input/CharSequenceInputStream.html#CharSequenceInputStream(java.lang.CharSequence, java.nio.charset.Charset, int)"><code>CharSequenceInputStream.CharSequenceInputStream(CharSequence, Charset, int)</code></a>.</div>
-</dd>
-<dt><span class="strong"><a href="./org/apache/commons/io/input/CharSequenceInputStream.html#CharSequenceInputStream(java.lang.CharSequence, java.nio.charset.Charset)">CharSequenceInputStream(CharSequence, Charset)</a></span> - Constructor for class org.apache.commons.io.input.<a href="./org/apache/commons/io/input/CharSequenceInputStream.html" title="class in org.apache.commons.io.input">CharSequenceInputStream</a></dt>
-<dd>
-<div class="block">Constructor, calls <a href="./org/apache/commons/io/input/CharSequenceInputStream.html#CharSequenceInputStream(java.lang.CharSequence, java.nio.charset.Charset, int)"><code>CharSequenceInputStream.CharSequenceInputStream(CharSequence, Charset, int)</code></a>
- with a buffer size of 2048.</div>
-</dd>
-<dt><span class="strong"><a href="./org/apache/commons/io/input/CharSequenceInputStream.html#CharSequenceInputStream(java.lang.CharSequence, java.lang.String)">CharSequenceInputStream(CharSequence, String)</a></span> - Constructor for class org.apache.commons.io.input.<a href="./org/apache/commons/io/input/CharSequenceInputStream.html" title="class in org.apache.commons.io.input">CharSequenceInputStream</a></dt>
-<dd>
-<div class="block">Constructor, calls <a href="./org/apache/commons/io/input/CharSequenceInputStream.html#CharSequenceInputStream(java.lang.CharSequence, java.lang.String, int)"><code>CharSequenceInputStream.CharSequenceInputStream(CharSequence, String, int)</code></a>
- with a buffer size of 2048.</div>
-</dd>
-<dt><a href="./org/apache/commons/io/input/CharSequenceReader.html" title="class in org.apache.commons.io.input"><span class="strong">CharSequenceReader</span></a> - Class in <a href="./org/apache/commons/io/input/package-summary.html">org.apache.commons.io.input</a></dt>
-<dd>
-<div class="block"><a href="http://download.oracle.com/javase/6/docs/api/java/io/Reader.html?is-external=true" title="class or interface in java.io"><code>Reader</code></a> implementation that can read from String, StringBuffer,
- StringBuilder or CharBuffer.</div>
-</dd>
-<dt><span class="strong"><a href="./org/apache/commons/io/input/CharSequenceReader.html#CharSequenceReader(java.lang.CharSequence)">CharSequenceReader(CharSequence)</a></span> - Constructor for class org.apache.commons.io.input.<a href="./org/apache/commons/io/input/CharSequenceReader.html" title="class in org.apache.commons.io.input">CharSequenceReader</a></dt>
-<dd>
-<div class="block">Construct a new instance with the specified character sequence.</div>
-</dd>
-<dt><a href="./org/apache/commons/io/Charsets.html" title="class in org.apache.commons.io"><span class="strong">Charsets</span></a> - Class in <a href="./org/apache/commons/io/package-summary.html">org.apache.commons.io</a></dt>
-<dd>
-<div class="block">Charsets required of every implementation of the Java platform.</div>
-</dd>
-<dt><span class="strong"><a href="./org/apache/commons/io/Charsets.html#Charsets()">Charsets()</a></span> - Constructor for class org.apache.commons.io.<a href="./org/apache/commons/io/Charsets.html" title="class in org.apache.commons.io">Charsets</a></dt>
-<dd>&nbsp;</dd>
-<dt><span class="strong"><a href="./org/apache/commons/io/monitor/FileAlterationObserver.html#checkAndNotify()">checkAndNotify()</a></span> - Method in class org.apache.commons.io.monitor.<a href="./org/apache/commons/io/monitor/FileAlterationObserver.html" title="class in org.apache.commons.io.monitor">FileAlterationObserver</a></dt>
-<dd>
-<div class="block">Check whether the file and its chlidren have been created, modified or deleted.</div>
-</dd>
-<dt><span class="strong"><a href="./org/apache/commons/io/IOCase.html#checkCompareTo(java.lang.String, java.lang.String)">checkCompareTo(String, String)</a></span> - Method in class org.apache.commons.io.<a href="./org/apache/commons/io/IOCase.html" title="class in org.apache.commons.io">IOCase</a></dt>
-<dd>
-<div class="block">Compares two strings using the case-sensitivity rule.</div>
-</dd>
-<dt><span class="strong"><a href="./org/apache/commons/io/IOCase.html#checkEndsWith(java.lang.String, java.lang.String)">checkEndsWith(String, String)</a></span> - Method in class org.apache.commons.io.<a href="./org/apache/commons/io/IOCase.html" title="class in org.apache.commons.io">IOCase</a></dt>
-<dd>
-<div class="block">Checks if one string ends with another using the case-sensitivity rule.</div>
-</dd>
-<dt><span class="strong"><a href="./org/apache/commons/io/IOCase.html#checkEquals(java.lang.String, java.lang.String)">checkEquals(String, String)</a></span> - Method in class org.apache.commons.io.<a href="./org/apache/commons/io/IOCase.html" title="class in org.apache.commons.io">IOCase</a></dt>
-<dd>
-<div class="block">Compares two strings using the case-sensitivity rule.</div>
-</dd>
-<dt><span class="strong"><a href="./org/apache/commons/io/DirectoryWalker.html#checkIfCancelled(java.io.File, int, java.util.Collection)">checkIfCancelled(File, int, Collection&lt;T&gt;)</a></span> - Method in class org.apache.commons.io.<a href="./org/apache/commons/io/DirectoryWalker.html" title="class in org.apache.commons.io">DirectoryWalker</a></dt>
-<dd>
-<div class="block">Checks whether the walk has been cancelled by calling <a href="./org/apache/commons/io/DirectoryWalker.html#handleIsCancelled(java.io.File, int, java.util.Collection)"><code>DirectoryWalker.handleIsCancelled(java.io.File, int, java.util.Collection&lt;T&gt;)</code></a>,
- throwing a <code>CancelException</code> if it has.</div>
-</dd>
-<dt><span class="strong"><a href="./org/apache/commons/io/IOCase.html#checkIndexOf(java.lang.String, int, java.lang.String)">checkIndexOf(String, int, String)</a></span> - Method in class org.apache.commons.io.<a href="./org/apache/commons/io/IOCase.html" title="class in org.apache.commons.io">IOCase</a></dt>
-<dd>
-<div class="block">Checks if one string contains another starting at a specific index using the
- case-sensitivity rule.</div>
-</dd>
-<dt><span class="strong"><a href="./org/apache/commons/io/IOCase.html#checkRegionMatches(java.lang.String, int, java.lang.String)">checkRegionMatches(String, int, String)</a></span> - Method in class org.apache.commons.io.<a href="./org/apache/commons/io/IOCase.html" title="class in org.apache.commons.io">IOCase</a></dt>
-<dd>
-<div class="block">Checks if one string contains another at a specific index using the case-sensitivity rule.</div>
-</dd>
-<dt><span class="strong"><a href="./org/apache/commons/io/IOCase.html#checkStartsWith(java.lang.String, java.lang.String)">checkStartsWith(String, String)</a></span> - Method in class org.apache.commons.io.<a href="./org/apache/commons/io/IOCase.html" title="class in org.apache.commons.io">IOCase</a></dt>
-<dd>
-<div class="block">Checks if one string starts with another using the case-sensitivity rule.</div>
-</dd>
-<dt><span class="strong"><a href="./org/apache/commons/io/FileUtils.html#checksum(java.io.File, java.util.zip.Checksum)">checksum(File, Checksum)</a></span> - Static method in class org.apache.commons.io.<a href="./org/apache/commons/io/FileUtils.html" title="class in org.apache.commons.io">FileUtils</a></dt>
-<dd>
-<div class="block">Computes the checksum of a file using the specified checksum object.</div>
-</dd>
-<dt><span class="strong"><a href="./org/apache/commons/io/FileUtils.html#checksumCRC32(java.io.File)">checksumCRC32(File)</a></span> - Static method in class org.apache.commons.io.<a href="./org/apache/commons/io/FileUtils.html" title="class in org.apache.commons.io">FileUtils</a></dt>
-<dd>
-<div class="block">Computes the checksum of a file using the CRC32 checksum routine.</div>
-</dd>
-<dt><span class="strong"><a href="./org/apache/commons/io/output/ThresholdingOutputStream.html#checkThreshold(int)">checkThreshold(int)</a></span> - Method in class org.apache.commons.io.output.<a href="./org/apache/commons/io/output/ThresholdingOutputStream.html" title="class in org.apache.commons.io.output">ThresholdingOutputStream</a></dt>
-<dd>
-<div class="block">Checks to see if writing the specified number of bytes would cause the
- configured threshold to be exceeded.</div>
-</dd>
-<dt><a href="./org/apache/commons/io/input/ClassLoaderObjectInputStream.html" title="class in org.apache.commons.io.input"><span class="strong">ClassLoaderObjectInputStream</span></a> - Class in <a href="./org/apache/commons/io/input/package-summary.html">org.apache.commons.io.input</a></dt>
-<dd>
-<div class="block">A special ObjectInputStream that loads a class based on a specified
- <code>ClassLoader</code> rather than the system default.</div>
-</dd>
-<dt><span class="strong"><a href="./org/apache/commons/io/input/ClassLoaderObjectInputStream.html#ClassLoaderObjectInputStream(java.lang.ClassLoader, java.io.InputStream)">ClassLoaderObjectInputStream(ClassLoader, InputStream)</a></span> - Constructor for class org.apache.commons.io.input.<a href="./org/apache/commons/io/input/ClassLoaderObjectInputStream.html" title="class in org.apache.commons.io.input">ClassLoaderObjectInputStream</a></dt>
-<dd>
-<div class="block">Constructs a new ClassLoaderObjectInputStream.</div>
-</dd>
-<dt><span class="strong"><a href="./org/apache/commons/io/FileUtils.html#cleanDirectory(java.io.File)">cleanDirectory(File)</a></span> - Static method in class org.apache.commons.io.<a href="./org/apache/commons/io/FileUtils.html" title="class in org.apache.commons.io">FileUtils</a></dt>
-<dd>
-<div class="block">Cleans a directory without deleting it.</div>
-</dd>
-<dt><span class="strong"><a href="./org/apache/commons/io/input/AutoCloseInputStream.html#close()">close()</a></span> - Method in class org.apache.commons.io.input.<a href="./org/apache/commons/io/input/AutoCloseInputStream.html" title="class in org.apache.commons.io.input">AutoCloseInputStream</a></dt>
-<dd>
-<div class="block">Closes the underlying input stream and replaces the reference to it
- with a <a href="./org/apache/commons/io/input/ClosedInputStream.html" title="class in org.apache.commons.io.input"><code>ClosedInputStream</code></a> instance.</div>
-</dd>
-<dt><span class="strong"><a href="./org/apache/commons/io/input/BoundedInputStream.html#close()">close()</a></span> - Method in class org.apache.commons.io.input.<a href="./org/apache/commons/io/input/BoundedInputStream.html" title="class in org.apache.commons.io.input">BoundedInputStream</a></dt>
-<dd>
-<div class="block">Invokes the delegate's <code>close()</code> method
- if <a href="./org/apache/commons/io/input/BoundedInputStream.html#isPropagateClose()"><code>BoundedInputStream.isPropagateClose()</code></a> is <code>true</code>.</div>
-</dd>
-<dt><span class="strong"><a href="./org/apache/commons/io/input/BrokenInputStream.html#close()">close()</a></span> - Method in class org.apache.commons.io.input.<a href="./org/apache/commons/io/input/BrokenInputStream.html" title="class in org.apache.commons.io.input">BrokenInputStream</a></dt>
-<dd>
-<div class="block">Throws the configured exception.</div>
-</dd>
-<dt><span class="strong"><a href="./org/apache/commons/io/input/CharSequenceInputStream.html#close()">close()</a></span> - Method in class org.apache.commons.io.input.<a href="./org/apache/commons/io/input/CharSequenceInputStream.html" title="class in org.apache.commons.io.input">CharSequenceInputStream</a></dt>
-<dd>&nbsp;</dd>
-<dt><span class="strong"><a href="./org/apache/commons/io/input/CharSequenceReader.html#close()">close()</a></span> - Method in class org.apache.commons.io.input.<a href="./org/apache/commons/io/input/CharSequenceReader.html" title="class in org.apache.commons.io.input">CharSequenceReader</a></dt>
-<dd>
-<div class="block">Close resets the file back to the start and removes any marked position.</div>
-</dd>
-<dt><span class="strong"><a href="./org/apache/commons/io/input/CloseShieldInputStream.html#close()">close()</a></span> - Method in class org.apache.commons.io.input.<a href="./org/apache/commons/io/input/CloseShieldInputStream.html" title="class in org.apache.commons.io.input">CloseShieldInputStream</a></dt>
-<dd>
-<div class="block">Replaces the underlying input stream with a <a href="./org/apache/commons/io/input/ClosedInputStream.html" title="class in org.apache.commons.io.input"><code>ClosedInputStream</code></a>
- sentinel.</div>
-</dd>
-<dt><span class="strong"><a href="./org/apache/commons/io/input/DemuxInputStream.html#close()">close()</a></span> - Method in class org.apache.commons.io.input.<a href="./org/apache/commons/io/input/DemuxInputStream.html" title="class in org.apache.commons.io.input">DemuxInputStream</a></dt>
-<dd>
-<div class="block">Closes stream associated with current thread.</div>
-</dd>
-<dt><span class="strong"><a href="./org/apache/commons/io/input/NullInputStream.html#close()">close()</a></span> - Method in class org.apache.commons.io.input.<a href="./org/apache/commons/io/input/NullInputStream.html" title="class in org.apache.commons.io.input">NullInputStream</a></dt>
-<dd>
-<div class="block">Close this input stream - resets the internal state to
- the initial values.</div>
-</dd>
-<dt><span class="strong"><a href="./org/apache/commons/io/input/NullReader.html#close()">close()</a></span> - Method in class org.apache.commons.io.input.<a href="./org/apache/commons/io/input/NullReader.html" title="class in org.apache.commons.io.input">NullReader</a></dt>
-<dd>
-<div class="block">Close this Reader - resets the internal state to
- the initial values.</div>
-</dd>
-<dt><span class="strong"><a href="./org/apache/commons/io/input/ProxyInputStream.html#close()">close()</a></span> - Method in class org.apache.commons.io.input.<a href="./org/apache/commons/io/input/ProxyInputStream.html" title="class in org.apache.commons.io.input">ProxyInputStream</a></dt>
-<dd>
-<div class="block">Invokes the delegate's <code>close()</code> method.</div>
-</dd>
-<dt><span class="strong"><a href="./org/apache/commons/io/input/ProxyReader.html#close()">close()</a></span> - Method in class org.apache.commons.io.input.<a href="./org/apache/commons/io/input/ProxyReader.html" title="class in org.apache.commons.io.input">ProxyReader</a></dt>
-<dd>
-<div class="block">Invokes the delegate's <code>close()</code> method.</div>
-</dd>
-<dt><span class="strong"><a href="./org/apache/commons/io/input/ReaderInputStream.html#close()">close()</a></span> - Method in class org.apache.commons.io.input.<a href="./org/apache/commons/io/input/ReaderInputStream.html" title="class in org.apache.commons.io.input">ReaderInputStream</a></dt>
-<dd>
-<div class="block">Close the stream.</div>
-</dd>
-<dt><span class="strong"><a href="./org/apache/commons/io/input/ReversedLinesFileReader.html#close()">close()</a></span> - Method in class org.apache.commons.io.input.<a href="./org/apache/commons/io/input/ReversedLinesFileReader.html" title="class in org.apache.commons.io.input">ReversedLinesFileReader</a></dt>
-<dd>
-<div class="block">Closes underlying resources.</div>
-</dd>
-<dt><span class="strong"><a href="./org/apache/commons/io/input/TeeInputStream.html#close()">close()</a></span> - Method in class org.apache.commons.io.input.<a href="./org/apache/commons/io/input/TeeInputStream.html" title="class in org.apache.commons.io.input">TeeInputStream</a></dt>
-<dd>
-<div class="block">Closes the proxied input stream and, if so configured, the associated
- output stream.</div>
-</dd>
-<dt><span class="strong"><a href="./org/apache/commons/io/input/XmlStreamReader.html#close()">close()</a></span> - Method in class org.apache.commons.io.input.<a href="./org/apache/commons/io/input/XmlStreamReader.html" title="class in org.apache.commons.io.input">XmlStreamReader</a></dt>
-<dd>
-<div class="block">Closes the XmlStreamReader stream.</div>
-</dd>
-<dt><span class="strong"><a href="./org/apache/commons/io/IOUtils.html#close(java.net.URLConnection)">close(URLConnection)</a></span> - Static method in class org.apache.commons.io.<a href="./org/apache/commons/io/IOUtils.html" title="class in org.apache.commons.io">IOUtils</a></dt>
-<dd>
-<div class="block">Closes a URLConnection.</div>
-</dd>
-<dt><span class="strong"><a href="./org/apache/commons/io/LineIterator.html#close()">close()</a></span> - Method in class org.apache.commons.io.<a href="./org/apache/commons/io/LineIterator.html" title="class in org.apache.commons.io">LineIterator</a></dt>
-<dd>
-<div class="block">Closes the underlying <code>Reader</code> quietly.</div>
-</dd>
-<dt><span class="strong"><a href="./org/apache/commons/io/output/BrokenOutputStream.html#close()">close()</a></span> - Method in class org.apache.commons.io.output.<a href="./org/apache/commons/io/output/BrokenOutputStream.html" title="class in org.apache.commons.io.output">BrokenOutputStream</a></dt>
-<dd>
-<div class="block">Throws the configured exception.</div>
-</dd>
-<dt><span class="strong"><a href="./org/apache/commons/io/output/ByteArrayOutputStream.html#close()">close()</a></span> - Method in class org.apache.commons.io.output.<a href="./org/apache/commons/io/output/ByteArrayOutputStream.html" title="class in org.apache.commons.io.output">ByteArrayOutputStream</a></dt>
-<dd>
-<div class="block">Closing a <tt>ByteArrayOutputStream</tt> has no effect.</div>
-</dd>
-<dt><span class="strong"><a href="./org/apache/commons/io/output/CloseShieldOutputStream.html#close()">close()</a></span> - Method in class org.apache.commons.io.output.<a href="./org/apache/commons/io/output/CloseShieldOutputStream.html" title="class in org.apache.commons.io.output">CloseShieldOutputStream</a></dt>
-<dd>
-<div class="block">Replaces the underlying output stream with a <a href="./org/apache/commons/io/output/ClosedOutputStream.html" title="class in org.apache.commons.io.output"><code>ClosedOutputStream</code></a>
- sentinel.</div>
-</dd>
-<dt><span class="strong"><a href="./org/apache/commons/io/output/DeferredFileOutputStream.html#close()">close()</a></span> - Method in class org.apache.commons.io.output.<a href="./org/apache/commons/io/output/DeferredFileOutputStream.html" title="class in org.apache.commons.io.output">DeferredFileOutputStream</a></dt>
-<dd>
-<div class="block">Closes underlying output stream, and mark this as closed</div>
-</dd>
-<dt><span class="strong"><a href="./org/apache/commons/io/output/DemuxOutputStream.html#close()">close()</a></span> - Method in class org.apache.commons.io.output.<a href="./org/apache/commons/io/output/DemuxOutputStream.html" title="class in org.apache.commons.io.output">DemuxOutputStream</a></dt>
-<dd>
-<div class="block">Closes stream associated with current thread.</div>
-</dd>
-<dt><span class="strong"><a href="./org/apache/commons/io/output/FileWriterWithEncoding.html#close()">close()</a></span> - Method in class org.apache.commons.io.output.<a href="./org/apache/commons/io/output/FileWriterWithEncoding.html" title="class in org.apache.commons.io.output">FileWriterWithEncoding</a></dt>
-<dd>
-<div class="block">Close the stream.</div>
-</dd>
-<dt><span class="strong"><a href="./org/apache/commons/io/output/LockableFileWriter.html#close()">close()</a></span> - Method in class org.apache.commons.io.output.<a href="./org/apache/commons/io/output/LockableFileWriter.html" title="class in org.apache.commons.io.output">LockableFileWriter</a></dt>
-<dd>
-<div class="block">Closes the file writer and deletes the lockfile (if possible).</div>
-</dd>
-<dt><span class="strong"><a href="./org/apache/commons/io/output/NullWriter.html#close()">close()</a></span> - Method in class org.apache.commons.io.output.<a href="./org/apache/commons/io/output/NullWriter.html" title="class in org.apache.commons.io.output">NullWriter</a></dt>
-<dd>&nbsp;</dd>
-<dt><span class="strong"><a href="./org/apache/commons/io/output/ProxyOutputStream.html#close()">close()</a></span> - Method in class org.apache.commons.io.output.<a href="./org/apache/commons/io/output/ProxyOutputStream.html" title="class in org.apache.commons.io.output">ProxyOutputStream</a></dt>
-<dd>
-<div class="block">Invokes the delegate's <code>close()</code> method.</div>
-</dd>
-<dt><span class="strong"><a href="./org/apache/commons/io/output/ProxyWriter.html#close()">close()</a></span> - Method in class org.apache.commons.io.output.<a href="./org/apache/commons/io/output/ProxyWriter.html" title="class in org.apache.commons.io.output">ProxyWriter</a></dt>
-<dd>
-<div class="block">Invokes the delegate's <code>close()</code> method.</div>
-</dd>
-<dt><span class="strong"><a href="./org/apache/commons/io/output/StringBuilderWriter.html#close()">close()</a></span> - Method in class org.apache.commons.io.output.<a href="./org/apache/commons/io/output/StringBuilderWriter.html" title="class in org.apache.commons.io.output">StringBuilderWriter</a></dt>
-<dd>
-<div class="block">Closing this writer has no effect.</div>
-</dd>
-<dt><span class="strong"><a href="./org/apache/commons/io/output/TeeOutputStream.html#close()">close()</a></span> - Method in class org.apache.commons.io.output.<a href="./org/apache/commons/io/output/TeeOutputStream.html" title="class in org.apache.commons.io.output">TeeOutputStream</a></dt>
-<dd>
-<div class="block">Closes both output streams.</div>
-</dd>
-<dt><span class="strong"><a href="./org/apache/commons/io/output/ThresholdingOutputStream.html#close()">close()</a></span> - Method in class org.apache.commons.io.output.<a href="./org/apache/commons/io/output/ThresholdingOutputStream.html" title="class in org.apache.commons.io.output">ThresholdingOutputStream</a></dt>
-<dd>
-<div class="block">Closes this output stream and releases any system resources associated
- with this stream.</div>
-</dd>
-<dt><span class="strong"><a href="./org/apache/commons/io/output/WriterOutputStream.html#close()">close()</a></span> - Method in class org.apache.commons.io.output.<a href="./org/apache/commons/io/output/WriterOutputStream.html" title="class in org.apache.commons.io.output">WriterOutputStream</a></dt>
-<dd>
-<div class="block">Close the stream.</div>
-</dd>
-<dt><span class="strong"><a href="./org/apache/commons/io/output/XmlStreamWriter.html#close()">close()</a></span> - Method in class org.apache.commons.io.output.<a href="./org/apache/commons/io/output/XmlStreamWriter.html" title="class in org.apache.commons.io.output">XmlStreamWriter</a></dt>
-<dd>
-<div class="block">Close the underlying writer.</div>
-</dd>
-<dt><span class="strong"><a href="./org/apache/commons/io/input/ClosedInputStream.html#CLOSED_INPUT_STREAM">CLOSED_INPUT_STREAM</a></span> - Static variable in class org.apache.commons.io.input.<a href="./org/apache/commons/io/input/ClosedInputStream.html" title="class in org.apache.commons.io.input">ClosedInputStream</a></dt>
-<dd>
-<div class="block">A singleton.</div>
-</dd>
-<dt><span class="strong"><a href="./org/apache/commons/io/output/ClosedOutputStream.html#CLOSED_OUTPUT_STREAM">CLOSED_OUTPUT_STREAM</a></span> - Static variable in class org.apache.commons.io.output.<a href="./org/apache/commons/io/output/ClosedOutputStream.html" title="class in org.apache.commons.io.output">ClosedOutputStream</a></dt>
-<dd>
-<div class="block">A singleton.</div>
-</dd>
-<dt><a href="./org/apache/commons/io/input/ClosedInputStream.html" title="class in org.apache.commons.io.input"><span class="strong">ClosedInputStream</span></a> - Class in <a href="./org/apache/commons/io/input/package-summary.html">org.apache.commons.io.input</a></dt>
-<dd>
-<div class="block">Closed input stream.</div>
-</dd>
-<dt><span class="strong"><a href="./org/apache/commons/io/input/ClosedInputStream.html#ClosedInputStream()">ClosedInputStream()</a></span> - Constructor for class org.apache.commons.io.input.<a href="./org/apache/commons/io/input/ClosedInputStream.html" title="class in org.apache.commons.io.input">ClosedInputStream</a></dt>
-<dd>&nbsp;</dd>
-<dt><a href="./org/apache/commons/io/output/ClosedOutputStream.html" title="class in org.apache.commons.io.output"><span class="strong">ClosedOutputStream</span></a> - Class in <a href="./org/apache/commons/io/output/package-summary.html">org.apache.commons.io.output</a></dt>
-<dd>
-<div class="block">Closed output stream.</div>
-</dd>
-<dt><span class="strong"><a href="./org/apache/commons/io/output/ClosedOutputStream.html#ClosedOutputStream()">ClosedOutputStream()</a></span> - Constructor for class org.apache.commons.io.output.<a href="./org/apache/commons/io/output/ClosedOutputStream.html" title="class in org.apache.commons.io.output">ClosedOutputStream</a></dt>
-<dd>&nbsp;</dd>
-<dt><span class="strong"><a href="./org/apache/commons/io/IOUtils.html#closeQuietly(java.io.Reader)">closeQuietly(Reader)</a></span> - Static method in class org.apache.commons.io.<a href="./org/apache/commons/io/IOUtils.html" title="class in org.apache.commons.io">IOUtils</a></dt>
-<dd>
-<div class="block">Closes an <code>Reader</code> unconditionally.</div>
-</dd>
-<dt><span class="strong"><a href="./org/apache/commons/io/IOUtils.html#closeQuietly(java.io.Writer)">closeQuietly(Writer)</a></span> - Static method in class org.apache.commons.io.<a href="./org/apache/commons/io/IOUtils.html" title="class in org.apache.commons.io">IOUtils</a></dt>
-<dd>
-<div class="block">Closes an <code>Writer</code> unconditionally.</div>
-</dd>
-<dt><span class="strong"><a href="./org/apache/commons/io/IOUtils.html#closeQuietly(java.io.InputStream)">closeQuietly(InputStream)</a></span> - Static method in class org.apache.commons.io.<a href="./org/apache/commons/io/IOUtils.html" title="class in org.apache.commons.io">IOUtils</a></dt>
-<dd>
-<div class="block">Closes an <code>InputStream</code> unconditionally.</div>
-</dd>
-<dt><span class="strong"><a href="./org/apache/commons/io/IOUtils.html#closeQuietly(java.io.OutputStream)">closeQuietly(OutputStream)</a></span> - Static method in class org.apache.commons.io.<a href="./org/apache/commons/io/IOUtils.html" title="class in org.apache.commons.io">IOUtils</a></dt>
-<dd>
-<div class="block">Closes an <code>OutputStream</code> unconditionally.</div>
-</dd>
-<dt><span class="strong"><a href="./org/apache/commons/io/IOUtils.html#closeQuietly(java.io.Closeable)">closeQuietly(Closeable)</a></span> - Static method in class org.apache.commons.io.<a href="./org/apache/commons/io/IOUtils.html" title="class in org.apache.commons.io">IOUtils</a></dt>
-<dd>
-<div class="block">Closes a <code>Closeable</code> unconditionally.</div>
-</dd>
-<dt><span class="strong"><a href="./org/apache/commons/io/IOUtils.html#closeQuietly(java.net.Socket)">closeQuietly(Socket)</a></span> - Static method in class org.apache.commons.io.<a href="./org/apache/commons/io/IOUtils.html" title="class in org.apache.commons.io">IOUtils</a></dt>
-<dd>
-<div class="block">Closes a <code>Socket</code> unconditionally.</div>
-</dd>
-<dt><span class="strong"><a href="./org/apache/commons/io/IOUtils.html#closeQuietly(java.nio.channels.Selector)">closeQuietly(Selector)</a></span> - Static method in class org.apache.commons.io.<a href="./org/apache/commons/io/IOUtils.html" title="class in org.apache.commons.io">IOUtils</a></dt>
-<dd>
-<div class="block">Closes a <code>Selector</code> unconditionally.</div>
-</dd>
-<dt><span class="strong"><a href="./org/apache/commons/io/IOUtils.html#closeQuietly(java.net.ServerSocket)">closeQuietly(ServerSocket)</a></span> - Static method in class org.apache.commons.io.<a href="./org/apache/commons/io/IOUtils.html" title="class in org.apache.commons.io">IOUtils</a></dt>
-<dd>
-<div class="block">Closes a <code>ServerSocket</code> unconditionally.</div>
-</dd>
-<dt><span class="strong"><a href="./org/apache/commons/io/LineIterator.html#closeQuietly(org.apache.commons.io.LineIterator)">closeQuietly(LineIterator)</a></span> - Static method in class org.apache.commons.io.<a href="./org/apache/commons/io/LineIterator.html" title="class in org.apache.commons.io">LineIterator</a></dt>
-<dd>
-<div class="block">Closes the iterator, handling null and ignoring exceptions.</div>
-</dd>
-<dt><a href="./org/apache/commons/io/input/CloseShieldInputStream.html" title="class in org.apache.commons.io.input"><span class="strong">CloseShieldInputStream</span></a> - Class in <a href="./org/apache/commons/io/input/package-summary.html">org.apache.commons.io.input</a></dt>
-<dd>
-<div class="block">Proxy stream that prevents the underlying input stream from being closed.</div>
-</dd>
-<dt><span class="strong"><a href="./org/apache/commons/io/input/CloseShieldInputStream.html#CloseShieldInputStream(java.io.InputStream)">CloseShieldInputStream(InputStream)</a></span> - Constructor for class org.apache.commons.io.input.<a href="./org/apache/commons/io/input/CloseShieldInputStream.html" title="class in org.apache.commons.io.input">CloseShieldInputStream</a></dt>
-<dd>
-<div class="block">Creates a proxy that shields the given input stream from being
- closed.</div>
-</dd>
-<dt><a href="./org/apache/commons/io/output/CloseShieldOutputStream.html" title="class in org.apache.commons.io.output"><span class="strong">CloseShieldOutputStream</span></a> - Class in <a href="./org/apache/commons/io/output/package-summary.html">org.apache.commons.io.output</a></dt>
-<dd>
-<div class="block">Proxy stream that prevents the underlying output stream from being closed.</div>
-</dd>
-<dt><span class="strong"><a href="./org/apache/commons/io/output/CloseShieldOutputStream.html#CloseShieldOutputStream(java.io.OutputStream)">CloseShieldOutputStream(OutputStream)</a></span> - Constructor for class org.apache.commons.io.output.<a href="./org/apache/commons/io/output/CloseShieldOutputStream.html" title="class in org.apache.commons.io.output">CloseShieldOutputStream</a></dt>
-<dd>
-<div class="block">Creates a proxy that shields the given output stream from being
- closed.</div>
-</dd>
-<dt><span class="strong"><a href="./org/apache/commons/io/comparator/CompositeFileComparator.html#compare(java.io.File, java.io.File)">compare(File, File)</a></span> - Method in class org.apache.commons.io.comparator.<a href="./org/apache/commons/io/comparator/CompositeFileComparator.html" title="class in org.apache.commons.io.comparator">CompositeFileComparator</a></dt>
-<dd>
-<div class="block">Compare the two files using delegate comparators.</div>
-</dd>
-<dt><span class="strong"><a href="./org/apache/commons/io/comparator/DefaultFileComparator.html#compare(java.io.File, java.io.File)">compare(File, File)</a></span> - Method in class org.apache.commons.io.comparator.<a href="./org/apache/commons/io/comparator/DefaultFileComparator.html" title="class in org.apache.commons.io.comparator">DefaultFileComparator</a></dt>
-<dd>
-<div class="block">Compare the two files using the <a href="http://download.oracle.com/javase/6/docs/api/java/io/File.html?is-external=true#compareTo(java.io.File)" title="class or interface in java.io"><code>File.compareTo(File)</code></a> method.</div>
-</dd>
-<dt><span class="strong"><a href="./org/apache/commons/io/comparator/DirectoryFileComparator.html#compare(java.io.File, java.io.File)">compare(File, File)</a></span> - Method in class org.apache.commons.io.comparator.<a href="./org/apache/commons/io/comparator/DirectoryFileComparator.html" title="class in org.apache.commons.io.comparator">DirectoryFileComparator</a></dt>
-<dd>
-<div class="block">Compare the two files using the <a href="http://download.oracle.com/javase/6/docs/api/java/io/File.html?is-external=true#isDirectory()" title="class or interface in java.io"><code>File.isDirectory()</code></a> method.</div>
-</dd>
-<dt><span class="strong"><a href="./org/apache/commons/io/comparator/ExtensionFileComparator.html#compare(java.io.File, java.io.File)">compare(File, File)</a></span> - Method in class org.apache.commons.io.comparator.<a href="./org/apache/commons/io/comparator/ExtensionFileComparator.html" title="class in org.apache.commons.io.comparator">ExtensionFileComparator</a></dt>
-<dd>
-<div class="block">Compare the extensions of two files the specified case sensitivity.</div>
-</dd>
-<dt><span class="strong"><a href="./org/apache/commons/io/comparator/LastModifiedFileComparator.html#compare(java.io.File, java.io.File)">compare(File, File)</a></span> - Method in class org.apache.commons.io.comparator.<a href="./org/apache/commons/io/comparator/LastModifiedFileComparator.html" title="class in org.apache.commons.io.comparator">LastModifiedFileComparator</a></dt>
-<dd>
-<div class="block">Compare the last the last modified date/time of two files.</div>
-</dd>
-<dt><span class="strong"><a href="./org/apache/commons/io/comparator/NameFileComparator.html#compare(java.io.File, java.io.File)">compare(File, File)</a></span> - Method in class org.apache.commons.io.comparator.<a href="./org/apache/commons/io/comparator/NameFileComparator.html" title="class in org.apache.commons.io.comparator">NameFileComparator</a></dt>
-<dd>
-<div class="block">Compare the names of two files with the specified case sensitivity.</div>
-</dd>
-<dt><span class="strong"><a href="./org/apache/commons/io/comparator/PathFileComparator.html#compare(java.io.File, java.io.File)">compare(File, File)</a></span> - Method in class org.apache.commons.io.comparator.<a href="./org/apache/commons/io/comparator/PathFileComparator.html" title="class in org.apache.commons.io.comparator">PathFileComparator</a></dt>
-<dd>
-<div class="block">Compare the paths of two files the specified case sensitivity.</div>
-</dd>
-<dt><span class="strong"><a href="./org/apache/commons/io/comparator/SizeFileComparator.html#compare(java.io.File, java.io.File)">compare(File, File)</a></span> - Method in class org.apache.commons.io.comparator.<a href="./org/apache/commons/io/comparator/SizeFileComparator.html" title="class in org.apache.commons.io.comparator">SizeFileComparator</a></dt>
-<dd>
-<div class="block">Compare the length of two files.</div>
-</dd>
-<dt><a href="./org/apache/commons/io/comparator/CompositeFileComparator.html" title="class in org.apache.commons.io.comparator"><span class="strong">CompositeFileComparator</span></a> - Class in <a href="./org/apache/commons/io/comparator/package-summary.html">org.apache.commons.io.comparator</a></dt>
-<dd>
-<div class="block">Compare two files using a set of delegate file <a href="http://download.oracle.com/javase/6/docs/api/java/util/Comparator.html?is-external=true" title="class or interface in java.util"><code>Comparator</code></a>.</div>
-</dd>
-<dt><span class="strong"><a href="./org/apache/commons/io/comparator/CompositeFileComparator.html#CompositeFileComparator(java.util.Comparator...)">CompositeFileComparator(Comparator&lt;File&gt;...)</a></span> - Constructor for class org.apache.commons.io.comparator.<a href="./org/apache/commons/io/comparator/CompositeFileComparator.html" title="class in org.apache.commons.io.comparator">CompositeFileComparator</a></dt>
-<dd>
-<div class="block">Create a composite comparator for the set of delegate comparators.</div>
-</dd>
-<dt><span class="strong"><a href="./org/apache/commons/io/comparator/CompositeFileComparator.html#CompositeFileComparator(java.lang.Iterable)">CompositeFileComparator(Iterable&lt;Comparator&lt;File&gt;&gt;)</a></span> - Constructor for class org.apache.commons.io.comparator.<a href="./org/apache/commons/io/comparator/CompositeFileComparator.html" title="class in org.apache.commons.io.comparator">CompositeFileComparator</a></dt>
-<dd>
-<div class="block">Create a composite comparator for the set of delegate comparators.</div>
-</dd>
-<dt><span class="strong"><a href="./org/apache/commons/io/FilenameUtils.html#concat(java.lang.String, java.lang.String)">concat(String, String)</a></span> - Static method in class org.apache.commons.io.<a href="./org/apache/commons/io/FilenameUtils.html" title="class in org.apache.commons.io">FilenameUtils</a></dt>
-<dd>
-<div class="block">Concatenates a filename to a base path using normal command line style rules.</div>
-</dd>
-<dt><a href="./org/apache/commons/io/filefilter/ConditionalFileFilter.html" title="interface in org.apache.commons.io.filefilter"><span class="strong">ConditionalFileFilter</span></a> - Interface in <a href="./org/apache/commons/io/filefilter/package-summary.html">org.apache.commons.io.filefilter</a></dt>
-<dd>
-<div class="block">Defines operations for conditional file filters.</div>
-</dd>
-<dt><span class="strong"><a href="./org/apache/commons/io/FileUtils.html#contentEquals(java.io.File, java.io.File)">contentEquals(File, File)</a></span> - Static method in class org.apache.commons.io.<a href="./org/apache/commons/io/FileUtils.html" title="class in org.apache.commons.io">FileUtils</a></dt>
-<dd>
-<div class="block">Compares the contents of two files to determine if they are equal or not.</div>
-</dd>
-<dt><span class="strong"><a href="./org/apache/commons/io/IOUtils.html#contentEquals(java.io.InputStream, java.io.InputStream)">contentEquals(InputStream, InputStream)</a></span> - Static method in class org.apache.commons.io.<a href="./org/apache/commons/io/IOUtils.html" title="class in org.apache.commons.io">IOUtils</a></dt>
-<dd>
-<div class="block">Compares the contents of two Streams to determine if they are equal or
- not.</div>
-</dd>
-<dt><span class="strong"><a href="./org/apache/commons/io/IOUtils.html#contentEquals(java.io.Reader, java.io.Reader)">contentEquals(Reader, Reader)</a></span> - Static method in class org.apache.commons.io.<a href="./org/apache/commons/io/IOUtils.html" title="class in org.apache.commons.io">IOUtils</a></dt>
-<dd>
-<div class="block">Compares the contents of two Readers to determine if they are equal or
- not.</div>
-</dd>
-<dt><span class="strong"><a href="./org/apache/commons/io/FileUtils.html#contentEqualsIgnoreEOL(java.io.File, java.io.File, java.lang.String)">contentEqualsIgnoreEOL(File, File, String)</a></span> - Static method in class org.apache.commons.io.<a href="./org/apache/commons/io/FileUtils.html" title="class in org.apache.commons.io">FileUtils</a></dt>
-<dd>
-<div class="block">Compares the contents of two files to determine if they are equal or not.</div>
-</dd>
-<dt><span class="strong"><a href="./org/apache/commons/io/IOUtils.html#contentEqualsIgnoreEOL(java.io.Reader, java.io.Reader)">contentEqualsIgnoreEOL(Reader, Reader)</a></span> - Static method in class org.apache.commons.io.<a href="./org/apache/commons/io/IOUtils.html" title="class in org.apache.commons.io">IOUtils</a></dt>
-<dd>
-<div class="block">Compares the contents of two Readers to determine if they are equal or
- not, ignoring EOL characters.</div>
-</dd>
-<dt><span class="strong"><a href="./org/apache/commons/io/FileUtils.html#convertFileCollectionToFileArray(java.util.Collection)">convertFileCollectionToFileArray(Collection&lt;File&gt;)</a></span> - Static method in class org.apache.commons.io.<a href="./org/apache/commons/io/FileUtils.html" title="class in org.apache.commons.io">FileUtils</a></dt>
-<dd>
-<div class="block">Converts a Collection containing java.io.File instanced into array
- representation.</div>
-</dd>
-<dt><span class="strong"><a href="./org/apache/commons/io/CopyUtils.html#copy(byte[], java.io.OutputStream)">copy(byte[], OutputStream)</a></span> - Static method in class org.apache.commons.io.<a href="./org/apache/commons/io/CopyUtils.html" title="class in org.apache.commons.io">CopyUtils</a></dt>
-<dd>
-<div class="block"><span class="strong">Deprecated.</span></div>
-<div class="block">Copy bytes from a <code>byte[]</code> to an <code>OutputStream</code>.</div>
-</dd>
-<dt><span class="strong"><a href="./org/apache/commons/io/CopyUtils.html#copy(byte[], java.io.Writer)">copy(byte[], Writer)</a></span> - Static method in class org.apache.commons.io.<a href="./org/apache/commons/io/CopyUtils.html" title="class in org.apache.commons.io">CopyUtils</a></dt>
-<dd>
-<div class="block"><span class="strong">Deprecated.</span>
-<div class="block"><i>2.5 use <a href="./org/apache/commons/io/CopyUtils.html#copy(byte[], java.io.Writer, java.lang.String)"><code>CopyUtils.copy(byte[], Writer, String)</code></a> instead</i></div>
-</div>
-</dd>
-<dt><span class="strong"><a href="./org/apache/commons/io/CopyUtils.html#copy(byte[], java.io.Writer, java.lang.String)">copy(byte[], Writer, String)</a></span> - Static method in class org.apache.commons.io.<a href="./org/apache/commons/io/CopyUtils.html" title="class in org.apache.commons.io">CopyUtils</a></dt>
-<dd>
-<div class="block"><span class="strong">Deprecated.</span></div>
-<div class="block">Copy and convert bytes from a <code>byte[]</code> to chars on a
- <code>Writer</code>, using the specified encoding.</div>
-</dd>
-<dt><span class="strong"><a href="./org/apache/commons/io/CopyUtils.html#copy(java.io.InputStream, java.io.OutputStream)">copy(InputStream, OutputStream)</a></span> - Static method in class org.apache.commons.io.<a href="./org/apache/commons/io/CopyUtils.html" title="class in org.apache.commons.io">CopyUtils</a></dt>
-<dd>
-<div class="block"><span class="strong">Deprecated.</span></div>
-<div class="block">Copy bytes from an <code>InputStream</code> to an
- <code>OutputStream</code>.</div>
-</dd>
-<dt><span class="strong"><a href="./org/apache/commons/io/CopyUtils.html#copy(java.io.Reader, java.io.Writer)">copy(Reader, Writer)</a></span> - Static method in class org.apache.commons.io.<a href="./org/apache/commons/io/CopyUtils.html" title="class in org.apache.commons.io">CopyUtils</a></dt>
-<dd>
-<div class="block"><span class="strong">Deprecated.</span></div>
-<div class="block">Copy chars from a <code>Reader</code> to a <code>Writer</code>.</div>
-</dd>
-<dt><span class="strong"><a href="./org/apache/commons/io/CopyUtils.html#copy(java.io.InputStream, java.io.Writer)">copy(InputStream, Writer)</a></span> - Static method in class org.apache.commons.io.<a href="./org/apache/commons/io/CopyUtils.html" title="class in org.apache.commons.io">CopyUtils</a></dt>
-<dd>
-<div class="block"><span class="strong">Deprecated.</span>
-<div class="block"><i>2.5 use <a href="./org/apache/commons/io/CopyUtils.html#copy(java.io.InputStream, java.io.Writer, java.lang.String)"><code>CopyUtils.copy(InputStream, Writer, String)</code></a> instead</i></div>
-</div>
-</dd>
-<dt><span class="strong"><a href="./org/apache/commons/io/CopyUtils.html#copy(java.io.InputStream, java.io.Writer, java.lang.String)">copy(InputStream, Writer, String)</a></span> - Static method in class org.apache.commons.io.<a href="./org/apache/commons/io/CopyUtils.html" title="class in org.apache.commons.io">CopyUtils</a></dt>
-<dd>
-<div class="block"><span class="strong">Deprecated.</span></div>
-<div class="block">Copy and convert bytes from an <code>InputStream</code> to chars on a
- <code>Writer</code>, using the specified encoding.</div>
-</dd>
-<dt><span class="strong"><a href="./org/apache/commons/io/CopyUtils.html#copy(java.io.Reader, java.io.OutputStream)">copy(Reader, OutputStream)</a></span> - Static method in class org.apache.commons.io.<a href="./org/apache/commons/io/CopyUtils.html" title="class in org.apache.commons.io">CopyUtils</a></dt>
-<dd>
-<div class="block"><span class="strong">Deprecated.</span>
-<div class="block"><i>2.5 use <a href="./org/apache/commons/io/CopyUtils.html#copy(java.io.Reader, java.io.OutputStream, java.lang.String)"><code>CopyUtils.copy(Reader, OutputStream, String)</code></a> instead</i></div>
-</div>
-</dd>
-<dt><span class="strong"><a href="./org/apache/commons/io/CopyUtils.html#copy(java.io.Reader, java.io.OutputStream, java.lang.String)">copy(Reader, OutputStream, String)</a></span> - Static method in class org.apache.commons.io.<a href="./org/apache/commons/io/CopyUtils.html" title="class in org.apache.commons.io">CopyUtils</a></dt>
-<dd>
-<div class="block"><span class="strong">Deprecated.</span></div>
-<div class="block">Serialize chars from a <code>Reader</code> to bytes on an
- <code>OutputStream</code>, and flush the <code>OutputStream</code>.</div>
-</dd>
-<dt><span class="strong"><a href="./org/apache/commons/io/CopyUtils.html#copy(java.lang.String, java.io.OutputStream)">copy(String, OutputStream)</a></span> - Static method in class org.apache.commons.io.<a href="./org/apache/commons/io/CopyUtils.html" title="class in org.apache.commons.io">CopyUtils</a></dt>
-<dd>
-<div class="block"><span class="strong">Deprecated.</span>
-<div class="block"><i>2.5 use <a href="./org/apache/commons/io/CopyUtils.html#copy(java.lang.String, java.io.OutputStream, java.lang.String)"><code>CopyUtils.copy(String, OutputStream, String)</code></a> instead</i></div>
-</div>
-</dd>
-<dt><span class="strong"><a href="./org/apache/commons/io/CopyUtils.html#copy(java.lang.String, java.io.OutputStream, java.lang.String)">copy(String, OutputStream, String)</a></span> - Static method in class org.apache.commons.io.<a href="./org/apache/commons/io/CopyUtils.html" title="class in org.apache.commons.io">CopyUtils</a></dt>
-<dd>
-<div class="block"><span class="strong">Deprecated.</span></div>
-<div class="block">Serialize chars from a <code>String</code> to bytes on an
- <code>OutputStream</code>, and
- flush the <code>OutputStream</code>.</div>
-</dd>
-<dt><span class="strong"><a href="./org/apache/commons/io/CopyUtils.html#copy(java.lang.String, java.io.Writer)">copy(String, Writer)</a></span> - Static method in class org.apache.commons.io.<a href="./org/apache/commons/io/CopyUtils.html" title="class in org.apache.commons.io">CopyUtils</a></dt>
-<dd>
-<div class="block"><span class="strong">Deprecated.</span></div>
-<div class="block">Copy chars from a <code>String</code> to a <code>Writer</code>.</div>
-</dd>
-<dt><span class="strong"><a href="./org/apache/commons/io/IOUtils.html#copy(java.io.InputStream, java.io.OutputStream)">copy(InputStream, OutputStream)</a></span> - Static method in class org.apache.commons.io.<a href="./org/apache/commons/io/IOUtils.html" title="class in org.apache.commons.io">IOUtils</a></dt>
-<dd>
-<div class="block">Copies bytes from an <code>InputStream</code> to an
- <code>OutputStream</code>.</div>
-</dd>
-<dt><span class="strong"><a href="./org/apache/commons/io/IOUtils.html#copy(java.io.InputStream, java.io.OutputStream, int)">copy(InputStream, OutputStream, int)</a></span> - Static method in class org.apache.commons.io.<a href="./org/apache/commons/io/IOUtils.html" title="class in org.apache.commons.io">IOUtils</a></dt>
-<dd>
-<div class="block">Copies bytes from an <code>InputStream</code> to an <code>OutputStream</code> using an internal buffer of the
- given size.</div>
-</dd>
-<dt><span class="strong"><a href="./org/apache/commons/io/IOUtils.html#copy(java.io.InputStream, java.io.Writer)">copy(InputStream, Writer)</a></span> - Static method in class org.apache.commons.io.<a href="./org/apache/commons/io/IOUtils.html" title="class in org.apache.commons.io">IOUtils</a></dt>
-<dd>
-<div class="block"><span class="strong">Deprecated.</span>
-<div class="block"><i>2.5 use <a href="./org/apache/commons/io/IOUtils.html#copy(java.io.InputStream, java.io.Writer, java.nio.charset.Charset)"><code>IOUtils.copy(InputStream, Writer, Charset)</code></a> instead</i></div>
-</div>
-</dd>
-<dt><span class="strong"><a href="./org/apache/commons/io/IOUtils.html#copy(java.io.InputStream, java.io.Writer, java.nio.charset.Charset)">copy(InputStream, Writer, Charset)</a></span> - Static method in class org.apache.commons.io.<a href="./org/apache/commons/io/IOUtils.html" title="class in org.apache.commons.io">IOUtils</a></dt>
-<dd>
-<div class="block">Copies bytes from an <code>InputStream</code> to chars on a
- <code>Writer</code> using the specified character encoding.</div>
-</dd>
-<dt><span class="strong"><a href="./org/apache/commons/io/IOUtils.html#copy(java.io.InputStream, java.io.Writer, java.lang.String)">copy(InputStream, Writer, String)</a></span> - Static method in class org.apache.commons.io.<a href="./org/apache/commons/io/IOUtils.html" title="class in org.apache.commons.io">IOUtils</a></dt>
-<dd>
-<div class="block">Copies bytes from an <code>InputStream</code> to chars on a
- <code>Writer</code> using the specified character encoding.</div>
-</dd>
-<dt><span class="strong"><a href="./org/apache/commons/io/IOUtils.html#copy(java.io.Reader, java.io.Writer)">copy(Reader, Writer)</a></span> - Static method in class org.apache.commons.io.<a href="./org/apache/commons/io/IOUtils.html" title="class in org.apache.commons.io">IOUtils</a></dt>
-<dd>
-<div class="block">Copies chars from a <code>Reader</code> to a <code>Writer</code>.</div>
-</dd>
-<dt><span class="strong"><a href="./org/apache/commons/io/IOUtils.html#copy(java.io.Reader, java.io.OutputStream)">copy(Reader, OutputStream)</a></span> - Static method in class org.apache.commons.io.<a href="./org/apache/commons/io/IOUtils.html" title="class in org.apache.commons.io">IOUtils</a></dt>
-<dd>
-<div class="block"><span class="strong">Deprecated.</span>
-<div class="block"><i>2.5 use <a href="./org/apache/commons/io/IOUtils.html#copy(java.io.Reader, java.io.OutputStream, java.nio.charset.Charset)"><code>IOUtils.copy(Reader, OutputStream, Charset)</code></a> instead</i></div>
-</div>
-</dd>
-<dt><span class="strong"><a href="./org/apache/commons/io/IOUtils.html#copy(java.io.Reader, java.io.OutputStream, java.nio.charset.Charset)">copy(Reader, OutputStream, Charset)</a></span> - Static method in class org.apache.commons.io.<a href="./org/apache/commons/io/IOUtils.html" title="class in org.apache.commons.io">IOUtils</a></dt>
-<dd>
-<div class="block">Copies chars from a <code>Reader</code> to bytes on an
- <code>OutputStream</code> using the specified character encoding, and
- calling flush.</div>
-</dd>
-<dt><span class="strong"><a href="./org/apache/commons/io/IOUtils.html#copy(java.io.Reader, java.io.OutputStream, java.lang.String)">copy(Reader, OutputStream, String)</a></span> - Static method in class org.apache.commons.io.<a href="./org/apache/commons/io/IOUtils.html" title="class in org.apache.commons.io">IOUtils</a></dt>
-<dd>
-<div class="block">Copies chars from a <code>Reader</code> to bytes on an
- <code>OutputStream</code> using the specified character encoding, and
- calling flush.</div>
-</dd>
-<dt><span class="strong"><a href="./org/apache/commons/io/FileUtils.html#copyDirectory(java.io.File, java.io.File)">copyDirectory(File, File)</a></span> - Static method in class org.apache.commons.io.<a href="./org/apache/commons/io/FileUtils.html" title="class in org.apache.commons.io">FileUtils</a></dt>
-<dd>
-<div class="block">Copies a whole directory to a new location preserving the file dates.</div>
-</dd>
-<dt><span class="strong"><a href="./org/apache/commons/io/FileUtils.html#copyDirectory(java.io.File, java.io.File, boolean)">copyDirectory(File, File, boolean)</a></span> - Static method in class org.apache.commons.io.<a href="./org/apache/commons/io/FileUtils.html" title="class in org.apache.commons.io">FileUtils</a></dt>
-<dd>
-<div class="block">Copies a whole directory to a new location.</div>
-</dd>
-<dt><span class="strong"><a href="./org/apache/commons/io/FileUtils.html#copyDirectory(java.io.File, java.io.File, java.io.FileFilter)">copyDirectory(File, File, FileFilter)</a></span> - Static method in class org.apache.commons.io.<a href="./org/apache/commons/io/FileUtils.html" title="class in org.apache.commons.io">FileUtils</a></dt>
-<dd>
-<div class="block">Copies a filtered directory to a new location preserving the file dates.</div>
-</dd>
-<dt><span class="strong"><a href="./org/apache/commons/io/FileUtils.html#copyDirectory(java.io.File, java.io.File, java.io.FileFilter, boolean)">copyDirectory(File, File, FileFilter, boolean)</a></span> - Static method in class org.apache.commons.io.<a href="./org/apache/commons/io/FileUtils.html" title="class in org.apache.commons.io">FileUtils</a></dt>
-<dd>
-<div class="block">Copies a filtered directory to a new location.</div>
-</dd>
-<dt><span class="strong"><a href="./org/apache/commons/io/FileUtils.html#copyDirectoryToDirectory(java.io.File, java.io.File)">copyDirectoryToDirectory(File, File)</a></span> - Static method in class org.apache.commons.io.<a href="./org/apache/commons/io/FileUtils.html" title="class in org.apache.commons.io">FileUtils</a></dt>
-<dd>
-<div class="block">Copies a directory to within another directory preserving the file dates.</div>
-</dd>
-<dt><span class="strong"><a href="./org/apache/commons/io/FileUtils.html#copyFile(java.io.File, java.io.File)">copyFile(File, File)</a></span> - Static method in class org.apache.commons.io.<a href="./org/apache/commons/io/FileUtils.html" title="class in org.apache.commons.io">FileUtils</a></dt>
-<dd>
-<div class="block">Copies a file to a new location preserving the file date.</div>
-</dd>
-<dt><span class="strong"><a href="./org/apache/commons/io/FileUtils.html#copyFile(java.io.File, java.io.File, boolean)">copyFile(File, File, boolean)</a></span> - Static method in class org.apache.commons.io.<a href="./org/apache/commons/io/FileUtils.html" title="class in org.apache.commons.io">FileUtils</a></dt>
-<dd>
-<div class="block">Copies a file to a new location.</div>
-</dd>
-<dt><span class="strong"><a href="./org/apache/commons/io/FileUtils.html#copyFile(java.io.File, java.io.OutputStream)">copyFile(File, OutputStream)</a></span> - Static method in class org.apache.commons.io.<a href="./org/apache/commons/io/FileUtils.html" title="class in org.apache.commons.io">FileUtils</a></dt>
-<dd>
-<div class="block">Copy bytes from a <code>File</code> to an <code>OutputStream</code>.</div>
-</dd>
-<dt><span class="strong"><a href="./org/apache/commons/io/FileUtils.html#copyFileToDirectory(java.io.File, java.io.File)">copyFileToDirectory(File, File)</a></span> - Static method in class org.apache.commons.io.<a href="./org/apache/commons/io/FileUtils.html" title="class in org.apache.commons.io">FileUtils</a></dt>
-<dd>
-<div class="block">Copies a file to a directory preserving the file date.</div>
-</dd>
-<dt><span class="strong"><a href="./org/apache/commons/io/FileUtils.html#copyFileToDirectory(java.io.File, java.io.File, boolean)">copyFileToDirectory(File, File, boolean)</a></span> - Static method in class org.apache.commons.io.<a href="./org/apache/commons/io/FileUtils.html" title="class in org.apache.commons.io">FileUtils</a></dt>
-<dd>
-<div class="block">Copies a file to a directory optionally preserving the file date.</div>
-</dd>
-<dt><span class="strong"><a href="./org/apache/commons/io/FileUtils.html#copyInputStreamToFile(java.io.InputStream, java.io.File)">copyInputStreamToFile(InputStream, File)</a></span> - Static method in class org.apache.commons.io.<a href="./org/apache/commons/io/FileUtils.html" title="class in org.apache.commons.io">FileUtils</a></dt>
-<dd>
-<div class="block">Copies bytes from an <a href="http://download.oracle.com/javase/6/docs/api/java/io/InputStream.html?is-external=true" title="class or interface in java.io"><code>InputStream</code></a> <code>source</code> to a file
- <code>destination</code>.</div>
-</dd>
-<dt><span class="strong"><a href="./org/apache/commons/io/IOUtils.html#copyLarge(java.io.InputStream, java.io.OutputStream)">copyLarge(InputStream, OutputStream)</a></span> - Static method in class org.apache.commons.io.<a href="./org/apache/commons/io/IOUtils.html" title="class in org.apache.commons.io">IOUtils</a></dt>
-<dd>
-<div class="block">Copies bytes from a large (over 2GB) <code>InputStream</code> to an
- <code>OutputStream</code>.</div>
-</dd>
-<dt><span class="strong"><a href="./org/apache/commons/io/IOUtils.html#copyLarge(java.io.InputStream, java.io.OutputStream, byte[])">copyLarge(InputStream, OutputStream, byte[])</a></span> - Static method in class org.apache.commons.io.<a href="./org/apache/commons/io/IOUtils.html" title="class in org.apache.commons.io">IOUtils</a></dt>
-<dd>
-<div class="block">Copies bytes from a large (over 2GB) <code>InputStream</code> to an
- <code>OutputStream</code>.</div>
-</dd>
-<dt><span class="strong"><a href="./org/apache/commons/io/IOUtils.html#copyLarge(java.io.InputStream, java.io.OutputStream, long, long)">copyLarge(InputStream, OutputStream, long, long)</a></span> - Static method in class org.apache.commons.io.<a href="./org/apache/commons/io/IOUtils.html" title="class in org.apache.commons.io">IOUtils</a></dt>
-<dd>
-<div class="block">Copies some or all bytes from a large (over 2GB) <code>InputStream</code> to an
- <code>OutputStream</code>, optionally skipping input bytes.</div>
-</dd>
-<dt><span class="strong"><a href="./org/apache/commons/io/IOUtils.html#copyLarge(java.io.InputStream, java.io.OutputStream, long, long, byte[])">copyLarge(InputStream, OutputStream, long, long, byte[])</a></span> - Static method in class org.apache.commons.io.<a href="./org/apache/commons/io/IOUtils.html" title="class in org.apache.commons.io">IOUtils</a></dt>
-<dd>
-<div class="block">Copies some or all bytes from a large (over 2GB) <code>InputStream</code> to an
- <code>OutputStream</code>, optionally skipping input bytes.</div>
-</dd>
-<dt><span class="strong"><a href="./org/apache/commons/io/IOUtils.html#copyLarge(java.io.Reader, java.io.Writer)">copyLarge(Reader, Writer)</a></span> - Static method in class org.apache.commons.io.<a href="./org/apache/commons/io/IOUtils.html" title="class in org.apache.commons.io">IOUtils</a></dt>
-<dd>
-<div class="block">Copies chars from a large (over 2GB) <code>Reader</code> to a <code>Writer</code>.</div>
-</dd>
-<dt><span class="strong"><a href="./org/apache/commons/io/IOUtils.html#copyLarge(java.io.Reader, java.io.Writer, char[])">copyLarge(Reader, Writer, char[])</a></span> - Static method in class org.apache.commons.io.<a href="./org/apache/commons/io/IOUtils.html" title="class in org.apache.commons.io">IOUtils</a></dt>
-<dd>
-<div class="block">Copies chars from a large (over 2GB) <code>Reader</code> to a <code>Writer</code>.</div>
-</dd>
-<dt><span class="strong"><a href="./org/apache/commons/io/IOUtils.html#copyLarge(java.io.Reader, java.io.Writer, long, long)">copyLarge(Reader, Writer, long, long)</a></span> - Static method in class org.apache.commons.io.<a href="./org/apache/commons/io/IOUtils.html" title="class in org.apache.commons.io">IOUtils</a></dt>
-<dd>
-<div class="block">Copies some or all chars from a large (over 2GB) <code>InputStream</code> to an
- <code>OutputStream</code>, optionally skipping input chars.</div>
-</dd>
-<dt><span class="strong"><a href="./org/apache/commons/io/IOUtils.html#copyLarge(java.io.Reader, java.io.Writer, long, long, char[])">copyLarge(Reader, Writer, long, long, char[])</a></span> - Static method in class org.apache.commons.io.<a href="./org/apache/commons/io/IOUtils.html" title="class in org.apache.commons.io">IOUtils</a></dt>
-<dd>
-<div class="block">Copies some or all chars from a large (over 2GB) <code>InputStream</code> to an
- <code>OutputStream</code>, optionally skipping input chars.</div>
-</dd>
-<dt><span class="strong"><a href="./org/apache/commons/io/FileUtils.html#copyToFile(java.io.InputStream, java.io.File)">copyToFile(InputStream, File)</a></span> - Static method in class org.apache.commons.io.<a href="./org/apache/commons/io/FileUtils.html" title="class in org.apache.commons.io">FileUtils</a></dt>
-<dd>
-<div class="block">Copies bytes from an <a href="http://download.oracle.com/javase/6/docs/api/java/io/InputStream.html?is-external=true" title="class or interface in java.io"><code>InputStream</code></a> <code>source</code> to a file
- <code>destination</code>.</div>
-</dd>
-<dt><span class="strong"><a href="./org/apache/commons/io/FileUtils.html#copyURLToFile(java.net.URL, java.io.File)">copyURLToFile(URL, File)</a></span> - Static method in class org.apache.commons.io.<a href="./org/apache/commons/io/FileUtils.html" title="class in org.apache.commons.io">FileUtils</a></dt>
-<dd>
-<div class="block">Copies bytes from the URL <code>source</code> to a file
- <code>destination</code>.</div>
-</dd>
-<dt><span class="strong"><a href="./org/apache/commons/io/FileUtils.html#copyURLToFile(java.net.URL, java.io.File, int, int)">copyURLToFile(URL, File, int, int)</a></span> - Static method in class org.apache.commons.io.<a href="./org/apache/commons/io/FileUtils.html" title="class in org.apache.commons.io">FileUtils</a></dt>
-<dd>
-<div class="block">Copies bytes from the URL <code>source</code> to a file
- <code>destination</code>.</div>
-</dd>
-<dt><a href="./org/apache/commons/io/CopyUtils.html" title="class in org.apache.commons.io"><span class="strong">CopyUtils</span></a> - Class in <a href="./org/apache/commons/io/package-summary.html">org.apache.commons.io</a></dt>
-<dd>
-<div class="block"><span class="strong">Deprecated.</span>
-<div class="block"><i>Use IOUtils. Will be removed in 2.0.
-  Methods renamed to IOUtils.write() or IOUtils.copy().
-  Null handling behaviour changed in IOUtils (null data does not
-  throw NullPointerException).</i></div>
-</div>
-</dd>
-<dt><span class="strong"><a href="./org/apache/commons/io/CopyUtils.html#CopyUtils()">CopyUtils()</a></span> - Constructor for class org.apache.commons.io.<a href="./org/apache/commons/io/CopyUtils.html" title="class in org.apache.commons.io">CopyUtils</a></dt>
-<dd>
-<div class="block"><span class="strong">Deprecated.</span></div>
-<div class="block">Instances should NOT be constructed in standard programming.</div>
-</dd>
-<dt><a href="./org/apache/commons/io/input/CountingInputStream.html" title="class in org.apache.commons.io.input"><span class="strong">CountingInputStream</span></a> - Class in <a href="./org/apache/commons/io/input/package-summary.html">org.apache.commons.io.input</a></dt>
-<dd>
-<div class="block">A decorating input stream that counts the number of bytes that have passed
- through the stream so far.</div>
-</dd>
-<dt><span class="strong"><a href="./org/apache/commons/io/input/CountingInputStream.html#CountingInputStream(java.io.InputStream)">CountingInputStream(InputStream)</a></span> - Constructor for class org.apache.commons.io.input.<a href="./org/apache/commons/io/input/CountingInputStream.html" title="class in org.apache.commons.io.input">CountingInputStream</a></dt>
-<dd>
-<div class="block">Constructs a new CountingInputStream.</div>
-</dd>
-<dt><a href="./org/apache/commons/io/output/CountingOutputStream.html" title="class in org.apache.commons.io.output"><span class="strong">CountingOutputStream</span></a> - Class in <a href="./org/apache/commons/io/output/package-summary.html">org.apache.commons.io.output</a></dt>
-<dd>
-<div class="block">A decorating output stream that counts the number of bytes that have passed
- through the stream so far.</div>
-</dd>
-<dt><span class="strong"><a href="./org/apache/commons/io/output/CountingOutputStream.html#CountingOutputStream(java.io.OutputStream)">CountingOutputStream(OutputStream)</a></span> - Constructor for class org.apache.commons.io.output.<a href="./org/apache/commons/io/output/CountingOutputStream.html" title="class in org.apache.commons.io.output">CountingOutputStream</a></dt>
-<dd>
-<div class="block">Constructs a new CountingOutputStream.</div>
-</dd>
-<dt><span class="strong"><a href="./org/apache/commons/io/input/Tailer.html#create(java.io.File, org.apache.commons.io.input.TailerListener, long, boolean, int)">create(File, TailerListener, long, boolean, int)</a></span> - Static method in class org.apache.commons.io.input.<a href="./org/apache/commons/io/input/Tailer.html" title="class in org.apache.commons.io.input">Tailer</a></dt>
-<dd>
-<div class="block">Creates and starts a Tailer for the given file.</div>
-</dd>
-<dt><span class="strong"><a href="./org/apache/commons/io/input/Tailer.html#create(java.io.File, org.apache.commons.io.input.TailerListener, long, boolean, boolean, int)">create(File, TailerListener, long, boolean, boolean, int)</a></span> - Static method in class org.apache.commons.io.input.<a href="./org/apache/commons/io/input/Tailer.html" title="class in org.apache.commons.io.input">Tailer</a></dt>
-<dd>
-<div class="block">Creates and starts a Tailer for the given file.</div>
-</dd>
-<dt><span class="strong"><a href="./org/apache/commons/io/input/Tailer.html#create(java.io.File, org.apache.commons.io.input.TailerListener, long, boolean)">create(File, TailerListener, long, boolean)</a></span> - Static method in class org.apache.commons.io.input.<a href="./org/apache/commons/io/input/Tailer.html" title="class in org.apache.commons.io.input">Tailer</a></dt>
-<dd>
-<div class="block">Creates and starts a Tailer for the given file with default buffer size.</div>
-</dd>
-<dt><span class="strong"><a href="./org/apache/commons/io/input/Tailer.html#create(java.io.File, org.apache.commons.io.input.TailerListener, long, boolean, boolean)">create(File, TailerListener, long, boolean, boolean)</a></span> - Static method in class org.apache.commons.io.input.<a href="./org/apache/commons/io/input/Tailer.html" title="class in org.apache.commons.io.input">Tailer</a></dt>
-<dd>
-<div class="block">Creates and starts a Tailer for the given file with default buffer size.</div>
-</dd>
-<dt><span class="strong"><a href="./org/apache/commons/io/input/Tailer.html#create(java.io.File, org.apache.commons.io.input.TailerListener, long)">create(File, TailerListener, long)</a></span> - Static method in class org.apache.commons.io.input.<a href="./org/apache/commons/io/input/Tailer.html" title="class in org.apache.commons.io.input">Tailer</a></dt>
-<dd>
-<div class="block">Creates and starts a Tailer for the given file, starting at the beginning of the file</div>
-</dd>
-<dt><span class="strong"><a href="./org/apache/commons/io/input/Tailer.html#create(java.io.File, org.apache.commons.io.input.TailerListener)">create(File, TailerListener)</a></span> - Static method in class org.apache.commons.io.input.<a href="./org/apache/commons/io/input/Tailer.html" title="class in org.apache.commons.io.input">Tailer</a></dt>
-<dd>
-<div class="block">Creates and starts a Tailer for the given file, starting at the beginning of the file
- with the default delay of 1.0s</div>
-</dd>
-</dl>
-<a name="_D_">
-<!--   -->
-</a>
-<h2 class="title">D</h2>
-<dl>
-<dt><span class="strong"><a href="./org/apache/commons/io/comparator/DefaultFileComparator.html#DEFAULT_COMPARATOR">DEFAULT_COMPARATOR</a></span> - Static variable in class org.apache.commons.io.comparator.<a href="./org/apache/commons/io/comparator/DefaultFileComparator.html" title="class in org.apache.commons.io.comparator">DefaultFileComparator</a></dt>
-<dd>
-<div class="block">Singleton default comparator instance</div>
-</dd>
-<dt><span class="strong"><a href="./org/apache/commons/io/comparator/DefaultFileComparator.html#DEFAULT_REVERSE">DEFAULT_REVERSE</a></span> - Static variable in class org.apache.commons.io.comparator.<a href="./org/apache/commons/io/comparator/DefaultFileComparator.html" title="class in org.apache.commons.io.comparator">DefaultFileComparator</a></dt>
-<dd>
-<div class="block">Singleton reverse default comparator instance</div>
-</dd>
-<dt><a href="./org/apache/commons/io/comparator/DefaultFileComparator.html" title="class in org.apache.commons.io.comparator"><span class="strong">DefaultFileComparator</span></a> - Class in <a href="./org/apache/commons/io/comparator/package-summary.html">org.apache.commons.io.comparator</a></dt>
-<dd>
-<div class="block">Compare two files using the <b>default</b> <a href="http://download.oracle.com/javase/6/docs/api/java/io/File.html?is-external=true#compareTo(java.io.File)" title="class or interface in java.io"><code>File.compareTo(File)</code></a> method.</div>
-</dd>
-<dt><span class="strong"><a href="./org/apache/commons/io/comparator/DefaultFileComparator.html#DefaultFileComparator()">DefaultFileComparator()</a></span> - Constructor for class org.apache.commons.io.comparator.<a href="./org/apache/commons/io/comparator/DefaultFileComparator.html" title="class in org.apache.commons.io.comparator">DefaultFileComparator</a></dt>
-<dd>&nbsp;</dd>
-<dt><a href="./org/apache/commons/io/output/DeferredFileOutputStream.html" title="class in org.apache.commons.io.output"><span class="strong">DeferredFileOutputStream</span></a> - Class in <a href="./org/apache/commons/io/output/package-summary.html">org.apache.commons.io.output</a></dt>
-<dd>
-<div class="block">An output stream which will retain data in memory until a specified
- threshold is reached, and only then commit it to disk.</div>
-</dd>
-<dt><span class="strong"><a href="./org/apache/commons/io/output/DeferredFileOutputStream.html#DeferredFileOutputStream(int, java.io.File)">DeferredFileOutputStream(int, File)</a></span> - Constructor for class org.apache.commons.io.output.<a href="./org/apache/commons/io/output/DeferredFileOutputStream.html" title="class in org.apache.commons.io.output">DeferredFileOutputStream</a></dt>
-<dd>
-<div class="block">Constructs an instance of this class which will trigger an event at the
- specified threshold, and save data to a file beyond that point.</div>
-</dd>
-<dt><span class="strong"><a href="./org/apache/commons/io/output/DeferredFileOutputStream.html#DeferredFileOutputStream(int, java.lang.String, java.lang.String, java.io.File)">DeferredFileOutputStream(int, String, String, File)</a></span> - Constructor for class org.apache.commons.io.output.<a href="./org/apache/commons/io/output/DeferredFileOutputStream.html" title="class in org.apache.commons.io.output">DeferredFileOutputStream</a></dt>
-<dd>
-<div class="block">Constructs an instance of this class which will trigger an event at the
- specified threshold, and save data to a temporary file beyond that point.</div>
-</dd>
-<dt><a href="./org/apache/commons/io/filefilter/DelegateFileFilter.html" title="class in org.apache.commons.io.filefilter"><span class="strong">DelegateFileFilter</span></a> - Class in <a href="./org/apache/commons/io/filefilter/package-summary.html">org.apache.commons.io.filefilter</a></dt>
-<dd>
-<div class="block">This class turns a Java FileFilter or FilenameFilter into an IO FileFilter.</div>
-</dd>
-<dt><span class="strong"><a href="./org/apache/commons/io/filefilter/DelegateFileFilter.html#DelegateFileFilter(java.io.FilenameFilter)">DelegateFileFilter(FilenameFilter)</a></span> - Constructor for class org.apache.commons.io.filefilter.<a href="./org/apache/commons/io/filefilter/DelegateFileFilter.html" title="class in org.apache.commons.io.filefilter">DelegateFileFilter</a></dt>
-<dd>
-<div class="block">Constructs a delegate file filter around an existing FilenameFilter.</div>
-</dd>
-<dt><span class="strong"><a href="./org/apache/commons/io/filefilter/DelegateFileFilter.html#DelegateFileFilter(java.io.FileFilter)">DelegateFileFilter(FileFilter)</a></span> - Constructor for class org.apache.commons.io.filefilter.<a href="./org/apache/commons/io/filefilter/DelegateFileFilter.html" title="class in org.apache.commons.io.filefilter">DelegateFileFilter</a></dt>
-<dd>
-<div class="block">Constructs a delegate file filter around an existing FileFilter.</div>
-</dd>
-<dt><span class="strong"><a href="./org/apache/commons/io/FileDeleteStrategy.html#delete(java.io.File)">delete(File)</a></span> - Method in class org.apache.commons.io.<a href="./org/apache/commons/io/FileDeleteStrategy.html" title="class in org.apache.commons.io">FileDeleteStrategy</a></dt>
-<dd>
-<div class="block">Deletes the file object, which may be a file or a directory.</div>
-</dd>
-<dt><span class="strong"><a href="./org/apache/commons/io/FileUtils.html#deleteDirectory(java.io.File)">deleteDirectory(File)</a></span> - Static method in class org.apache.commons.io.<a href="./org/apache/commons/io/FileUtils.html" title="class in org.apache.commons.io">FileUtils</a></dt>
-<dd>
-<div class="block">Deletes a directory recursively.</div>
-</dd>
-<dt><span class="strong"><a href="./org/apache/commons/io/FileDeleteStrategy.html#deleteQuietly(java.io.File)">deleteQuietly(File)</a></span> - Method in class org.apache.commons.io.<a href="./org/apache/commons/io/FileDeleteStrategy.html" title="class in org.apache.commons.io">FileDeleteStrategy</a></dt>
-<dd>
-<div class="block">Deletes the file object, which may be a file or a directory.</div>
-</dd>
-<dt><span class="strong"><a href="./org/apache/commons/io/FileUtils.html#deleteQuietly(java.io.File)">deleteQuietly(File)</a></span> - Static method in class org.apache.commons.io.<a href="./org/apache/commons/io/FileUtils.html" title="class in org.apache.commons.io">FileUtils</a></dt>
-<dd>
-<div class="block">Deletes a file, never throwing an exception.</div>
-</dd>
-<dt><a href="./org/apache/commons/io/input/DemuxInputStream.html" title="class in org.apache.commons.io.input"><span class="strong">DemuxInputStream</span></a> - Class in <a href="./org/apache/commons/io/input/package-summary.html">org.apache.commons.io.input</a></dt>
-<dd>
-<div class="block">Data written to this stream is forwarded to a stream that has been associated
- with this thread.</div>
-</dd>
-<dt><span class="strong"><a href="./org/apache/commons/io/input/DemuxInputStream.html#DemuxInputStream()">DemuxInputStream()</a></span> - Constructor for class org.apache.commons.io.input.<a href="./org/apache/commons/io/input/DemuxInputStream.html" title="class in org.apache.commons.io.input">DemuxInputStream</a></dt>
-<dd>&nbsp;</dd>
-<dt><a href="./org/apache/commons/io/output/DemuxOutputStream.html" title="class in org.apache.commons.io.output"><span class="strong">DemuxOutputStream</span></a> - Class in <a href="./org/apache/commons/io/output/package-summary.html">org.apache.commons.io.output</a></dt>
-<dd>
-<div class="block">Data written to this stream is forwarded to a stream that has been associated
- with this thread.</div>
-</dd>
-<dt><span class="strong"><a href="./org/apache/commons/io/output/DemuxOutputStream.html#DemuxOutputStream()">DemuxOutputStream()</a></span> - Constructor for class org.apache.commons.io.output.<a href="./org/apache/commons/io/output/DemuxOutputStream.html" title="class in org.apache.commons.io.output">DemuxOutputStream</a></dt>
-<dd>&nbsp;</dd>
-<dt><span class="strong"><a href="./org/apache/commons/io/monitor/FileAlterationObserver.html#destroy()">destroy()</a></span> - Method in class org.apache.commons.io.monitor.<a href="./org/apache/commons/io/monitor/FileAlterationObserver.html" title="class in org.apache.commons.io.monitor">FileAlterationObserver</a></dt>
-<dd>
-<div class="block">Final processing.</div>
-</dd>
-<dt><span class="strong"><a href="./org/apache/commons/io/IOUtils.html#DIR_SEPARATOR">DIR_SEPARATOR</a></span> - Static variable in class org.apache.commons.io.<a href="./org/apache/commons/io/IOUtils.html" title="class in org.apache.commons.io">IOUtils</a></dt>
-<dd>
-<div class="block">The system directory separator character.</div>
-</dd>
-<dt><span class="strong"><a href="./org/apache/commons/io/IOUtils.html#DIR_SEPARATOR_UNIX">DIR_SEPARATOR_UNIX</a></span> - Static variable in class org.apache.commons.io.<a href="./org/apache/commons/io/IOUtils.html" title="class in org.apache.commons.io">IOUtils</a></dt>
-<dd>
-<div class="block">The Unix directory separator character.</div>
-</dd>
-<dt><span class="strong"><a href="./org/apache/commons/io/IOUtils.html#DIR_SEPARATOR_WINDOWS">DIR_SEPARATOR_WINDOWS</a></span> - Static variable in class org.apache.commons.io.<a href="./org/apache/commons/io/IOUtils.html" title="class in org.apache.commons.io">IOUtils</a></dt>
-<dd>
-<div class="block">The Windows directory separator character.</div>
-</dd>
-<dt><span class="strong"><a href="./org/apache/commons/io/filefilter/DirectoryFileFilter.html#DIRECTORY">DIRECTORY</a></span> - Static variable in class org.apache.commons.io.filefilter.<a href="./org/apache/commons/io/filefilter/DirectoryFileFilter.html" title="class in org.apache.commons.io.filefilter">DirectoryFileFilter</a></dt>
-<dd>
-<div class="block">Singleton instance of directory filter.</div>
-</dd>
-<dt><span class="strong"><a href="./org/apache/commons/io/comparator/DirectoryFileComparator.html#DIRECTORY_COMPARATOR">DIRECTORY_COMPARATOR</a></span> - Static variable in class org.apache.commons.io.comparator.<a href="./org/apache/commons/io/comparator/DirectoryFileComparator.html" title="class in org.apache.commons.io.comparator">DirectoryFileComparator</a></dt>
-<dd>
-<div class="block">Singleton default comparator instance</div>
-</dd>
-<dt><span class="strong"><a href="./org/apache/commons/io/comparator/DirectoryFileComparator.html#DIRECTORY_REVERSE">DIRECTORY_REVERSE</a></span> - Static variable in class org.apache.commons.io.comparator.<a href="./org/apache/commons/io/comparator/DirectoryFileComparator.html" title="class in org.apache.commons.io.comparator">DirectoryFileComparator</a></dt>
-<dd>
-<div class="block">Singleton reverse default comparator instance</div>
-</dd>
-<dt><span class="strong"><a href="./org/apache/commons/io/FilenameUtils.html#directoryContains(java.lang.String, java.lang.String)">directoryContains(String, String)</a></span> - Static method in class org.apache.commons.io.<a href="./org/apache/commons/io/FilenameUtils.html" title="class in org.apache.commons.io">FilenameUtils</a></dt>
-<dd>
-<div class="block">Determines whether the <code>parent</code> directory contains the <code>child</code> element (a file or directory).</div>
-</dd>
-<dt><span class="strong"><a href="./org/apache/commons/io/FileUtils.html#directoryContains(java.io.File, java.io.File)">directoryContains(File, File)</a></span> - Static method in class org.apache.commons.io.<a href="./org/apache/commons/io/FileUtils.html" title="class in org.apache.commons.io">FileUtils</a></dt>
-<dd>
-<div class="block">Determines whether the <code>parent</code> directory contains the <code>child</code> element (a file or directory).</div>
-</dd>
-<dt><a href="./org/apache/commons/io/comparator/DirectoryFileComparator.html" title="class in org.apache.commons.io.comparator"><span class="strong">DirectoryFileComparator</span></a> - Class in <a href="./org/apache/commons/io/comparator/package-summary.html">org.apache.commons.io.comparator</a></dt>
-<dd>
-<div class="block">Compare two files using the <a href="http://download.oracle.com/javase/6/docs/api/java/io/File.html?is-external=true#isDirectory()" title="class or interface in java.io"><code>File.isDirectory()</code></a> method.</div>
-</dd>
-<dt><span class="strong"><a href="./org/apache/commons/io/comparator/DirectoryFileComparator.html#DirectoryFileComparator()">DirectoryFileComparator()</a></span> - Constructor for class org.apache.commons.io.comparator.<a href="./org/apache/commons/io/comparator/DirectoryFileComparator.html" title="class in org.apache.commons.io.comparator">DirectoryFileComparator</a></dt>
-<dd>&nbsp;</dd>
-<dt><a href="./org/apache/commons/io/filefilter/DirectoryFileFilter.html" title="class in org.apache.commons.io.filefilter"><span class="strong">DirectoryFileFilter</span></a> - Class in <a href="./org/apache/commons/io/filefilter/package-summary.html">org.apache.commons.io.filefilter</a></dt>
-<dd>
-<div class="block">This filter accepts <code>File</code>s that are directories.</div>
-</dd>
-<dt><span class="strong"><a href="./org/apache/commons/io/filefilter/DirectoryFileFilter.html#DirectoryFileFilter()">DirectoryFileFilter()</a></span> - Constructor for class org.apache.commons.io.filefilter.<a href="./org/apache/commons/io/filefilter/DirectoryFileFilter.html" title="class in org.apache.commons.io.filefilter">DirectoryFileFilter</a></dt>
-<dd>
-<div class="block">Restrictive consructor.</div>
-</dd>
-<dt><span class="strong"><a href="./org/apache/commons/io/filefilter/FileFilterUtils.html#directoryFileFilter()">directoryFileFilter()</a></span> - Static method in class org.apache.commons.io.filefilter.<a href="./org/apache/commons/io/filefilter/FileFilterUtils.html" title="class in org.apache.commons.io.filefilter">FileFilterUtils</a></dt>
-<dd>
-<div class="block">Returns a filter that checks if the file is a directory.</div>
-</dd>
-<dt><a href="./org/apache/commons/io/DirectoryWalker.html" title="class in org.apache.commons.io"><span class="strong">DirectoryWalker</span></a>&lt;<a href="./org/apache/commons/io/DirectoryWalker.html" title="type parameter in DirectoryWalker">T</a>&gt; - Class in <a href="./org/apache/commons/io/package-summary.html">org.apache.commons.io</a></dt>
-<dd>
-<div class="block">Abstract class that walks through a directory hierarchy and provides
- subclasses with convenient hooks to add specific behaviour.</div>
-</dd>
-<dt><span class="strong"><a href="./org/apache/commons/io/DirectoryWalker.html#DirectoryWalker()">DirectoryWalker()</a></span> - Constructor for class org.apache.commons.io.<a href="./org/apache/commons/io/DirectoryWalker.html" title="class in org.apache.commons.io">DirectoryWalker</a></dt>
-<dd>
-<div class="block">Construct an instance with no filtering and unlimited <i>depth</i>.</div>
-</dd>
-<dt><span class="strong"><a href="./org/apache/commons/io/DirectoryWalker.html#DirectoryWalker(java.io.FileFilter, int)">DirectoryWalker(FileFilter, int)</a></span> - Constructor for class org.apache.commons.io.<a href="./org/apache/commons/io/DirectoryWalker.html" title="class in org.apache.commons.io">DirectoryWalker</a></dt>
-<dd>
-<div class="block">Construct an instance with a filter and limit the <i>depth</i> navigated to.</div>
-</dd>
-<dt><span class="strong"><a href="./org/apache/commons/io/DirectoryWalker.html#DirectoryWalker(org.apache.commons.io.filefilter.IOFileFilter, org.apache.commons.io.filefilter.IOFileFilter, int)">DirectoryWalker(IOFileFilter, IOFileFilter, int)</a></span> - Constructor for class org.apache.commons.io.<a href="./org/apache/commons/io/DirectoryWalker.html" title="class in org.apache.commons.io">DirectoryWalker</a></dt>
-<dd>
-<div class="block">Construct an instance with a directory and a file filter and an optional
- limit on the <i>depth</i> navigated to.</div>
-</dd>
-<dt><a href="./org/apache/commons/io/DirectoryWalker.CancelException.html" title="class in org.apache.commons.io"><span class="strong">DirectoryWalker.CancelException</span></a> - Exception in <a href="./org/apache/commons/io/package-summary.html">org.apache.commons.io</a></dt>
-<dd>
-<div class="block">CancelException is thrown in DirectoryWalker to cancel the current
- processing.</div>
-</dd>
-<dt><span class="strong"><a href="./org/apache/commons/io/DirectoryWalker.CancelException.html#DirectoryWalker.CancelException(java.io.File, int)">DirectoryWalker.CancelException(File, int)</a></span> - Constructor for exception org.apache.commons.io.<a href="./org/apache/commons/io/DirectoryWalker.CancelException.html" title="class in org.apache.commons.io">DirectoryWalker.CancelException</a></dt>
-<dd>
-<div class="block">Constructs a <code>CancelException</code> with
- the file and depth when cancellation occurred.</div>
-</dd>
-<dt><span class="strong"><a href="./org/apache/commons/io/DirectoryWalker.CancelException.html#DirectoryWalker.CancelException(java.lang.String, java.io.File, int)">DirectoryWalker.CancelException(String, File, int)</a></span> - Constructor for exception org.apache.commons.io.<a href="./org/apache/commons/io/DirectoryWalker.CancelException.html" title="class in org.apache.commons.io">DirectoryWalker.CancelException</a></dt>
-<dd>
-<div class="block">Constructs a <code>CancelException</code> with
- an appropriate message and the file and depth when
- cancellation occurred.</div>
-</dd>
-<dt><span class="strong"><a href="./org/apache/commons/io/FileDeleteStrategy.html#doDelete(java.io.File)">doDelete(File)</a></span> - Method in class org.apache.commons.io.<a href="./org/apache/commons/io/FileDeleteStrategy.html" title="class in org.apache.commons.io">FileDeleteStrategy</a></dt>
-<dd>
-<div class="block">Actually deletes the file object, which may be a file or a directory.</div>
-</dd>
-<dt><span class="strong"><a href="./org/apache/commons/io/HexDump.html#dump(byte[], long, java.io.OutputStream, int)">dump(byte[], long, OutputStream, int)</a></span> - Static method in class org.apache.commons.io.<a href="./org/apache/commons/io/HexDump.html" title="class in org.apache.commons.io">HexDump</a></dt>
-<dd>
-<div class="block">Dump an array of bytes to an OutputStream.</div>
-</dd>
-</dl>
-<a name="_E_">
-<!--   -->
-</a>
-<h2 class="title">E</h2>
-<dl>
-<dt><span class="strong"><a href="./org/apache/commons/io/filefilter/EmptyFileFilter.html#EMPTY">EMPTY</a></span> - Static variable in class org.apache.commons.io.filefilter.<a href="./org/apache/commons/io/filefilter/EmptyFileFilter.html" title="class in org.apache.commons.io.filefilter">EmptyFileFilter</a></dt>
-<dd>
-<div class="block">Singleton instance of <i>empty</i> filter</div>
-</dd>
-<dt><span class="strong"><a href="./org/apache/commons/io/FileUtils.html#EMPTY_FILE_ARRAY">EMPTY_FILE_ARRAY</a></span> - Static variable in class org.apache.commons.io.<a href="./org/apache/commons/io/FileUtils.html" title="class in org.apache.commons.io">FileUtils</a></dt>
-<dd>
-<div class="block">An empty array of type <code>File</code>.</div>
-</dd>
-<dt><a href="./org/apache/commons/io/filefilter/EmptyFileFilter.html" title="class in org.apache.commons.io.filefilter"><span class="strong">EmptyFileFilter</span></a> - Class in <a href="./org/apache/commons/io/filefilter/package-summary.html">org.apache.commons.io.filefilter</a></dt>
-<dd>
-<div class="block">This filter accepts files or directories that are empty.</div>
-</dd>
-<dt><span class="strong"><a href="./org/apache/commons/io/filefilter/EmptyFileFilter.html#EmptyFileFilter()">EmptyFileFilter()</a></span> - Constructor for class org.apache.commons.io.filefilter.<a href="./org/apache/commons/io/filefilter/EmptyFileFilter.html" title="class in org.apache.commons.io.filefilter">EmptyFileFilter</a></dt>
-<dd>
-<div class="block">Restrictive consructor.</div>
-</dd>
-<dt><span class="strong"><a href="./org/apache/commons/io/input/XmlStreamReader.html#ENCODING_PATTERN">ENCODING_PATTERN</a></span> - Static variable in class org.apache.commons.io.input.<a href="./org/apache/commons/io/input/XmlStreamReader.html" title="class in org.apache.commons.io.input">XmlStreamReader</a></dt>
-<dd>&nbsp;</dd>
-<dt><a href="./org/apache/commons/io/EndianUtils.html" title="class in org.apache.commons.io"><span class="strong">EndianUtils</span></a> - Class in <a href="./org/apache/commons/io/package-summary.html">org.apache.commons.io</a></dt>
-<dd>
-<div class="block">Utility code for dealing with different endian systems.</div>
-</dd>
-<dt><span class="strong"><a href="./org/apache/commons/io/EndianUtils.html#EndianUtils()">EndianUtils()</a></span> - Constructor for class org.apache.commons.io.<a href="./org/apache/commons/io/EndianUtils.html" title="class in org.apache.commons.io">EndianUtils</a></dt>
-<dd>
-<div class="block">Instances should NOT be constructed in standard programming.</div>
-</dd>
-<dt><span class="strong"><a href="./org/apache/commons/io/HexDump.html#EOL">EOL</a></span> - Static variable in class org.apache.commons.io.<a href="./org/apache/commons/io/HexDump.html" title="class in org.apache.commons.io">HexDump</a></dt>
-<dd>
-<div class="block">The line-separator (initializes to "line.separator" system property.</div>
-</dd>
-<dt><span class="strong"><a href="./org/apache/commons/io/ByteOrderMark.html#equals(java.lang.Object)">equals(Object)</a></span> - Method in class org.apache.commons.io.<a href="./org/apache/commons/io/ByteOrderMark.html" title="class in org.apache.commons.io">ByteOrderMark</a></dt>
-<dd>
-<div class="block">Indicates if this BOM's bytes equals another.</div>
-</dd>
-<dt><span class="strong"><a href="./org/apache/commons/io/FilenameUtils.html#equals(java.lang.String, java.lang.String)">equals(String, String)</a></span> - Static method in class org.apache.commons.io.<a href="./org/apache/commons/io/FilenameUtils.html" title="class in org.apache.commons.io">FilenameUtils</a></dt>
-<dd>
-<div class="block">Checks whether two filenames are equal exactly.</div>
-</dd>
-<dt><span class="strong"><a href="./org/apache/commons/io/FilenameUtils.html#equals(java.lang.String, java.lang.String, boolean, org.apache.commons.io.IOCase)">equals(String, String, boolean, IOCase)</a></span> - Static method in class org.apache.commons.io.<a href="./org/apache/commons/io/FilenameUtils.html" title="class in org.apache.commons.io">FilenameUtils</a></dt>
-<dd>
-<div class="block">Checks whether two filenames are equal, optionally normalizing and providing
- control over the case-sensitivity.</div>
-</dd>
-<dt><span class="strong"><a href="./org/apache/commons/io/FilenameUtils.html#equalsNormalized(java.lang.String, java.lang.String)">equalsNormalized(String, String)</a></span> - Static method in class org.apache.commons.io.<a href="./org/apache/commons/io/FilenameUtils.html" title="class in org.apache.commons.io">FilenameUtils</a></dt>
-<dd>
-<div class="block">Checks whether two filenames are equal after both have been normalized.</div>
-</dd>
-<dt><span class="strong"><a href="./org/apache/commons/io/FilenameUtils.html#equalsNormalizedOnSystem(java.lang.String, java.lang.String)">equalsNormalizedOnSystem(String, String)</a></span> - Static method in class org.apache.commons.io.<a href="./org/apache/commons/io/FilenameUtils.html" title="class in org.apache.commons.io">FilenameUtils</a></dt>
-<dd>
-<div class="block">Checks whether two filenames are equal after both have been normalized
- and using the case rules of the system.</div>
-</dd>
-<dt><span class="strong"><a href="./org/apache/commons/io/FilenameUtils.html#equalsOnSystem(java.lang.String, java.lang.String)">equalsOnSystem(String, String)</a></span> - Static method in class org.apache.commons.io.<a href="./org/apache/commons/io/FilenameUtils.html" title="class in org.apache.commons.io">FilenameUtils</a></dt>
-<dd>
-<div class="block">Checks whether two filenames are equal using the case rules of the system.</div>
-</dd>
-<dt><span class="strong"><a href="./org/apache/commons/io/FileCleaner.html#exitWhenFinished()">exitWhenFinished()</a></span> - Static method in class org.apache.commons.io.<a href="./org/apache/commons/io/FileCleaner.html" title="class in org.apache.commons.io">FileCleaner</a></dt>
-<dd>
-<div class="block"><span class="strong">Deprecated.</span>
-<div class="block"><i>Use <a href="./org/apache/commons/io/FileCleaningTracker.html#exitWhenFinished()"><code>FileCleaningTracker.exitWhenFinished()</code></a>.</i></div>
-</div>
-</dd>
-<dt><span class="strong"><a href="./org/apache/commons/io/FileCleaningTracker.html#exitWhenFinished()">exitWhenFinished()</a></span> - Method in class org.apache.commons.io.<a href="./org/apache/commons/io/FileCleaningTracker.html" title="class in org.apache.commons.io">FileCleaningTracker</a></dt>
-<dd>
-<div class="block">Call this method to cause the file cleaner thread to terminate when
- there are no more objects being tracked for deletion.</div>
-</dd>
-<dt><span class="strong"><a href="./org/apache/commons/io/comparator/ExtensionFileComparator.html#EXTENSION_COMPARATOR">EXTENSION_COMPARATOR</a></span> - Static variable in class org.apache.commons.io.comparator.<a href="./org/apache/commons/io/comparator/ExtensionFileComparator.html" title="class in org.apache.commons.io.comparator">ExtensionFileComparator</a></dt>
-<dd>
-<div class="block">Case-sensitive extension comparator instance (see <a href="./org/apache/commons/io/IOCase.html#SENSITIVE"><code>IOCase.SENSITIVE</code></a>)</div>
-</dd>
-<dt><span class="strong"><a href="./org/apache/commons/io/comparator/ExtensionFileComparator.html#EXTENSION_INSENSITIVE_COMPARATOR">EXTENSION_INSENSITIVE_COMPARATOR</a></span> - Static variable in class org.apache.commons.io.comparator.<a href="./org/apache/commons/io/comparator/ExtensionFileComparator.html" title="class in org.apache.commons.io.comparator">ExtensionFileComparator</a></dt>
-<dd>
-<div class="block">Case-insensitive extension comparator instance (see <a href="./org/apache/commons/io/IOCase.html#INSENSITIVE"><code>IOCase.INSENSITIVE</code></a>)</div>
-</dd>
-<dt><span class="strong"><a href="./org/apache/commons/io/comparator/ExtensionFileComparator.html#EXTENSION_INSENSITIVE_REVERSE">EXTENSION_INSENSITIVE_REVERSE</a></span> - Static variable in class org.apache.commons.io.comparator.<a href="./org/apache/commons/io/comparator/ExtensionFileComparator.html" title="class in org.apache.commons.io.comparator">ExtensionFileComparator</a></dt>
-<dd>
-<div class="block">Reverse case-insensitive extension comparator instance (see <a href="./org/apache/commons/io/IOCase.html#INSENSITIVE"><code>IOCase.INSENSITIVE</code></a>)</div>
-</dd>
-<dt><span class="strong"><a href="./org/apache/commons/io/comparator/ExtensionFileComparator.html#EXTENSION_REVERSE">EXTENSION_REVERSE</a></span> - Static variable in class org.apache.commons.io.comparator.<a href="./org/apache/commons/io/comparator/ExtensionFileComparator.html" title="class in org.apache.commons.io.comparator">ExtensionFileComparator</a></dt>
-<dd>
-<div class="block">Reverse case-sensitive extension comparator instance (see <a href="./org/apache/commons/io/IOCase.html#SENSITIVE"><code>IOCase.SENSITIVE</code></a>)</div>
-</dd>
-<dt><span class="strong"><a href="./org/apache/commons/io/FilenameUtils.html#EXTENSION_SEPARATOR">EXTENSION_SEPARATOR</a></span> - Static variable in class org.apache.commons.io.<a href="./org/apache/commons/io/FilenameUtils.html" title="class in org.apache.commons.io">FilenameUtils</a></dt>
-<dd>
-<div class="block">The extension separator character.</div>
-</dd>
-<dt><span class="strong"><a href="./org/apache/commons/io/FilenameUtils.html#EXTENSION_SEPARATOR_STR">EXTENSION_SEPARATOR_STR</a></span> - Static variable in class org.apache.commons.io.<a href="./org/apache/commons/io/FilenameUtils.html" title="class in org.apache.commons.io">FilenameUtils</a></dt>
-<dd>
-<div class="block">The extension separator String.</div>
-</dd>
-<dt><span class="strong"><a href="./org/apache/commons/io/comparator/ExtensionFileComparator.html#EXTENSION_SYSTEM_COMPARATOR">EXTENSION_SYSTEM_COMPARATOR</a></span> - Static variable in class org.apache.commons.io.comparator.<a href="./org/apache/commons/io/comparator/ExtensionFileComparator.html" title="class in org.apache.commons.io.comparator">ExtensionFileComparator</a></dt>
-<dd>
-<div class="block">System sensitive extension comparator instance (see <a href="./org/apache/commons/io/IOCase.html#SYSTEM"><code>IOCase.SYSTEM</code></a>)</div>
-</dd>
-<dt><span class="strong"><a href="./org/apache/commons/io/comparator/ExtensionFileComparator.html#EXTENSION_SYSTEM_REVERSE">EXTENSION_SYSTEM_REVERSE</a></span> - Static variable in class org.apache.commons.io.comparator.<a href="./org/apache/commons/io/comparator/ExtensionFileComparator.html" title="class in org.apache.commons.io.comparator">ExtensionFileComparator</a></dt>
-<dd>
-<div class="block">Reverse system sensitive path comparator instance (see <a href="./org/apache/commons/io/IOCase.html#SYSTEM"><code>IOCase.SYSTEM</code></a>)</div>
-</dd>
-<dt><a href="./org/apache/commons/io/comparator/ExtensionFileComparator.html" title="class in org.apache.commons.io.comparator"><span class="strong">ExtensionFileComparator</span></a> - Class in <a href="./org/apache/commons/io/comparator/package-summary.html">org.apache.commons.io.comparator</a></dt>
-<dd>
-<div class="block">Compare the file name <b>extensions</b> for order
- (see <a href="./org/apache/commons/io/FilenameUtils.html#getExtension(java.lang.String)"><code>FilenameUtils.getExtension(String)</code></a>).</div>
-</dd>
-<dt><span class="strong"><a href="./org/apache/commons/io/comparator/ExtensionFileComparator.html#ExtensionFileComparator()">ExtensionFileComparator()</a></span> - Constructor for class org.apache.commons.io.comparator.<a href="./org/apache/commons/io/comparator/ExtensionFileComparator.html" title="class in org.apache.commons.io.comparator">ExtensionFileComparator</a></dt>
-<dd>
-<div class="block">Construct a case sensitive file extension comparator instance.</div>
-</dd>
-<dt><span class="strong"><a href="./org/apache/commons/io/comparator/ExtensionFileComparator.html#ExtensionFileComparator(org.apache.commons.io.IOCase)">ExtensionFileComparator(IOCase)</a></span> - Constructor for class org.apache.commons.io.comparator.<a href="./org/apache/commons/io/comparator/ExtensionFileComparator.html" title="class in org.apache.commons.io.comparator">ExtensionFileComparator</a></dt>
-<dd>
-<div class="block">Construct a file extension comparator instance with the specified case-sensitivity.</div>
-</dd>
-</dl>
-<a name="_F_">
-<!--   -->
-</a>
-<h2 class="title">F</h2>
-<dl>
-<dt><span class="strong"><a href="./org/apache/commons/io/filefilter/FalseFileFilter.html#FALSE">FALSE</a></span> - Static variable in class org.apache.commons.io.filefilter.<a href="./org/apache/commons/io/filefilter/FalseFileFilter.html" title="class in org.apache.commons.io.filefilter">FalseFileFilter</a></dt>
-<dd>
-<div class="block">Singleton instance of false filter.</div>
-</dd>
-<dt><a href="./org/apache/commons/io/filefilter/FalseFileFilter.html" title="class in org.apache.commons.io.filefilter"><span class="strong">FalseFileFilter</span></a> - Class in <a href="./org/apache/commons/io/filefilter/package-summary.html">org.apache.commons.io.filefilter</a></dt>
-<dd>
-<div class="block">A file filter that always returns false.</div>
-</dd>
-<dt><span class="strong"><a href="./org/apache/commons/io/filefilter/FalseFileFilter.html#FalseFileFilter()">FalseFileFilter()</a></span> - Constructor for class org.apache.commons.io.filefilter.<a href="./org/apache/commons/io/filefilter/FalseFileFilter.html" title="class in org.apache.commons.io.filefilter">FalseFileFilter</a></dt>
-<dd>
-<div class="block">Restrictive consructor.</div>
-</dd>
-<dt><span class="strong"><a href="./org/apache/commons/io/filefilter/FileFilterUtils.html#falseFileFilter()">falseFileFilter()</a></span> - Static method in class org.apache.commons.io.filefilter.<a href="./org/apache/commons/io/filefilter/FileFilterUtils.html" title="class in org.apache.commons.io.filefilter">FileFilterUtils</a></dt>
-<dd>
-<div class="block">Returns a filter that always returns false.</div>
-</dd>
-<dt><span class="strong"><a href="./org/apache/commons/io/filefilter/FileFileFilter.html#FILE">FILE</a></span> - Static variable in class org.apache.commons.io.filefilter.<a href="./org/apache/commons/io/filefilter/FileFileFilter.html" title="class in org.apache.commons.io.filefilter">FileFileFilter</a></dt>
-<dd>
-<div class="block">Singleton instance of file filter</div>
-</dd>
-<dt><a href="./org/apache/commons/io/monitor/FileAlterationListener.html" title="interface in org.apache.commons.io.monitor"><span class="strong">FileAlterationListener</span></a> - Interface in <a href="./org/apache/commons/io/monitor/package-summary.html">org.apache.commons.io.monitor</a></dt>
-<dd>
-<div class="block">A listener that receives events of file system modifications.</div>
-</dd>
-<dt><a href="./org/apache/commons/io/monitor/FileAlterationListenerAdaptor.html" title="class in org.apache.commons.io.monitor"><span class="strong">FileAlterationListenerAdaptor</span></a> - Class in <a href="./org/apache/commons/io/monitor/package-summary.html">org.apache.commons.io.monitor</a></dt>
-<dd>
-<div class="block">Convenience <a href="./org/apache/commons/io/monitor/FileAlterationListener.html" title="interface in org.apache.commons.io.monitor"><code>FileAlterationListener</code></a> implementation that does nothing.</div>
-</dd>
-<dt><span class="strong"><a href="./org/apache/commons/io/monitor/FileAlterationListenerAdaptor.html#FileAlterationListenerAdaptor()">FileAlterationListenerAdaptor()</a></span> - Constructor for class org.apache.commons.io.monitor.<a href="./org/apache/commons/io/monitor/FileAlterationListenerAdaptor.html" title="class in org.apache.commons.io.monitor">FileAlterationListenerAdaptor</a></dt>
-<dd>&nbsp;</dd>
-<dt><a href="./org/apache/commons/io/monitor/FileAlterationMonitor.html" title="class in org.apache.commons.io.monitor"><span class="strong">FileAlterationMonitor</span></a> - Class in <a href="./org/apache/commons/io/monitor/package-summary.html">org.apache.commons.io.monitor</a></dt>
-<dd>
-<div class="block">A runnable that spawns a monitoring thread triggering any
- registered <a href="./org/apache/commons/io/monitor/FileAlterationObserver.html" title="class in org.apache.commons.io.monitor"><code>FileAlterationObserver</code></a> at a specified interval.</div>
-</dd>
-<dt><span class="strong"><a href="./org/apache/commons/io/monitor/FileAlterationMonitor.html#FileAlterationMonitor()">FileAlterationMonitor()</a></span> - Constructor for class org.apache.commons.io.monitor.<a href="./org/apache/commons/io/monitor/FileAlterationMonitor.html" title="class in org.apache.commons.io.monitor">FileAlterationMonitor</a></dt>
-<dd>
-<div class="block">Construct a monitor with a default interval of 10 seconds.</div>
-</dd>
-<dt><span class="strong"><a href="./org/apache/commons/io/monitor/FileAlterationMonitor.html#FileAlterationMonitor(long)">FileAlterationMonitor(long)</a></span> - Constructor for class org.apache.commons.io.monitor.<a href="./org/apache/commons/io/monitor/FileAlterationMonitor.html" title="class in org.apache.commons.io.monitor">FileAlterationMonitor</a></dt>
-<dd>
-<div class="block">Construct a monitor with the specified interval.</div>
-</dd>
-<dt><span class="strong"><a href="./org/apache/commons/io/monitor/FileAlterationMonitor.html#FileAlterationMonitor(long, org.apache.commons.io.monitor.FileAlterationObserver...)">FileAlterationMonitor(long, FileAlterationObserver...)</a></span> - Constructor for class org.apache.commons.io.monitor.<a href="./org/apache/commons/io/monitor/FileAlterationMonitor.html" title="class in org.apache.commons.io.monitor">FileAlterationMonitor</a></dt>
-<dd>
-<div class="block">Construct a monitor with the specified interval and set of observers.</div>
-</dd>
-<dt><a href="./org/apache/commons/io/monitor/FileAlterationObserver.html" title="class in org.apache.commons.io.monitor"><span class="strong">FileAlterationObserver</span></a> - Class in <a href="./org/apache/commons/io/monitor/package-summary.html">org.apache.commons.io.monitor</a></dt>
-<dd>
-<div class="block">FileAlterationObserver represents the state of files below a root directory,
- checking the filesystem and notifying listeners of create, change or
- delete events.</div>
-</dd>
-<dt><span class="strong"><a href="./org/apache/commons/io/monitor/FileAlterationObserver.html#FileAlterationObserver(java.lang.String)">FileAlterationObserver(String)</a></span> - Constructor for class org.apache.commons.io.monitor.<a href="./org/apache/commons/io/monitor/FileAlterationObserver.html" title="class in org.apache.commons.io.monitor">FileAlterationObserver</a></dt>
-<dd>
-<div class="block">Construct an observer for the specified directory.</div>
-</dd>
-<dt><span class="strong"><a href="./org/apache/commons/io/monitor/FileAlterationObserver.html#FileAlterationObserver(java.lang.String, java.io.FileFilter)">FileAlterationObserver(String, FileFilter)</a></span> - Constructor for class org.apache.commons.io.monitor.<a href="./org/apache/commons/io/monitor/FileAlterationObserver.html" title="class in org.apache.commons.io.monitor">FileAlterationObserver</a></dt>
-<dd>
-<div class="block">Construct an observer for the specified directory and file filter.</div>
-</dd>
-<dt><span class="strong"><a href="./org/apache/commons/io/monitor/FileAlterationObserver.html#FileAlterationObserver(java.lang.String, java.io.FileFilter, org.apache.commons.io.IOCase)">FileAlterationObserver(String, FileFilter, IOCase)</a></span> - Constructor for class org.apache.commons.io.monitor.<a href="./org/apache/commons/io/monitor/FileAlterationObserver.html" title="class in org.apache.commons.io.monitor">FileAlterationObserver</a></dt>
-<dd>
-<div class="block">Construct an observer for the specified directory, file filter and
- file comparator.</div>
-</dd>
-<dt><span class="strong"><a href="./org/apache/commons/io/monitor/FileAlterationObserver.html#FileAlterationObserver(java.io.File)">FileAlterationObserver(File)</a></span> - Constructor for class org.apache.commons.io.monitor.<a href="./org/apache/commons/io/monitor/FileAlterationObserver.html" title="class in org.apache.commons.io.monitor">FileAlterationObserver</a></dt>
-<dd>
-<div class="block">Construct an observer for the specified directory.</div>
-</dd>
-<dt><span class="strong"><a href="./org/apache/commons/io/monitor/FileAlterationObserver.html#FileAlterationObserver(java.io.File, java.io.FileFilter)">FileAlterationObserver(File, FileFilter)</a></span> - Constructor for class org.apache.commons.io.monitor.<a href="./org/apache/commons/io/monitor/FileAlterationObserver.html" title="class in org.apache.commons.io.monitor">FileAlterationObserver</a></dt>
-<dd>
-<div class="block">Construct an observer for the specified directory and file filter.</div>
-</dd>
-<dt><span class="strong"><a href="./org/apache/commons/io/monitor/FileAlterationObserver.html#FileAlterationObserver(java.io.File, java.io.FileFilter, org.apache.commons.io.IOCase)">FileAlterationObserver(File, FileFilter, IOCase)</a></span> - Constructor for class org.apache.commons.io.monitor.<a href="./org/apache/commons/io/monitor/FileAlterationObserver.html" title="class in org.apache.commons.io.monitor">FileAlterationObserver</a></dt>
-<dd>
-<div class="block">Construct an observer for the specified directory, file filter and
- file comparator.</div>
-</dd>
-<dt><span class="strong"><a href="./org/apache/commons/io/monitor/FileAlterationObserver.html#FileAlterationObserver(org.apache.commons.io.monitor.FileEntry, java.io.FileFilter, org.apache.commons.io.IOCase)">FileAlterationObserver(FileEntry, FileFilter, IOCase)</a></span> - Constructor for class org.apache.commons.io.monitor.<a href="./org/apache/commons/io/monitor/FileAlterationObserver.html" title="class in org.apache.commons.io.monitor">FileAlterationObserver</a></dt>
-<dd>
-<div class="block">Construct an observer for the specified directory, file filter and
- file comparator.</div>
-</dd>
-<dt><a href="./org/apache/commons/io/FileCleaner.html" title="class in org.apache.commons.io"><span class="strong">FileCleaner</span></a> - Class in <a href="./org/apache/commons/io/package-summary.html">org.apache.commons.io</a></dt>
-<dd>
-<div class="block"><span class="strong">Deprecated.</span>
-<div class="block"><i>Use <a href="./org/apache/commons/io/FileCleaningTracker.html" title="class in org.apache.commons.io"><code>FileCleaningTracker</code></a></i></div>
-</div>
-</dd>
-<dt><span class="strong"><a href="./org/apache/commons/io/FileCleaner.html#FileCleaner()">FileCleaner()</a></span> - Constructor for class org.apache.commons.io.<a href="./org/apache/commons/io/FileCleaner.html" title="class in org.apache.commons.io">FileCleaner</a></dt>
-<dd>
-<div class="block"><span class="strong">Deprecated.</span></div>
-&nbsp;</dd>
-<dt><a href="./org/apache/commons/io/FileCleaningTracker.html" title="class in org.apache.commons.io"><span class="strong">FileCleaningTracker</span></a> - Class in <a href="./org/apache/commons/io/package-summary.html">org.apache.commons.io</a></dt>
-<dd>
-<div class="block">Keeps track of files awaiting deletion, and deletes them when an associated
- marker object is reclaimed by the garbage collector.</div>
-</dd>
-<dt><span class="strong"><a href="./org/apache/commons/io/FileCleaningTracker.html#FileCleaningTracker()">FileCleaningTracker()</a></span> - Constructor for class org.apache.commons.io.<a href="./org/apache/commons/io/FileCleaningTracker.html" title="class in org.apache.commons.io">FileCleaningTracker</a></dt>
-<dd>&nbsp;</dd>
-<dt><a href="./org/apache/commons/io/FileDeleteStrategy.html" title="class in org.apache.commons.io"><span class="strong">FileDeleteStrategy</span></a> - Class in <a href="./org/apache/commons/io/package-summary.html">org.apache.commons.io</a></dt>
-<dd>
-<div class="block">Strategy for deleting files.</div>
-</dd>
-<dt><span class="strong"><a href="./org/apache/commons/io/FileDeleteStrategy.html#FileDeleteStrategy(java.lang.String)">FileDeleteStrategy(String)</a></span> - Constructor for class org.apache.commons.io.<a href="./org/apache/commons/io/FileDeleteStrategy.html" title="class in org.apache.commons.io">FileDeleteStrategy</a></dt>
-<dd>
-<div class="block">Restricted constructor.</div>
-</dd>
-<dt><a href="./org/apache/commons/io/monitor/FileEntry.html" title="class in org.apache.commons.io.monitor"><span class="strong">FileEntry</span></a> - Class in <a href="./org/apache/commons/io/monitor/package-summary.html">org.apache.commons.io.monitor</a></dt>
-<dd>
-<div class="block"><a href="./org/apache/commons/io/monitor/FileEntry.html" title="class in org.apache.commons.io.monitor"><code>FileEntry</code></a> represents the state of a file or directory, capturing
- the following <a href="http://download.oracle.com/javase/6/docs/api/java/io/File.html?is-external=true" title="class or interface in java.io"><code>File</code></a> attributes at a point in time.</div>
-</dd>
-<dt><span class="strong"><a href="./org/apache/commons/io/monitor/FileEntry.html#FileEntry(java.io.File)">FileEntry(File)</a></span> - Constructor for class org.apache.commons.io.monitor.<a href="./org/apache/commons/io/monitor/FileEntry.html" title="class in org.apache.commons.io.monitor">FileEntry</a></dt>
-<dd>
-<div class="block">Construct a new monitor for a specified <a href="http://download.oracle.com/javase/6/docs/api/java/io/File.html?is-external=true" title="class or interface in java.io"><code>File</code></a>.</div>
-</dd>
-<dt><span class="strong"><a href="./org/apache/commons/io/monitor/FileEntry.html#FileEntry(org.apache.commons.io.monitor.FileEntry, java.io.File)">FileEntry(FileEntry, File)</a></span> - Constructor for class org.apache.commons.io.monitor.<a href="./org/apache/commons/io/monitor/FileEntry.html" title="class in org.apache.commons.io.monitor">FileEntry</a></dt>
-<dd>
-<div class="block">Construct a new monitor for a specified <a href="http://download.oracle.com/javase/6/docs/api/java/io/File.html?is-external=true" title="class or interface in java.io"><code>File</code></a>.</div>
-</dd>
-<dt><a href="./org/apache/commons/io/FileExistsException.html" title="class in org.apache.commons.io"><span class="strong">FileExistsException</span></a> - Exception in <a href="./org/apache/commons/io/package-summary.html">org.apache.commons.io</a></dt>
-<dd>
-<div class="block">Indicates that a file already exists.</div>
-</dd>
-<dt><span class="strong"><a href="./org/apache/commons/io/FileExistsException.html#FileExistsException()">FileExistsException()</a></span> - Constructor for exception org.apache.commons.io.<a href="./org/apache/commons/io/FileExistsException.html" title="class in org.apache.commons.io">FileExistsException</a></dt>
-<dd>
-<div class="block">Default Constructor.</div>
-</dd>
-<dt><span class="strong"><a href="./org/apache/commons/io/FileExistsException.html#FileExistsException(java.lang.String)">FileExistsException(String)</a></span> - Constructor for exception org.apache.commons.io.<a href="./org/apache/commons/io/FileExistsException.html" title="class in org.apache.commons.io">FileExistsException</a></dt>
-<dd>
-<div class="block">Construct an instance with the specified message.</div>
-</dd>
-<dt><span class="strong"><a href="./org/apache/commons/io/FileExistsException.html#FileExistsException(java.io.File)">FileExistsException(File)</a></span> - Constructor for exception org.apache.commons.io.<a href="./org/apache/commons/io/FileExistsException.html" title="class in org.apache.commons.io">FileExistsException</a></dt>
-<dd>
-<div class="block">Construct an instance with the specified file.</div>
-</dd>
-<dt><a href="./org/apache/commons/io/filefilter/FileFileFilter.html" title="class in org.apache.commons.io.filefilter"><span class="strong">FileFileFilter</span></a> - Class in <a href="./org/apache/commons/io/filefilter/package-summary.html">org.apache.commons.io.filefilter</a></dt>
-<dd>
-<div class="block">This filter accepts <code>File</code>s that are files (not directories).</div>
-</dd>
-<dt><span class="strong"><a href="./org/apache/commons/io/filefilter/FileFileFilter.html#FileFileFilter()">FileFileFilter()</a></span> - Constructor for class org.apache.commons.io.filefilter.<a href="./org/apache/commons/io/filefilter/FileFileFilter.html" title="class in org.apache.commons.io.filefilter">FileFileFilter</a></dt>
-<dd>
-<div class="block">Restrictive consructor.</div>
-</dd>
-<dt><span class="strong"><a href="./org/apache/commons/io/filefilter/FileFilterUtils.html#fileFileFilter()">fileFileFilter()</a></span> - Static method in class org.apache.commons.io.filefilter.<a href="./org/apache/commons/io/filefilter/FileFilterUtils.html" title="class in org.apache.commons.io.filefilter">FileFilterUtils</a></dt>
-<dd>
-<div class="block">Returns a filter that checks if the file is a file (and not a directory).</div>
-</dd>
-<dt><a href="./org/apache/commons/io/filefilter/FileFilterUtils.html" title="class in org.apache.commons.io.filefilter"><span class="strong">FileFilterUtils</span></a> - Class in <a href="./org/apache/commons/io/filefilter/package-summary.html">org.apache.commons.io.filefilter</a></dt>
-<dd>
-<div class="block">Useful utilities for working with file filters.</div>
-</dd>
-<dt><span class="strong"><a href="./org/apache/commons/io/filefilter/FileFilterUtils.html#FileFilterUtils()">FileFilterUtils()</a></span> - Constructor for class org.apache.commons.io.filefilter.<a href="./org/apache/commons/io/filefilter/FileFilterUtils.html" title="class in org.apache.commons.io.filefilter">FileFilterUtils</a></dt>
-<dd>
-<div class="block">FileFilterUtils is not normally instantiated.</div>
-</dd>
-<dt><a href="./org/apache/commons/io/FilenameUtils.html" title="class in org.apache.commons.io"><span class="strong">FilenameUtils</span></a> - Class in <a href="./org/apache/commons/io/package-summary.html">org.apache.commons.io</a></dt>
-<dd>
-<div class="block">General filename and filepath manipulation utilities.</div>
-</dd>
-<dt><span class="strong"><a href="./org/apache/commons/io/FilenameUtils.html#FilenameUtils()">FilenameUtils()</a></span> - Constructor for class org.apache.commons.io.<a href="./org/apache/commons/io/FilenameUtils.html" title="class in org.apache.commons.io">FilenameUtils</a></dt>
-<dd>
-<div class="block">Instances should NOT be constructed in standard programming.</div>
-</dd>
-<dt><span class="strong"><a href="./org/apache/commons/io/input/TailerListener.html#fileNotFound()">fileNotFound()</a></span> - Method in interface org.apache.commons.io.input.<a href="./org/apache/commons/io/input/TailerListener.html" title="interface in org.apache.commons.io.input">TailerListener</a></dt>
-<dd>
-<div class="block">This method is called if the tailed file is not found.</div>
-</dd>
-<dt><span class="strong"><a href="./org/apache/commons/io/input/TailerListenerAdapter.html#fileNotFound()">fileNotFound()</a></span> - Method in class org.apache.commons.io.input.<a href="./org/apache/commons/io/input/TailerListenerAdapter.html" title="class in org.apache.commons.io.input">TailerListenerAdapter</a></dt>
-<dd>
-<div class="block">This method is called if the tailed file is not found.</div>
-</dd>
-<dt><span class="strong"><a href="./org/apache/commons/io/input/TailerListener.html#fileRotated()">fileRotated()</a></span> - Method in interface org.apache.commons.io.input.<a href="./org/apache/commons/io/input/TailerListener.html" title="interface in org.apache.commons.io.input">TailerListener</a></dt>
-<dd>
-<div class="block">Called if a file rotation is detected.</div>
-</dd>
-<dt><span class="strong"><a href="./org/apache/commons/io/input/TailerListenerAdapter.html#fileRotated()">fileRotated()</a></span> - Method in class org.apache.commons.io.input.<a href="./org/apache/commons/io/input/TailerListenerAdapter.html" title="class in org.apache.commons.io.input">TailerListenerAdapter</a></dt>
-<dd>
-<div class="block">Called if a file rotation is detected.</div>
-</dd>
-<dt><a href="./org/apache/commons/io/FileSystemUtils.html" title="class in org.apache.commons.io"><span class="strong">FileSystemUtils</span></a> - Class in <a href="./org/apache/commons/io/package-summary.html">org.apache.commons.io</a></dt>
-<dd>
-<div class="block">General File System utilities.</div>
-</dd>
-<dt><span class="strong"><a href="./org/apache/commons/io/FileSystemUtils.html#FileSystemUtils()">FileSystemUtils()</a></span> - Constructor for class org.apache.commons.io.<a href="./org/apache/commons/io/FileSystemUtils.html" title="class in org.apache.commons.io">FileSystemUtils</a></dt>
-<dd>
-<div class="block">Instances should NOT be constructed in standard programming.</div>
-</dd>
-<dt><a href="./org/apache/commons/io/FileUtils.html" title="class in org.apache.commons.io"><span class="strong">FileUtils</span></a> - Class in <a href="./org/apache/commons/io/package-summary.html">org.apache.commons.io</a></dt>
-<dd>
-<div class="block">General file manipulation utilities.</div>
-</dd>
-<dt><span class="strong"><a href="./org/apache/commons/io/FileUtils.html#FileUtils()">FileUtils()</a></span> - Constructor for class org.apache.commons.io.<a href="./org/apache/commons/io/FileUtils.html" title="class in org.apache.commons.io">FileUtils</a></dt>
-<dd>
-<div class="block">Instances should NOT be constructed in standard programming.</div>
-</dd>
-<dt><a href="./org/apache/commons/io/output/FileWriterWithEncoding.html" title="class in org.apache.commons.io.output"><span class="strong">FileWriterWithEncoding</span></a> - Class in <a href="./org/apache/commons/io/output/package-summary.html">org.apache.commons.io.output</a></dt>
-<dd>
-<div class="block">Writer of files that allows the encoding to be set.</div>
-</dd>
-<dt><span class="strong"><a href="./org/apache/commons/io/output/FileWriterWithEncoding.html#FileWriterWithEncoding(java.lang.String, java.lang.String)">FileWriterWithEncoding(String, String)</a></span> - Constructor for class org.apache.commons.io.output.<a href="./org/apache/commons/io/output/FileWriterWithEncoding.html" title="class in org.apache.commons.io.output">FileWriterWithEncoding</a></dt>
-<dd>
-<div class="block">Constructs a FileWriterWithEncoding with a file encoding.</div>
-</dd>
-<dt><span class="strong"><a href="./org/apache/commons/io/output/FileWriterWithEncoding.html#FileWriterWithEncoding(java.lang.String, java.lang.String, boolean)">FileWriterWithEncoding(String, String, boolean)</a></span> - Constructor for class org.apache.commons.io.output.<a href="./org/apache/commons/io/output/FileWriterWithEncoding.html" title="class in org.apache.commons.io.output">FileWriterWithEncoding</a></dt>
-<dd>
-<div class="block">Constructs a FileWriterWithEncoding with a file encoding.</div>
-</dd>
-<dt><span class="strong"><a href="./org/apache/commons/io/output/FileWriterWithEncoding.html#FileWriterWithEncoding(java.lang.String, java.nio.charset.Charset)">FileWriterWithEncoding(String, Charset)</a></span> - Constructor for class org.apache.commons.io.output.<a href="./org/apache/commons/io/output/FileWriterWithEncoding.html" title="class in org.apache.commons.io.output">FileWriterWithEncoding</a></dt>
-<dd>
-<div class="block">Constructs a FileWriterWithEncoding with a file encoding.</div>
-</dd>
-<dt><span class="strong"><a href="./org/apache/commons/io/output/FileWriterWithEncoding.html#FileWriterWithEncoding(java.lang.String, java.nio.charset.Charset, boolean)">FileWriterWithEncoding(String, Charset, boolean)</a></span> - Constructor for class org.apache.commons.io.output.<a href="./org/apache/commons/io/output/FileWriterWithEncoding.html" title="class in org.apache.commons.io.output">FileWriterWithEncoding</a></dt>
-<dd>
-<div class="block">Constructs a FileWriterWithEncoding with a file encoding.</div>
-</dd>
-<dt><span class="strong"><a href="./org/apache/commons/io/output/FileWriterWithEncoding.html#FileWriterWithEncoding(java.lang.String, java.nio.charset.CharsetEncoder)">FileWriterWithEncoding(String, CharsetEncoder)</a></span> - Constructor for class org.apache.commons.io.output.<a href="./org/apache/commons/io/output/FileWriterWithEncoding.html" title="class in org.apache.commons.io.output">FileWriterWithEncoding</a></dt>
-<dd>
-<div class="block">Constructs a FileWriterWithEncoding with a file encoding.</div>
-</dd>
-<dt><span class="strong"><a href="./org/apache/commons/io/output/FileWriterWithEncoding.html#FileWriterWithEncoding(java.lang.String, java.nio.charset.CharsetEncoder, boolean)">FileWriterWithEncoding(String, CharsetEncoder, boolean)</a></span> - Constructor for class org.apache.commons.io.output.<a href="./org/apache/commons/io/output/FileWriterWithEncoding.html" title="class in org.apache.commons.io.output">FileWriterWithEncoding</a></dt>
-<dd>
-<div class="block">Constructs a FileWriterWithEncoding with a file encoding.</div>
-</dd>
-<dt><span class="strong"><a href="./org/apache/commons/io/output/FileWriterWithEncoding.html#FileWriterWithEncoding(java.io.File, java.lang.String)">FileWriterWithEncoding(File, String)</a></span> - Constructor for class org.apache.commons.io.output.<a href="./org/apache/commons/io/output/FileWriterWithEncoding.html" title="class in org.apache.commons.io.output">FileWriterWithEncoding</a></dt>
-<dd>
-<div class="block">Constructs a FileWriterWithEncoding with a file encoding.</div>
-</dd>
-<dt><span class="strong"><a href="./org/apache/commons/io/output/FileWriterWithEncoding.html#FileWriterWithEncoding(java.io.File, java.lang.String, boolean)">FileWriterWithEncoding(File, String, boolean)</a></span> - Constructor for class org.apache.commons.io.output.<a href="./org/apache/commons/io/output/FileWriterWithEncoding.html" title="class in org.apache.commons.io.output">FileWriterWithEncoding</a></dt>
-<dd>
-<div class="block">Constructs a FileWriterWithEncoding with a file encoding.</div>
-</dd>
-<dt><span class="strong"><a href="./org/apache/commons/io/output/FileWriterWithEncoding.html#FileWriterWithEncoding(java.io.File, java.nio.charset.Charset)">FileWriterWithEncoding(File, Charset)</a></span> - Constructor for class org.apache.commons.io.output.<a href="./org/apache/commons/io/output/FileWriterWithEncoding.html" title="class in org.apache.commons.io.output">FileWriterWithEncoding</a></dt>
-<dd>
-<div class="block">Constructs a FileWriterWithEncoding with a file encoding.</div>
-</dd>
-<dt><span class="strong"><a href="./org/apache/commons/io/output/FileWriterWithEncoding.html#FileWriterWithEncoding(java.io.File, java.nio.charset.Charset, boolean)">FileWriterWithEncoding(File, Charset, boolean)</a></span> - Constructor for class org.apache.commons.io.output.<a href="./org/apache/commons/io/output/FileWriterWithEncoding.html" title="class in org.apache.commons.io.output">FileWriterWithEncoding</a></dt>
-<dd>
-<div class="block">Constructs a FileWriterWithEncoding with a file encoding.</div>
-</dd>
-<dt><span class="strong"><a href="./org/apache/commons/io/output/FileWriterWithEncoding.html#FileWriterWithEncoding(java.io.File, java.nio.charset.CharsetEncoder)">FileWriterWithEncoding(File, CharsetEncoder)</a></span> - Constructor for class org.apache.commons.io.output.<a href="./org/apache/commons/io/output/FileWriterWithEncoding.html" title="class in org.apache.commons.io.output">FileWriterWithEncoding</a></dt>
-<dd>
-<div class="block">Constructs a FileWriterWithEncoding with a file encoding.</div>
-</dd>
-<dt><span class="strong"><a href="./org/apache/commons/io/output/FileWriterWithEncoding.html#FileWriterWithEncoding(java.io.File, java.nio.charset.CharsetEncoder, boolean)">FileWriterWithEncoding(File, CharsetEncoder, boolean)</a></span> - Constructor for class org.apache.commons.io.output.<a href="./org/apache/commons/io/output/FileWriterWithEncoding.html" title="class in org.apache.commons.io.output">FileWriterWithEncoding</a></dt>
-<dd>
-<div class="block">Constructs a FileWriterWithEncoding with a file encoding.</div>
-</dd>
-<dt><span class="strong"><a href="./org/apache/commons/io/filefilter/FileFilterUtils.html#filter(org.apache.commons.io.filefilter.IOFileFilter, java.io.File...)">filter(IOFileFilter, File...)</a></span> - Static method in class org.apache.commons.io.filefilter.<a href="./org/apache/commons/io/filefilter/FileFilterUtils.html" title="class in org.apache.commons.io.filefilter">FileFilterUtils</a></dt>
-<dd>
-<div class="block">
- Applies an <a href="./org/apache/commons/io/filefilter/IOFileFilter.html" title="interface in org.apache.commons.io.filefilter"><code>IOFileFilter</code></a> to the provided <a href="http://download.oracle.com/javase/6/docs/api/java/io/File.html?is-external=true" title="class or interface in java.io"><code>File</code></a>
- objects.</div>
-</dd>
-<dt><span class="strong"><a href="./org/apache/commons/io/filefilter/FileFilterUtils.html#filter(org.apache.commons.io.filefilter.IOFileFilter, java.lang.Iterable)">filter(IOFileFilter, Iterable&lt;File&gt;)</a></span> - Static method in class org.apache.commons.io.filefilter.<a href="./org/apache/commons/io/filefilter/FileFilterUtils.html" title="class in org.apache.commons.io.filefilter">FileFilterUtils</a></dt>
-<dd>
-<div class="block">
- Applies an <a href="./org/apache/commons/io/filefilter/IOFileFilter.html" title="interface in org.apache.commons.io.filefilter"><code>IOFileFilter</code></a> to the provided <a href="http://download.oracle.com/javase/6/docs/api/java/io/File.html?is-external=true" title="class or interface in java.io"><code>File</code></a>
- objects.</div>
-</dd>
-<dt><span class="strong"><a href="./org/apache/commons/io/DirectoryWalker.html#filterDirectoryContents(java.io.File, int, java.io.File[])">filterDirectoryContents(File, int, File[])</a></span> - Method in class org.apache.commons.io.<a href="./org/apache/commons/io/DirectoryWalker.html" title="class in org.apache.commons.io">DirectoryWalker</a></dt>
-<dd>
-<div class="block">Overridable callback method invoked with the contents of each directory.</div>
-</dd>
-<dt><span class="strong"><a href="./org/apache/commons/io/filefilter/FileFilterUtils.html#filterList(org.apache.commons.io.filefilter.IOFileFilter, java.lang.Iterable)">filterList(IOFileFilter, Iterable&lt;File&gt;)</a></span> - Static method in class org.apache.commons.io.filefilter.<a href="./org/apache/commons/io/filefilter/FileFilterUtils.html" title="class in org.apache.commons.io.filefilter">FileFilterUtils</a></dt>
-<dd>
-<div class="block">
- Applies an <a href="./org/apache/commons/io/filefilter/IOFileFilter.html" title="interface in org.apache.commons.io.filefilter"><code>IOFileFilter</code></a> to the provided <a href="http://download.oracle.com/javase/6/docs/api/java/io/File.html?is-external=true" title="class or interface in java.io"><code>File</code></a>
- objects.</div>
-</dd>
-<dt><span class="strong"><a href="./org/apache/commons/io/filefilter/FileFilterUtils.html#filterList(org.apache.commons.io.filefilter.IOFileFilter, java.io.File...)">filterList(IOFileFilter, File...)</a></span> - Static method in class org.apache.commons.io.filefilter.<a href="./org/apache/commons/io/filefilter/FileFilterUtils.html" title="class in org.apache.commons.io.filefilter">FileFilterUtils</a></dt>
-<dd>
-<div class="block">
- Applies an <a href="./org/apache/commons/io/filefilter/IOFileFilter.html" title="interface in org.apache.commons.io.filefilter"><code>IOFileFilter</code></a> to the provided <a href="http://download.oracle.com/javase/6/docs/api/java/io/File.html?is-external=true" title="class or interface in java.io"><code>File</code></a>
- objects.</div>
-</dd>
-<dt><span class="strong"><a href="./org/apache/commons/io/filefilter/FileFilterUtils.html#filterSet(org.apache.commons.io.filefilter.IOFileFilter, java.io.File...)">filterSet(IOFileFilter, File...)</a></span> - Static method in class org.apache.commons.io.filefilter.<a href="./org/apache/commons/io/filefilter/FileFilterUtils.html" title="class in org.apache.commons.io.filefilter">FileFilterUtils</a></dt>
-<dd>
-<div class="block">
- Applies an <a href="./org/apache/commons/io/filefilter/IOFileFilter.html" title="interface in org.apache.commons.io.filefilter"><code>IOFileFilter</code></a> to the provided <a href="http://download.oracle.com/javase/6/docs/api/java/io/File.html?is-external=true" title="class or interface in java.io"><code>File</code></a>
- objects.</div>
-</dd>
-<dt><span class="strong"><a href="./org/apache/commons/io/filefilter/FileFilterUtils.html#filterSet(org.apache.commons.io.filefilter.IOFileFilter, java.lang.Iterable)">filterSet(IOFileFilter, Iterable&lt;File&gt;)</a></span> - Static method in class org.apache.commons.io.filefilter.<a href="./org/apache/commons/io/filefilter/FileFilterUtils.html" title="class in org.apache.commons.io.filefilter">FileFilterUtils</a></dt>
-<dd>
-<div class="block">
- Applies an <a href="./org/apache/commons/io/filefilter/IOFileFilter.html" title="interface in org.apache.commons.io.filefilter"><code>IOFileFilter</code></a> to the provided <a href="http://download.oracle.com/javase/6/docs/api/java/io/File.html?is-external=true" title="class or interface in java.io"><code>File</code></a>
- objects.</div>
-</dd>
-<dt><span class="strong"><a href="./org/apache/commons/io/input/AutoCloseInputStream.html#finalize()">finalize()</a></span> - Method in class org.apache.commons.io.input.<a href="./org/apache/commons/io/input/AutoCloseInputStream.html" title="class in org.apache.commons.io.input">AutoCloseInputStream</a></dt>
-<dd>
-<div class="block">Ensures that the stream is closed before it gets garbage-collected.</div>
-</dd>
-<dt><span class="strong"><a href="./org/apache/commons/io/output/BrokenOutputStream.html#flush()">flush()</a></span> - Method in class org.apache.commons.io.output.<a href="./org/apache/commons/io/output/BrokenOutputStream.html" title="class in org.apache.commons.io.output">BrokenOutputStream</a></dt>
-<dd>
-<div class="block">Throws the configured exception.</div>
-</dd>
-<dt><span class="strong"><a href="./org/apache/commons/io/output/DemuxOutputStream.html#flush()">flush()</a></span> - Method in class org.apache.commons.io.output.<a href="./org/apache/commons/io/output/DemuxOutputStream.html" title="class in org.apache.commons.io.output">DemuxOutputStream</a></dt>
-<dd>
-<div class="block">Flushes stream associated with current thread.</div>
-</dd>
-<dt><span class="strong"><a href="./org/apache/commons/io/output/FileWriterWithEncoding.html#flush()">flush()</a></span> - Method in class org.apache.commons.io.output.<a href="./org/apache/commons/io/output/FileWriterWithEncoding.html" title="class in org.apache.commons.io.output">FileWriterWithEncoding</a></dt>
-<dd>
-<div class="block">Flush the stream.</div>
-</dd>
-<dt><span class="strong"><a href="./org/apache/commons/io/output/LockableFileWriter.html#flush()">flush()</a></span> - Method in class org.apache.commons.io.output.<a href="./org/apache/commons/io/output/LockableFileWriter.html" title="class in org.apache.commons.io.output">LockableFileWriter</a></dt>
-<dd>
-<div class="block">Flush the stream.</div>
-</dd>
-<dt><span class="strong"><a href="./org/apache/commons/io/output/NullWriter.html#flush()">flush()</a></span> - Method in class org.apache.commons.io.output.<a href="./org/apache/commons/io/output/NullWriter.html" title="class in org.apache.commons.io.output">NullWriter</a></dt>
-<dd>&nbsp;</dd>
-<dt><span class="strong"><a href="./org/apache/commons/io/output/ProxyOutputStream.html#flush()">flush()</a></span> - Method in class org.apache.commons.io.output.<a href="./org/apache/commons/io/output/ProxyOutputStream.html" title="class in org.apache.commons.io.output">ProxyOutputStream</a></dt>
-<dd>
-<div class="block">Invokes the delegate's <code>flush()</code> method.</div>
-</dd>
-<dt><span class="strong"><a href="./org/apache/commons/io/output/ProxyWriter.html#flush()">flush()</a></span> - Method in class org.apache.commons.io.output.<a href="./org/apache/commons/io/output/ProxyWriter.html" title="class in org.apache.commons.io.output">ProxyWriter</a></dt>
-<dd>
-<div class="block">Invokes the delegate's <code>flush()</code> method.</div>
-</dd>
-<dt><span class="strong"><a href="./org/apache/commons/io/output/StringBuilderWriter.html#flush()">flush()</a></span> - Method in class org.apache.commons.io.output.<a href="./org/apache/commons/io/output/StringBuilderWriter.html" title="class in org.apache.commons.io.output">StringBuilderWriter</a></dt>
-<dd>
-<div class="block">Flushing this writer has no effect.</div>
-</dd>
-<dt><span class="strong"><a href="./org/apache/commons/io/output/TeeOutputStream.html#flush()">flush()</a></span> - Method in class org.apache.commons.io.output.<a href="./org/apache/commons/io/output/TeeOutputStream.html" title="class in org.apache.commons.io.output">TeeOutputStream</a></dt>
-<dd>
-<div class="block">Flushes both streams.</div>
-</dd>
-<dt><span class="strong"><a href="./org/apache/commons/io/output/ThresholdingOutputStream.html#flush()">flush()</a></span> - Method in class org.apache.commons.io.output.<a href="./org/apache/commons/io/output/ThresholdingOutputStream.html" title="class in org.apache.commons.io.output">ThresholdingOutputStream</a></dt>
-<dd>
-<div class="block">Flushes this output stream and forces any buffered output bytes to be
- written out.</div>
-</dd>
-<dt><span class="strong"><a href="./org/apache/commons/io/output/WriterOutputStream.html#flush()">flush()</a></span> - Method in class org.apache.commons.io.output.<a href="./org/apache/commons/io/output/WriterOutputStream.html" title="class in org.apache.commons.io.output">WriterOutputStream</a></dt>
-<dd>
-<div class="block">Flush the stream.</div>
-</dd>
-<dt><span class="strong"><a href="./org/apache/commons/io/output/XmlStreamWriter.html#flush()">flush()</a></span> - Method in class org.apache.commons.io.output.<a href="./org/apache/commons/io/output/XmlStreamWriter.html" title="class in org.apache.commons.io.output">XmlStreamWriter</a></dt>
-<dd>
-<div class="block">Flush the underlying writer.</div>
-</dd>
-<dt><span class="strong"><a href="./org/apache/commons/io/FileDeleteStrategy.html#FORCE">FORCE</a></span> - Static variable in class org.apache.commons.io.<a href="./org/apache/commons/io/FileDeleteStrategy.html" title="class in org.apache.commons.io">FileDeleteStrategy</a></dt>
-<dd>
-<div class="block">The singleton instance for forced file deletion, which always deletes,
- even if the file represents a non-empty directory.</div>
-</dd>
-<dt><span class="strong"><a href="./org/apache/commons/io/FileUtils.html#forceDelete(java.io.File)">forceDelete(File)</a></span> - Static method in class org.apache.commons.io.<a href="./org/apache/commons/io/FileUtils.html" title="class in org.apache.commons.io">FileUtils</a></dt>
-<dd>
-<div class="block">Deletes a file.</div>
-</dd>
-<dt><span class="strong"><a href="./org/apache/commons/io/FileUtils.html#forceDeleteOnExit(java.io.File)">forceDeleteOnExit(File)</a></span> - Static method in class org.apache.commons.io.<a href="./org/apache/commons/io/FileUtils.html" title="class in org.apache.commons.io">FileUtils</a></dt>
-<dd>
-<div class="block">Schedules a file to be deleted when JVM exits.</div>
-</dd>
-<dt><span class="strong"><a href="./org/apache/commons/io/FileUtils.html#forceMkdir(java.io.File)">forceMkdir(File)</a></span> - Static method in class org.apache.commons.io.<a href="./org/apache/commons/io/FileUtils.html" title="class in org.apache.commons.io">FileUtils</a></dt>
-<dd>
-<div class="block">Makes a directory, including any necessary but nonexistent parent
- directories.</div>
-</dd>
-<dt><span class="strong"><a href="./org/apache/commons/io/FileUtils.html#forceMkdirParent(java.io.File)">forceMkdirParent(File)</a></span> - Static method in class org.apache.commons.io.<a href="./org/apache/commons/io/FileUtils.html" title="class in org.apache.commons.io">FileUtils</a></dt>
-<dd>
-<div class="block">Makes any necessary but nonexistent parent directories for a given File.</div>
-</dd>
-<dt><span class="strong"><a href="./org/apache/commons/io/IOCase.html#forName(java.lang.String)">forName(String)</a></span> - Static method in class org.apache.commons.io.<a href="./org/apache/commons/io/IOCase.html" title="class in org.apache.commons.io">IOCase</a></dt>
-<dd>
-<div class="block">Factory method to create an IOCase from a name.</div>
-</dd>
-<dt><span class="strong"><a href="./org/apache/commons/io/FileSystemUtils.html#freeSpace(java.lang.String)">freeSpace(String)</a></span> - Static method in class org.apache.commons.io.<a href="./org/apache/commons/io/FileSystemUtils.html" title="class in org.apache.commons.io">FileSystemUtils</a></dt>
-<dd>
-<div class="block"><span class="strong">Deprecated.</span>
-<div class="block"><i>Use freeSpaceKb(String)
-  Deprecated from 1.3, may be removed in 2.0</i></div>
-</div>
-</dd>
-<dt><span class="strong"><a href="./org/apache/commons/io/FileSystemUtils.html#freeSpaceKb(java.lang.String)">freeSpaceKb(String)</a></span> - Static method in class org.apache.commons.io.<a href="./org/apache/commons/io/FileSystemUtils.html" title="class in org.apache.commons.io">FileSystemUtils</a></dt>
-<dd>
-<div class="block">Returns the free space on a drive or volume in kilobytes by invoking
- the command line.</div>
-</dd>
-<dt><span class="strong"><a href="./org/apache/commons/io/FileSystemUtils.html#freeSpaceKb(java.lang.String, long)">freeSpaceKb(String, long)</a></span> - Static method in class org.apache.commons.io.<a href="./org/apache/commons/io/FileSystemUtils.html" title="class in org.apache.commons.io">FileSystemUtils</a></dt>
-<dd>
-<div class="block">Returns the free space on a drive or volume in kilobytes by invoking
- the command line.</div>
-</dd>
-<dt><span class="strong"><a href="./org/apache/commons/io/FileSystemUtils.html#freeSpaceKb()">freeSpaceKb()</a></span> - Static method in class org.apache.commons.io.<a href="./org/apache/commons/io/FileSystemUtils.html" title="class in org.apache.commons.io">FileSystemUtils</a></dt>
-<dd>
-<div class="block">Returns the disk size of the volume which holds the working directory.</div>
-</dd>
-<dt><span class="strong"><a href="./org/apache/commons/io/FileSystemUtils.html#freeSpaceKb(long)">freeSpaceKb(long)</a></span> - Static method in class org.apache.commons.io.<a href="./org/apache/commons/io/FileSystemUtils.html" title="class in org.apache.commons.io">FileSystemUtils</a></dt>
-<dd>
-<div class="block">Returns the disk size of the volume which holds the working directory.</div>
-</dd>
-</dl>
-<a name="_G_">
-<!--   -->
-</a>
-<h2 class="title">G</h2>
-<dl>
-<dt><span class="strong"><a href="./org/apache/commons/io/ByteOrderMark.html#get(int)">get(int)</a></span> - Method in class org.apache.commons.io.<a href="./org/apache/commons/io/ByteOrderMark.html" title="class in org.apache.commons.io">ByteOrderMark</a></dt>
-<dd>
-<div class="block">The byte at the specified position.</div>
-</dd>
-<dt><span class="strong"><a href="./org/apache/commons/io/FilenameUtils.html#getBaseName(java.lang.String)">getBaseName(String)</a></span> - Static method in class org.apache.commons.io.<a href="./org/apache/commons/io/FilenameUtils.html" title="class in org.apache.commons.io">FilenameUtils</a></dt>
-<dd>
-<div class="block">Gets the base name, minus the full path and extension, from a full filename.</div>
-</dd>
-<dt><span class="strong"><a href="./org/apache/commons/io/input/BOMInputStream.html#getBOM()">getBOM()</a></span> - Method in class org.apache.commons.io.input.<a href="./org/apache/commons/io/input/BOMInputStream.html" title="class in org.apache.commons.io.input">BOMInputStream</a></dt>
-<dd>
-<div class="block">Return the BOM (Byte Order Mark).</div>
-</dd>
-<dt><span class="strong"><a href="./org/apache/commons/io/input/BOMInputStream.html#getBOMCharsetName()">getBOMCharsetName()</a></span> - Method in class org.apache.commons.io.input.<a href="./org/apache/commons/io/input/BOMInputStream.html" title="class in org.apache.commons.io.input">BOMInputStream</a></dt>
-<dd>
-<div class="block">Return the BOM charset Name - <a href="./org/apache/commons/io/ByteOrderMark.html#getCharsetName()"><code>ByteOrderMark.getCharsetName()</code></a>.</div>
-</dd>
-<dt><span class="strong"><a href="./org/apache/commons/io/input/XmlStreamReaderException.html#getBomEncoding()">getBomEncoding()</a></span> - Method in exception org.apache.commons.io.input.<a href="./org/apache/commons/io/input/XmlStreamReaderException.html" title="class in org.apache.commons.io.input">XmlStreamReaderException</a></dt>
-<dd>
-<div class="block">Returns the BOM encoding found in the InputStream.</div>
-</dd>
-<dt><span class="strong"><a href="./org/apache/commons/io/output/StringBuilderWriter.html#getBuilder()">getBuilder()</a></span> - Method in class org.apache.commons.io.output.<a href="./org/apache/commons/io/output/StringBuilderWriter.html" title="class in org.apache.commons.io.output">StringBuilderWriter</a></dt>
-<dd>
-<div class="block">Return the underlying builder.</div>
-</dd>
-<dt><span class="strong"><a href="./org/apache/commons/io/input/CountingInputStream.html#getByteCount()">getByteCount()</a></span> - Method in class org.apache.commons.io.input.<a href="./org/apache/commons/io/input/CountingInputStream.html" title="class in org.apache.commons.io.input">CountingInputStream</a></dt>
-<dd>
-<div class="block">The number of bytes that have passed through this stream.</div>
-</dd>
-<dt><span class="strong"><a href="./org/apache/commons/io/output/CountingOutputStream.html#getByteCount()">getByteCount()</a></span> - Method in class org.apache.commons.io.output.<a href="./org/apache/commons/io/output/CountingOutputStream.html" title="class in org.apache.commons.io.output">CountingOutputStream</a></dt>
-<dd>
-<div class="block">The number of bytes that have passed through this stream.</div>
-</dd>
-<dt><span class="strong"><a href="./org/apache/commons/io/output/ThresholdingOutputStream.html#getByteCount()">getByteCount()</a></span> - Method in class org.apache.commons.io.output.<a href="./org/apache/commons/io/output/ThresholdingOutputStream.html" title="class in org.apache.commons.io.output">ThresholdingOutputStream</a></dt>
-<dd>
-<div class="block">Returns the number of bytes that have been written to this output stream.</div>
-</dd>
-<dt><span class="strong"><a href="./org/apache/commons/io/ByteOrderMark.html#getBytes()">getBytes()</a></span> - Method in class org.apache.commons.io.<a href="./org/apache/commons/io/ByteOrderMark.html" title="class in org.apache.commons.io">ByteOrderMark</a></dt>
-<dd>
-<div class="block">Return a copy of the BOM's bytes.</div>
-</dd>
-<dt><span class="strong"><a href="./org/apache/commons/io/TaggedIOException.html#getCause()">getCause()</a></span> - Method in exception org.apache.commons.io.<a href="./org/apache/commons/io/TaggedIOException.html" title="class in org.apache.commons.io">TaggedIOException</a></dt>
-<dd>
-<div class="block">Returns the wrapped exception.</div>
-</dd>
-<dt><span class="strong"><a href="./org/apache/commons/io/ByteOrderMark.html#getCharsetName()">getCharsetName()</a></span> - Method in class org.apache.commons.io.<a href="./org/apache/commons/io/ByteOrderMark.html" title="class in org.apache.commons.io">ByteOrderMark</a></dt>
-<dd>
-<div class="block">Return the name of the <a href="http://download.oracle.com/javase/6/docs/api/java/nio/charset/Charset.html?is-external=true" title="class or interface in java.nio.charset"><code>Charset</code></a> the BOM represents.</div>
-</dd>
-<dt><span class="strong"><a href="./org/apache/commons/io/monitor/FileEntry.html#getChildren()">getChildren()</a></span> - Method in class org.apache.commons.io.monitor.<a href="./org/apache/commons/io/monitor/FileEntry.html" title="class in org.apache.commons.io.monitor">FileEntry</a></dt>
-<dd>
-<div class="block">Return the directory's files.</div>
-</dd>
-<dt><span class="strong"><a href="./org/apache/commons/io/input/XmlStreamReaderException.html#getContentTypeEncoding()">getContentTypeEncoding()</a></span> - Method in exception org.apache.commons.io.input.<a href="./org/apache/commons/io/input/XmlStreamReaderException.html" title="class in org.apache.commons.io.input">XmlStreamReaderException</a></dt>
-<dd>
-<div class="block">Returns the encoding in the content-type used to attempt determining the
- encoding.</div>
-</dd>
-<dt><span class="strong"><a href="./org/apache/commons/io/input/XmlStreamReaderException.html#getContentTypeMime()">getContentTypeMime()</a></span> - Method in exception org.apache.commons.io.input.<a href="./org/apache/commons/io/input/XmlStreamReaderException.html" title="class in org.apache.commons.io.input">XmlStreamReaderException</a></dt>
-<dd>
-<div class="block">Returns the MIME type in the content-type used to attempt determining the
- encoding.</div>
-</dd>
-<dt><span class="strong"><a href="./org/apache/commons/io/input/CountingInputStream.html#getCount()">getCount()</a></span> - Method in class org.apache.commons.io.input.<a href="./org/apache/commons/io/input/CountingInputStream.html" title="class in org.apache.commons.io.input">CountingInputStream</a></dt>
-<dd>
-<div class="block">The number of bytes that have passed through this stream.</div>
-</dd>
-<dt><span class="strong"><a href="./org/apache/commons/io/output/CountingOutputStream.html#getCount()">getCount()</a></span> - Method in class org.apache.commons.io.output.<a href="./org/apache/commons/io/output/CountingOutputStream.html" title="class in org.apache.commons.io.output">CountingOutputStream</a></dt>
-<dd>
-<div class="block">The number of bytes that have passed through this stream.</div>
-</dd>
-<dt><span class="strong"><a href="./org/apache/commons/io/output/DeferredFileOutputStream.html#getData()">getData()</a></span> - Method in class org.apache.commons.io.output.<a href="./org/apache/commons/io/output/DeferredFileOutputStream.html" title="class in org.apache.commons.io.output">DeferredFileOutputStream</a></dt>
-<dd>
-<div class="block">Returns the data for this output stream as an array of bytes, assuming
- that the data has been retained in memory.</div>
-</dd>
-<dt><span class="strong"><a href="./org/apache/commons/io/input/XmlStreamReader.html#getDefaultEncoding()">getDefaultEncoding()</a></span> - Method in class org.apache.commons.io.input.<a href="./org/apache/commons/io/input/XmlStreamReader.html" title="class in org.apache.commons.io.input">XmlStreamReader</a></dt>
-<dd>
-<div class="block">Returns the default encoding to use if none is set in HTTP content-type,
- XML prolog and the rules based on content-type are not adequate.</div>
-</dd>
-<dt><span class="strong"><a href="./org/apache/commons/io/output/XmlStreamWriter.html#getDefaultEncoding()">getDefaultEncoding()</a></span> - Method in class org.apache.commons.io.output.<a href="./org/apache/commons/io/output/XmlStreamWriter.html" title="class in org.apache.commons.io.output">XmlStreamWriter</a></dt>
-<dd>
-<div class="block">Return the default encoding.</div>
-</dd>
-<dt><span class="strong"><a href="./org/apache/commons/io/input/Tailer.html#getDelay()">getDelay()</a></span> - Method in class org.apache.commons.io.input.<a href="./org/apache/commons/io/input/Tailer.html" title="class in org.apache.commons.io.input">Tailer</a></dt>
-<dd>
-<div class="block">Return the delay in milliseconds.</div>
-</dd>
-<dt><span class="strong"><a href="./org/apache/commons/io/FileCleaningTracker.html#getDeleteFailures()">getDeleteFailures()</a></span> - Method in class org.apache.commons.io.<a href="./org/apache/commons/io/FileCleaningTracker.html" title="class in org.apache.commons.io">FileCleaningTracker</a></dt>
-<dd>
-<div class="block">Return the file paths that failed to delete.</div>
-</dd>
-<dt><span class="strong"><a href="./org/apache/commons/io/DirectoryWalker.CancelException.html#getDepth()">getDepth()</a></span> - Method in exception org.apache.commons.io.<a href="./org/apache/commons/io/DirectoryWalker.CancelException.html" title="class in org.apache.commons.io">DirectoryWalker.CancelException</a></dt>
-<dd>
-<div class="block">Return the depth when the operation was cancelled.</div>
-</dd>
-<dt><span class="strong"><a href="./org/apache/commons/io/monitor/FileAlterationObserver.html#getDirectory()">getDirectory()</a></span> - Method in class org.apache.commons.io.monitor.<a href="./org/apache/commons/io/monitor/FileAlterationObserver.html" title="class in org.apache.commons.io.monitor">FileAlterationObserver</a></dt>
-<dd>
-<div class="block">Return the directory being observed.</div>
-</dd>
-<dt><span class="strong"><a href="./org/apache/commons/io/input/XmlStreamReader.html#getEncoding()">getEncoding()</a></span> - Method in class org.apache.commons.io.input.<a href="./org/apache/commons/io/input/XmlStreamReader.html" title="class in org.apache.commons.io.input">XmlStreamReader</a></dt>
-<dd>
-<div class="block">Returns the charset encoding of the XmlStreamReader.</div>
-</dd>
-<dt><span class="strong"><a href="./org/apache/commons/io/output/XmlStreamWriter.html#getEncoding()">getEncoding()</a></span> - Method in class org.apache.commons.io.output.<a href="./org/apache/commons/io/output/XmlStreamWriter.html" title="class in org.apache.commons.io.output">XmlStreamWriter</a></dt>
-<dd>
-<div class="block">Return the detected encoding.</div>
-</dd>
-<dt><span class="strong"><a href="./org/apache/commons/io/FilenameUtils.html#getExtension(java.lang.String)">getExtension(String)</a></span> - Static method in class org.apache.commons.io.<a href="./org/apache/commons/io/FilenameUtils.html" title="class in org.apache.commons.io">FilenameUtils</a></dt>
-<dd>
-<div class="block">Gets the extension of a filename.</div>
-</dd>
-<dt><span class="strong"><a href="./org/apache/commons/io/DirectoryWalker.CancelException.html#getFile()">getFile()</a></span> - Method in exception org.apache.commons.io.<a href="./org/apache/commons/io/DirectoryWalker.CancelException.html" title="class in org.apache.commons.io">DirectoryWalker.CancelException</a></dt>
-<dd>
-<div class="block">Return the file when the operation was cancelled.</div>
-</dd>
-<dt><span class="strong"><a href="./org/apache/commons/io/FileUtils.html#getFile(java.io.File, java.lang.String...)">getFile(File, String...)</a></span> - Static method in class org.apache.commons.io.<a href="./org/apache/commons/io/FileUtils.html" title="class in org.apache.commons.io">FileUtils</a></dt>
-<dd>
-<div class="block">Construct a file from the set of name elements.</div>
-</dd>
-<dt><span class="strong"><a href="./org/apache/commons/io/FileUtils.html#getFile(java.lang.String...)">getFile(String...)</a></span> - Static method in class org.apache.commons.io.<a href="./org/apache/commons/io/FileUtils.html" title="class in org.apache.commons.io">FileUtils</a></dt>
-<dd>
-<div class="block">Construct a file from the set of name elements.</div>
-</dd>
-<dt><span class="strong"><a href="./org/apache/commons/io/input/Tailer.html#getFile()">getFile()</a></span> - Method in class org.apache.commons.io.input.<a href="./org/apache/commons/io/input/Tailer.html" title="class in org.apache.commons.io.input">Tailer</a></dt>
-<dd>
-<div class="block">Return the file.</div>
-</dd>
-<dt><span class="strong"><a href="./org/apache/commons/io/monitor/FileEntry.html#getFile()">getFile()</a></span> - Method in class org.apache.commons.io.monitor.<a href="./org/apache/commons/io/monitor/FileEntry.html" title="class in org.apache.commons.io.monitor">FileEntry</a></dt>
-<dd>
-<div class="block">Return the file being monitored.</div>
-</dd>
-<dt><span class="strong"><a href="./org/apache/commons/io/output/DeferredFileOutputStream.html#getFile()">getFile()</a></span> - Method in class org.apache.commons.io.output.<a href="./org/apache/commons/io/output/DeferredFileOutputStream.html" title="class in org.apache.commons.io.output">DeferredFileOutputStream</a></dt>
-<dd>
-<div class="block">Returns either the output file specified in the constructor or
- the temporary file created or null.</div>
-</dd>
-<dt><span class="strong"><a href="./org/apache/commons/io/monitor/FileAlterationObserver.html#getFileFilter()">getFileFilter()</a></span> - Method in class org.apache.commons.io.monitor.<a href="./org/apache/commons/io/monitor/FileAlterationObserver.html" title="class in org.apache.commons.io.monitor">FileAlterationObserver</a></dt>
-<dd>
-<div class="block">Return the fileFilter.</div>
-</dd>
-<dt><span class="strong"><a href="./org/apache/commons/io/filefilter/AndFileFilter.html#getFileFilters()">getFileFilters()</a></span> - Method in class org.apache.commons.io.filefilter.<a href="./org/apache/commons/io/filefilter/AndFileFilter.html" title="class in org.apache.commons.io.filefilter">AndFileFilter</a></dt>
-<dd>
-<div class="block">Returns this conditional file filter's list of file filters.</div>
-</dd>
-<dt><span class="strong"><a href="./org/apache/commons/io/filefilter/ConditionalFileFilter.html#getFileFilters()">getFileFilters()</a></span> - Method in interface org.apache.commons.io.filefilter.<a href="./org/apache/commons/io/filefilter/ConditionalFileFilter.html" title="interface in org.apache.commons.io.filefilter">ConditionalFileFilter</a></dt>
-<dd>
-<div class="block">Returns this conditional file filter's list of file filters.</div>
-</dd>
-<dt><span class="strong"><a href="./org/apache/commons/io/filefilter/OrFileFilter.html#getFileFilters()">getFileFilters()</a></span> - Method in class org.apache.commons.io.filefilter.<a href="./org/apache/commons/io/filefilter/OrFileFilter.html" title="class in org.apache.commons.io.filefilter">OrFileFilter</a></dt>
-<dd>
-<div class="block">Returns this conditional file filter's list of file filters.</div>
-</dd>
-<dt><span class="strong"><a href="./org/apache/commons/io/FilenameUtils.html#getFullPath(java.lang.String)">getFullPath(String)</a></span> - Static method in class org.apache.commons.io.<a href="./org/apache/commons/io/FilenameUtils.html" title="class in org.apache.commons.io">FilenameUtils</a></dt>
-<dd>
-<div class="block">Gets the full path from a full filename, which is the prefix + path.</div>
-</dd>
-<dt><span class="strong"><a href="./org/apache/commons/io/FilenameUtils.html#getFullPathNoEndSeparator(java.lang.String)">getFullPathNoEndSeparator(String)</a></span> - Static method in class org.apache.commons.io.<a href="./org/apache/commons/io/FilenameUtils.html" title="class in org.apache.commons.io">FilenameUtils</a></dt>
-<dd>
-<div class="block">Gets the full path from a full filename, which is the prefix + path,
- and also excluding the final directory separator.</div>
-</dd>
-<dt><span class="strong"><a href="./org/apache/commons/io/FileCleaner.html#getInstance()">getInstance()</a></span> - Static method in class org.apache.commons.io.<a href="./org/apache/commons/io/FileCleaner.html" title="class in org.apache.commons.io">FileCleaner</a></dt>
-<dd>
-<div class="block"><span class="strong">Deprecated.</span></div>
-<div class="block">Returns the singleton instance, which is used by the deprecated, static methods.</div>
-</dd>
-<dt><span class="strong"><a href="./org/apache/commons/io/monitor/FileAlterationMonitor.html#getInterval()">getInterval()</a></span> - Method in class org.apache.commons.io.monitor.<a href="./org/apache/commons/io/monitor/FileAlterationMonitor.html" title="class in org.apache.commons.io.monitor">FileAlterationMonitor</a></dt>
-<dd>
-<div class="block">Return the interval.</div>
-</dd>
-<dt><span class="strong"><a href="./org/apache/commons/io/monitor/FileEntry.html#getLastModified()">getLastModified()</a></span> - Method in class org.apache.commons.io.monitor.<a href="./org/apache/commons/io/monitor/FileEntry.html" title="class in org.apache.commons.io.monitor">FileEntry</a></dt>
-<dd>
-<div class="block">Return the last modified time from the last time it
- was checked.</div>
-</dd>
-<dt><span class="strong"><a href="./org/apache/commons/io/monitor/FileEntry.html#getLength()">getLength()</a></span> - Method in class org.apache.commons.io.monitor.<a href="./org/apache/commons/io/monitor/FileEntry.html" title="class in org.apache.commons.io.monitor">FileEntry</a></dt>
-<dd>
-<div class="block">Return the length.</div>
-</dd>
-<dt><span class="strong"><a href="./org/apache/commons/io/monitor/FileEntry.html#getLevel()">getLevel()</a></span> - Method in class org.apache.commons.io.monitor.<a href="./org/apache/commons/io/monitor/FileEntry.html" title="class in org.apache.commons.io.monitor">FileEntry</a></dt>
-<dd>
-<div class="block">Return the level</div>
-</dd>
-<dt><span class="strong"><a href="./org/apache/commons/io/monitor/FileAlterationObserver.html#getListeners()">getListeners()</a></span> - Method in class org.apache.commons.io.monitor.<a href="./org/apache/commons/io/monitor/FileAlterationObserver.html" title="class in org.apache.commons.io.monitor">FileAlterationObserver</a></dt>
-<dd>
-<div class="block">Returns the set of registered file system listeners.</div>
-</dd>
-<dt><span class="strong"><a href="./org/apache/commons/io/FilenameUtils.html#getName(java.lang.String)">getName(String)</a></span> - Static method in class org.apache.commons.io.<a href="./org/apache/commons/io/FilenameUtils.html" title="class in org.apache.commons.io">FilenameUtils</a></dt>
-<dd>
-<div class="block">Gets the name minus the path from a full filename.</div>
-</dd>
-<dt><span class="strong"><a href="./org/apache/commons/io/IOCase.html#getName()">getName()</a></span> - Method in class org.apache.commons.io.<a href="./org/apache/commons/io/IOCase.html" title="class in org.apache.commons.io">IOCase</a></dt>
-<dd>
-<div class="block">Gets the name of the constant.</div>
-</dd>
-<dt><span class="strong"><a href="./org/apache/commons/io/monitor/FileEntry.html#getName()">getName()</a></span> - Method in class org.apache.commons.io.monitor.<a href="./org/apache/commons/io/monitor/FileEntry.html" title="class in org.apache.commons.io.monitor">FileEntry</a></dt>
-<dd>
-<div class="block">Return the file name.</div>
-</dd>
-<dt><span class="strong"><a href="./org/apache/commons/io/monitor/FileAlterationMonitor.html#getObservers()">getObservers()</a></span> - Method in class org.apache.commons.io.monitor.<a href="./org/apache/commons/io/monitor/FileAlterationMonitor.html" title="class in org.apache.commons.io.monitor">FileAlterationMonitor</a></dt>
-<dd>
-<div class="block">Returns the set of <a href="./org/apache/commons/io/monitor/FileAlterationObserver.html" title="class in org.apache.commons.io.monitor"><code>FileAlterationObserver</code></a> registered with
- this monitor.</div>
-</dd>
-<dt><span class="strong"><a href="./org/apache/commons/io/monitor/FileEntry.html#getParent()">getParent()</a></span> - Method in class org.apache.commons.io.monitor.<a href="./org/apache/commons/io/monitor/FileEntry.html" title="class in org.apache.commons.io.monitor">FileEntry</a></dt>
-<dd>
-<div class="block">Return the parent entry.</div>
-</dd>
-<dt><span class="strong"><a href="./org/apache/commons/io/FilenameUtils.html#getPath(java.lang.String)">getPath(String)</a></span> - Static method in class org.apache.commons.io.<a href="./org/apache/commons/io/FilenameUtils.html" title="class in org.apache.commons.io">FilenameUtils</a></dt>
-<dd>
-<div class="block">Gets the path from a full filename, which excludes the prefix.</div>
-</dd>
-<dt><span class="strong"><a href="./org/apache/commons/io/FilenameUtils.html#getPathNoEndSeparator(java.lang.String)">getPathNoEndSeparator(String)</a></span> - Static method in class org.apache.commons.io.<a href="./org/apache/commons/io/FilenameUtils.html" title="class in org.apache.commons.io">FilenameUtils</a></dt>
-<dd>
-<div class="block">Gets the path from a full filename, which excludes the prefix, and
- also excluding the final directory separator.</div>
-</dd>
-<dt><span class="strong"><a href="./org/apache/commons/io/input/NullInputStream.html#getPosition()">getPosition()</a></span> - Method in class org.apache.commons.io.input.<a href="./org/apache/commons/io/input/NullInputStream.html" title="class in org.apache.commons.io.input">NullInputStream</a></dt>
-<dd>
-<div class="block">Return the current position.</div>
-</dd>
-<dt><span class="strong"><a href="./org/apache/commons/io/input/NullReader.html#getPosition()">getPosition()</a></span> - Method in class org.apache.commons.io.input.<a href="./org/apache/commons/io/input/NullReader.html" title="class in org.apache.commons.io.input">NullReader</a></dt>
-<dd>
-<div class="block">Return the current position.</div>
-</dd>
-<dt><span class="strong"><a href="./org/apache/commons/io/FilenameUtils.html#getPrefix(java.lang.String)">getPrefix(String)</a></span> - Static method in class org.apache.commons.io.<a href="./org/apache/commons/io/FilenameUtils.html" title="class in org.apache.commons.io">FilenameUtils</a></dt>
-<dd>
-<div class="block">Gets the prefix from a full filename, such as <code>C:/</code>
- or <code>~/</code>.</div>
-</dd>
-<dt><span class="strong"><a href="./org/apache/commons/io/FilenameUtils.html#getPrefixLength(java.lang.String)">getPrefixLength(String)</a></span> - Static method in class org.apache.commons.io.<a href="./org/apache/commons/io/FilenameUtils.html" title="class in org.apache.commons.io">FilenameUtils</a></dt>
-<dd>
-<div class="block">Returns the length of the filename prefix, such as <code>C:/</code> or <code>~/</code>.</div>
-</dd>
-<dt><span class="strong"><a href="./org/apache/commons/io/input/Tailer.html#getRun()">getRun()</a></span> - Method in class org.apache.commons.io.input.<a href="./org/apache/commons/io/input/Tailer.html" title="class in org.apache.commons.io.input">Tailer</a></dt>
-<dd>
-<div class="block">Gets whether to keep on running.</div>
-</dd>
-<dt><span class="strong"><a href="./org/apache/commons/io/input/NullInputStream.html#getSize()">getSize()</a></span> - Method in class org.apache.commons.io.input.<a href="./org/apache/commons/io/input/NullInputStream.html" title="class in org.apache.commons.io.input">NullInputStream</a></dt>
-<dd>
-<div class="block">Return the size this <a href="http://download.oracle.com/javase/6/docs/api/java/io/InputStream.html?is-external=true" title="class or interface in java.io"><code>InputStream</code></a> emulates.</div>
-</dd>
-<dt><span class="strong"><a href="./org/apache/commons/io/input/NullReader.html#getSize()">getSize()</a></span> - Method in class org.apache.commons.io.input.<a href="./org/apache/commons/io/input/NullReader.html" title="class in org.apache.commons.io.input">NullReader</a></dt>
-<dd>
-<div class="block">Return the size this <a href="http://download.oracle.com/javase/6/docs/api/java/io/Reader.html?is-external=true" title="class or interface in java.io"><code>Reader</code></a> emulates.</div>
-</dd>
-<dt><span class="strong"><a href="./org/apache/commons/io/output/DeferredFileOutputStream.html#getStream()">getStream()</a></span> - Method in class org.apache.commons.io.output.<a href="./org/apache/commons/io/output/DeferredFileOutputStream.html" title="class in org.apache.commons.io.output">DeferredFileOutputStream</a></dt>
-<dd>
-<div class="block">Returns the current output stream.</div>
-</dd>
-<dt><span class="strong"><a href="./org/apache/commons/io/output/ThresholdingOutputStream.html#getStream()">getStream()</a></span> - Method in class org.apache.commons.io.output.<a href="./org/apache/commons/io/output/ThresholdingOutputStream.html" title="class in org.apache.commons.io.output">ThresholdingOutputStream</a></dt>
-<dd>
-<div class="block">Returns the underlying output stream, to which the corresponding
- <code>OutputStream</code> methods in this class will ultimately delegate.</div>
-</dd>
-<dt><span class="strong"><a href="./org/apache/commons/io/TaggedIOException.html#getTag()">getTag()</a></span> - Method in exception org.apache.commons.io.<a href="./org/apache/commons/io/TaggedIOException.html" title="class in org.apache.commons.io">TaggedIOException</a></dt>
-<dd>
-<div class="block">Returns the serializable tag object.</div>
-</dd>
-<dt><span class="strong"><a href="./org/apache/commons/io/FileUtils.html#getTempDirectory()">getTempDirectory()</a></span> - Static method in class org.apache.commons.io.<a href="./org/apache/commons/io/FileUtils.html" title="class in org.apache.commons.io">FileUtils</a></dt>
-<dd>
-<div class="block">Returns a <a href="http://download.oracle.com/javase/6/docs/api/java/io/File.html?is-external=true" title="class or interface in java.io"><code>File</code></a> representing the system temporary directory.</div>
-</dd>
-<dt><span class="strong"><a href="./org/apache/commons/io/FileUtils.html#getTempDirectoryPath()">getTempDirectoryPath()</a></span> - Static method in class org.apache.commons.io.<a href="./org/apache/commons/io/FileUtils.html" title="class in org.apache.commons.io">FileUtils</a></dt>
-<dd>
-<div class="block">Returns the path to the system temporary directory.</div>
-</dd>
-<dt><span class="strong"><a href="./org/apache/commons/io/output/ThresholdingOutputStream.html#getThreshold()">getThreshold()</a></span> - Method in class org.apache.commons.io.output.<a href="./org/apache/commons/io/output/ThresholdingOutputStream.html" title="class in org.apache.commons.io.output">ThresholdingOutputStream</a></dt>
-<dd>
-<div class="block">Returns the threshold, in bytes, at which an event will be triggered.</div>
-</dd>
-<dt><span class="strong"><a href="./org/apache/commons/io/FileCleaner.html#getTrackCount()">getTrackCount()</a></span> - Static method in class org.apache.commons.io.<a href="./org/apache/commons/io/FileCleaner.html" title="class in org.apache.commons.io">FileCleaner</a></dt>
-<dd>
-<div class="block"><span class="strong">Deprecated.</span>
-<div class="block"><i>Use <a href="./org/apache/commons/io/FileCleaningTracker.html#getTrackCount()"><code>FileCleaningTracker.getTrackCount()</code></a>.</i></div>
-</div>
-</dd>
-<dt><span class="strong"><a href="./org/apache/commons/io/FileCleaningTracker.html#getTrackCount()">getTrackCount()</a></span> - Method in class org.apache.commons.io.<a href="./org/apache/commons/io/FileCleaningTracker.html" title="class in org.apache.commons.io">FileCleaningTracker</a></dt>
-<dd>
-<div class="block">Retrieve the number of files currently being tracked, and therefore
- awaiting deletion.</div>
-</dd>
-<dt><span class="strong"><a href="./org/apache/commons/io/FileUtils.html#getUserDirectory()">getUserDirectory()</a></span> - Static method in class org.apache.commons.io.<a href="./org/apache/commons/io/FileUtils.html" title="class in org.apache.commons.io">FileUtils</a></dt>
-<dd>
-<div class="block">Returns a <a href="http://download.oracle.com/javase/6/docs/api/java/io/File.html?is-external=true" title="class or interface in java.io"><code>File</code></a> representing the user's home directory.</div>
-</dd>
-<dt><span class="strong"><a href="./org/apache/commons/io/FileUtils.html#getUserDirectoryPath()">getUserDirectoryPath()</a></span> - Static method in class org.apache.commons.io.<a href="./org/apache/commons/io/FileUtils.html" title="class in org.apache.commons.io">FileUtils</a></dt>
-<dd>
-<div class="block">Returns the path to the user's home directory.</div>
-</dd>
-<dt><span class="strong"><a href="./org/apache/commons/io/input/XmlStreamReaderException.html#getXmlEncoding()">getXmlEncoding()</a></span> - Method in exception org.apache.commons.io.input.<a href="./org/apache/commons/io/input/XmlStreamReaderException.html" title="class in org.apache.commons.io.input">XmlStreamReaderException</a></dt>
-<dd>
-<div class="block">Returns the encoding found in the XML prolog of the InputStream.</div>
-</dd>
-<dt><span class="strong"><a href="./org/apache/commons/io/input/XmlStreamReaderException.html#getXmlGuessEncoding()">getXmlGuessEncoding()</a></span> - Method in exception org.apache.commons.io.input.<a href="./org/apache/commons/io/input/XmlStreamReaderException.html" title="class in org.apache.commons.io.input">XmlStreamReaderException</a></dt>
-<dd>
-<div class="block">Returns the encoding guess based on the first bytes of the InputStream.</div>
-</dd>
-</dl>
-<a name="_H_">
-<!--   -->
-</a>
-<h2 class="title">H</h2>
-<dl>
-<dt><span class="strong"><a href="./org/apache/commons/io/input/TailerListener.html#handle(java.lang.String)">handle(String)</a></span> - Method in interface org.apache.commons.io.input.<a href="./org/apache/commons/io/input/TailerListener.html" title="interface in org.apache.commons.io.input">TailerListener</a></dt>
-<dd>
-<div class="block">Handles a line from a Tailer.</div>
-</dd>
-<dt><span class="strong"><a href="./org/apache/commons/io/input/TailerListener.html#handle(java.lang.Exception)">handle(Exception)</a></span> - Method in interface org.apache.commons.io.input.<a href="./org/apache/commons/io/input/TailerListener.html" title="interface in org.apache.commons.io.input">TailerListener</a></dt>
-<dd>
-<div class="block">Handles an Exception .</div>
-</dd>
-<dt><span class="strong"><a href="./org/apache/commons/io/input/TailerListenerAdapter.html#handle(java.lang.String)">handle(String)</a></span> - Method in class org.apache.commons.io.input.<a href="./org/apache/commons/io/input/TailerListenerAdapter.html" title="class in org.apache.commons.io.input">TailerListenerAdapter</a></dt>
-<dd>
-<div class="block">Handles a line from a Tailer.</div>
-</dd>
-<dt><span class="strong"><a href="./org/apache/commons/io/input/TailerListenerAdapter.html#handle(java.lang.Exception)">handle(Exception)</a></span> - Method in class org.apache.commons.io.input.<a href="./org/apache/commons/io/input/TailerListenerAdapter.html" title="class in org.apache.commons.io.input">TailerListenerAdapter</a></dt>
-<dd>
-<div class="block">Handles an Exception .</div>
-</dd>
-<dt><span class="strong"><a href="./org/apache/commons/io/DirectoryWalker.html#handleCancelled(java.io.File, java.util.Collection, org.apache.commons.io.DirectoryWalker.CancelException)">handleCancelled(File, Collection&lt;T&gt;, DirectoryWalker.CancelException)</a></span> - Method in class org.apache.commons.io.<a href="./org/apache/commons/io/DirectoryWalker.html" title="class in org.apache.commons.io">DirectoryWalker</a></dt>
-<dd>
-<div class="block">Overridable callback method invoked when the operation is cancelled.</div>
-</dd>
-<dt><span class="strong"><a href="./org/apache/commons/io/DirectoryWalker.html#handleDirectory(java.io.File, int, java.util.Collection)">handleDirectory(File, int, Collection&lt;T&gt;)</a></span> - Method in class org.apache.commons.io.<a href="./org/apache/commons/io/DirectoryWalker.html" title="class in org.apache.commons.io">DirectoryWalker</a></dt>
-<dd>
-<div class="block">Overridable callback method invoked to determine if a directory should be processed.</div>
-</dd>
-<dt><span class="strong"><a href="./org/apache/commons/io/DirectoryWalker.html#handleDirectoryEnd(java.io.File, int, java.util.Collection)">handleDirectoryEnd(File, int, Collection&lt;T&gt;)</a></span> - Method in class org.apache.commons.io.<a href="./org/apache/commons/io/DirectoryWalker.html" title="class in org.apache.commons.io">DirectoryWalker</a></dt>
-<dd>
-<div class="block">Overridable callback method invoked at the end of processing each directory.</div>
-</dd>
-<dt><span class="strong"><a href="./org/apache/commons/io/DirectoryWalker.html#handleDirectoryStart(java.io.File, int, java.util.Collection)">handleDirectoryStart(File, int, Collection&lt;T&gt;)</a></span> - Method in class org.apache.commons.io.<a href="./org/apache/commons/io/DirectoryWalker.html" title="class in org.apache.commons.io">DirectoryWalker</a></dt>
-<dd>
-<div class="block">Overridable callback method invoked at the start of processing each directory.</div>
-</dd>
-<dt><span class="strong"><a href="./org/apache/commons/io/DirectoryWalker.html#handleEnd(java.util.Collection)">handleEnd(Collection&lt;T&gt;)</a></span> - Method in class org.apache.commons.io.<a href="./org/apache/commons/io/DirectoryWalker.html" title="class in org.apache.commons.io">DirectoryWalker</a></dt>
-<dd>
-<div class="block">Overridable callback method invoked at the end of processing.</div>
-</dd>
-<dt><span class="strong"><a href="./org/apache/commons/io/DirectoryWalker.html#handleFile(java.io.File, int, java.util.Collection)">handleFile(File, int, Collection&lt;T&gt;)</a></span> - Method in class org.apache.commons.io.<a href="./org/apache/commons/io/DirectoryWalker.html" title="class in org.apache.commons.io">DirectoryWalker</a></dt>
-<dd>
-<div class="block">Overridable callback method invoked for each (non-directory) file.</div>
-</dd>
-<dt><span class="strong"><a href="./org/apache/commons/io/input/ProxyInputStream.html#handleIOException(java.io.IOException)">handleIOException(IOException)</a></span> - Method in class org.apache.commons.io.input.<a href="./org/apache/commons/io/input/ProxyInputStream.html" title="class in org.apache.commons.io.input">ProxyInputStream</a></dt>
-<dd>
-<div class="block">Handle any IOExceptions thrown.</div>
-</dd>
-<dt><span class="strong"><a href="./org/apache/commons/io/input/ProxyReader.html#handleIOException(java.io.IOException)">handleIOException(IOException)</a></span> - Method in class org.apache.commons.io.input.<a href="./org/apache/commons/io/input/ProxyReader.html" title="class in org.apache.commons.io.input">ProxyReader</a></dt>
-<dd>
-<div class="block">Handle any IOExceptions thrown.</div>
-</dd>
-<dt><span class="strong"><a href="./org/apache/commons/io/input/TaggedInputStream.html#handleIOException(java.io.IOException)">handleIOException(IOException)</a></span> - Method in class org.apache.commons.io.input.<a href="./org/apache/commons/io/input/TaggedInputStream.html" title="class in org.apache.commons.io.input">TaggedInputStream</a></dt>
-<dd>
-<div class="block">Tags any IOExceptions thrown, wrapping and re-throwing.</div>
-</dd>
-<dt><span class="strong"><a href="./org/apache/commons/io/output/ProxyOutputStream.html#handleIOException(java.io.IOException)">handleIOException(IOException)</a></span> - Method in class org.apache.commons.io.output.<a href="./org/apache/commons/io/output/ProxyOutputStream.html" title="class in org.apache.commons.io.output">ProxyOutputStream</a></dt>
-<dd>
-<div class="block">Handle any IOExceptions thrown.</div>
-</dd>
-<dt><span class="strong"><a href="./org/apache/commons/io/output/ProxyWriter.html#handleIOException(java.io.IOException)">handleIOException(IOException)</a></span> - Method in class org.apache.commons.io.output.<a href="./org/apache/commons/io/output/ProxyWriter.html" title="class in org.apache.commons.io.output">ProxyWriter</a></dt>
-<dd>
-<div class="block">Handle any IOExceptions thrown.</div>
-</dd>
-<dt><span class="strong"><a href="./org/apache/commons/io/output/TaggedOutputStream.html#handleIOException(java.io.IOException)">handleIOException(IOException)</a></span> - Method in class org.apache.commons.io.output.<a href="./org/apache/commons/io/output/TaggedOutputStream.html" title="class in org.apache.commons.io.output">TaggedOutputStream</a></dt>
-<dd>
-<div class="block">Tags any IOExceptions thrown, wrapping and re-throwing.</div>
-</dd>
-<dt><span class="strong"><a href="./org/apache/commons/io/DirectoryWalker.html#handleIsCancelled(java.io.File, int, java.util.Collection)">handleIsCancelled(File, int, Collection&lt;T&gt;)</a></span> - Method in class org.apache.commons.io.<a href="./org/apache/commons/io/DirectoryWalker.html" title="class in org.apache.commons.io">DirectoryWalker</a></dt>
-<dd>
-<div class="block">Overridable callback method invoked to determine if the entire walk
- operation should be immediately cancelled.</div>
-</dd>
-<dt><span class="strong"><a href="./org/apache/commons/io/DirectoryWalker.html#handleRestricted(java.io.File, int, java.util.Collection)">handleRestricted(File, int, Collection&lt;T&gt;)</a></span> - Method in class org.apache.commons.io.<a href="./org/apache/commons/io/DirectoryWalker.html" title="class in org.apache.commons.io">DirectoryWalker</a></dt>
-<dd>
-<div class="block">Overridable callback method invoked for each restricted directory.</div>
-</dd>
-<dt><span class="strong"><a href="./org/apache/commons/io/DirectoryWalker.html#handleStart(java.io.File, java.util.Collection)">handleStart(File, Collection&lt;T&gt;)</a></span> - Method in class org.apache.commons.io.<a href="./org/apache/commons/io/DirectoryWalker.html" title="class in org.apache.commons.io">DirectoryWalker</a></dt>
-<dd>
-<div class="block">Overridable callback method invoked at the start of processing.</div>
-</dd>
-<dt><span class="strong"><a href="./org/apache/commons/io/input/BOMInputStream.html#hasBOM()">hasBOM()</a></span> - Method in class org.apache.commons.io.input.<a href="./org/apache/commons/io/input/BOMInputStream.html" title="class in org.apache.commons.io.input">BOMInputStream</a></dt>
-<dd>
-<div class="block">Indicates whether the stream contains one of the specified BOMs.</div>
-</dd>
-<dt><span class="strong"><a href="./org/apache/commons/io/input/BOMInputStream.html#hasBOM(org.apache.commons.io.ByteOrderMark)">hasBOM(ByteOrderMark)</a></span> - Method in class org.apache.commons.io.input.<a href="./org/apache/commons/io/input/BOMInputStream.html" title="class in org.apache.commons.io.input">BOMInputStream</a></dt>
-<dd>
-<div class="block">Indicates whether the stream contains the specified BOM.</div>
-</dd>
-<dt><span class="strong"><a href="./org/apache/commons/io/ByteOrderMark.html#hashCode()">hashCode()</a></span> - Method in class org.apache.commons.io.<a href="./org/apache/commons/io/ByteOrderMark.html" title="class in org.apache.commons.io">ByteOrderMark</a></dt>
-<dd>
-<div class="block">Return the hashcode for this BOM.</div>
-</dd>
-<dt><span class="strong"><a href="./org/apache/commons/io/LineIterator.html#hasNext()">hasNext()</a></span> - Method in class org.apache.commons.io.<a href="./org/apache/commons/io/LineIterator.html" title="class in org.apache.commons.io">LineIterator</a></dt>
-<dd>
-<div class="block">Indicates whether the <code>Reader</code> has more lines.</div>
-</dd>
-<dt><a href="./org/apache/commons/io/HexDump.html" title="class in org.apache.commons.io"><span class="strong">HexDump</span></a> - Class in <a href="./org/apache/commons/io/package-summary.html">org.apache.commons.io</a></dt>
-<dd>
-<div class="block">Dumps data in hexadecimal format.</div>
-</dd>
-<dt><span class="strong"><a href="./org/apache/commons/io/HexDump.html#HexDump()">HexDump()</a></span> - Constructor for class org.apache.commons.io.<a href="./org/apache/commons/io/HexDump.html" title="class in org.apache.commons.io">HexDump</a></dt>
-<dd>
-<div class="block">Instances should NOT be constructed in standard programming.</div>
-</dd>
-<dt><span class="strong"><a href="./org/apache/commons/io/filefilter/HiddenFileFilter.html#HIDDEN">HIDDEN</a></span> - Static variable in class org.apache.commons.io.filefilter.<a href="./org/apache/commons/io/filefilter/HiddenFileFilter.html" title="class in org.apache.commons.io.filefilter">HiddenFileFilter</a></dt>
-<dd>
-<div class="block">Singleton instance of <i>hidden</i> filter</div>
-</dd>
-<dt><a href="./org/apache/commons/io/filefilter/HiddenFileFilter.html" title="class in org.apache.commons.io.filefilter"><span class="strong">HiddenFileFilter</span></a> - Class in <a href="./org/apache/commons/io/filefilter/package-summary.html">org.apache.commons.io.filefilter</a></dt>
-<dd>
-<div class="block">This filter accepts <code>File</code>s that are hidden.</div>
-</dd>
-<dt><span class="strong"><a href="./org/apache/commons/io/filefilter/HiddenFileFilter.html#HiddenFileFilter()">HiddenFileFilter()</a></span> - Constructor for class org.apache.commons.io.filefilter.<a href="./org/apache/commons/io/filefilter/HiddenFileFilter.html" title="class in org.apache.commons.io.filefilter">HiddenFileFilter</a></dt>
-<dd>
-<div class="block">Restrictive consructor.</div>
-</dd>
-</dl>
-<a name="_I_">
-<!--   -->
-</a>
-<h2 class="title">I</h2>
-<dl>
-<dt><span class="strong"><a href="./org/apache/commons/io/FilenameUtils.html#indexOfExtension(java.lang.String)">indexOfExtension(String)</a></span> - Static method in class org.apache.commons.io.<a href="./org/apache/commons/io/FilenameUtils.html" title="class in org.apache.commons.io">FilenameUtils</a></dt>
-<dd>
-<div class="block">Returns the index of the last extension separator character, which is a dot.</div>
-</dd>
-<dt><span class="strong"><a href="./org/apache/commons/io/FilenameUtils.html#indexOfLastSeparator(java.lang.String)">indexOfLastSeparator(String)</a></span> - Static method in class org.apache.commons.io.<a href="./org/apache/commons/io/FilenameUtils.html" title="class in org.apache.commons.io">FilenameUtils</a></dt>
-<dd>
-<div class="block">Returns the index of the last directory separator character.</div>
-</dd>
-<dt><span class="strong"><a href="./org/apache/commons/io/input/TailerListener.html#init(org.apache.commons.io.input.Tailer)">init(Tailer)</a></span> - Method in interface org.apache.commons.io.input.<a href="./org/apache/commons/io/input/TailerListener.html" title="interface in org.apache.commons.io.input">TailerListener</a></dt>
-<dd>
-<div class="block">The tailer will call this method during construction,
- giving the listener a method of stopping the tailer.</div>
-</dd>
-<dt><span class="strong"><a href="./org/apache/commons/io/input/TailerListenerAdapter.html#init(org.apache.commons.io.input.Tailer)">init(Tailer)</a></span> - Method in class org.apache.commons.io.input.<a href="./org/apache/commons/io/input/TailerListenerAdapter.html" title="class in org.apache.commons.io.input">TailerListenerAdapter</a></dt>
-<dd>
-<div class="block">The tailer will call this method during construction,
- giving the listener a method of stopping the tailer.</div>
-</dd>
-<dt><span class="strong"><a href="./org/apache/commons/io/monitor/FileAlterationObserver.html#initialize()">initialize()</a></span> - Method in class org.apache.commons.io.monitor.<a href="./org/apache/commons/io/monitor/FileAlterationObserver.html" title="class in org.apache.commons.io.monitor">FileAlterationObserver</a></dt>
-<dd>
-<div class="block">Initialize the observer.</div>
-</dd>
-<dt><span class="strong"><a href="./org/apache/commons/io/IOCase.html#INSENSITIVE">INSENSITIVE</a></span> - Static variable in class org.apache.commons.io.<a href="./org/apache/commons/io/IOCase.html" title="class in org.apache.commons.io">IOCase</a></dt>
-<dd>
-<div class="block">The constant for case insensitive regardless of operating system.</div>
-</dd>
-<dt><span class="strong"><a href="./org/apache/commons/io/filefilter/DirectoryFileFilter.html#INSTANCE">INSTANCE</a></span> - Static variable in class org.apache.commons.io.filefilter.<a href="./org/apache/commons/io/filefilter/DirectoryFileFilter.html" title="class in org.apache.commons.io.filefilter">DirectoryFileFilter</a></dt>
-<dd>
-<div class="block">Singleton instance of directory filter.</div>
-</dd>
-<dt><span class="strong"><a href="./org/apache/commons/io/filefilter/FalseFileFilter.html#INSTANCE">INSTANCE</a></span> - Static variable in class org.apache.commons.io.filefilter.<a href="./org/apache/commons/io/filefilter/FalseFileFilter.html" title="class in org.apache.commons.io.filefilter">FalseFileFilter</a></dt>
-<dd>
-<div class="block">Singleton instance of false filter.</div>
-</dd>
-<dt><span class="strong"><a href="./org/apache/commons/io/filefilter/TrueFileFilter.html#INSTANCE">INSTANCE</a></span> - Static variable in class org.apache.commons.io.filefilter.<a href="./org/apache/commons/io/filefilter/TrueFileFilter.html" title="class in org.apache.commons.io.filefilter">TrueFileFilter</a></dt>
-<dd>
-<div class="block">Singleton instance of true filter.</div>
-</dd>
-<dt><a href="./org/apache/commons/io/IOCase.html" title="class in org.apache.commons.io"><span class="strong">IOCase</span></a> - Class in <a href="./org/apache/commons/io/package-summary.html">org.apache.commons.io</a></dt>
-<dd>
-<div class="block">Enumeration of IO case sensitivity.</div>
-</dd>
-<dt><a href="./org/apache/commons/io/IOExceptionWithCause.html" title="class in org.apache.commons.io"><span class="strong">IOExceptionWithCause</span></a> - Exception in <a href="./org/apache/commons/io/package-summary.html">org.apache.commons.io</a></dt>
-<dd>
-<div class="block">Subclasses IOException with the <a href="http://download.oracle.com/javase/6/docs/api/java/lang/Throwable.html?is-external=true" title="class or interface in java.lang"><code>Throwable</code></a> constructors missing before Java 6.</div>
-</dd>
-<dt><span class="strong"><a href="./org/apache/commons/io/IOExceptionWithCause.html#IOExceptionWithCause(java.lang.String, java.lang.Throwable)">IOExceptionWithCause(String, Throwable)</a></span> - Constructor for exception org.apache.commons.io.<a href="./org/apache/commons/io/IOExceptionWithCause.html" title="class in org.apache.commons.io">IOExceptionWithCause</a></dt>
-<dd>
-<div class="block">Constructs a new instance with the given message and cause.</div>
-</dd>
-<dt><span class="strong"><a href="./org/apache/commons/io/IOExceptionWithCause.html#IOExceptionWithCause(java.lang.Throwable)">IOExceptionWithCause(Throwable)</a></span> - Constructor for exception org.apache.commons.io.<a href="./org/apache/commons/io/IOExceptionWithCause.html" title="class in org.apache.commons.io">IOExceptionWithCause</a></dt>
-<dd>
-<div class="block">Constructs a new instance with the given cause.</div>
-</dd>
-<dt><a href="./org/apache/commons/io/filefilter/IOFileFilter.html" title="interface in org.apache.commons.io.filefilter"><span class="strong">IOFileFilter</span></a> - Interface in <a href="./org/apache/commons/io/filefilter/package-summary.html">org.apache.commons.io.filefilter</a></dt>
-<dd>
-<div class="block">An interface which brings the FileFilter and FilenameFilter
- interfaces together.</div>
-</dd>
-<dt><a href="./org/apache/commons/io/IOUtils.html" title="class in org.apache.commons.io"><span class="strong">IOUtils</span></a> - Class in <a href="./org/apache/commons/io/package-summary.html">org.apache.commons.io</a></dt>
-<dd>
-<div class="block">General IO stream manipulation utilities.</div>
-</dd>
-<dt><span class="strong"><a href="./org/apache/commons/io/IOUtils.html#IOUtils()">IOUtils()</a></span> - Constructor for class org.apache.commons.io.<a href="./org/apache/commons/io/IOUtils.html" title="class in org.apache.commons.io">IOUtils</a></dt>
-<dd>
-<div class="block">Instances should NOT be constructed in standard programming.</div>
-</dd>
-<dt><span class="strong"><a href="./org/apache/commons/io/IOCase.html#isCaseSensitive()">isCaseSensitive()</a></span> - Method in class org.apache.commons.io.<a href="./org/apache/commons/io/IOCase.html" title="class in org.apache.commons.io">IOCase</a></dt>
-<dd>
-<div class="block">Does the object represent case sensitive comparison.</div>
-</dd>
-<dt><span class="strong"><a href="./org/apache/commons/io/input/TaggedInputStream.html#isCauseOf(java.lang.Throwable)">isCauseOf(Throwable)</a></span> - Method in class org.apache.commons.io.input.<a href="./org/apache/commons/io/input/TaggedInputStream.html" title="class in org.apache.commons.io.input">TaggedInputStream</a></dt>
-<dd>
-<div class="block">Tests if the given exception was caused by this stream.</div>
-</dd>
-<dt><span class="strong"><a href="./org/apache/commons/io/output/TaggedOutputStream.html#isCauseOf(java.lang.Exception)">isCauseOf(Exception)</a></span> - Method in class org.apache.commons.io.output.<a href="./org/apache/commons/io/output/TaggedOutputStream.html" title="class in org.apache.commons.io.output">TaggedOutputStream</a></dt>
-<dd>
-<div class="block">Tests if the given exception was caused by this stream.</div>
-</dd>
-<dt><span class="strong"><a href="./org/apache/commons/io/monitor/FileEntry.html#isDirectory()">isDirectory()</a></span> - Method in class org.apache.commons.io.monitor.<a href="./org/apache/commons/io/monitor/FileEntry.html" title="class in org.apache.commons.io.monitor">FileEntry</a></dt>
-<dd>
-<div class="block">Indicate whether the file is a directory or not.</div>
-</dd>
-<dt><span class="strong"><a href="./org/apache/commons/io/monitor/FileEntry.html#isExists()">isExists()</a></span> - Method in class org.apache.commons.io.monitor.<a href="./org/apache/commons/io/monitor/FileEntry.html" title="class in org.apache.commons.io.monitor">FileEntry</a></dt>
-<dd>
-<div class="block">Indicate whether the file existed the last time it
- was checked.</div>
-</dd>
-<dt><span class="strong"><a href="./org/apache/commons/io/FilenameUtils.html#isExtension(java.lang.String, java.lang.String)">isExtension(String, String)</a></span> - Static method in class org.apache.commons.io.<a href="./org/apache/commons/io/FilenameUtils.html" title="class in org.apache.commons.io">FilenameUtils</a></dt>
-<dd>
-<div class="block">Checks whether the extension of the filename is that specified.</div>
-</dd>
-<dt><span class="strong"><a href="./org/apache/commons/io/FilenameUtils.html#isExtension(java.lang.String, java.lang.String[])">isExtension(String, String[])</a></span> - Static method in class org.apache.commons.io.<a href="./org/apache/commons/io/FilenameUtils.html" title="class in org.apache.commons.io">FilenameUtils</a></dt>
-<dd>
-<div class="block">Checks whether the extension of the filename is one of those specified.</div>
-</dd>
-<dt><span class="strong"><a href="./org/apache/commons/io/FilenameUtils.html#isExtension(java.lang.String, java.util.Collection)">isExtension(String, Collection&lt;String&gt;)</a></span> - Static method in class org.apache.commons.io.<a href="./org/apache/commons/io/FilenameUtils.html" title="class in org.apache.commons.io">FilenameUtils</a></dt>
-<dd>
-<div class="block">Checks whether the extension of the filename is one of those specified.</div>
-</dd>
-<dt><span class="strong"><a href="./org/apache/commons/io/FileUtils.html#isFileNewer(java.io.File, java.io.File)">isFileNewer(File, File)</a></span> - Static method in class org.apache.commons.io.<a href="./org/apache/commons/io/FileUtils.html" title="class in org.apache.commons.io">FileUtils</a></dt>
-<dd>
-<div class="block">Tests if the specified <code>File</code> is newer than the reference
- <code>File</code>.</div>
-</dd>
-<dt><span class="strong"><a href="./org/apache/commons/io/FileUtils.html#isFileNewer(java.io.File, java.util.Date)">isFileNewer(File, Date)</a></span> - Static method in class org.apache.commons.io.<a href="./org/apache/commons/io/FileUtils.html" title="class in org.apache.commons.io">FileUtils</a></dt>
-<dd>
-<div class="block">Tests if the specified <code>File</code> is newer than the specified
- <code>Date</code>.</div>
-</dd>
-<dt><span class="strong"><a href="./org/apache/commons/io/FileUtils.html#isFileNewer(java.io.File, long)">isFileNewer(File, long)</a></span> - Static method in class org.apache.commons.io.<a href="./org/apache/commons/io/FileUtils.html" title="class in org.apache.commons.io">FileUtils</a></dt>
-<dd>
-<div class="block">Tests if the specified <code>File</code> is newer than the specified
- time reference.</div>
-</dd>
-<dt><span class="strong"><a href="./org/apache/commons/io/FileUtils.html#isFileOlder(java.io.File, java.io.File)">isFileOlder(File, File)</a></span> - Static method in class org.apache.commons.io.<a href="./org/apache/commons/io/FileUtils.html" title="class in org.apache.commons.io">FileUtils</a></dt>
-<dd>
-<div class="block">Tests if the specified <code>File</code> is older than the reference
- <code>File</code>.</div>
-</dd>
-<dt><span class="strong"><a href="./org/apache/commons/io/FileUtils.html#isFileOlder(java.io.File, java.util.Date)">isFileOlder(File, Date)</a></span> - Static method in class org.apache.commons.io.<a href="./org/apache/commons/io/FileUtils.html" title="class in org.apache.commons.io">FileUtils</a></dt>
-<dd>
-<div class="block">Tests if the specified <code>File</code> is older than the specified
- <code>Date</code>.</div>
-</dd>
-<dt><span class="strong"><a href="./org/apache/commons/io/FileUtils.html#isFileOlder(java.io.File, long)">isFileOlder(File, long)</a></span> - Static method in class org.apache.commons.io.<a href="./org/apache/commons/io/FileUtils.html" title="class in org.apache.commons.io">FileUtils</a></dt>
-<dd>
-<div class="block">Tests if the specified <code>File</code> is older than the specified
- time reference.</div>
-</dd>
-<dt><span class="strong"><a href="./org/apache/commons/io/output/DeferredFileOutputStream.html#isInMemory()">isInMemory()</a></span> - Method in class org.apache.commons.io.output.<a href="./org/apache/commons/io/output/DeferredFileOutputStream.html" title="class in org.apache.commons.io.output">DeferredFileOutputStream</a></dt>
-<dd>
-<div class="block">Determines whether or not the data for this output stream has been
- retained in memory.</div>
-</dd>
-<dt><span class="strong"><a href="./org/apache/commons/io/Charsets.html#ISO_8859_1">ISO_8859_1</a></span> - Static variable in class org.apache.commons.io.<a href="./org/apache/commons/io/Charsets.html" title="class in org.apache.commons.io">Charsets</a></dt>
-<dd>
-<div class="block">CharEncodingISO Latin Alphabet No.</div>
-</dd>
-<dt><span class="strong"><a href="./org/apache/commons/io/input/BoundedInputStream.html#isPropagateClose()">isPropagateClose()</a></span> - Method in class org.apache.commons.io.input.<a href="./org/apache/commons/io/input/BoundedInputStream.html" title="class in org.apache.commons.io.input">BoundedInputStream</a></dt>
-<dd>
-<div class="block">Indicates whether the <a href="./org/apache/commons/io/input/BoundedInputStream.html#close()"><code>BoundedInputStream.close()</code></a> method
- should propagate to the underling <a href="http://download.oracle.com/javase/6/docs/api/java/io/InputStream.html?is-external=true" title="class or interface in java.io"><code>InputStream</code></a>.</div>
-</dd>
-<dt><span class="strong"><a href="./org/apache/commons/io/FileUtils.html#isSymlink(java.io.File)">isSymlink(File)</a></span> - Static method in class org.apache.commons.io.<a href="./org/apache/commons/io/FileUtils.html" title="class in org.apache.commons.io">FileUtils</a></dt>
-<dd>
-<div class="block">Determines whether the specified file is a Symbolic Link rather than an actual file.</div>
-</dd>
-<dt><span class="strong"><a href="./org/apache/commons/io/TaggedIOException.html#isTaggedWith(java.lang.Throwable, java.lang.Object)">isTaggedWith(Throwable, Object)</a></span> - Static method in exception org.apache.commons.io.<a href="./org/apache/commons/io/TaggedIOException.html" title="class in org.apache.commons.io">TaggedIOException</a></dt>
-<dd>
-<div class="block">Checks whether the given throwable is tagged with the given tag.</div>
-</dd>
-<dt><span class="strong"><a href="./org/apache/commons/io/output/ThresholdingOutputStream.html#isThresholdExceeded()">isThresholdExceeded()</a></span> - Method in class org.apache.commons.io.output.<a href="./org/apache/commons/io/output/ThresholdingOutputStream.html" title="class in org.apache.commons.io.output">ThresholdingOutputStream</a></dt>
-<dd>
-<div class="block">Determines whether or not the configured threshold has been exceeded for
- this output stream.</div>
-</dd>
-<dt><span class="strong"><a href="./org/apache/commons/io/LineIterator.html#isValidLine(java.lang.String)">isValidLine(String)</a></span> - Method in class org.apache.commons.io.<a href="./org/apache/commons/io/LineIterator.html" title="class in org.apache.commons.io">LineIterator</a></dt>
-<dd>
-<div class="block">Overridable method to validate each line that is returned.</div>
-</dd>
-<dt><span class="strong"><a href="./org/apache/commons/io/FileUtils.html#iterateFiles(java.io.File, org.apache.commons.io.filefilter.IOFileFilter, org.apache.commons.io.filefilter.IOFileFilter)">iterateFiles(File, IOFileFilter, IOFileFilter)</a></span> - Static method in class org.apache.commons.io.<a href="./org/apache/commons/io/FileUtils.html" title="class in org.apache.commons.io">FileUtils</a></dt>
-<dd>
-<div class="block">Allows iteration over the files in given directory (and optionally
- its subdirectories).</div>
-</dd>
-<dt><span class="strong"><a href="./org/apache/commons/io/FileUtils.html#iterateFiles(java.io.File, java.lang.String[], boolean)">iterateFiles(File, String[], boolean)</a></span> - Static method in class org.apache.commons.io.<a href="./org/apache/commons/io/FileUtils.html" title="class in org.apache.commons.io">FileUtils</a></dt>
-<dd>
-<div class="block">Allows iteration over the files in a given directory (and optionally
- its subdirectories) which match an array of extensions.</div>
-</dd>
-<dt><span class="strong"><a href="./org/apache/commons/io/FileUtils.html#iterateFilesAndDirs(java.io.File, org.apache.commons.io.filefilter.IOFileFilter, org.apache.commons.io.filefilter.IOFileFilter)">iterateFilesAndDirs(File, IOFileFilter, IOFileFilter)</a></span> - Static method in class org.apache.commons.io.<a href="./org/apache/commons/io/FileUtils.html" title="class in org.apache.commons.io">FileUtils</a></dt>
-<dd>
-<div class="block">Allows iteration over the files in given directory (and optionally
- its subdirectories).</div>
-</dd>
-</dl>
-<a name="_L_">
-<!--   -->
-</a>
-<h2 class="title">L</h2>
-<dl>
-<dt><span class="strong"><a href="./org/apache/commons/io/comparator/LastModifiedFileComparator.html#LASTMODIFIED_COMPARATOR">LASTMODIFIED_COMPARATOR</a></span> - Static variable in class org.apache.commons.io.comparator.<a href="./org/apache/commons/io/comparator/LastModifiedFileComparator.html" title="class in org.apache.commons.io.comparator">LastModifiedFileComparator</a></dt>
-<dd>
-<div class="block">Last modified comparator instance</div>
-</dd>
-<dt><span class="strong"><a href="./org/apache/commons/io/comparator/LastModifiedFileComparator.html#LASTMODIFIED_REVERSE">LASTMODIFIED_REVERSE</a></span> - Static variable in class org.apache.commons.io.comparator.<a href="./org/apache/commons/io/comparator/LastModifiedFileComparator.html" title="class in org.apache.commons.io.comparator">LastModifiedFileComparator</a></dt>
-<dd>
-<div class="block">Reverse last modified comparator instance</div>
-</dd>
-<dt><a href="./org/apache/commons/io/comparator/LastModifiedFileComparator.html" title="class in org.apache.commons.io.comparator"><span class="strong">LastModifiedFileComparator</span></a> - Class in <a href="./org/apache/commons/io/comparator/package-summary.html">org.apache.commons.io.comparator</a></dt>
-<dd>
-<div class="block">Compare the <b>last modified date/time</b> of two files for order 
- (see <a href="http://download.oracle.com/javase/6/docs/api/java/io/File.html?is-external=true#lastModified()" title="class or interface in java.io"><code>File.lastModified()</code></a>).</div>
-</dd>
-<dt><span class="strong"><a href="./org/apache/commons/io/comparator/LastModifiedFileComparator.html#LastModifiedFileComparator()">LastModifiedFileComparator()</a></span> - Constructor for class org.apache.commons.io.comparator.<a href="./org/apache/commons/io/comparator/LastModifiedFileComparator.html" title="class in org.apache.commons.io.comparator">LastModifiedFileComparator</a></dt>
-<dd>&nbsp;</dd>
-<dt><span class="strong"><a href="./org/apache/commons/io/ByteOrderMark.html#length()">length()</a></span> - Method in class org.apache.commons.io.<a href="./org/apache/commons/io/ByteOrderMark.html" title="class in org.apache.commons.io">ByteOrderMark</a></dt>
-<dd>
-<div class="block">Return the length of the BOM's bytes.</div>
-</dd>
-<dt><span class="strong"><a href="./org/apache/commons/io/IOUtils.html#LINE_SEPARATOR">LINE_SEPARATOR</a></span> - Static variable in class org.apache.commons.io.<a href="./org/apache/commons/io/IOUtils.html" title="class in org.apache.commons.io">IOUtils</a></dt>
-<dd>
-<div class="block">The system line separator string.</div>
-</dd>
-<dt><span class="strong"><a href="./org/apache/commons/io/IOUtils.html#LINE_SEPARATOR_UNIX">LINE_SEPARATOR_UNIX</a></span> - Static variable in class org.apache.commons.io.<a href="./org/apache/commons/io/IOUtils.html" title="class in org.apache.commons.io">IOUtils</a></dt>
-<dd>
-<div class="block">The Unix line separator string.</div>
-</dd>
-<dt><span class="strong"><a href="./org/apache/commons/io/IOUtils.html#LINE_SEPARATOR_WINDOWS">LINE_SEPARATOR_WINDOWS</a></span> - Static variable in class org.apache.commons.io.<a href="./org/apache/commons/io/IOUtils.html" title="class in org.apache.commons.io">IOUtils</a></dt>
-<dd>
-<div class="block">The Windows line separator string.</div>
-</dd>
-<dt><span class="strong"><a href="./org/apache/commons/io/FileUtils.html#lineIterator(java.io.File, java.lang.String)">lineIterator(File, String)</a></span> - Static method in class org.apache.commons.io.<a href="./org/apache/commons/io/FileUtils.html" title="class in org.apache.commons.io">FileUtils</a></dt>
-<dd>
-<div class="block">Returns an Iterator for the lines in a <code>File</code>.</div>
-</dd>
-<dt><span class="strong"><a href="./org/apache/commons/io/FileUtils.html#lineIterator(java.io.File)">lineIterator(File)</a></span> - Static method in class org.apache.commons.io.<a href="./org/apache/commons/io/FileUtils.html" title="class in org.apache.commons.io">FileUtils</a></dt>
-<dd>
-<div class="block">Returns an Iterator for the lines in a <code>File</code> using the default encoding for the VM.</div>
-</dd>
-<dt><span class="strong"><a href="./org/apache/commons/io/IOUtils.html#lineIterator(java.io.Reader)">lineIterator(Reader)</a></span> - Static method in class org.apache.commons.io.<a href="./org/apache/commons/io/IOUtils.html" title="class in org.apache.commons.io">IOUtils</a></dt>
-<dd>
-<div class="block">Returns an Iterator for the lines in a <code>Reader</code>.</div>
-</dd>
-<dt><span class="strong"><a href="./org/apache/commons/io/IOUtils.html#lineIterator(java.io.InputStream, java.nio.charset.Charset)">lineIterator(InputStream, Charset)</a></span> - Static method in class org.apache.commons.io.<a href="./org/apache/commons/io/IOUtils.html" title="class in org.apache.commons.io">IOUtils</a></dt>
-<dd>
-<div class="block">Returns an Iterator for the lines in an <code>InputStream</code>, using
- the character encoding specified (or default encoding if null).</div>
-</dd>
-<dt><span class="strong"><a href="./org/apache/commons/io/IOUtils.html#lineIterator(java.io.InputStream, java.lang.String)">lineIterator(InputStream, String)</a></span> - Static method in class org.apache.commons.io.<a href="./org/apache/commons/io/IOUtils.html" title="class in org.apache.commons.io">IOUtils</a></dt>
-<dd>
-<div class="block">Returns an Iterator for the lines in an <code>InputStream</code>, using
- the character encoding specified (or default encoding if null).</div>
-</dd>
-<dt><a href="./org/apache/commons/io/LineIterator.html" title="class in org.apache.commons.io"><span class="strong">LineIterator</span></a> - Class in <a href="./org/apache/commons/io/package-summary.html">org.apache.commons.io</a></dt>
-<dd>
-<div class="block">An Iterator over the lines in a <code>Reader</code>.</div>
-</dd>
-<dt><span class="strong"><a href="./org/apache/commons/io/LineIterator.html#LineIterator(java.io.Reader)">LineIterator(Reader)</a></span> - Constructor for class org.apache.commons.io.<a href="./org/apache/commons/io/LineIterator.html" title="class in org.apache.commons.io">LineIterator</a></dt>
-<dd>
-<div class="block">Constructs an iterator of the lines for a <code>Reader</code>.</div>
-</dd>
-<dt><span class="strong"><a href="./org/apache/commons/io/FileUtils.html#listFiles(java.io.File, org.apache.commons.io.filefilter.IOFileFilter, org.apache.commons.io.filefilter.IOFileFilter)">listFiles(File, IOFileFilter, IOFileFilter)</a></span> - Static method in class org.apache.commons.io.<a href="./org/apache/commons/io/FileUtils.html" title="class in org.apache.commons.io">FileUtils</a></dt>
-<dd>
-<div class="block">Finds files within a given directory (and optionally its
- subdirectories).</div>
-</dd>
-<dt><span class="strong"><a href="./org/apache/commons/io/FileUtils.html#listFiles(java.io.File, java.lang.String[], boolean)">listFiles(File, String[], boolean)</a></span> - Static method in class org.apache.commons.io.<a href="./org/apache/commons/io/FileUtils.html" title="class in org.apache.commons.io">FileUtils</a></dt>
-<dd>
-<div class="block">Finds files within a given directory (and optionally its subdirectories)
- which match an array of extensions.</div>
-</dd>
-<dt><span class="strong"><a href="./org/apache/commons/io/FileUtils.html#listFilesAndDirs(java.io.File, org.apache.commons.io.filefilter.IOFileFilter, org.apache.commons.io.filefilter.IOFileFilter)">listFilesAndDirs(File, IOFileFilter, IOFileFilter)</a></span> - Static method in class org.apache.commons.io.<a href="./org/apache/commons/io/FileUtils.html" title="class in org.apache.commons.io">FileUtils</a></dt>
-<dd>
-<div class="block">Finds files within a given directory (and optionally its
- subdirectories).</div>
-</dd>
-<dt><a href="./org/apache/commons/io/output/LockableFileWriter.html" title="class in org.apache.commons.io.output"><span class="strong">LockableFileWriter</span></a> - Class in <a href="./org/apache/commons/io/output/package-summary.html">org.apache.commons.io.output</a></dt>
-<dd>
-<div class="block">FileWriter that will create and honor lock files to allow simple
- cross thread file lock handling.</div>
-</dd>
-<dt><span class="strong"><a href="./org/apache/commons/io/output/LockableFileWriter.html#LockableFileWriter(java.lang.String)">LockableFileWriter(String)</a></span> - Constructor for class org.apache.commons.io.output.<a href="./org/apache/commons/io/output/LockableFileWriter.html" title="class in org.apache.commons.io.output">LockableFileWriter</a></dt>
-<dd>
-<div class="block">Constructs a LockableFileWriter.</div>
-</dd>
-<dt><span class="strong"><a href="./org/apache/commons/io/output/LockableFileWriter.html#LockableFileWriter(java.lang.String, boolean)">LockableFileWriter(String, boolean)</a></span> - Constructor for class org.apache.commons.io.output.<a href="./org/apache/commons/io/output/LockableFileWriter.html" title="class in org.apache.commons.io.output">LockableFileWriter</a></dt>
-<dd>
-<div class="block">Constructs a LockableFileWriter.</div>
-</dd>
-<dt><span class="strong"><a href="./org/apache/commons/io/output/LockableFileWriter.html#LockableFileWriter(java.lang.String, boolean, java.lang.String)">LockableFileWriter(String, boolean, String)</a></span> - Constructor for class org.apache.commons.io.output.<a href="./org/apache/commons/io/output/LockableFileWriter.html" title="class in org.apache.commons.io.output">LockableFileWriter</a></dt>
-<dd>
-<div class="block">Constructs a LockableFileWriter.</div>
-</dd>
-<dt><span class="strong"><a href="./org/apache/commons/io/output/LockableFileWriter.html#LockableFileWriter(java.io.File)">LockableFileWriter(File)</a></span> - Constructor for class org.apache.commons.io.output.<a href="./org/apache/commons/io/output/LockableFileWriter.html" title="class in org.apache.commons.io.output">LockableFileWriter</a></dt>
-<dd>
-<div class="block">Constructs a LockableFileWriter.</div>
-</dd>
-<dt><span class="strong"><a href="./org/apache/commons/io/output/LockableFileWriter.html#LockableFileWriter(java.io.File, boolean)">LockableFileWriter(File, boolean)</a></span> - Constructor for class org.apache.commons.io.output.<a href="./org/apache/commons/io/output/LockableFileWriter.html" title="class in org.apache.commons.io.output">LockableFileWriter</a></dt>
-<dd>
-<div class="block">Constructs a LockableFileWriter.</div>
-</dd>
-<dt><span class="strong"><a href="./org/apache/commons/io/output/LockableFileWriter.html#LockableFileWriter(java.io.File, boolean, java.lang.String)">LockableFileWriter(File, boolean, String)</a></span> - Constructor for class org.apache.commons.io.output.<a href="./org/apache/commons/io/output/LockableFileWriter.html" title="class in org.apache.commons.io.output">LockableFileWriter</a></dt>
-<dd>
-<div class="block"><span class="strong">Deprecated.</span>
-<div class="block"><i>2.5 use <a href="./org/apache/commons/io/output/LockableFileWriter.html#LockableFileWriter(java.io.File, java.nio.charset.Charset, boolean, java.lang.String)"><code>LockableFileWriter.LockableFileWriter(File, Charset, boolean, String)</code></a> instead</i></div>
-</div>
-</dd>
-<dt><span class="strong"><a href="./org/apache/commons/io/output/LockableFileWriter.html#LockableFileWriter(java.io.File, java.nio.charset.Charset)">LockableFileWriter(File, Charset)</a></span> - Constructor for class org.apache.commons.io.output.<a href="./org/apache/commons/io/output/LockableFileWriter.html" title="class in org.apache.commons.io.output">LockableFileWriter</a></dt>
-<dd>
-<div class="block">Constructs a LockableFileWriter with a file encoding.</div>
-</dd>
-<dt><span class="strong"><a href="./org/apache/commons/io/output/LockableFileWriter.html#LockableFileWriter(java.io.File, java.lang.String)">LockableFileWriter(File, String)</a></span> - Constructor for class org.apache.commons.io.output.<a href="./org/apache/commons/io/output/LockableFileWriter.html" title="class in org.apache.commons.io.output">LockableFileWriter</a></dt>
-<dd>
-<div class="block">Constructs a LockableFileWriter with a file encoding.</div>
-</dd>
-<dt><span class="strong"><a href="./org/apache/commons/io/output/LockableFileWriter.html#LockableFileWriter(java.io.File, java.nio.charset.Charset, boolean, java.lang.String)">LockableFileWriter(File, Charset, boolean, String)</a></span> - Constructor for class org.apache.commons.io.output.<a href="./org/apache/commons/io/output/LockableFileWriter.html" title="class in org.apache.commons.io.output">LockableFileWriter</a></dt>
-<dd>
-<div class="block">Constructs a LockableFileWriter with a file encoding.</div>
-</dd>
-<dt><span class="strong"><a href="./org/apache/commons/io/output/LockableFileWriter.html#LockableFileWriter(java.io.File, java.lang.String, boolean, java.lang.String)">LockableFileWriter(File, String, boolean, String)</a></span> - Constructor for class org.apache.commons.io.output.<a href="./org/apache/commons/io/output/LockableFileWriter.html" title="class in org.apache.commons.io.output">LockableFileWriter</a></dt>
-<dd>
-<div class="block">Constructs a LockableFileWriter with a file encoding.</div>
-</dd>
-</dl>
-<a name="_M_">
-<!--   -->
-</a>
-<h2 class="title">M</h2>
-<dl>
-<dt><span class="strong"><a href="./org/apache/commons/io/filefilter/FileFilterUtils.html#magicNumberFileFilter(java.lang.String)">magicNumberFileFilter(String)</a></span> - Static method in class org.apache.commons.io.filefilter.<a href="./org/apache/commons/io/filefilter/FileFilterUtils.html" title="class in org.apache.commons.io.filefilter">FileFilterUtils</a></dt>
-<dd>
-<div class="block">Returns a filter that accepts files that begin with the provided magic
- number.</div>
-</dd>
-<dt><span class="strong"><a href="./org/apache/commons/io/filefilter/FileFilterUtils.html#magicNumberFileFilter(java.lang.String, long)">magicNumberFileFilter(String, long)</a></span> - Static method in class org.apache.commons.io.filefilter.<a href="./org/apache/commons/io/filefilter/FileFilterUtils.html" title="class in org.apache.commons.io.filefilter">FileFilterUtils</a></dt>
-<dd>
-<div class="block">Returns a filter that accepts files that contains the provided magic
- number at a specified offset within the file.</div>
-</dd>
-<dt><span class="strong"><a href="./org/apache/commons/io/filefilter/FileFilterUtils.html#magicNumberFileFilter(byte[])">magicNumberFileFilter(byte[])</a></span> - Static method in class org.apache.commons.io.filefilter.<a href="./org/apache/commons/io/filefilter/FileFilterUtils.html" title="class in org.apache.commons.io.filefilter">FileFilterUtils</a></dt>
-<dd>
-<div class="block">Returns a filter that accepts files that begin with the provided magic
- number.</div>
-</dd>
-<dt><span class="strong"><a href="./org/apache/commons/io/filefilter/FileFilterUtils.html#magicNumberFileFilter(byte[], long)">magicNumberFileFilter(byte[], long)</a></span> - Static method in class org.apache.commons.io.filefilter.<a href="./org/apache/commons/io/filefilter/FileFilterUtils.html" title="class in org.apache.commons.io.filefilter">FileFilterUtils</a></dt>
-<dd>
-<div class="block">Returns a filter that accepts files that contains the provided magic
- number at a specified offset within the file.</div>
-</dd>
-<dt><a href="./org/apache/commons/io/filefilter/MagicNumberFileFilter.html" title="class in org.apache.commons.io.filefilter"><span class="strong">MagicNumberFileFilter</span></a> - Class in <a href="./org/apache/commons/io/filefilter/package-summary.html">org.apache.commons.io.filefilter</a></dt>
-<dd>
-<div class="block">
- File filter for matching files containing a "magic number".</div>
-</dd>
-<dt><span class="strong"><a href="./org/apache/commons/io/filefilter/MagicNumberFileFilter.html#MagicNumberFileFilter(byte[])">MagicNumberFileFilter(byte[])</a></span> - Constructor for class org.apache.commons.io.filefilter.<a href="./org/apache/commons/io/filefilter/MagicNumberFileFilter.html" title="class in org.apache.commons.io.filefilter">MagicNumberFileFilter</a></dt>
-<dd>
-<div class="block">
- Constructs a new MagicNumberFileFilter and associates it with the magic
- number to test for in files.</div>
-</dd>
-<dt><span class="strong"><a href="./org/apache/commons/io/filefilter/MagicNumberFileFilter.html#MagicNumberFileFilter(java.lang.String)">MagicNumberFileFilter(String)</a></span> - Constructor for class org.apache.commons.io.filefilter.<a href="./org/apache/commons/io/filefilter/MagicNumberFileFilter.html" title="class in org.apache.commons.io.filefilter">MagicNumberFileFilter</a></dt>
-<dd>
-<div class="block">
- Constructs a new MagicNumberFileFilter and associates it with the magic
- number to test for in files.</div>
-</dd>
-<dt><span class="strong"><a href="./org/apache/commons/io/filefilter/MagicNumberFileFilter.html#MagicNumberFileFilter(java.lang.String, long)">MagicNumberFileFilter(String, long)</a></span> - Constructor for class org.apache.commons.io.filefilter.<a href="./org/apache/commons/io/filefilter/MagicNumberFileFilter.html" title="class in org.apache.commons.io.filefilter">MagicNumberFileFilter</a></dt>
-<dd>
-<div class="block">
- Constructs a new MagicNumberFileFilter and associates it with the magic
- number to test for in files and the byte offset location in the file to
- to look for that magic number.</div>
-</dd>
-<dt><span class="strong"><a href="./org/apache/commons/io/filefilter/MagicNumberFileFilter.html#MagicNumberFileFilter(byte[], long)">MagicNumberFileFilter(byte[], long)</a></span> - Constructor for class org.apache.commons.io.filefilter.<a href="./org/apache/commons/io/filefilter/MagicNumberFileFilter.html" title="class in org.apache.commons.io.filefilter">MagicNumberFileFilter</a></dt>
-<dd>
-<div class="block">
- Constructs a new MagicNumberFileFilter and associates it with the magic
- number to test for in files and the byte offset location in the file to
- to look for that magic number.</div>
-</dd>
-<dt><span class="strong"><a href="./org/apache/commons/io/filefilter/FileFilterUtils.html#makeCVSAware(org.apache.commons.io.filefilter.IOFileFilter)">makeCVSAware(IOFileFilter)</a></span> - Static method in class org.apache.commons.io.filefilter.<a href="./org/apache/commons/io/filefilter/FileFilterUtils.html" title="class in org.apache.commons.io.filefilter">FileFilterUtils</a></dt>
-<dd>
-<div class="block">Decorates a filter to make it ignore CVS directories.</div>
-</dd>
-<dt><span class="strong"><a href="./org/apache/commons/io/filefilter/FileFilterUtils.html#makeDirectoryOnly(org.apache.commons.io.filefilter.IOFileFilter)">makeDirectoryOnly(IOFileFilter)</a></span> - Static method in class org.apache.commons.io.filefilter.<a href="./org/apache/commons/io/filefilter/FileFilterUtils.html" title="class in org.apache.commons.io.filefilter">FileFilterUtils</a></dt>
-<dd>
-<div class="block">Decorates a filter so that it only applies to directories and not to files.</div>
-</dd>
-<dt><span class="strong"><a href="./org/apache/commons/io/filefilter/FileFilterUtils.html#makeFileOnly(org.apache.commons.io.filefilter.IOFileFilter)">makeFileOnly(IOFileFilter)</a></span> - Static method in class org.apache.commons.io.filefilter.<a href="./org/apache/commons/io/filefilter/FileFilterUtils.html" title="class in org.apache.commons.io.filefilter">FileFilterUtils</a></dt>
-<dd>
-<div class="block">Decorates a filter so that it only applies to files and not to directories.</div>
-</dd>
-<dt><span class="strong"><a href="./org/apache/commons/io/filefilter/FileFilterUtils.html#makeSVNAware(org.apache.commons.io.filefilter.IOFileFilter)">makeSVNAware(IOFileFilter)</a></span> - Static method in class org.apache.commons.io.filefilter.<a href="./org/apache/commons/io/filefilter/FileFilterUtils.html" title="class in org.apache.commons.io.filefilter">FileFilterUtils</a></dt>
-<dd>
-<div class="block">Decorates a filter to make it ignore SVN directories.</div>
-</dd>
-<dt><span class="strong"><a href="./org/apache/commons/io/input/BOMInputStream.html#mark(int)">mark(int)</a></span> - Method in class org.apache.commons.io.input.<a href="./org/apache/commons/io/input/BOMInputStream.html" title="class in org.apache.commons.io.input">BOMInputStream</a></dt>
-<dd>
-<div class="block">Invokes the delegate's <code>mark(int)</code> method.</div>
-</dd>
-<dt><span class="strong"><a href="./org/apache/commons/io/input/BoundedInputStream.html#mark(int)">mark(int)</a></span> - Method in class org.apache.commons.io.input.<a href="./org/apache/commons/io/input/BoundedInputStream.html" title="class in org.apache.commons.io.input">BoundedInputStream</a></dt>
-<dd>
-<div class="block">Invokes the delegate's <code>mark(int)</code> method.</div>
-</dd>
-<dt><span class="strong"><a href="./org/apache/commons/io/input/CharSequenceInputStream.html#mark(int)">mark(int)</a></span> - Method in class org.apache.commons.io.input.<a href="./org/apache/commons/io/input/CharSequenceInputStream.html" title="class in org.apache.commons.io.input">CharSequenceInputStream</a></dt>
-<dt><span class="strong"><a href="./org/apache/commons/io/input/CharSequenceReader.html#mark(int)">mark(int)</a></span> - Method in class org.apache.commons.io.input.<a href="./org/apache/commons/io/input/CharSequenceReader.html" title="class in org.apache.commons.io.input">CharSequenceReader</a></dt>
-<dd>
-<div class="block">Mark the current position.</div>
-</dd>
-<dt><span class="strong"><a href="./org/apache/commons/io/input/NullInputStream.html#mark(int)">mark(int)</a></span> - Method in class org.apache.commons.io.input.<a href="./org/apache/commons/io/input/NullInputStream.html" title="class in org.apache.commons.io.input">NullInputStream</a></dt>
-<dd>
-<div class="block">Mark the current position.</div>
-</dd>
-<dt><span class="strong"><a href="./org/apache/commons/io/input/NullReader.html#mark(int)">mark(int)</a></span> - Method in class org.apache.commons.io.input.<a href="./org/apache/commons/io/input/NullReader.html" title="class in org.apache.commons.io.input">NullReader</a></dt>
-<dd>
-<div class="block">Mark the current position.</div>
-</dd>
-<dt><span class="strong"><a href="./org/apache/commons/io/input/ProxyInputStream.html#mark(int)">mark(int)</a></span> - Method in class org.apache.commons.io.input.<a href="./org/apache/commons/io/input/ProxyInputStream.html" title="class in org.apache.commons.io.input">ProxyInputStream</a></dt>
-<dd>
-<div class="block">Invokes the delegate's <code>mark(int)</code> method.</div>
-</dd>
-<dt><span class="strong"><a href="./org/apache/commons/io/input/ProxyReader.html#mark(int)">mark(int)</a></span> - Method in class org.apache.commons.io.input.<a href="./org/apache/commons/io/input/ProxyReader.html" title="class in org.apache.commons.io.input">ProxyReader</a></dt>
-<dd>
-<div class="block">Invokes the delegate's <code>mark(int)</code> method.</div>
-</dd>
-<dt><span class="strong"><a href="./org/apache/commons/io/input/BoundedInputStream.html#markSupported()">markSupported()</a></span> - Method in class org.apache.commons.io.input.<a href="./org/apache/commons/io/input/BoundedInputStream.html" title="class in org.apache.commons.io.input">BoundedInputStream</a></dt>
-<dd>
-<div class="block">Invokes the delegate's <code>markSupported()</code> method.</div>
-</dd>
-<dt><span class="strong"><a href="./org/apache/commons/io/input/CharSequenceInputStream.html#markSupported()">markSupported()</a></span> - Method in class org.apache.commons.io.input.<a href="./org/apache/commons/io/input/CharSequenceInputStream.html" title="class in org.apache.commons.io.input">CharSequenceInputStream</a></dt>
-<dd>&nbsp;</dd>
-<dt><span class="strong"><a href="./org/apache/commons/io/input/CharSequenceReader.html#markSupported()">markSupported()</a></span> - Method in class org.apache.commons.io.input.<a href="./org/apache/commons/io/input/CharSequenceReader.html" title="class in org.apache.commons.io.input">CharSequenceReader</a></dt>
-<dd>
-<div class="block">Mark is supported (returns true).</div>
-</dd>
-<dt><span class="strong"><a href="./org/apache/commons/io/input/NullInputStream.html#markSupported()">markSupported()</a></span> - Method in class org.apache.commons.io.input.<a href="./org/apache/commons/io/input/NullInputStream.html" title="class in org.apache.commons.io.input">NullInputStream</a></dt>
-<dd>
-<div class="block">Indicates whether <i>mark</i> is supported.</div>
-</dd>
-<dt><span class="strong"><a href="./org/apache/commons/io/input/NullReader.html#markSupported()">markSupported()</a></span> - Method in class org.apache.commons.io.input.<a href="./org/apache/commons/io/input/NullReader.html" title="class in org.apache.commons.io.input">NullReader</a></dt>
-<dd>
-<div class="block">Indicates whether <i>mark</i> is supported.</div>
-</dd>
-<dt><span class="strong"><a href="./org/apache/commons/io/input/ProxyInputStream.html#markSupported()">markSupported()</a></span> - Method in class org.apache.commons.io.input.<a href="./org/apache/commons/io/input/ProxyInputStream.html" title="class in org.apache.commons.io.input">ProxyInputStream</a></dt>
-<dd>
-<div class="block">Invokes the delegate's <code>markSupported()</code> method.</div>
-</dd>
-<dt><span class="strong"><a href="./org/apache/commons/io/input/ProxyReader.html#markSupported()">markSupported()</a></span> - Method in class org.apache.commons.io.input.<a href="./org/apache/commons/io/input/ProxyReader.html" title="class in org.apache.commons.io.input">ProxyReader</a></dt>
-<dd>
-<div class="block">Invokes the delegate's <code>markSupported()</code> method.</div>
-</dd>
-<dt><span class="strong"><a href="./org/apache/commons/io/FileUtils.html#moveDirectory(java.io.File, java.io.File)">moveDirectory(File, File)</a></span> - Static method in class org.apache.commons.io.<a href="./org/apache/commons/io/FileUtils.html" title="class in org.apache.commons.io">FileUtils</a></dt>
-<dd>
-<div class="block">Moves a directory.</div>
-</dd>
-<dt><span class="strong"><a href="./org/apache/commons/io/FileUtils.html#moveDirectoryToDirectory(java.io.File, java.io.File, boolean)">moveDirectoryToDirectory(File, File, boolean)</a></span> - Static method in class org.apache.commons.io.<a href="./org/apache/commons/io/FileUtils.html" title="class in org.apache.commons.io">FileUtils</a></dt>
-<dd>
-<div class="block">Moves a directory to another directory.</div>
-</dd>
-<dt><span class="strong"><a href="./org/apache/commons/io/FileUtils.html#moveFile(java.io.File, java.io.File)">moveFile(File, File)</a></span> - Static method in class org.apache.commons.io.<a href="./org/apache/commons/io/FileUtils.html" title="class in org.apache.commons.io">FileUtils</a></dt>
-<dd>
-<div class="block">Moves a file.</div>
-</dd>
-<dt><span class="strong"><a href="./org/apache/commons/io/FileUtils.html#moveFileToDirectory(java.io.File, java.io.File, boolean)">moveFileToDirectory(File, File, boolean)</a></span> - Static method in class org.apache.commons.io.<a href="./org/apache/commons/io/FileUtils.html" title="class in org.apache.commons.io">FileUtils</a></dt>
-<dd>
-<div class="block">Moves a file to a directory.</div>
-</dd>
-<dt><span class="strong"><a href="./org/apache/commons/io/FileUtils.html#moveToDirectory(java.io.File, java.io.File, boolean)">moveToDirectory(File, File, boolean)</a></span> - Static method in class org.apache.commons.io.<a href="./org/apache/commons/io/FileUtils.html" title="class in org.apache.commons.io">FileUtils</a></dt>
-<dd>
-<div class="block">Moves a file or directory to the destination directory.</div>
-</dd>
-</dl>
-<a name="_N_">
-<!--   -->
-</a>
-<h2 class="title">N</h2>
-<dl>
-<dt><span class="strong"><a href="./org/apache/commons/io/comparator/NameFileComparator.html#NAME_COMPARATOR">NAME_COMPARATOR</a></span> - Static variable in class org.apache.commons.io.comparator.<a href="./org/apache/commons/io/comparator/NameFileComparator.html" title="class in org.apache.commons.io.comparator">NameFileComparator</a></dt>
-<dd>
-<div class="block">Case-sensitive name comparator instance (see <a href="./org/apache/commons/io/IOCase.html#SENSITIVE"><code>IOCase.SENSITIVE</code></a>)</div>
-</dd>
-<dt><span class="strong"><a href="./org/apache/commons/io/comparator/NameFileComparator.html#NAME_INSENSITIVE_COMPARATOR">NAME_INSENSITIVE_COMPARATOR</a></span> - Static variable in class org.apache.commons.io.comparator.<a href="./org/apache/commons/io/comparator/NameFileComparator.html" title="class in org.apache.commons.io.comparator">NameFileComparator</a></dt>
-<dd>
-<div class="block">Case-insensitive name comparator instance (see <a href="./org/apache/commons/io/IOCase.html#INSENSITIVE"><code>IOCase.INSENSITIVE</code></a>)</div>
-</dd>
-<dt><span class="strong"><a href="./org/apache/commons/io/comparator/NameFileComparator.html#NAME_INSENSITIVE_REVERSE">NAME_INSENSITIVE_REVERSE</a></span> - Static variable in class org.apache.commons.io.comparator.<a href="./org/apache/commons/io/comparator/NameFileComparator.html" title="class in org.apache.commons.io.comparator">NameFileComparator</a></dt>
-<dd>
-<div class="block">Reverse case-insensitive name comparator instance (see <a href="./org/apache/commons/io/IOCase.html#INSENSITIVE"><code>IOCase.INSENSITIVE</code></a>)</div>
-</dd>
-<dt><span class="strong"><a href="./org/apache/commons/io/comparator/NameFileComparator.html#NAME_REVERSE">NAME_REVERSE</a></span> - Static variable in class org.apache.commons.io.comparator.<a href="./org/apache/commons/io/comparator/NameFileComparator.html" title="class in org.apache.commons.io.comparator">NameFileComparator</a></dt>
-<dd>
-<div class="block">Reverse case-sensitive name comparator instance (see <a href="./org/apache/commons/io/IOCase.html#SENSITIVE"><code>IOCase.SENSITIVE</code></a>)</div>
-</dd>
-<dt><span class="strong"><a href="./org/apache/commons/io/comparator/NameFileComparator.html#NAME_SYSTEM_COMPARATOR">NAME_SYSTEM_COMPARATOR</a></span> - Static variable in class org.apache.commons.io.comparator.<a href="./org/apache/commons/io/comparator/NameFileComparator.html" title="class in org.apache.commons.io.comparator">NameFileComparator</a></dt>
-<dd>
-<div class="block">System sensitive name comparator instance (see <a href="./org/apache/commons/io/IOCase.html#SYSTEM"><code>IOCase.SYSTEM</code></a>)</div>
-</dd>
-<dt><span class="strong"><a href="./org/apache/commons/io/comparator/NameFileComparator.html#NAME_SYSTEM_REVERSE">NAME_SYSTEM_REVERSE</a></span> - Static variable in class org.apache.commons.io.comparator.<a href="./org/apache/commons/io/comparator/NameFileComparator.html" title="class in org.apache.commons.io.comparator">NameFileComparator</a></dt>
-<dd>
-<div class="block">Reverse system sensitive name comparator instance (see <a href="./org/apache/commons/io/IOCase.html#SYSTEM"><code>IOCase.SYSTEM</code></a>)</div>
-</dd>
-<dt><a href="./org/apache/commons/io/comparator/NameFileComparator.html" title="class in org.apache.commons.io.comparator"><span class="strong">NameFileComparator</span></a> - Class in <a href="./org/apache/commons/io/comparator/package-summary.html">org.apache.commons.io.comparator</a></dt>
-<dd>
-<div class="block">Compare the <b>names</b> of two files for order (see <a href="http://download.oracle.com/javase/6/docs/api/java/io/File.html?is-external=true#getName()" title="class or interface in java.io"><code>File.getName()</code></a>).</div>
-</dd>
-<dt><span class="strong"><a href="./org/apache/commons/io/comparator/NameFileComparator.html#NameFileComparator()">NameFileComparator()</a></span> - Constructor for class org.apache.commons.io.comparator.<a href="./org/apache/commons/io/comparator/NameFileComparator.html" title="class in org.apache.commons.io.comparator">NameFileComparator</a></dt>
-<dd>
-<div class="block">Construct a case sensitive file name comparator instance.</div>
-</dd>
-<dt><span class="strong"><a href="./org/apache/commons/io/comparator/NameFileComparator.html#NameFileComparator(org.apache.commons.io.IOCase)">NameFileComparator(IOCase)</a></span> - Constructor for class org.apache.commons.io.comparator.<a href="./org/apache/commons/io/comparator/NameFileComparator.html" title="class in org.apache.commons.io.comparator">NameFileComparator</a></dt>
-<dd>
-<div class="block">Construct a file name comparator instance with the specified case-sensitivity.</div>
-</dd>
-<dt><span class="strong"><a href="./org/apache/commons/io/filefilter/FileFilterUtils.html#nameFileFilter(java.lang.String)">nameFileFilter(String)</a></span> - Static method in class org.apache.commons.io.filefilter.<a href="./org/apache/commons/io/filefilter/FileFilterUtils.html" title="class in org.apache.commons.io.filefilter">FileFilterUtils</a></dt>
-<dd>
-<div class="block">Returns a filter that returns true if the filename matches the specified text.</div>
-</dd>
-<dt><span class="strong"><a href="./org/apache/commons/io/filefilter/FileFilterUtils.html#nameFileFilter(java.lang.String, org.apache.commons.io.IOCase)">nameFileFilter(String, IOCase)</a></span> - Static method in class org.apache.commons.io.filefilter.<a href="./org/apache/commons/io/filefilter/FileFilterUtils.html" title="class in org.apache.commons.io.filefilter">FileFilterUtils</a></dt>
-<dd>
-<div class="block">Returns a filter that returns true if the filename matches the specified text.</div>
-</dd>
-<dt><a href="./org/apache/commons/io/filefilter/NameFileFilter.html" title="class in org.apache.commons.io.filefilter"><span class="strong">NameFileFilter</span></a> - Class in <a href="./org/apache/commons/io/filefilter/package-summary.html">org.apache.commons.io.filefilter</a></dt>
-<dd>
-<div class="block">Filters filenames for a certain name.</div>
-</dd>
-<dt><span class="strong"><a href="./org/apache/commons/io/filefilter/NameFileFilter.html#NameFileFilter(java.lang.String)">NameFileFilter(String)</a></span> - Constructor for class org.apache.commons.io.filefilter.<a href="./org/apache/commons/io/filefilter/NameFileFilter.html" title="class in org.apache.commons.io.filefilter">NameFileFilter</a></dt>
-<dd>
-<div class="block">Constructs a new case-sensitive name file filter for a single name.</div>
-</dd>
-<dt><span class="strong"><a href="./org/apache/commons/io/filefilter/NameFileFilter.html#NameFileFilter(java.lang.String, org.apache.commons.io.IOCase)">NameFileFilter(String, IOCase)</a></span> - Constructor for class org.apache.commons.io.filefilter.<a href="./org/apache/commons/io/filefilter/NameFileFilter.html" title="class in org.apache.commons.io.filefilter">NameFileFilter</a></dt>
-<dd>
-<div class="block">Construct a new name file filter specifying case-sensitivity.</div>
-</dd>
-<dt><span class="strong"><a href="./org/apache/commons/io/filefilter/NameFileFilter.html#NameFileFilter(java.lang.String[])">NameFileFilter(String[])</a></span> - Constructor for class org.apache.commons.io.filefilter.<a href="./org/apache/commons/io/filefilter/NameFileFilter.html" title="class in org.apache.commons.io.filefilter">NameFileFilter</a></dt>
-<dd>
-<div class="block">Constructs a new case-sensitive name file filter for an array of names.</div>
-</dd>
-<dt><span class="strong"><a href="./org/apache/commons/io/filefilter/NameFileFilter.html#NameFileFilter(java.lang.String[], org.apache.commons.io.IOCase)">NameFileFilter(String[], IOCase)</a></span> - Constructor for class org.apache.commons.io.filefilter.<a href="./org/apache/commons/io/filefilter/NameFileFilter.html" title="class in org.apache.commons.io.filefilter">NameFileFilter</a></dt>
-<dd>
-<div class="block">Constructs a new name file filter for an array of names specifying case-sensitivity.</div>
-</dd>
-<dt><span class="strong"><a href="./org/apache/commons/io/filefilter/NameFileFilter.html#NameFileFilter(java.util.List)">NameFileFilter(List&lt;String&gt;)</a></span> - Constructor for class org.apache.commons.io.filefilter.<a href="./org/apache/commons/io/filefilter/NameFileFilter.html" title="class in org.apache.commons.io.filefilter">NameFileFilter</a></dt>
-<dd>
-<div class="block">Constructs a new case-sensitive name file filter for a list of names.</div>
-</dd>
-<dt><span class="strong"><a href="./org/apache/commons/io/filefilter/NameFileFilter.html#NameFileFilter(java.util.List, org.apache.commons.io.IOCase)">NameFileFilter(List&lt;String&gt;, IOCase)</a></span> - Constructor for class org.apache.commons.io.filefilter.<a href="./org/apache/commons/io/filefilter/NameFileFilter.html" title="class in org.apache.commons.io.filefilter">NameFileFilter</a></dt>
-<dd>
-<div class="block">Constructs a new name file filter for a list of names specifying case-sensitivity.</div>
-</dd>
-<dt><span class="strong"><a href="./org/apache/commons/io/monitor/FileEntry.html#newChildInstance(java.io.File)">newChildInstance(File)</a></span> - Method in class org.apache.commons.io.monitor.<a href="./org/apache/commons/io/monitor/FileEntry.html" title="class in org.apache.commons.io.monitor">FileEntry</a></dt>
-<dd>
-<div class="block">Create a new child instance.</div>
-</dd>
-<dt><span class="strong"><a href="./org/apache/commons/io/LineIterator.html#next()">next()</a></span> - Method in class org.apache.commons.io.<a href="./org/apache/commons/io/LineIterator.html" title="class in org.apache.commons.io">LineIterator</a></dt>
-<dd>
-<div class="block">Returns the next line in the wrapped <code>Reader</code>.</div>
-</dd>
-<dt><span class="strong"><a href="./org/apache/commons/io/LineIterator.html#nextLine()">nextLine()</a></span> - Method in class org.apache.commons.io.<a href="./org/apache/commons/io/LineIterator.html" title="class in org.apache.commons.io">LineIterator</a></dt>
-<dd>
-<div class="block">Returns the next line in the wrapped <code>Reader</code>.</div>
-</dd>
-<dt><span class="strong"><a href="./org/apache/commons/io/FileDeleteStrategy.html#NORMAL">NORMAL</a></span> - Static variable in class org.apache.commons.io.<a href="./org/apache/commons/io/FileDeleteStrategy.html" title="class in org.apache.commons.io">FileDeleteStrategy</a></dt>
-<dd>
-<div class="block">The singleton instance for normal file deletion, which does not permit
- the deletion of directories that are not empty.</div>
-</dd>
-<dt><span class="strong"><a href="./org/apache/commons/io/FilenameUtils.html#normalize(java.lang.String)">normalize(String)</a></span> - Static method in class org.apache.commons.io.<a href="./org/apache/commons/io/FilenameUtils.html" title="class in org.apache.commons.io">FilenameUtils</a></dt>
-<dd>
-<div class="block">Normalizes a path, removing double and single dot path steps.</div>
-</dd>
-<dt><span class="strong"><a href="./org/apache/commons/io/FilenameUtils.html#normalize(java.lang.String, boolean)">normalize(String, boolean)</a></span> - Static method in class org.apache.commons.io.<a href="./org/apache/commons/io/FilenameUtils.html" title="class in org.apache.commons.io">FilenameUtils</a></dt>
-<dd>
-<div class="block">Normalizes a path, removing double and single dot path steps.</div>
-</dd>
-<dt><span class="strong"><a href="./org/apache/commons/io/FilenameUtils.html#normalizeNoEndSeparator(java.lang.String)">normalizeNoEndSeparator(String)</a></span> - Static method in class org.apache.commons.io.<a href="./org/apache/commons/io/FilenameUtils.html" title="class in org.apache.commons.io">FilenameUtils</a></dt>
-<dd>
-<div class="block">Normalizes a path, removing double and single dot path steps,
- and removing any final directory separator.</div>
-</dd>
-<dt><span class="strong"><a href="./org/apache/commons/io/FilenameUtils.html#normalizeNoEndSeparator(java.lang.String, boolean)">normalizeNoEndSeparator(String, boolean)</a></span> - Static method in class org.apache.commons.io.<a href="./org/apache/commons/io/FilenameUtils.html" title="class in org.apache.commons.io">FilenameUtils</a></dt>
-<dd>
-<div class="block">Normalizes a path, removing double and single dot path steps,
- and removing any final directory separator.</div>
-</dd>
-<dt><span class="strong"><a href="./org/apache/commons/io/filefilter/EmptyFileFilter.html#NOT_EMPTY">NOT_EMPTY</a></span> - Static variable in class org.apache.commons.io.filefilter.<a href="./org/apache/commons/io/filefilter/EmptyFileFilter.html" title="class in org.apache.commons.io.filefilter">EmptyFileFilter</a></dt>
-<dd>
-<div class="block">Singleton instance of <i>not-empty</i> filter</div>
-</dd>
-<dt><span class="strong"><a href="./org/apache/commons/io/filefilter/FileFilterUtils.html#notFileFilter(org.apache.commons.io.filefilter.IOFileFilter)">notFileFilter(IOFileFilter)</a></span> - Static method in class org.apache.commons.io.filefilter.<a href="./org/apache/commons/io/filefilter/FileFilterUtils.html" title="class in org.apache.commons.io.filefilter">FileFilterUtils</a></dt>
-<dd>
-<div class="block">Returns a filter that NOTs the specified filter.</div>
-</dd>
-<dt><a href="./org/apache/commons/io/filefilter/NotFileFilter.html" title="class in org.apache.commons.io.filefilter"><span class="strong">NotFileFilter</span></a> - Class in <a href="./org/apache/commons/io/filefilter/package-summary.html">org.apache.commons.io.filefilter</a></dt>
-<dd>
-<div class="block">This filter produces a logical NOT of the filters specified.</div>
-</dd>
-<dt><span class="strong"><a href="./org/apache/commons/io/filefilter/NotFileFilter.html#NotFileFilter(org.apache.commons.io.filefilter.IOFileFilter)">NotFileFilter(IOFileFilter)</a></span> - Constructor for class org.apache.commons.io.filefilter.<a href="./org/apache/commons/io/filefilter/NotFileFilter.html" title="class in org.apache.commons.io.filefilter">NotFileFilter</a></dt>
-<dd>
-<div class="block">Constructs a new file filter that NOTs the result of another filter.</div>
-</dd>
-<dt><span class="strong"><a href="./org/apache/commons/io/output/NullOutputStream.html#NULL_OUTPUT_STREAM">NULL_OUTPUT_STREAM</a></span> - Static variable in class org.apache.commons.io.output.<a href="./org/apache/commons/io/output/NullOutputStream.html" title="class in org.apache.commons.io.output">NullOutputStream</a></dt>
-<dd>
-<div class="block">A singleton.</div>
-</dd>
-<dt><span class="strong"><a href="./org/apache/commons/io/output/NullWriter.html#NULL_WRITER">NULL_WRITER</a></span> - Static variable in class org.apache.commons.io.output.<a href="./org/apache/commons/io/output/NullWriter.html" title="class in org.apache.commons.io.output">NullWriter</a></dt>
-<dd>
-<div class="block">A singleton.</div>
-</dd>
-<dt><a href="./org/apache/commons/io/input/NullInputStream.html" title="class in org.apache.commons.io.input"><span class="strong">NullInputStream</span></a> - Class in <a href="./org/apache/commons/io/input/package-summary.html">org.apache.commons.io.input</a></dt>
-<dd>
-<div class="block">A functional, light weight <a href="http://download.oracle.com/javase/6/docs/api/java/io/InputStream.html?is-external=true" title="class or interface in java.io"><code>InputStream</code></a> that emulates
- a stream of a specified size.</div>
-</dd>
-<dt><span class="strong"><a href="./org/apache/commons/io/input/NullInputStream.html#NullInputStream(long)">NullInputStream(long)</a></span> - Constructor for class org.apache.commons.io.input.<a href="./org/apache/commons/io/input/NullInputStream.html" title="class in org.apache.commons.io.input">NullInputStream</a></dt>
-<dd>
-<div class="block">Create an <a href="http://download.oracle.com/javase/6/docs/api/java/io/InputStream.html?is-external=true" title="class or interface in java.io"><code>InputStream</code></a> that emulates a specified size
- which supports marking and does not throw EOFException.</div>
-</dd>
-<dt><span class="strong"><a href="./org/apache/commons/io/input/NullInputStream.html#NullInputStream(long, boolean, boolean)">NullInputStream(long, boolean, boolean)</a></span> - Constructor for class org.apache.commons.io.input.<a href="./org/apache/commons/io/input/NullInputStream.html" title="class in org.apache.commons.io.input">NullInputStream</a></dt>
-<dd>
-<div class="block">Create an <a href="http://download.oracle.com/javase/6/docs/api/java/io/InputStream.html?is-external=true" title="class or interface in java.io"><code>InputStream</code></a> that emulates a specified
- size with option settings.</div>
-</dd>
-<dt><a href="./org/apache/commons/io/output/NullOutputStream.html" title="class in org.apache.commons.io.output"><span class="strong">NullOutputStream</span></a> - Class in <a href="./org/apache/commons/io/output/package-summary.html">org.apache.commons.io.output</a></dt>
-<dd>
-<div class="block">This OutputStream writes all data to the famous <b>/dev/null</b>.</div>
-</dd>
-<dt><span class="strong"><a href="./org/apache/commons/io/output/NullOutputStream.html#NullOutputStream()">NullOutputStream()</a></span> - Constructor for class org.apache.commons.io.output.<a href="./org/apache/commons/io/output/NullOutputStream.html" title="class in org.apache.commons.io.output">NullOutputStream</a></dt>
-<dd>&nbsp;</dd>
-<dt><a href="./org/apache/commons/io/input/NullReader.html" title="class in org.apache.commons.io.input"><span class="strong">NullReader</span></a> - Class in <a href="./org/apache/commons/io/input/package-summary.html">org.apache.commons.io.input</a></dt>
-<dd>
-<div class="block">A functional, light weight <a href="http://download.oracle.com/javase/6/docs/api/java/io/Reader.html?is-external=true" title="class or interface in java.io"><code>Reader</code></a> that emulates
- a reader of a specified size.</div>
-</dd>
-<dt><span class="strong"><a href="./org/apache/commons/io/input/NullReader.html#NullReader(long)">NullReader(long)</a></span> - Constructor for class org.apache.commons.io.input.<a href="./org/apache/commons/io/input/NullReader.html" title="class in org.apache.commons.io.input">NullReader</a></dt>
-<dd>
-<div class="block">Create a <a href="http://download.oracle.com/javase/6/docs/api/java/io/Reader.html?is-external=true" title="class or interface in java.io"><code>Reader</code></a> that emulates a specified size
- which supports marking and does not throw EOFException.</div>
-</dd>
-<dt><span class="strong"><a href="./org/apache/commons/io/input/NullReader.html#NullReader(long, boolean, boolean)">NullReader(long, boolean, boolean)</a></span> - Constructor for class org.apache.commons.io.input.<a href="./org/apache/commons/io/input/NullReader.html" title="class in org.apache.commons.io.input">NullReader</a></dt>
-<dd>
-<div class="block">Create a <a href="http://download.oracle.com/javase/6/docs/api/java/io/Reader.html?is-external=true" title="class or interface in java.io"><code>Reader</code></a> that emulates a specified
- size with option settings.</div>
-</dd>
-<dt><a href="./org/apache/commons/io/output/NullWriter.html" title="class in org.apache.commons.io.output"><span class="strong">NullWriter</span></a> - Class in <a href="./org/apache/commons/io/output/package-summary.html">org.apache.commons.io.output</a></dt>
-<dd>
-<div class="block">This <a href="http://download.oracle.com/javase/6/docs/api/java/io/Writer.html?is-external=true" title="class or interface in java.io"><code>Writer</code></a> writes all data to the famous <b>/dev/null</b>.</div>
-</dd>
-<dt><span class="strong"><a href="./org/apache/commons/io/output/NullWriter.html#NullWriter()">NullWriter()</a></span> - Constructor for class org.apache.commons.io.output.<a href="./org/apache/commons/io/output/NullWriter.html" title="class in org.apache.commons.io.output">NullWriter</a></dt>
-<dd>
-<div class="block">Constructs a new NullWriter.</div>
-</dd>
-</dl>
-<a name="_O_">
-<!--   -->
-</a>
-<h2 class="title">O</h2>
-<dl>
-<dt><span class="strong"><a href="./org/apache/commons/io/monitor/FileAlterationListener.html#onDirectoryChange(java.io.File)">onDirectoryChange(File)</a></span> - Method in interface org.apache.commons.io.monitor.<a href="./org/apache/commons/io/monitor/FileAlterationListener.html" title="interface in org.apache.commons.io.monitor">FileAlterationListener</a></dt>
-<dd>
-<div class="block">Directory changed Event.</div>
-</dd>
-<dt><span class="strong"><a href="./org/apache/commons/io/monitor/FileAlterationListenerAdaptor.html#onDirectoryChange(java.io.File)">onDirectoryChange(File)</a></span> - Method in class org.apache.commons.io.monitor.<a href="./org/apache/commons/io/monitor/FileAlterationListenerAdaptor.html" title="class in org.apache.commons.io.monitor">FileAlterationListenerAdaptor</a></dt>
-<dd>
-<div class="block">Directory changed Event.</div>
-</dd>
-<dt><span class="strong"><a href="./org/apache/commons/io/monitor/FileAlterationListener.html#onDirectoryCreate(java.io.File)">onDirectoryCreate(File)</a></span> - Method in interface org.apache.commons.io.monitor.<a href="./org/apache/commons/io/monitor/FileAlterationListener.html" title="interface in org.apache.commons.io.monitor">FileAlterationListener</a></dt>
-<dd>
-<div class="block">Directory created Event.</div>
-</dd>
-<dt><span class="strong"><a href="./org/apache/commons/io/monitor/FileAlterationListenerAdaptor.html#onDirectoryCreate(java.io.File)">onDirectoryCreate(File)</a></span> - Method in class org.apache.commons.io.monitor.<a href="./org/apache/commons/io/monitor/FileAlterationListenerAdaptor.html" title="class in org.apache.commons.io.monitor">FileAlterationListenerAdaptor</a></dt>
-<dd>
-<div class="block">Directory created Event.</div>
-</dd>
-<dt><span class="strong"><a href="./org/apache/commons/io/monitor/FileAlterationListener.html#onDirectoryDelete(java.io.File)">onDirectoryDelete(File)</a></span> - Method in interface org.apache.commons.io.monitor.<a href="./org/apache/commons/io/monitor/FileAlterationListener.html" title="interface in org.apache.commons.io.monitor">FileAlterationListener</a></dt>
-<dd>
-<div class="block">Directory deleted Event.</div>
-</dd>
-<dt><span class="strong"><a href="./org/apache/commons/io/monitor/FileAlterationListenerAdaptor.html#onDirectoryDelete(java.io.File)">onDirectoryDelete(File)</a></span> - Method in class org.apache.commons.io.monitor.<a href="./org/apache/commons/io/monitor/FileAlterationListenerAdaptor.html" title="class in org.apache.commons.io.monitor">FileAlterationListenerAdaptor</a></dt>
-<dd>
-<div class="block">Directory deleted Event.</div>
-</dd>
-<dt><span class="strong"><a href="./org/apache/commons/io/FileUtils.html#ONE_EB">ONE_EB</a></span> - Static variable in class org.apache.commons.io.<a href="./org/apache/commons/io/FileUtils.html" title="class in org.apache.commons.io">FileUtils</a></dt>
-<dd>
-<div class="block">The number of bytes in an exabyte.</div>
-</dd>
-<dt><span class="strong"><a href="./org/apache/commons/io/FileUtils.html#ONE_EB_BI">ONE_EB_BI</a></span> - Static variable in class org.apache.commons.io.<a href="./org/apache/commons/io/FileUtils.html" title="class in org.apache.commons.io">FileUtils</a></dt>
-<dd>
-<div class="block">The number of bytes in an exabyte.</div>
-</dd>
-<dt><span class="strong"><a href="./org/apache/commons/io/FileUtils.html#ONE_GB">ONE_GB</a></span> - Static variable in class org.apache.commons.io.<a href="./org/apache/commons/io/FileUtils.html" title="class in org.apache.commons.io">FileUtils</a></dt>
-<dd>
-<div class="block">The number of bytes in a gigabyte.</div>
-</dd>
-<dt><span class="strong"><a href="./org/apache/commons/io/FileUtils.html#ONE_GB_BI">ONE_GB_BI</a></span> - Static variable in class org.apache.commons.io.<a href="./org/apache/commons/io/FileUtils.html" title="class in org.apache.commons.io">FileUtils</a></dt>
-<dd>
-<div class="block">The number of bytes in a gigabyte.</div>
-</dd>
-<dt><span class="strong"><a href="./org/apache/commons/io/FileUtils.html#ONE_KB">ONE_KB</a></span> - Static variable in class org.apache.commons.io.<a href="./org/apache/commons/io/FileUtils.html" title="class in org.apache.commons.io">FileUtils</a></dt>
-<dd>
-<div class="block">The number of bytes in a kilobyte.</div>
-</dd>
-<dt><span class="strong"><a href="./org/apache/commons/io/FileUtils.html#ONE_KB_BI">ONE_KB_BI</a></span> - Static variable in class org.apache.commons.io.<a href="./org/apache/commons/io/FileUtils.html" title="class in org.apache.commons.io">FileUtils</a></dt>
-<dd>
-<div class="block">The number of bytes in a kilobyte.</div>
-</dd>
-<dt><span class="strong"><a href="./org/apache/commons/io/FileUtils.html#ONE_MB">ONE_MB</a></span> - Static variable in class org.apache.commons.io.<a href="./org/apache/commons/io/FileUtils.html" title="class in org.apache.commons.io">FileUtils</a></dt>
-<dd>
-<div class="block">The number of bytes in a megabyte.</div>
-</dd>
-<dt><span class="strong"><a href="./org/apache/commons/io/FileUtils.html#ONE_MB_BI">ONE_MB_BI</a></span> - Static variable in class org.apache.commons.io.<a href="./org/apache/commons/io/FileUtils.html" title="class in org.apache.commons.io">FileUtils</a></dt>
-<dd>
-<div class="block">The number of bytes in a megabyte.</div>
-</dd>
-<dt><span class="strong"><a href="./org/apache/commons/io/FileUtils.html#ONE_PB">ONE_PB</a></span> - Static variable in class org.apache.commons.io.<a href="./org/apache/commons/io/FileUtils.html" title="class in org.apache.commons.io">FileUtils</a></dt>
-<dd>
-<div class="block">The number of bytes in a petabyte.</div>
-</dd>
-<dt><span class="strong"><a href="./org/apache/commons/io/FileUtils.html#ONE_PB_BI">ONE_PB_BI</a></span> - Static variable in class org.apache.commons.io.<a href="./org/apache/commons/io/FileUtils.html" title="class in org.apache.commons.io">FileUtils</a></dt>
-<dd>
-<div class="block">The number of bytes in a petabyte.</div>
-</dd>
-<dt><span class="strong"><a href="./org/apache/commons/io/FileUtils.html#ONE_TB">ONE_TB</a></span> - Static variable in class org.apache.commons.io.<a href="./org/apache/commons/io/FileUtils.html" title="class in org.apache.commons.io">FileUtils</a></dt>
-<dd>
-<div class="block">The number of bytes in a terabyte.</div>
-</dd>
-<dt><span class="strong"><a href="./org/apache/commons/io/FileUtils.html#ONE_TB_BI">ONE_TB_BI</a></span> - Static variable in class org.apache.commons.io.<a href="./org/apache/commons/io/FileUtils.html" title="class in org.apache.commons.io">FileUtils</a></dt>
-<dd>
-<div class="block">The number of bytes in a terabyte.</div>
-</dd>
-<dt><span class="strong"><a href="./org/apache/commons/io/FileUtils.html#ONE_YB">ONE_YB</a></span> - Static variable in class org.apache.commons.io.<a href="./org/apache/commons/io/FileUtils.html" title="class in org.apache.commons.io">FileUtils</a></dt>
-<dd>
-<div class="block">The number of bytes in a yottabyte.</div>
-</dd>
-<dt><span class="strong"><a href="./org/apache/commons/io/FileUtils.html#ONE_ZB">ONE_ZB</a></span> - Static variable in class org.apache.commons.io.<a href="./org/apache/commons/io/FileUtils.html" title="class in org.apache.commons.io">FileUtils</a></dt>
-<dd>
-<div class="block">The number of bytes in a zettabyte.</div>
-</dd>
-<dt><span class="strong"><a href="./org/apache/commons/io/monitor/FileAlterationListener.html#onFileChange(java.io.File)">onFileChange(File)</a></span> - Method in interface org.apache.commons.io.monitor.<a href="./org/apache/commons/io/monitor/FileAlterationListener.html" title="interface in org.apache.commons.io.monitor">FileAlterationListener</a></dt>
-<dd>
-<div class="block">File changed Event.</div>
-</dd>
-<dt><span class="strong"><a href="./org/apache/commons/io/monitor/FileAlterationListenerAdaptor.html#onFileChange(java.io.File)">onFileChange(File)</a></span> - Method in class org.apache.commons.io.monitor.<a href="./org/apache/commons/io/monitor/FileAlterationListenerAdaptor.html" title="class in org.apache.commons.io.monitor">FileAlterationListenerAdaptor</a></dt>
-<dd>
-<div class="block">File changed Event.</div>
-</dd>
-<dt><span class="strong"><a href="./org/apache/commons/io/monitor/FileAlterationListener.html#onFileCreate(java.io.File)">onFileCreate(File)</a></span> - Method in interface org.apache.commons.io.monitor.<a href="./org/apache/commons/io/monitor/FileAlterationListener.html" title="interface in org.apache.commons.io.monitor">FileAlterationListener</a></dt>
-<dd>
-<div class="block">File created Event.</div>
-</dd>
-<dt><span class="strong"><a href="./org/apache/commons/io/monitor/FileAlterationListenerAdaptor.html#onFileCreate(java.io.File)">onFileCreate(File)</a></span> - Method in class org.apache.commons.io.monitor.<a href="./org/apache/commons/io/monitor/FileAlterationListenerAdaptor.html" title="class in org.apache.commons.io.monitor">FileAlterationListenerAdaptor</a></dt>
-<dd>
-<div class="block">File created Event.</div>
-</dd>
-<dt><span class="strong"><a href="./org/apache/commons/io/monitor/FileAlterationListener.html#onFileDelete(java.io.File)">onFileDelete(File)</a></span> - Method in interface org.apache.commons.io.monitor.<a href="./org/apache/commons/io/monitor/FileAlterationListener.html" title="interface in org.apache.commons.io.monitor">FileAlterationListener</a></dt>
-<dd>
-<div class="block">File deleted Event.</div>
-</dd>
-<dt><span class="strong"><a href="./org/apache/commons/io/monitor/FileAlterationListenerAdaptor.html#onFileDelete(java.io.File)">onFileDelete(File)</a></span> - Method in class org.apache.commons.io.monitor.<a href="./org/apache/commons/io/monitor/FileAlterationListenerAdaptor.html" title="class in org.apache.commons.io.monitor">FileAlterationListenerAdaptor</a></dt>
-<dd>
-<div class="block">File deleted Event.</div>
-</dd>
-<dt><span class="strong"><a href="./org/apache/commons/io/monitor/FileAlterationListener.html#onStart(org.apache.commons.io.monitor.FileAlterationObserver)">onStart(FileAlterationObserver)</a></span> - Method in interface org.apache.commons.io.monitor.<a href="./org/apache/commons/io/monitor/FileAlterationListener.html" title="interface in org.apache.commons.io.monitor">FileAlterationListener</a></dt>
-<dd>
-<div class="block">File system observer started checking event.</div>
-</dd>
-<dt><span class="strong"><a href="./org/apache/commons/io/monitor/FileAlterationListenerAdaptor.html#onStart(org.apache.commons.io.monitor.FileAlterationObserver)">onStart(FileAlterationObserver)</a></span> - Method in class org.apache.commons.io.monitor.<a href="./org/apache/commons/io/monitor/FileAlterationListenerAdaptor.html" title="class in org.apache.commons.io.monitor">FileAlterationListenerAdaptor</a></dt>
-<dd>
-<div class="block">File system observer started checking event.</div>
-</dd>
-<dt><span class="strong"><a href="./org/apache/commons/io/monitor/FileAlterationListener.html#onStop(org.apache.commons.io.monitor.FileAlterationObserver)">onStop(FileAlterationObserver)</a></span> - Method in interface org.apache.commons.io.monitor.<a href="./org/apache/commons/io/monitor/FileAlterationListener.html" title="interface in org.apache.commons.io.monitor">FileAlterationListener</a></dt>
-<dd>
-<div class="block">File system observer finished checking event.</div>
-</dd>
-<dt><span class="strong"><a href="./org/apache/commons/io/monitor/FileAlterationListenerAdaptor.html#onStop(org.apache.commons.io.monitor.FileAlterationObserver)">onStop(FileAlterationObserver)</a></span> - Method in class org.apache.commons.io.monitor.<a href="./org/apache/commons/io/monitor/FileAlterationListenerAdaptor.html" title="class in org.apache.commons.io.monitor">FileAlterationListenerAdaptor</a></dt>
-<dd>
-<div class="block">File system observer finished checking event.</div>
-</dd>
-<dt><span class="strong"><a href="./org/apache/commons/io/FileUtils.html#openInputStream(java.io.File)">openInputStream(File)</a></span> - Static method in class org.apache.commons.io.<a href="./org/apache/commons/io/FileUtils.html" title="class in org.apache.commons.io">FileUtils</a></dt>
-<dd>
-<div class="block">Opens a <a href="http://download.oracle.com/javase/6/docs/api/java/io/FileInputStream.html?is-external=true" title="class or interface in java.io"><code>FileInputStream</code></a> for the specified file, providing better
- error messages than simply calling <code>new FileInputStream(file)</code>.</div>
-</dd>
-<dt><span class="strong"><a href="./org/apache/commons/io/FileUtils.html#openOutputStream(java.io.File)">openOutputStream(File)</a></span> - Static method in class org.apache.commons.io.<a href="./org/apache/commons/io/FileUtils.html" title="class in org.apache.commons.io">FileUtils</a></dt>
-<dd>
-<div class="block">Opens a <a href="http://download.oracle.com/javase/6/docs/api/java/io/FileOutputStream.html?is-external=true" title="class or interface in java.io"><code>FileOutputStream</code></a> for the specified file, checking and
- creating the parent directory if it does not exist.</div>
-</dd>
-<dt><span class="strong"><a href="./org/apache/commons/io/FileUtils.html#openOutputStream(java.io.File, boolean)">openOutputStream(File, boolean)</a></span> - Static method in class org.apache.commons.io.<a href="./org/apache/commons/io/FileUtils.html" title="class in org.apache.commons.io">FileUtils</a></dt>
-<dd>
-<div class="block">Opens a <a href="http://download.oracle.com/javase/6/docs/api/java/io/FileOutputStream.html?is-external=true" title="class or interface in java.io"><code>FileOutputStream</code></a> for the specified file, checking and
- creating the parent directory if it does not exist.</div>
-</dd>
-<dt><span class="strong"><a href="./org/apache/commons/io/filefilter/FileFilterUtils.html#or(org.apache.commons.io.filefilter.IOFileFilter...)">or(IOFileFilter...)</a></span> - Static method in class org.apache.commons.io.filefilter.<a href="./org/apache/commons/io/filefilter/FileFilterUtils.html" title="class in org.apache.commons.io.filefilter">FileFilterUtils</a></dt>
-<dd>
-<div class="block">Returns a filter that ORs the specified filters.</div>
-</dd>
-<dt><span class="strong"><a href="./org/apache/commons/io/filefilter/FileFilterUtils.html#orFileFilter(org.apache.commons.io.filefilter.IOFileFilter, org.apache.commons.io.filefilter.IOFileFilter)">orFileFilter(IOFileFilter, IOFileFilter)</a></span> - Static method in class org.apache.commons.io.filefilter.<a href="./org/apache/commons/io/filefilter/FileFilterUtils.html" title="class in org.apache.commons.io.filefilter">FileFilterUtils</a></dt>
-<dd>
-<div class="block"><span class="strong">Deprecated.</span>
-<div class="block"><i>use <a href="./org/apache/commons/io/filefilter/FileFilterUtils.html#or(org.apache.commons.io.filefilter.IOFileFilter...)"><code>FileFilterUtils.or(IOFileFilter...)</code></a></i></div>
-</div>
-</dd>
-<dt><a href="./org/apache/commons/io/filefilter/OrFileFilter.html" title="class in org.apache.commons.io.filefilter"><span class="strong">OrFileFilter</span></a> - Class in <a href="./org/apache/commons/io/filefilter/package-summary.html">org.apache.commons.io.filefilter</a></dt>
-<dd>
-<div class="block">A <a href="http://download.oracle.com/javase/6/docs/api/java/io/FileFilter.html?is-external=true" title="class or interface in java.io"><code>FileFilter</code></a> providing conditional OR logic across a list of
- file filters.</div>
-</dd>
-<dt><span class="strong"><a href="./org/apache/commons/io/filefilter/OrFileFilter.html#OrFileFilter()">OrFileFilter()</a></span> - Constructor for class org.apache.commons.io.filefilter.<a href="./org/apache/commons/io/filefilter/OrFileFilter.html" title="class in org.apache.commons.io.filefilter">OrFileFilter</a></dt>
-<dd>
-<div class="block">Constructs a new instance of <code>OrFileFilter</code>.</div>
-</dd>
-<dt><span class="strong"><a href="./org/apache/commons/io/filefilter/OrFileFilter.html#OrFileFilter(java.util.List)">OrFileFilter(List&lt;IOFileFilter&gt;)</a></span> - Constructor for class org.apache.commons.io.filefilter.<a href="./org/apache/commons/io/filefilter/OrFileFilter.html" title="class in org.apache.commons.io.filefilter">OrFileFilter</a></dt>
-<dd>
-<div class="block">Constructs a new instance of <code>OrFileFilter</code>
- with the specified filters.</div>
-</dd>
-<dt><span class="strong"><a href="./org/apache/commons/io/filefilter/OrFileFilter.html#OrFileFilter(org.apache.commons.io.filefilter.IOFileFilter, org.apache.commons.io.filefilter.IOFileFilter)">OrFileFilter(IOFileFilter, IOFileFilter)</a></span> - Constructor for class org.apache.commons.io.filefilter.<a href="./org/apache/commons/io/filefilter/OrFileFilter.html" title="class in org.apache.commons.io.filefilter">OrFileFilter</a></dt>
-<dd>
-<div class="block">Constructs a new file filter that ORs the result of two other filters.</div>
-</dd>
-<dt><a href="./org/apache/commons/io/package-summary.html">org.apache.commons.io</a> - package org.apache.commons.io</dt>
-<dd>
-<div class="block">
-This package defines utility classes for working with streams, readers,
-writers and files.</div>
-</dd>
-<dt><a href="./org/apache/commons/io/comparator/package-summary.html">org.apache.commons.io.comparator</a> - package org.apache.commons.io.comparator</dt>
-<dd>
-<div class="block">This package provides various <a href="http://download.oracle.com/javase/6/docs/api/java/util/Comparator.html?is-external=true" title="class or interface in java.util"><code>Comparator</code></a> implementations
-for <a href="http://download.oracle.com/javase/6/docs/api/java/io/File.html?is-external=true" title="class or interface in java.io"><code>File</code></a>s.</div>
-</dd>
-<dt><a href="./org/apache/commons/io/filefilter/package-summary.html">org.apache.commons.io.filefilter</a> - package org.apache.commons.io.filefilter</dt>
-<dd>
-<div class="block">This package defines an interface (IOFileFilter) that combines both 
-<a href="http://download.oracle.com/javase/6/docs/api/java/io/FileFilter.html?is-external=true" title="class or interface in java.io"><code>FileFilter</code></a> and <a href="http://download.oracle.com/javase/6/docs/api/java/io/FilenameFilter.html?is-external=true" title="class or interface in java.io"><code>FilenameFilter</code></a>.</div>
-</dd>
-<dt><a href="./org/apache/commons/io/input/package-summary.html">org.apache.commons.io.input</a> - package org.apache.commons.io.input</dt>
-<dd>
-<div class="block">
-This package provides implementations of input classes, such as
-<code>InputStream</code> and <code>Reader</code>.</div>
-</dd>
-<dt><a href="./org/apache/commons/io/monitor/package-summary.html">org.apache.commons.io.monitor</a> - package org.apache.commons.io.monitor</dt>
-<dd>
-<div class="block">
-This package provides a component for monitoring file system events
-(directory and file create, update and delete events).</div>
-</dd>
-<dt><a href="./org/apache/commons/io/output/package-summary.html">org.apache.commons.io.output</a> - package org.apache.commons.io.output</dt>
-<dd>
-<div class="block">
-This package provides implementations of output classes, such as
-<code>OutputStream</code> and <code>Writer</code>.</div>
-</dd>
-</dl>
-<a name="_P_">
-<!--   -->
-</a>
-<h2 class="title">P</h2>
-<dl>
-<dt><span class="strong"><a href="./org/apache/commons/io/comparator/PathFileComparator.html#PATH_COMPARATOR">PATH_COMPARATOR</a></span> - Static variable in class org.apache.commons.io.comparator.<a href="./org/apache/commons/io/comparator/PathFileComparator.html" title="class in org.apache.commons.io.comparator">PathFileComparator</a></dt>
-<dd>
-<div class="block">Case-sensitive path comparator instance (see <a href="./org/apache/commons/io/IOCase.html#SENSITIVE"><code>IOCase.SENSITIVE</code></a>)</div>
-</dd>
-<dt><span class="strong"><a href="./org/apache/commons/io/comparator/PathFileComparator.html#PATH_INSENSITIVE_COMPARATOR">PATH_INSENSITIVE_COMPARATOR</a></span> - Static variable in class org.apache.commons.io.comparator.<a href="./org/apache/commons/io/comparator/PathFileComparator.html" title="class in org.apache.commons.io.comparator">PathFileComparator</a></dt>
-<dd>
-<div class="block">Case-insensitive path comparator instance (see <a href="./org/apache/commons/io/IOCase.html#INSENSITIVE"><code>IOCase.INSENSITIVE</code></a>)</div>
-</dd>
-<dt><span class="strong"><a href="./org/apache/commons/io/comparator/PathFileComparator.html#PATH_INSENSITIVE_REVERSE">PATH_INSENSITIVE_REVERSE</a></span> - Static variable in class org.apache.commons.io.comparator.<a href="./org/apache/commons/io/comparator/PathFileComparator.html" title="class in org.apache.commons.io.comparator">PathFileComparator</a></dt>
-<dd>
-<div class="block">Reverse case-insensitive path comparator instance (see <a href="./org/apache/commons/io/IOCase.html#INSENSITIVE"><code>IOCase.INSENSITIVE</code></a>)</div>
-</dd>
-<dt><span class="strong"><a href="./org/apache/commons/io/comparator/PathFileComparator.html#PATH_REVERSE">PATH_REVERSE</a></span> - Static variable in class org.apache.commons.io.comparator.<a href="./org/apache/commons/io/comparator/PathFileComparator.html" title="class in org.apache.commons.io.comparator">PathFileComparator</a></dt>
-<dd>
-<div class="block">Reverse case-sensitive path comparator instance (see <a href="./org/apache/commons/io/IOCase.html#SENSITIVE"><code>IOCase.SENSITIVE</code></a>)</div>
-</dd>
-<dt><span class="strong"><a href="./org/apache/commons/io/comparator/PathFileComparator.html#PATH_SYSTEM_COMPARATOR">PATH_SYSTEM_COMPARATOR</a></span> - Static variable in class org.apache.commons.io.comparator.<a href="./org/apache/commons/io/comparator/PathFileComparator.html" title="class in org.apache.commons.io.comparator">PathFileComparator</a></dt>
-<dd>
-<div class="block">System sensitive path comparator instance (see <a href="./org/apache/commons/io/IOCase.html#SYSTEM"><code>IOCase.SYSTEM</code></a>)</div>
-</dd>
-<dt><span class="strong"><a href="./org/apache/commons/io/comparator/PathFileComparator.html#PATH_SYSTEM_REVERSE">PATH_SYSTEM_REVERSE</a></span> - Static variable in class org.apache.commons.io.comparator.<a href="./org/apache/commons/io/comparator/PathFileComparator.html" title="class in org.apache.commons.io.comparator">PathFileComparator</a></dt>
-<dd>
-<div class="block">Reverse system sensitive path comparator instance (see <a href="./org/apache/commons/io/IOCase.html#SYSTEM"><code>IOCase.SYSTEM</code></a>)</div>
-</dd>
-<dt><a href="./org/apache/commons/io/comparator/PathFileComparator.html" title="class in org.apache.commons.io.comparator"><span class="strong">PathFileComparator</span></a> - Class in <a href="./org/apache/commons/io/comparator/package-summary.html">org.apache.commons.io.comparator</a></dt>
-<dd>
-<div class="block">Compare the <b>path</b> of two files for order (see <a href="http://download.oracle.com/javase/6/docs/api/java/io/File.html?is-external=true#getPath()" title="class or interface in java.io"><code>File.getPath()</code></a>).</div>
-</dd>
-<dt><span class="strong"><a href="./org/apache/commons/io/comparator/PathFileComparator.html#PathFileComparator()">PathFileComparator()</a></span> - Constructor for class org.apache.commons.io.comparator.<a href="./org/apache/commons/io/comparator/PathFileComparator.html" title="class in org.apache.commons.io.comparator">PathFileComparator</a></dt>
-<dd>
-<div class="block">Construct a case sensitive file path comparator instance.</div>
-</dd>
-<dt><span class="strong"><a href="./org/apache/commons/io/comparator/PathFileComparator.html#PathFileComparator(org.apache.commons.io.IOCase)">PathFileComparator(IOCase)</a></span> - Constructor for class org.apache.commons.io.comparator.<a href="./org/apache/commons/io/comparator/PathFileComparator.html" title="class in org.apache.commons.io.comparator">PathFileComparator</a></dt>
-<dd>
-<div class="block">Construct a file path comparator instance with the specified case-sensitivity.</div>
-</dd>
-<dt><span class="strong"><a href="./org/apache/commons/io/filefilter/FileFilterUtils.html#prefixFileFilter(java.lang.String)">prefixFileFilter(String)</a></span> - Static method in class org.apache.commons.io.filefilter.<a href="./org/apache/commons/io/filefilter/FileFilterUtils.html" title="class in org.apache.commons.io.filefilter">FileFilterUtils</a></dt>
-<dd>
-<div class="block">Returns a filter that returns true if the filename starts with the specified text.</div>
-</dd>
-<dt><span class="strong"><a href="./org/apache/commons/io/filefilter/FileFilterUtils.html#prefixFileFilter(java.lang.String, org.apache.commons.io.IOCase)">prefixFileFilter(String, IOCase)</a></span> - Static method in class org.apache.commons.io.filefilter.<a href="./org/apache/commons/io/filefilter/FileFilterUtils.html" title="class in org.apache.commons.io.filefilter">FileFilterUtils</a></dt>
-<dd>
-<div class="block">Returns a filter that returns true if the filename starts with the specified text.</div>
-</dd>
-<dt><a href="./org/apache/commons/io/filefilter/PrefixFileFilter.html" title="class in org.apache.commons.io.filefilter"><span class="strong">PrefixFileFilter</span></a> - Class in <a href="./org/apache/commons/io/filefilter/package-summary.html">org.apache.commons.io.filefilter</a></dt>
-<dd>
-<div class="block">Filters filenames for a certain prefix.</div>
-</dd>
-<dt><span class="strong"><a href="./org/apache/commons/io/filefilter/PrefixFileFilter.html#PrefixFileFilter(java.lang.String)">PrefixFileFilter(String)</a></span> - Constructor for class org.apache.commons.io.filefilter.<a href="./org/apache/commons/io/filefilter/PrefixFileFilter.html" title="class in org.apache.commons.io.filefilter">PrefixFileFilter</a></dt>
-<dd>
-<div class="block">Constructs a new Prefix file filter for a single prefix.</div>
-</dd>
-<dt><span class="strong"><a href="./org/apache/commons/io/filefilter/PrefixFileFilter.html#PrefixFileFilter(java.lang.String, org.apache.commons.io.IOCase)">PrefixFileFilter(String, IOCase)</a></span> - Constructor for class org.apache.commons.io.filefilter.<a href="./org/apache/commons/io/filefilter/PrefixFileFilter.html" title="class in org.apache.commons.io.filefilter">PrefixFileFilter</a></dt>
-<dd>
-<div class="block">Constructs a new Prefix file filter for a single prefix
- specifying case-sensitivity.</div>
-</dd>
-<dt><span class="strong"><a href="./org/apache/commons/io/filefilter/PrefixFileFilter.html#PrefixFileFilter(java.lang.String[])">PrefixFileFilter(String[])</a></span> - Constructor for class org.apache.commons.io.filefilter.<a href="./org/apache/commons/io/filefilter/PrefixFileFilter.html" title="class in org.apache.commons.io.filefilter">PrefixFileFilter</a></dt>
-<dd>
-<div class="block">Constructs a new Prefix file filter for any of an array of prefixes.</div>
-</dd>
-<dt><span class="strong"><a href="./org/apache/commons/io/filefilter/PrefixFileFilter.html#PrefixFileFilter(java.lang.String[], org.apache.commons.io.IOCase)">PrefixFileFilter(String[], IOCase)</a></span> - Constructor for class org.apache.commons.io.filefilter.<a href="./org/apache/commons/io/filefilter/PrefixFileFilter.html" title="class in org.apache.commons.io.filefilter">PrefixFileFilter</a></dt>
-<dd>
-<div class="block">Constructs a new Prefix file filter for any of an array of prefixes
- specifying case-sensitivity.</div>
-</dd>
-<dt><span class="strong"><a href="./org/apache/commons/io/filefilter/PrefixFileFilter.html#PrefixFileFilter(java.util.List)">PrefixFileFilter(List&lt;String&gt;)</a></span> - Constructor for class org.apache.commons.io.filefilter.<a href="./org/apache/commons/io/filefilter/PrefixFileFilter.html" title="class in org.apache.commons.io.filefilter">PrefixFileFilter</a></dt>
-<dd>
-<div class="block">Constructs a new Prefix file filter for a list of prefixes.</div>
-</dd>
-<dt><span class="strong"><a href="./org/apache/commons/io/filefilter/PrefixFileFilter.html#PrefixFileFilter(java.util.List, org.apache.commons.io.IOCase)">PrefixFileFilter(List&lt;String&gt;, IOCase)</a></span> - Constructor for class org.apache.commons.io.filefilter.<a href="./org/apache/commons/io/filefilter/PrefixFileFilter.html" title="class in org.apache.commons.io.filefilter">PrefixFileFilter</a></dt>
-<dd>
-<div class="block">Constructs a new Prefix file filter for a list of prefixes
- specifying case-sensitivity.</div>
-</dd>
-<dt><span class="strong"><a href="./org/apache/commons/io/input/NullInputStream.html#processByte()">processByte()</a></span> - Method in class org.apache.commons.io.input.<a href="./org/apache/commons/io/input/NullInputStream.html" title="class in org.apache.commons.io.input">NullInputStream</a></dt>
-<dd>
-<div class="block">Return a byte value for the  <code>read()</code> method.</div>
-</dd>
-<dt><span class="strong"><a href="./org/apache/commons/io/input/NullInputStream.html#processBytes(byte[], int, int)">processBytes(byte[], int, int)</a></span> - Method in class org.apache.commons.io.input.<a href="./org/apache/commons/io/input/NullInputStream.html" title="class in org.apache.commons.io.input">NullInputStream</a></dt>
-<dd>
-<div class="block">Process the bytes for the <code>read(byte[], offset, length)</code>
- method.</div>
-</dd>
-<dt><span class="strong"><a href="./org/apache/commons/io/input/NullReader.html#processChar()">processChar()</a></span> - Method in class org.apache.commons.io.input.<a href="./org/apache/commons/io/input/NullReader.html" title="class in org.apache.commons.io.input">NullReader</a></dt>
-<dd>
-<div class="block">Return a character value for the  <code>read()</code> method.</div>
-</dd>
-<dt><span class="strong"><a href="./org/apache/commons/io/input/NullReader.html#processChars(char[], int, int)">processChars(char[], int, int)</a></span> - Method in class org.apache.commons.io.input.<a href="./org/apache/commons/io/input/NullReader.html" title="class in org.apache.commons.io.input">NullReader</a></dt>
-<dd>
-<div class="block">Process the characters for the <code>read(char[], offset, length)</code>
- method.</div>
-</dd>
-<dt><a href="./org/apache/commons/io/input/ProxyInputStream.html" title="class in org.apache.commons.io.input"><span class="strong">ProxyInputStream</span></a> - Class in <a href="./org/apache/commons/io/input/package-summary.html">org.apache.commons.io.input</a></dt>
-<dd>
-<div class="block">A Proxy stream which acts as expected, that is it passes the method
- calls on to the proxied stream and doesn't change which methods are
- being called.</div>
-</dd>
-<dt><span class="strong"><a href="./org/apache/commons/io/input/ProxyInputStream.html#ProxyInputStream(java.io.InputStream)">ProxyInputStream(InputStream)</a></span> - Constructor for class org.apache.commons.io.input.<a href="./org/apache/commons/io/input/ProxyInputStream.html" title="class in org.apache.commons.io.input">ProxyInputStream</a></dt>
-<dd>
-<div class="block">Constructs a new ProxyInputStream.</div>
-</dd>
-<dt><a href="./org/apache/commons/io/output/ProxyOutputStream.html" title="class in org.apache.commons.io.output"><span class="strong">ProxyOutputStream</span></a> - Class in <a href="./org/apache/commons/io/output/package-summary.html">org.apache.commons.io.output</a></dt>
-<dd>
-<div class="block">A Proxy stream which acts as expected, that is it passes the method 
- calls on to the proxied stream and doesn't change which methods are 
- being called.</div>
-</dd>
-<dt><span class="strong"><a href="./org/apache/commons/io/output/ProxyOutputStream.html#ProxyOutputStream(java.io.OutputStream)">ProxyOutputStream(OutputStream)</a></span> - Constructor for class org.apache.commons.io.output.<a href="./org/apache/commons/io/output/ProxyOutputStream.html" title="class in org.apache.commons.io.output">ProxyOutputStream</a></dt>
-<dd>
-<div class="block">Constructs a new ProxyOutputStream.</div>
-</dd>
-<dt><a href="./org/apache/commons/io/input/ProxyReader.html" title="class in org.apache.commons.io.input"><span class="strong">ProxyReader</span></a> - Class in <a href="./org/apache/commons/io/input/package-summary.html">org.apache.commons.io.input</a></dt>
-<dd>
-<div class="block">A Proxy stream which acts as expected, that is it passes the method 
- calls on to the proxied stream and doesn't change which methods are 
- being called.</div>
-</dd>
-<dt><span class="strong"><a href="./org/apache/commons/io/input/ProxyReader.html#ProxyReader(java.io.Reader)">ProxyReader(Reader)</a></span> - Constructor for class org.apache.commons.io.input.<a href="./org/apache/commons/io/input/ProxyReader.html" title="class in org.apache.commons.io.input">ProxyReader</a></dt>
-<dd>
-<div class="block">Constructs a new ProxyReader.</div>
-</dd>
-<dt><a href="./org/apache/commons/io/output/ProxyWriter.html" title="class in org.apache.commons.io.output"><span class="strong">ProxyWriter</span></a> - Class in <a href="./org/apache/commons/io/output/package-summary.html">org.apache.commons.io.output</a></dt>
-<dd>
-<div class="block">A Proxy stream which acts as expected, that is it passes the method 
- calls on to the proxied stream and doesn't change which methods are 
- being called.</div>
-</dd>
-<dt><span class="strong"><a href="./org/apache/commons/io/output/ProxyWriter.html#ProxyWriter(java.io.Writer)">ProxyWriter(Writer)</a></span> - Constructor for class org.apache.commons.io.output.<a href="./org/apache/commons/io/output/ProxyWriter.html" title="class in org.apache.commons.io.output">ProxyWriter</a></dt>
-<dd>
-<div class="block">Constructs a new ProxyWriter.</div>
-</dd>
-</dl>
-<a name="_R_">
-<!--   -->
-</a>
-<h2 class="title">R</h2>
-<dl>
-<dt><span class="strong"><a href="./org/apache/commons/io/input/BOMInputStream.html#read()">read()</a></span> - Method in class org.apache.commons.io.input.<a href="./org/apache/commons/io/input/BOMInputStream.html" title="class in org.apache.commons.io.input">BOMInputStream</a></dt>
-<dd>
-<div class="block">Invokes the delegate's <code>read()</code> method, detecting and optionally skipping BOM.</div>
-</dd>
-<dt><span class="strong"><a href="./org/apache/commons/io/input/BOMInputStream.html#read(byte[], int, int)">read(byte[], int, int)</a></span> - Method in class org.apache.commons.io.input.<a href="./org/apache/commons/io/input/BOMInputStream.html" title="class in org.apache.commons.io.input">BOMInputStream</a></dt>
-<dd>
-<div class="block">Invokes the delegate's <code>read(byte[], int, int)</code> method, detecting and optionally skipping BOM.</div>
-</dd>
-<dt><span class="strong"><a href="./org/apache/commons/io/input/BOMInputStream.html#read(byte[])">read(byte[])</a></span> - Method in class org.apache.commons.io.input.<a href="./org/apache/commons/io/input/BOMInputStream.html" title="class in org.apache.commons.io.input">BOMInputStream</a></dt>
-<dd>
-<div class="block">Invokes the delegate's <code>read(byte[])</code> method, detecting and optionally skipping BOM.</div>
-</dd>
-<dt><span class="strong"><a href="./org/apache/commons/io/input/BoundedInputStream.html#read()">read()</a></span> - Method in class org.apache.commons.io.input.<a href="./org/apache/commons/io/input/BoundedInputStream.html" title="class in org.apache.commons.io.input">BoundedInputStream</a></dt>
-<dd>
-<div class="block">Invokes the delegate's <code>read()</code> method if
- the current position is less than the limit.</div>
-</dd>
-<dt><span class="strong"><a href="./org/apache/commons/io/input/BoundedInputStream.html#read(byte[])">read(byte[])</a></span> - Method in class org.apache.commons.io.input.<a href="./org/apache/commons/io/input/BoundedInputStream.html" title="class in org.apache.commons.io.input">BoundedInputStream</a></dt>
-<dd>
-<div class="block">Invokes the delegate's <code>read(byte[])</code> method.</div>
-</dd>
-<dt><span class="strong"><a href="./org/apache/commons/io/input/BoundedInputStream.html#read(byte[], int, int)">read(byte[], int, int)</a></span> - Method in class org.apache.commons.io.input.<a href="./org/apache/commons/io/input/BoundedInputStream.html" title="class in org.apache.commons.io.input">BoundedInputStream</a></dt>
-<dd>
-<div class="block">Invokes the delegate's <code>read(byte[], int, int)</code> method.</div>
-</dd>
-<dt><span class="strong"><a href="./org/apache/commons/io/input/BrokenInputStream.html#read()">read()</a></span> - Method in class org.apache.commons.io.input.<a href="./org/apache/commons/io/input/BrokenInputStream.html" title="class in org.apache.commons.io.input">BrokenInputStream</a></dt>
-<dd>
-<div class="block">Throws the configured exception.</div>
-</dd>
-<dt><span class="strong"><a href="./org/apache/commons/io/input/CharSequenceInputStream.html#read(byte[], int, int)">read(byte[], int, int)</a></span> - Method in class org.apache.commons.io.input.<a href="./org/apache/commons/io/input/CharSequenceInputStream.html" title="class in org.apache.commons.io.input">CharSequenceInputStream</a></dt>
-<dd>&nbsp;</dd>
-<dt><span class="strong"><a href="./org/apache/commons/io/input/CharSequenceInputStream.html#read()">read()</a></span> - Method in class org.apache.commons.io.input.<a href="./org/apache/commons/io/input/CharSequenceInputStream.html" title="class in org.apache.commons.io.input">CharSequenceInputStream</a></dt>
-<dd>&nbsp;</dd>
-<dt><span class="strong"><a href="./org/apache/commons/io/input/CharSequenceInputStream.html#read(byte[])">read(byte[])</a></span> - Method in class org.apache.commons.io.input.<a href="./org/apache/commons/io/input/CharSequenceInputStream.html" title="class in org.apache.commons.io.input">CharSequenceInputStream</a></dt>
-<dd>&nbsp;</dd>
-<dt><span class="strong"><a href="./org/apache/commons/io/input/CharSequenceReader.html#read()">read()</a></span> - Method in class org.apache.commons.io.input.<a href="./org/apache/commons/io/input/CharSequenceReader.html" title="class in org.apache.commons.io.input">CharSequenceReader</a></dt>
-<dd>
-<div class="block">Read a single character.</div>
-</dd>
-<dt><span class="strong"><a href="./org/apache/commons/io/input/CharSequenceReader.html#read(char[], int, int)">read(char[], int, int)</a></span> - Method in class org.apache.commons.io.input.<a href="./org/apache/commons/io/input/CharSequenceReader.html" title="class in org.apache.commons.io.input">CharSequenceReader</a></dt>
-<dd>
-<div class="block">Read the sepcified number of characters into the array.</div>
-</dd>
-<dt><span class="strong"><a href="./org/apache/commons/io/input/ClosedInputStream.html#read()">read()</a></span> - Method in class org.apache.commons.io.input.<a href="./org/apache/commons/io/input/ClosedInputStream.html" title="class in org.apache.commons.io.input">ClosedInputStream</a></dt>
-<dd>
-<div class="block">Returns -1 to indicate that the stream is closed.</div>
-</dd>
-<dt><span class="strong"><a href="./org/apache/commons/io/input/DemuxInputStream.html#read()">read()</a></span> - Method in class org.apache.commons.io.input.<a href="./org/apache/commons/io/input/DemuxInputStream.html" title="class in org.apache.commons.io.input">DemuxInputStream</a></dt>
-<dd>
-<div class="block">Read byte from stream associated with current thread.</div>
-</dd>
-<dt><span class="strong"><a href="./org/apache/commons/io/input/NullInputStream.html#read()">read()</a></span> - Method in class org.apache.commons.io.input.<a href="./org/apache/commons/io/input/NullInputStream.html" title="class in org.apache.commons.io.input">NullInputStream</a></dt>
-<dd>
-<div class="block">Read a byte.</div>
-</dd>
-<dt><span class="strong"><a href="./org/apache/commons/io/input/NullInputStream.html#read(byte[])">read(byte[])</a></span> - Method in class org.apache.commons.io.input.<a href="./org/apache/commons/io/input/NullInputStream.html" title="class in org.apache.commons.io.input">NullInputStream</a></dt>
-<dd>
-<div class="block">Read some bytes into the specified array.</div>
-</dd>
-<dt><span class="strong"><a href="./org/apache/commons/io/input/NullInputStream.html#read(byte[], int, int)">read(byte[], int, int)</a></span> - Method in class org.apache.commons.io.input.<a href="./org/apache/commons/io/input/NullInputStream.html" title="class in org.apache.commons.io.input">NullInputStream</a></dt>
-<dd>
-<div class="block">Read the specified number bytes into an array.</div>
-</dd>
-<dt><span class="strong"><a href="./org/apache/commons/io/input/NullReader.html#read()">read()</a></span> - Method in class org.apache.commons.io.input.<a href="./org/apache/commons/io/input/NullReader.html" title="class in org.apache.commons.io.input">NullReader</a></dt>
-<dd>
-<div class="block">Read a character.</div>
-</dd>
-<dt><span class="strong"><a href="./org/apache/commons/io/input/NullReader.html#read(char[])">read(char[])</a></span> - Method in class org.apache.commons.io.input.<a href="./org/apache/commons/io/input/NullReader.html" title="class in org.apache.commons.io.input">NullReader</a></dt>
-<dd>
-<div class="block">Read some characters into the specified array.</div>
-</dd>
-<dt><span class="strong"><a href="./org/apache/commons/io/input/NullReader.html#read(char[], int, int)">read(char[], int, int)</a></span> - Method in class org.apache.commons.io.input.<a href="./org/apache/commons/io/input/NullReader.html" title="class in org.apache.commons.io.input">NullReader</a></dt>
-<dd>
-<div class="block">Read the specified number characters into an array.</div>
-</dd>
-<dt><span class="strong"><a href="./org/apache/commons/io/input/ProxyInputStream.html#read()">read()</a></span> - Method in class org.apache.commons.io.input.<a href="./org/apache/commons/io/input/ProxyInputStream.html" title="class in org.apache.commons.io.input">ProxyInputStream</a></dt>
-<dd>
-<div class="block">Invokes the delegate's <code>read()</code> method.</div>
-</dd>
-<dt><span class="strong"><a href="./org/apache/commons/io/input/ProxyInputStream.html#read(byte[])">read(byte[])</a></span> - Method in class org.apache.commons.io.input.<a href="./org/apache/commons/io/input/ProxyInputStream.html" title="class in org.apache.commons.io.input">ProxyInputStream</a></dt>
-<dd>
-<div class="block">Invokes the delegate's <code>read(byte[])</code> method.</div>
-</dd>
-<dt><span class="strong"><a href="./org/apache/commons/io/input/ProxyInputStream.html#read(byte[], int, int)">read(byte[], int, int)</a></span> - Method in class org.apache.commons.io.input.<a href="./org/apache/commons/io/input/ProxyInputStream.html" title="class in org.apache.commons.io.input">ProxyInputStream</a></dt>
-<dd>
-<div class="block">Invokes the delegate's <code>read(byte[], int, int)</code> method.</div>
-</dd>
-<dt><span class="strong"><a href="./org/apache/commons/io/input/ProxyReader.html#read()">read()</a></span> - Method in class org.apache.commons.io.input.<a href="./org/apache/commons/io/input/ProxyReader.html" title="class in org.apache.commons.io.input">ProxyReader</a></dt>
-<dd>
-<div class="block">Invokes the delegate's <code>read()</code> method.</div>
-</dd>
-<dt><span class="strong"><a href="./org/apache/commons/io/input/ProxyReader.html#read(char[])">read(char[])</a></span> - Method in class org.apache.commons.io.input.<a href="./org/apache/commons/io/input/ProxyReader.html" title="class in org.apache.commons.io.input">ProxyReader</a></dt>
-<dd>
-<div class="block">Invokes the delegate's <code>read(char[])</code> method.</div>
-</dd>
-<dt><span class="strong"><a href="./org/apache/commons/io/input/ProxyReader.html#read(char[], int, int)">read(char[], int, int)</a></span> - Method in class org.apache.commons.io.input.<a href="./org/apache/commons/io/input/ProxyReader.html" title="class in org.apache.commons.io.input">ProxyReader</a></dt>
-<dd>
-<div class="block">Invokes the delegate's <code>read(char[], int, int)</code> method.</div>
-</dd>
-<dt><span class="strong"><a href="./org/apache/commons/io/input/ProxyReader.html#read(java.nio.CharBuffer)">read(CharBuffer)</a></span> - Method in class org.apache.commons.io.input.<a href="./org/apache/commons/io/input/ProxyReader.html" title="class in org.apache.commons.io.input">ProxyReader</a></dt>
-<dd>
-<div class="block">Invokes the delegate's <code>read(CharBuffer)</code> method.</div>
-</dd>
-<dt><span class="strong"><a href="./org/apache/commons/io/input/ReaderInputStream.html#read(byte[], int, int)">read(byte[], int, int)</a></span> - Method in class org.apache.commons.io.input.<a href="./org/apache/commons/io/input/ReaderInputStream.html" title="class in org.apache.commons.io.input">ReaderInputStream</a></dt>
-<dd>
-<div class="block">Read the specified number of bytes into an array.</div>
-</dd>
-<dt><span class="strong"><a href="./org/apache/commons/io/input/ReaderInputStream.html#read(byte[])">read(byte[])</a></span> - Method in class org.apache.commons.io.input.<a href="./org/apache/commons/io/input/ReaderInputStream.html" title="class in org.apache.commons.io.input">ReaderInputStream</a></dt>
-<dd>
-<div class="block">Read the specified number of bytes into an array.</div>
-</dd>
-<dt><span class="strong"><a href="./org/apache/commons/io/input/ReaderInputStream.html#read()">read()</a></span> - Method in class org.apache.commons.io.input.<a href="./org/apache/commons/io/input/ReaderInputStream.html" title="class in org.apache.commons.io.input">ReaderInputStream</a></dt>
-<dd>
-<div class="block">Read a single byte.</div>
-</dd>
-<dt><span class="strong"><a href="./org/apache/commons/io/input/TeeInputStream.html#read()">read()</a></span> - Method in class org.apache.commons.io.input.<a href="./org/apache/commons/io/input/TeeInputStream.html" title="class in org.apache.commons.io.input">TeeInputStream</a></dt>
-<dd>
-<div class="block">Reads a single byte from the proxied input stream and writes it to
- the associated output stream.</div>
-</dd>
-<dt><span class="strong"><a href="./org/apache/commons/io/input/TeeInputStream.html#read(byte[], int, int)">read(byte[], int, int)</a></span> - Method in class org.apache.commons.io.input.<a href="./org/apache/commons/io/input/TeeInputStream.html" title="class in org.apache.commons.io.input">TeeInputStream</a></dt>
-<dd>
-<div class="block">Reads bytes from the proxied input stream and writes the read bytes
- to the associated output stream.</div>
-</dd>
-<dt><span class="strong"><a href="./org/apache/commons/io/input/TeeInputStream.html#read(byte[])">read(byte[])</a></span> - Method in class org.apache.commons.io.input.<a href="./org/apache/commons/io/input/TeeInputStream.html" title="class in org.apache.commons.io.input">TeeInputStream</a></dt>
-<dd>
-<div class="block">Reads bytes from the proxied input stream and writes the read bytes
- to the associated output stream.</div>
-</dd>
-<dt><span class="strong"><a href="./org/apache/commons/io/input/XmlStreamReader.html#read(char[], int, int)">read(char[], int, int)</a></span> - Method in class org.apache.commons.io.input.<a href="./org/apache/commons/io/input/XmlStreamReader.html" title="class in org.apache.commons.io.input">XmlStreamReader</a></dt>
-<dd>
-<div class="block">Invokes the underlying reader's <code>read(char[], int, int)</code> method.</div>
-</dd>
-<dt><span class="strong"><a href="./org/apache/commons/io/IOUtils.html#read(java.io.Reader, char[], int, int)">read(Reader, char[], int, int)</a></span> - Static method in class org.apache.commons.io.<a href="./org/apache/commons/io/IOUtils.html" title="class in org.apache.commons.io">IOUtils</a></dt>
-<dd>
-<div class="block">Reads characters from an input character stream.</div>
-</dd>
-<dt><span class="strong"><a href="./org/apache/commons/io/IOUtils.html#read(java.io.Reader, char[])">read(Reader, char[])</a></span> - Static method in class org.apache.commons.io.<a href="./org/apache/commons/io/IOUtils.html" title="class in org.apache.commons.io">IOUtils</a></dt>
-<dd>
-<div class="block">Reads characters from an input character stream.</div>
-</dd>
-<dt><span class="strong"><a href="./org/apache/commons/io/IOUtils.html#read(java.io.InputStream, byte[], int, int)">read(InputStream, byte[], int, int)</a></span> - Static method in class org.apache.commons.io.<a href="./org/apache/commons/io/IOUtils.html" title="class in org.apache.commons.io">IOUtils</a></dt>
-<dd>
-<div class="block">Reads bytes from an input stream.</div>
-</dd>
-<dt><span class="strong"><a href="./org/apache/commons/io/IOUtils.html#read(java.io.InputStream, byte[])">read(InputStream, byte[])</a></span> - Static method in class org.apache.commons.io.<a href="./org/apache/commons/io/IOUtils.html" title="class in org.apache.commons.io">IOUtils</a></dt>
-<dd>
-<div class="block">Reads bytes from an input stream.</div>
-</dd>
-<dt><span class="strong"><a href="./org/apache/commons/io/IOUtils.html#read(java.nio.channels.ReadableByteChannel, java.nio.ByteBuffer)">read(ReadableByteChannel, ByteBuffer)</a></span> - Static method in class org.apache.commons.io.<a href="./org/apache/commons/io/IOUtils.html" title="class in org.apache.commons.io">IOUtils</a></dt>
-<dd>
-<div class="block">Reads bytes from a ReadableByteChannel.</div>
-</dd>
-<dt><span class="strong"><a href="./org/apache/commons/io/filefilter/CanReadFileFilter.html#READ_ONLY">READ_ONLY</a></span> - Static variable in class org.apache.commons.io.filefilter.<a href="./org/apache/commons/io/filefilter/CanReadFileFilter.html" title="class in org.apache.commons.io.filefilter">CanReadFileFilter</a></dt>
-<dd>
-<div class="block">Singleton instance of <i>read-only</i> filter</div>
-</dd>
-<dt><span class="strong"><a href="./org/apache/commons/io/input/SwappedDataInputStream.html#readBoolean()">readBoolean()</a></span> - Method in class org.apache.commons.io.input.<a href="./org/apache/commons/io/input/SwappedDataInputStream.html" title="class in org.apache.commons.io.input">SwappedDataInputStream</a></dt>
-<dd>
-<div class="block">Return <code><a href="./org/apache/commons/io/input/SwappedDataInputStream.html#readByte()"><code>SwappedDataInputStream.readByte()</code></a> != 0</code></div>
-</dd>
-<dt><span class="strong"><a href="./org/apache/commons/io/input/SwappedDataInputStream.html#readByte()">readByte()</a></span> - Method in class org.apache.commons.io.input.<a href="./org/apache/commons/io/input/SwappedDataInputStream.html" title="class in org.apache.commons.io.input">SwappedDataInputStream</a></dt>
-<dd>
-<div class="block">Invokes the delegate's <code>read()</code> method.</div>
-</dd>
-<dt><span class="strong"><a href="./org/apache/commons/io/input/SwappedDataInputStream.html#readChar()">readChar()</a></span> - Method in class org.apache.commons.io.input.<a href="./org/apache/commons/io/input/SwappedDataInputStream.html" title="class in org.apache.commons.io.input">SwappedDataInputStream</a></dt>
-<dd>
-<div class="block">Reads a character delegating to <a href="./org/apache/commons/io/input/SwappedDataInputStream.html#readShort()"><code>SwappedDataInputStream.readShort()</code></a>.</div>
-</dd>
-<dt><span class="strong"><a href="./org/apache/commons/io/input/SwappedDataInputStream.html#readDouble()">readDouble()</a></span> - Method in class org.apache.commons.io.input.<a href="./org/apache/commons/io/input/SwappedDataInputStream.html" title="class in org.apache.commons.io.input">SwappedDataInputStream</a></dt>
-<dd>
-<div class="block">Delegates to <a href="./org/apache/commons/io/EndianUtils.html#readSwappedDouble(java.io.InputStream)"><code>EndianUtils.readSwappedDouble(InputStream)</code></a>.</div>
-</dd>
-<dt><a href="./org/apache/commons/io/input/ReaderInputStream.html" title="class in org.apache.commons.io.input"><span class="strong">ReaderInputStream</span></a> - Class in <a href="./org/apache/commons/io/input/package-summary.html">org.apache.commons.io.input</a></dt>
-<dd>
-<div class="block"><a href="http://download.oracle.com/javase/6/docs/api/java/io/InputStream.html?is-external=true" title="class or interface in java.io"><code>InputStream</code></a> implementation that reads a character stream from a <a href="http://download.oracle.com/javase/6/docs/api/java/io/Reader.html?is-external=true" title="class or interface in java.io"><code>Reader</code></a>
- and transforms it to a byte stream using a specified charset encoding.</div>
-</dd>
-<dt><span class="strong"><a href="./org/apache/commons/io/input/ReaderInputStream.html#ReaderInputStream(java.io.Reader, java.nio.charset.CharsetEncoder)">ReaderInputStream(Reader, CharsetEncoder)</a></span> - Constructor for class org.apache.commons.io.input.<a href="./org/apache/commons/io/input/ReaderInputStream.html" title="class in org.apache.commons.io.input">ReaderInputStream</a></dt>
-<dd>
-<div class="block">Construct a new <a href="./org/apache/commons/io/input/ReaderInputStream.html" title="class in org.apache.commons.io.input"><code>ReaderInputStream</code></a>.</div>
-</dd>
-<dt><span class="strong"><a href="./org/apache/commons/io/input/ReaderInputStream.html#ReaderInputStream(java.io.Reader, java.nio.charset.CharsetEncoder, int)">ReaderInputStream(Reader, CharsetEncoder, int)</a></span> - Constructor for class org.apache.commons.io.input.<a href="./org/apache/commons/io/input/ReaderInputStream.html" title="class in org.apache.commons.io.input">ReaderInputStream</a></dt>
-<dd>
-<div class="block">Construct a new <a href="./org/apache/commons/io/input/ReaderInputStream.html" title="class in org.apache.commons.io.input"><code>ReaderInputStream</code></a>.</div>
-</dd>
-<dt><span class="strong"><a href="./org/apache/commons/io/input/ReaderInputStream.html#ReaderInputStream(java.io.Reader, java.nio.charset.Charset, int)">ReaderInputStream(Reader, Charset, int)</a></span> - Constructor for class org.apache.commons.io.input.<a href="./org/apache/commons/io/input/ReaderInputStream.html" title="class in org.apache.commons.io.input">ReaderInputStream</a></dt>
-<dd>
-<div class="block">Construct a new <a href="./org/apache/commons/io/input/ReaderInputStream.html" title="class in org.apache.commons.io.input"><code>ReaderInputStream</code></a>.</div>
-</dd>
-<dt><span class="strong"><a href="./org/apache/commons/io/input/ReaderInputStream.html#ReaderInputStream(java.io.Reader, java.nio.charset.Charset)">ReaderInputStream(Reader, Charset)</a></span> - Constructor for class org.apache.commons.io.input.<a href="./org/apache/commons/io/input/ReaderInputStream.html" title="class in org.apache.commons.io.input">ReaderInputStream</a></dt>
-<dd>
-<div class="block">Construct a new <a href="./org/apache/commons/io/input/ReaderInputStream.html" title="class in org.apache.commons.io.input"><code>ReaderInputStream</code></a> with a default input buffer size of
- 1024 characters.</div>
-</dd>
-<dt><span class="strong"><a href="./org/apache/commons/io/input/ReaderInputStream.html#ReaderInputStream(java.io.Reader, java.lang.String, int)">ReaderInputStream(Reader, String, int)</a></span> - Constructor for class org.apache.commons.io.input.<a href="./org/apache/commons/io/input/ReaderInputStream.html" title="class in org.apache.commons.io.input">ReaderInputStream</a></dt>
-<dd>
-<div class="block">Construct a new <a href="./org/apache/commons/io/input/ReaderInputStream.html" title="class in org.apache.commons.io.input"><code>ReaderInputStream</code></a>.</div>
-</dd>
-<dt><span class="strong"><a href="./org/apache/commons/io/input/ReaderInputStream.html#ReaderInputStream(java.io.Reader, java.lang.String)">ReaderInputStream(Reader, String)</a></span> - Constructor for class org.apache.commons.io.input.<a href="./org/apache/commons/io/input/ReaderInputStream.html" title="class in org.apache.commons.io.input">ReaderInputStream</a></dt>
-<dd>
-<div class="block">Construct a new <a href="./org/apache/commons/io/input/ReaderInputStream.html" title="class in org.apache.commons.io.input"><code>ReaderInputStream</code></a> with a default input buffer size of
- 1024 characters.</div>
-</dd>
-<dt><span class="strong"><a href="./org/apache/commons/io/input/ReaderInputStream.html#ReaderInputStream(java.io.Reader)">ReaderInputStream(Reader)</a></span> - Constructor for class org.apache.commons.io.input.<a href="./org/apache/commons/io/input/ReaderInputStream.html" title="class in org.apache.commons.io.input">ReaderInputStream</a></dt>
-<dd>
-<div class="block"><span class="strong">Deprecated.</span>
-<div class="block"><i>2.5 use <a href="./org/apache/commons/io/input/ReaderInputStream.html#ReaderInputStream(java.io.Reader, java.nio.charset.Charset)"><code>ReaderInputStream.ReaderInputStream(Reader, Charset)</code></a> instead</i></div>
-</div>
-</dd>
-<dt><span class="strong"><a href="./org/apache/commons/io/FileUtils.html#readFileToByteArray(java.io.File)">readFileToByteArray(File)</a></span> - Static method in class org.apache.commons.io.<a href="./org/apache/commons/io/FileUtils.html" title="class in org.apache.commons.io">FileUtils</a></dt>
-<dd>
-<div class="block">Reads the contents of a file into a byte array.</div>
-</dd>
-<dt><span class="strong"><a href="./org/apache/commons/io/FileUtils.html#readFileToString(java.io.File, java.nio.charset.Charset)">readFileToString(File, Charset)</a></span> - Static method in class org.apache.commons.io.<a href="./org/apache/commons/io/FileUtils.html" title="class in org.apache.commons.io">FileUtils</a></dt>
-<dd>
-<div class="block">Reads the contents of a file into a String.</div>
-</dd>
-<dt><span class="strong"><a href="./org/apache/commons/io/FileUtils.html#readFileToString(java.io.File, java.lang.String)">readFileToString(File, String)</a></span> - Static method in class org.apache.commons.io.<a href="./org/apache/commons/io/FileUtils.html" title="class in org.apache.commons.io">FileUtils</a></dt>
-<dd>
-<div class="block">Reads the contents of a file into a String.</div>
-</dd>
-<dt><span class="strong"><a href="./org/apache/commons/io/FileUtils.html#readFileToString(java.io.File)">readFileToString(File)</a></span> - Static method in class org.apache.commons.io.<a href="./org/apache/commons/io/FileUtils.html" title="class in org.apache.commons.io">FileUtils</a></dt>
-<dd>
-<div class="block"><span class="strong">Deprecated.</span>
-<div class="block"><i>2.5 use <a href="./org/apache/commons/io/FileUtils.html#readFileToString(java.io.File, java.nio.charset.Charset)"><code>FileUtils.readFileToString(File, Charset)</code></a> instead</i></div>
-</div>
-</dd>
-<dt><span class="strong"><a href="./org/apache/commons/io/input/SwappedDataInputStream.html#readFloat()">readFloat()</a></span> - Method in class org.apache.commons.io.input.<a href="./org/apache/commons/io/input/SwappedDataInputStream.html" title="class in org.apache.commons.io.input">SwappedDataInputStream</a></dt>
-<dd>
-<div class="block">Delegates to <a href="./org/apache/commons/io/EndianUtils.html#readSwappedFloat(java.io.InputStream)"><code>EndianUtils.readSwappedFloat(InputStream)</code></a>.</div>
-</dd>
-<dt><span class="strong"><a href="./org/apache/commons/io/input/SwappedDataInputStream.html#readFully(byte[])">readFully(byte[])</a></span> - Method in class org.apache.commons.io.input.<a href="./org/apache/commons/io/input/SwappedDataInputStream.html" title="class in org.apache.commons.io.input">SwappedDataInputStream</a></dt>
-<dd>
-<div class="block">Invokes the delegate's <code>read(byte[] data, int, int)</code> method.</div>
-</dd>
-<dt><span class="strong"><a href="./org/apache/commons/io/input/SwappedDataInputStream.html#readFully(byte[], int, int)">readFully(byte[], int, int)</a></span> - Method in class org.apache.commons.io.input.<a href="./org/apache/commons/io/input/SwappedDataInputStream.html" title="class in org.apache.commons.io.input">SwappedDataInputStream</a></dt>
-<dd>
-<div class="block">Invokes the delegate's <code>read(byte[] data, int, int)</code> method.</div>
-</dd>
-<dt><span class="strong"><a href="./org/apache/commons/io/IOUtils.html#readFully(java.io.Reader, char[], int, int)">readFully(Reader, char[], int, int)</a></span> - Static method in class org.apache.commons.io.<a href="./org/apache/commons/io/IOUtils.html" title="class in org.apache.commons.io">IOUtils</a></dt>
-<dd>
-<div class="block">Reads the requested number of characters or fail if there are not enough left.</div>
-</dd>
-<dt><span class="strong"><a href="./org/apache/commons/io/IOUtils.html#readFully(java.io.Reader, char[])">readFully(Reader, char[])</a></span> - Static method in class org.apache.commons.io.<a href="./org/apache/commons/io/IOUtils.html" title="class in org.apache.commons.io">IOUtils</a></dt>
-<dd>
-<div class="block">Reads the requested number of characters or fail if there are not enough left.</div>
-</dd>
-<dt><span class="strong"><a href="./org/apache/commons/io/IOUtils.html#readFully(java.io.InputStream, byte[], int, int)">readFully(InputStream, byte[], int, int)</a></span> - Static method in class org.apache.commons.io.<a href="./org/apache/commons/io/IOUtils.html" title="class in org.apache.commons.io">IOUtils</a></dt>
-<dd>
-<div class="block">Reads the requested number of bytes or fail if there are not enough left.</div>
-</dd>
-<dt><span class="strong"><a href="./org/apache/commons/io/IOUtils.html#readFully(java.io.InputStream, byte[])">readFully(InputStream, byte[])</a></span> - Static method in class org.apache.commons.io.<a href="./org/apache/commons/io/IOUtils.html" title="class in org.apache.commons.io">IOUtils</a></dt>
-<dd>
-<div class="block">Reads the requested number of bytes or fail if there are not enough left.</div>
-</dd>
-<dt><span class="strong"><a href="./org/apache/commons/io/IOUtils.html#readFully(java.nio.channels.ReadableByteChannel, java.nio.ByteBuffer)">readFully(ReadableByteChannel, ByteBuffer)</a></span> - Static method in class org.apache.commons.io.<a href="./org/apache/commons/io/IOUtils.html" title="class in org.apache.commons.io">IOUtils</a></dt>
-<dd>
-<div class="block">Reads the requested number of bytes or fail if there are not enough left.</div>
-</dd>
-<dt><span class="strong"><a href="./org/apache/commons/io/input/SwappedDataInputStream.html#readInt()">readInt()</a></span> - Method in class org.apache.commons.io.input.<a href="./org/apache/commons/io/input/SwappedDataInputStream.html" title="class in org.apache.commons.io.input">SwappedDataInputStream</a></dt>
-<dd>
-<div class="block">Delegates to <a href="./org/apache/commons/io/EndianUtils.html#readSwappedInteger(java.io.InputStream)"><code>EndianUtils.readSwappedInteger(InputStream)</code></a>.</div>
-</dd>
-<dt><span class="strong"><a href="./org/apache/commons/io/input/ReversedLinesFileReader.html#readLine()">readLine()</a></span> - Method in class org.apache.commons.io.input.<a href="./org/apache/commons/io/input/ReversedLinesFileReader.html" title="class in org.apache.commons.io.input">ReversedLinesFileReader</a></dt>
-<dd>
-<div class="block">Returns the lines of the file from bottom to top.</div>
-</dd>
-<dt><span class="strong"><a href="./org/apache/commons/io/input/SwappedDataInputStream.html#readLine()">readLine()</a></span> - Method in class org.apache.commons.io.input.<a href="./org/apache/commons/io/input/SwappedDataInputStream.html" title="class in org.apache.commons.io.input">SwappedDataInputStream</a></dt>
-<dd>
-<div class="block">Not currently supported - throws <a href="http://download.oracle.com/javase/6/docs/api/java/lang/UnsupportedOperationException.html?is-external=true" title="class or interface in java.lang"><code>UnsupportedOperationException</code></a>.</div>
-</dd>
-<dt><span class="strong"><a href="./org/apache/commons/io/FileUtils.html#readLines(java.io.File, java.nio.charset.Charset)">readLines(File, Charset)</a></span> - Static method in class org.apache.commons.io.<a href="./org/apache/commons/io/FileUtils.html" title="class in org.apache.commons.io">FileUtils</a></dt>
-<dd>
-<div class="block">Reads the contents of a file line by line to a List of Strings.</div>
-</dd>
-<dt><span class="strong"><a href="./org/apache/commons/io/FileUtils.html#readLines(java.io.File, java.lang.String)">readLines(File, String)</a></span> - Static method in class org.apache.commons.io.<a href="./org/apache/commons/io/FileUtils.html" title="class in org.apache.commons.io">FileUtils</a></dt>
-<dd>
-<div class="block">Reads the contents of a file line by line to a List of Strings.</div>
-</dd>
-<dt><span class="strong"><a href="./org/apache/commons/io/FileUtils.html#readLines(java.io.File)">readLines(File)</a></span> - Static method in class org.apache.commons.io.<a href="./org/apache/commons/io/FileUtils.html" title="class in org.apache.commons.io">FileUtils</a></dt>
-<dd>
-<div class="block"><span class="strong">Deprecated.</span>
-<div class="block"><i>2.5 use <a href="./org/apache/commons/io/FileUtils.html#readLines(java.io.File, java.nio.charset.Charset)"><code>FileUtils.readLines(File, Charset)</code></a> instead</i></div>
-</div>
-</dd>
-<dt><span class="strong"><a href="./org/apache/commons/io/IOUtils.html#readLines(java.io.InputStream)">readLines(InputStream)</a></span> - Static method in class org.apache.commons.io.<a href="./org/apache/commons/io/IOUtils.html" title="class in org.apache.commons.io">IOUtils</a></dt>
-<dd>
-<div class="block"><span class="strong">Deprecated.</span>
-<div class="block"><i>2.5 use <a href="./org/apache/commons/io/IOUtils.html#readLines(java.io.InputStream, java.nio.charset.Charset)"><code>IOUtils.readLines(InputStream, Charset)</code></a> instead</i></div>
-</div>
-</dd>
-<dt><span class="strong"><a href="./org/apache/commons/io/IOUtils.html#readLines(java.io.InputStream, java.nio.charset.Charset)">readLines(InputStream, Charset)</a></span> - Static method in class org.apache.commons.io.<a href="./org/apache/commons/io/IOUtils.html" title="class in org.apache.commons.io">IOUtils</a></dt>
-<dd>
-<div class="block">Gets the contents of an <code>InputStream</code> as a list of Strings,
- one entry per line, using the specified character encoding.</div>
-</dd>
-<dt><span class="strong"><a href="./org/apache/commons/io/IOUtils.html#readLines(java.io.InputStream, java.lang.String)">readLines(InputStream, String)</a></span> - Static method in class org.apache.commons.io.<a href="./org/apache/commons/io/IOUtils.html" title="class in org.apache.commons.io">IOUtils</a></dt>
-<dd>
-<div class="block">Gets the contents of an <code>InputStream</code> as a list of Strings,
- one entry per line, using the specified character encoding.</div>
-</dd>
-<dt><span class="strong"><a href="./org/apache/commons/io/IOUtils.html#readLines(java.io.Reader)">readLines(Reader)</a></span> - Static method in class org.apache.commons.io.<a href="./org/apache/commons/io/IOUtils.html" title="class in org.apache.commons.io">IOUtils</a></dt>
-<dd>
-<div class="block">Gets the contents of a <code>Reader</code> as a list of Strings,
- one entry per line.</div>
-</dd>
-<dt><span class="strong"><a href="./org/apache/commons/io/input/SwappedDataInputStream.html#readLong()">readLong()</a></span> - Method in class org.apache.commons.io.input.<a href="./org/apache/commons/io/input/SwappedDataInputStream.html" title="class in org.apache.commons.io.input">SwappedDataInputStream</a></dt>
-<dd>
-<div class="block">Delegates to <a href="./org/apache/commons/io/EndianUtils.html#readSwappedLong(java.io.InputStream)"><code>EndianUtils.readSwappedLong(InputStream)</code></a>.</div>
-</dd>
-<dt><span class="strong"><a href="./org/apache/commons/io/input/SwappedDataInputStream.html#readShort()">readShort()</a></span> - Method in class org.apache.commons.io.input.<a href="./org/apache/commons/io/input/SwappedDataInputStream.html" title="class in org.apache.commons.io.input">SwappedDataInputStream</a></dt>
-<dd>
-<div class="block">Delegates to <a href="./org/apache/commons/io/EndianUtils.html#readSwappedShort(java.io.InputStream)"><code>EndianUtils.readSwappedShort(InputStream)</code></a>.</div>
-</dd>
-<dt><span class="strong"><a href="./org/apache/commons/io/EndianUtils.html#readSwappedDouble(byte[], int)">readSwappedDouble(byte[], int)</a></span> - Static method in class org.apache.commons.io.<a href="./org/apache/commons/io/EndianUtils.html" title="class in org.apache.commons.io">EndianUtils</a></dt>
-<dd>
-<div class="block">Reads a "double" value from a byte array at a given offset.</div>
-</dd>
-<dt><span class="strong"><a href="./org/apache/commons/io/EndianUtils.html#readSwappedDouble(java.io.InputStream)">readSwappedDouble(InputStream)</a></span> - Static method in class org.apache.commons.io.<a href="./org/apache/commons/io/EndianUtils.html" title="class in org.apache.commons.io">EndianUtils</a></dt>
-<dd>
-<div class="block">Reads a "double" value from an InputStream.</div>
-</dd>
-<dt><span class="strong"><a href="./org/apache/commons/io/EndianUtils.html#readSwappedFloat(byte[], int)">readSwappedFloat(byte[], int)</a></span> - Static method in class org.apache.commons.io.<a href="./org/apache/commons/io/EndianUtils.html" title="class in org.apache.commons.io">EndianUtils</a></dt>
-<dd>
-<div class="block">Reads a "float" value from a byte array at a given offset.</div>
-</dd>
-<dt><span class="strong"><a href="./org/apache/commons/io/EndianUtils.html#readSwappedFloat(java.io.InputStream)">readSwappedFloat(InputStream)</a></span> - Static method in class org.apache.commons.io.<a href="./org/apache/commons/io/EndianUtils.html" title="class in org.apache.commons.io">EndianUtils</a></dt>
-<dd>
-<div class="block">Reads a "float" value from an InputStream.</div>
-</dd>
-<dt><span class="strong"><a href="./org/apache/commons/io/EndianUtils.html#readSwappedInteger(byte[], int)">readSwappedInteger(byte[], int)</a></span> - Static method in class org.apache.commons.io.<a href="./org/apache/commons/io/EndianUtils.html" title="class in org.apache.commons.io">EndianUtils</a></dt>
-<dd>
-<div class="block">Reads a "int" value from a byte array at a given offset.</div>
-</dd>
-<dt><span class="strong"><a href="./org/apache/commons/io/EndianUtils.html#readSwappedInteger(java.io.InputStream)">readSwappedInteger(InputStream)</a></span> - Static method in class org.apache.commons.io.<a href="./org/apache/commons/io/EndianUtils.html" title="class in org.apache.commons.io">EndianUtils</a></dt>
-<dd>
-<div class="block">Reads a "int" value from an InputStream.</div>
-</dd>
-<dt><span class="strong"><a href="./org/apache/commons/io/EndianUtils.html#readSwappedLong(byte[], int)">readSwappedLong(byte[], int)</a></span> - Static method in class org.apache.commons.io.<a href="./org/apache/commons/io/EndianUtils.html" title="class in org.apache.commons.io">EndianUtils</a></dt>
-<dd>
-<div class="block">Reads a "long" value from a byte array at a given offset.</div>
-</dd>
-<dt><span class="strong"><a href="./org/apache/commons/io/EndianUtils.html#readSwappedLong(java.io.InputStream)">readSwappedLong(InputStream)</a></span> - Static method in class org.apache.commons.io.<a href="./org/apache/commons/io/EndianUtils.html" title="class in org.apache.commons.io">EndianUtils</a></dt>
-<dd>
-<div class="block">Reads a "long" value from an InputStream.</div>
-</dd>
-<dt><span class="strong"><a href="./org/apache/commons/io/EndianUtils.html#readSwappedShort(byte[], int)">readSwappedShort(byte[], int)</a></span> - Static method in class org.apache.commons.io.<a href="./org/apache/commons/io/EndianUtils.html" title="class in org.apache.commons.io">EndianUtils</a></dt>
-<dd>
-<div class="block">Reads a "short" value from a byte array at a given offset.</div>
-</dd>
-<dt><span class="strong"><a href="./org/apache/commons/io/EndianUtils.html#readSwappedShort(java.io.InputStream)">readSwappedShort(InputStream)</a></span> - Static method in class org.apache.commons.io.<a href="./org/apache/commons/io/EndianUtils.html" title="class in org.apache.commons.io">EndianUtils</a></dt>
-<dd>
-<div class="block">Reads a "short" value from an InputStream.</div>
-</dd>
-<dt><span class="strong"><a href="./org/apache/commons/io/EndianUtils.html#readSwappedUnsignedInteger(byte[], int)">readSwappedUnsignedInteger(byte[], int)</a></span> - Static method in class org.apache.commons.io.<a href="./org/apache/commons/io/EndianUtils.html" title="class in org.apache.commons.io">EndianUtils</a></dt>
-<dd>
-<div class="block">Reads an unsigned integer (32-bit) value from a byte array at a given
- offset.</div>
-</dd>
-<dt><span class="strong"><a href="./org/apache/commons/io/EndianUtils.html#readSwappedUnsignedInteger(java.io.InputStream)">readSwappedUnsignedInteger(InputStream)</a></span> - Static method in class org.apache.commons.io.<a href="./org/apache/commons/io/EndianUtils.html" title="class in org.apache.commons.io">EndianUtils</a></dt>
-<dd>
-<div class="block">Reads a unsigned integer (32-bit) from an InputStream.</div>
-</dd>
-<dt><span class="strong"><a href="./org/apache/commons/io/EndianUtils.html#readSwappedUnsignedShort(byte[], int)">readSwappedUnsignedShort(byte[], int)</a></span> - Static method in class org.apache.commons.io.<a href="./org/apache/commons/io/EndianUtils.html" title="class in org.apache.commons.io">EndianUtils</a></dt>
-<dd>
-<div class="block">Reads an unsigned short (16-bit) value from a byte array at a given
- offset.</div>
-</dd>
-<dt><span class="strong"><a href="./org/apache/commons/io/EndianUtils.html#readSwappedUnsignedShort(java.io.InputStream)">readSwappedUnsignedShort(InputStream)</a></span> - Static method in class org.apache.commons.io.<a href="./org/apache/commons/io/EndianUtils.html" title="class in org.apache.commons.io">EndianUtils</a></dt>
-<dd>
-<div class="block">Reads a unsigned short (16-bit) from an InputStream.</div>
-</dd>
-<dt><span class="strong"><a href="./org/apache/commons/io/input/SwappedDataInputStream.html#readUnsignedByte()">readUnsignedByte()</a></span> - Method in class org.apache.commons.io.input.<a href="./org/apache/commons/io/input/SwappedDataInputStream.html" title="class in org.apache.commons.io.input">SwappedDataInputStream</a></dt>
-<dd>
-<div class="block">Invokes the delegate's <code>read()</code> method.</div>
-</dd>
-<dt><span class="strong"><a href="./org/apache/commons/io/input/SwappedDataInputStream.html#readUnsignedShort()">readUnsignedShort()</a></span> - Method in class org.apache.commons.io.input.<a href="./org/apache/commons/io/input/SwappedDataInputStream.html" title="class in org.apache.commons.io.input">SwappedDataInputStream</a></dt>
-<dd>
-<div class="block">Delegates to <a href="./org/apache/commons/io/EndianUtils.html#readSwappedUnsignedShort(java.io.InputStream)"><code>EndianUtils.readSwappedUnsignedShort(InputStream)</code></a>.</div>
-</dd>
-<dt><span class="strong"><a href="./org/apache/commons/io/input/SwappedDataInputStream.html#readUTF()">readUTF()</a></span> - Method in class org.apache.commons.io.input.<a href="./org/apache/commons/io/input/SwappedDataInputStream.html" title="class in org.apache.commons.io.input">SwappedDataInputStream</a></dt>
-<dd>
-<div class="block">Not currently supported - throws <a href="http://download.oracle.com/javase/6/docs/api/java/lang/UnsupportedOperationException.html?is-external=true" title="class or interface in java.lang"><code>UnsupportedOperationException</code></a>.</div>
-</dd>
-<dt><span class="strong"><a href="./org/apache/commons/io/input/ProxyReader.html#ready()">ready()</a></span> - Method in class org.apache.commons.io.input.<a href="./org/apache/commons/io/input/ProxyReader.html" title="class in org.apache.commons.io.input">ProxyReader</a></dt>
-<dd>
-<div class="block">Invokes the delegate's <code>ready()</code> method.</div>
-</dd>
-<dt><span class="strong"><a href="./org/apache/commons/io/monitor/FileEntry.html#refresh(java.io.File)">refresh(File)</a></span> - Method in class org.apache.commons.io.monitor.<a href="./org/apache/commons/io/monitor/FileEntry.html" title="class in org.apache.commons.io.monitor">FileEntry</a></dt>
-<dd>
-<div class="block">Refresh the attributes from the <a href="http://download.oracle.com/javase/6/docs/api/java/io/File.html?is-external=true" title="class or interface in java.io"><code>File</code></a>, indicating
- whether the file has changed.</div>
-</dd>
-<dt><a href="./org/apache/commons/io/filefilter/RegexFileFilter.html" title="class in org.apache.commons.io.filefilter"><span class="strong">RegexFileFilter</span></a> - Class in <a href="./org/apache/commons/io/filefilter/package-summary.html">org.apache.commons.io.filefilter</a></dt>
-<dd>
-<div class="block">Filters files using supplied regular expression(s).</div>
-</dd>
-<dt><span class="strong"><a href="./org/apache/commons/io/filefilter/RegexFileFilter.html#RegexFileFilter(java.lang.String)">RegexFileFilter(String)</a></span> - Constructor for class org.apache.commons.io.filefilter.<a href="./org/apache/commons/io/filefilter/RegexFileFilter.html" title="class in org.apache.commons.io.filefilter">RegexFileFilter</a></dt>
-<dd>
-<div class="block">Construct a new regular expression filter.</div>
-</dd>
-<dt><span class="strong"><a href="./org/apache/commons/io/filefilter/RegexFileFilter.html#RegexFileFilter(java.lang.String, org.apache.commons.io.IOCase)">RegexFileFilter(String, IOCase)</a></span> - Constructor for class org.apache.commons.io.filefilter.<a href="./org/apache/commons/io/filefilter/RegexFileFilter.html" title="class in org.apache.commons.io.filefilter">RegexFileFilter</a></dt>
-<dd>
-<div class="block">Construct a new regular expression filter with the specified flags case sensitivity.</div>
-</dd>
-<dt><span class="strong"><a href="./org/apache/commons/io/filefilter/RegexFileFilter.html#RegexFileFilter(java.lang.String, int)">RegexFileFilter(String, int)</a></span> - Constructor for class org.apache.commons.io.filefilter.<a href="./org/apache/commons/io/filefilter/RegexFileFilter.html" title="class in org.apache.commons.io.filefilter">RegexFileFilter</a></dt>
-<dd>
-<div class="block">Construct a new regular expression filter with the specified flags.</div>
-</dd>
-<dt><span class="strong"><a href="./org/apache/commons/io/filefilter/RegexFileFilter.html#RegexFileFilter(java.util.regex.Pattern)">RegexFileFilter(Pattern)</a></span> - Constructor for class org.apache.commons.io.filefilter.<a href="./org/apache/commons/io/filefilter/RegexFileFilter.html" title="class in org.apache.commons.io.filefilter">RegexFileFilter</a></dt>
-<dd>
-<div class="block">Construct a new regular expression filter for a compiled regular expression</div>
-</dd>
-<dt><span class="strong"><a href="./org/apache/commons/io/LineIterator.html#remove()">remove()</a></span> - Method in class org.apache.commons.io.<a href="./org/apache/commons/io/LineIterator.html" title="class in org.apache.commons.io">LineIterator</a></dt>
-<dd>
-<div class="block">Unsupported.</div>
-</dd>
-<dt><span class="strong"><a href="./org/apache/commons/io/FilenameUtils.html#removeExtension(java.lang.String)">removeExtension(String)</a></span> - Static method in class org.apache.commons.io.<a href="./org/apache/commons/io/FilenameUtils.html" title="class in org.apache.commons.io">FilenameUtils</a></dt>
-<dd>
-<div class="block">Removes the extension from a filename.</div>
-</dd>
-<dt><span class="strong"><a href="./org/apache/commons/io/filefilter/AndFileFilter.html#removeFileFilter(org.apache.commons.io.filefilter.IOFileFilter)">removeFileFilter(IOFileFilter)</a></span> - Method in class org.apache.commons.io.filefilter.<a href="./org/apache/commons/io/filefilter/AndFileFilter.html" title="class in org.apache.commons.io.filefilter">AndFileFilter</a></dt>
-<dd>
-<div class="block">Removes the specified file filter.</div>
-</dd>
-<dt><span class="strong"><a href="./org/apache/commons/io/filefilter/ConditionalFileFilter.html#removeFileFilter(org.apache.commons.io.filefilter.IOFileFilter)">removeFileFilter(IOFileFilter)</a></span> - Method in interface org.apache.commons.io.filefilter.<a href="./org/apache/commons/io/filefilter/ConditionalFileFilter.html" title="interface in org.apache.commons.io.filefilter">ConditionalFileFilter</a></dt>
-<dd>
-<div class="block">Removes the specified file filter.</div>
-</dd>
-<dt><span class="strong"><a href="./org/apache/commons/io/filefilter/OrFileFilter.html#removeFileFilter(org.apache.commons.io.filefilter.IOFileFilter)">removeFileFilter(IOFileFilter)</a></span> - Method in class org.apache.commons.io.filefilter.<a href="./org/apache/commons/io/filefilter/OrFileFilter.html" title="class in org.apache.commons.io.filefilter">OrFileFilter</a></dt>
-<dd>
-<div class="block">Removes the specified file filter.</div>
-</dd>
-<dt><span class="strong"><a href="./org/apache/commons/io/monitor/FileAlterationObserver.html#removeListener(org.apache.commons.io.monitor.FileAlterationListener)">removeListener(FileAlterationListener)</a></span> - Method in class org.apache.commons.io.monitor.<a href="./org/apache/commons/io/monitor/FileAlterationObserver.html" title="class in org.apache.commons.io.monitor">FileAlterationObserver</a></dt>
-<dd>
-<div class="block">Remove a file system listener.</div>
-</dd>
-<dt><span class="strong"><a href="./org/apache/commons/io/monitor/FileAlterationMonitor.html#removeObserver(org.apache.commons.io.monitor.FileAlterationObserver)">removeObserver(FileAlterationObserver)</a></span> - Method in class org.apache.commons.io.monitor.<a href="./org/apache/commons/io/monitor/FileAlterationMonitor.html" title="class in org.apache.commons.io.monitor">FileAlterationMonitor</a></dt>
-<dd>
-<div class="block">Remove a file system observer from this monitor.</div>
-</dd>
-<dt><span class="strong"><a href="./org/apache/commons/io/Charsets.html#requiredCharsets()">requiredCharsets()</a></span> - Static method in class org.apache.commons.io.<a href="./org/apache/commons/io/Charsets.html" title="class in org.apache.commons.io">Charsets</a></dt>
-<dd>
-<div class="block">Constructs a sorted map from canonical charset names to charset objects required of every implementation of the
- Java platform.</div>
-</dd>
-<dt><span class="strong"><a href="./org/apache/commons/io/input/BOMInputStream.html#reset()">reset()</a></span> - Method in class org.apache.commons.io.input.<a href="./org/apache/commons/io/input/BOMInputStream.html" title="class in org.apache.commons.io.input">BOMInputStream</a></dt>
-<dd>
-<div class="block">Invokes the delegate's <code>reset()</code> method.</div>
-</dd>
-<dt><span class="strong"><a href="./org/apache/commons/io/input/BoundedInputStream.html#reset()">reset()</a></span> - Method in class org.apache.commons.io.input.<a href="./org/apache/commons/io/input/BoundedInputStream.html" title="class in org.apache.commons.io.input">BoundedInputStream</a></dt>
-<dd>
-<div class="block">Invokes the delegate's <code>reset()</code> method.</div>
-</dd>
-<dt><span class="strong"><a href="./org/apache/commons/io/input/BrokenInputStream.html#reset()">reset()</a></span> - Method in class org.apache.commons.io.input.<a href="./org/apache/commons/io/input/BrokenInputStream.html" title="class in org.apache.commons.io.input">BrokenInputStream</a></dt>
-<dd>
-<div class="block">Throws the configured exception.</div>
-</dd>
-<dt><span class="strong"><a href="./org/apache/commons/io/input/CharSequenceInputStream.html#reset()">reset()</a></span> - Method in class org.apache.commons.io.input.<a href="./org/apache/commons/io/input/CharSequenceInputStream.html" title="class in org.apache.commons.io.input">CharSequenceInputStream</a></dt>
-<dd>&nbsp;</dd>
-<dt><span class="strong"><a href="./org/apache/commons/io/input/CharSequenceReader.html#reset()">reset()</a></span> - Method in class org.apache.commons.io.input.<a href="./org/apache/commons/io/input/CharSequenceReader.html" title="class in org.apache.commons.io.input">CharSequenceReader</a></dt>
-<dd>
-<div class="block">Reset the reader to the last marked position (or the beginning if
- mark has not been called).</div>
-</dd>
-<dt><span class="strong"><a href="./org/apache/commons/io/input/NullInputStream.html#reset()">reset()</a></span> - Method in class org.apache.commons.io.input.<a href="./org/apache/commons/io/input/NullInputStream.html" title="class in org.apache.commons.io.input">NullInputStream</a></dt>
-<dd>
-<div class="block">Reset the stream to the point when mark was last called.</div>
-</dd>
-<dt><span class="strong"><a href="./org/apache/commons/io/input/NullReader.html#reset()">reset()</a></span> - Method in class org.apache.commons.io.input.<a href="./org/apache/commons/io/input/NullReader.html" title="class in org.apache.commons.io.input">NullReader</a></dt>
-<dd>
-<div class="block">Reset the stream to the point when mark was last called.</div>
-</dd>
-<dt><span class="strong"><a href="./org/apache/commons/io/input/ProxyInputStream.html#reset()">reset()</a></span> - Method in class org.apache.commons.io.input.<a href="./org/apache/commons/io/input/ProxyInputStream.html" title="class in org.apache.commons.io.input">ProxyInputStream</a></dt>
-<dd>
-<div class="block">Invokes the delegate's <code>reset()</code> method.</div>
-</dd>
-<dt><span class="strong"><a href="./org/apache/commons/io/input/ProxyReader.html#reset()">reset()</a></span> - Method in class org.apache.commons.io.input.<a href="./org/apache/commons/io/input/ProxyReader.html" title="class in org.apache.commons.io.input">ProxyReader</a></dt>
-<dd>
-<div class="block">Invokes the delegate's <code>reset()</code> method.</div>
-</dd>
-<dt><span class="strong"><a href="./org/apache/commons/io/output/ByteArrayOutputStream.html#reset()">reset()</a></span> - Method in class org.apache.commons.io.output.<a href="./org/apache/commons/io/output/ByteArrayOutputStream.html" title="class in org.apache.commons.io.output">ByteArrayOutputStream</a></dt>
-<dd>&nbsp;</dd>
-<dt><span class="strong"><a href="./org/apache/commons/io/input/CountingInputStream.html#resetByteCount()">resetByteCount()</a></span> - Method in class org.apache.commons.io.input.<a href="./org/apache/commons/io/input/CountingInputStream.html" title="class in org.apache.commons.io.input">CountingInputStream</a></dt>
-<dd>
-<div class="block">Set the byte count back to 0.</div>
-</dd>
-<dt><span class="strong"><a href="./org/apache/commons/io/output/CountingOutputStream.html#resetByteCount()">resetByteCount()</a></span> - Method in class org.apache.commons.io.output.<a href="./org/apache/commons/io/output/CountingOutputStream.html" title="class in org.apache.commons.io.output">CountingOutputStream</a></dt>
-<dd>
-<div class="block">Set the byte count back to 0.</div>
-</dd>
-<dt><span class="strong"><a href="./org/apache/commons/io/output/ThresholdingOutputStream.html#resetByteCount()">resetByteCount()</a></span> - Method in class org.apache.commons.io.output.<a href="./org/apache/commons/io/output/ThresholdingOutputStream.html" title="class in org.apache.commons.io.output">ThresholdingOutputStream</a></dt>
-<dd>
-<div class="block">Resets the byteCount to zero.</div>
-</dd>
-<dt><span class="strong"><a href="./org/apache/commons/io/input/CountingInputStream.html#resetCount()">resetCount()</a></span> - Method in class org.apache.commons.io.input.<a href="./org/apache/commons/io/input/CountingInputStream.html" title="class in org.apache.commons.io.input">CountingInputStream</a></dt>
-<dd>
-<div class="block">Set the byte count back to 0.</div>
-</dd>
-<dt><span class="strong"><a href="./org/apache/commons/io/output/CountingOutputStream.html#resetCount()">resetCount()</a></span> - Method in class org.apache.commons.io.output.<a href="./org/apache/commons/io/output/CountingOutputStream.html" title="class in org.apache.commons.io.output">CountingOutputStream</a></dt>
-<dd>
-<div class="block">Set the byte count back to 0.</div>
-</dd>
-<dt><span class="strong"><a href="./org/apache/commons/io/input/ClassLoaderObjectInputStream.html#resolveClass(java.io.ObjectStreamClass)">resolveClass(ObjectStreamClass)</a></span> - Method in class org.apache.commons.io.input.<a href="./org/apache/commons/io/input/ClassLoaderObjectInputStream.html" title="class in org.apache.commons.io.input">ClassLoaderObjectInputStream</a></dt>
-<dd>
-<div class="block">Resolve a class specified by the descriptor using the
- specified ClassLoader or the super ClassLoader.</div>
-</dd>
-<dt><span class="strong"><a href="./org/apache/commons/io/input/ClassLoaderObjectInputStream.html#resolveProxyClass(java.lang.String[])">resolveProxyClass(String[])</a></span> - Method in class org.apache.commons.io.input.<a href="./org/apache/commons/io/input/ClassLoaderObjectInputStream.html" title="class in org.apache.commons.io.input">ClassLoaderObjectInputStream</a></dt>
-<dd>
-<div class="block">Create a proxy class that implements the specified interfaces using
- the specified ClassLoader or the super ClassLoader.</div>
-</dd>
-<dt><a href="./org/apache/commons/io/input/ReversedLinesFileReader.html" title="class in org.apache.commons.io.input"><span class="strong">ReversedLinesFileReader</span></a> - Class in <a href="./org/apache/commons/io/input/package-summary.html">org.apache.commons.io.input</a></dt>
-<dd>
-<div class="block">Reads lines in a file reversely (similar to a BufferedReader, but starting at
- the last line).</div>
-</dd>
-<dt><span class="strong"><a href="./org/apache/commons/io/input/ReversedLinesFileReader.html#ReversedLinesFileReader(java.io.File)">ReversedLinesFileReader(File)</a></span> - Constructor for class org.apache.commons.io.input.<a href="./org/apache/commons/io/input/ReversedLinesFileReader.html" title="class in org.apache.commons.io.input">ReversedLinesFileReader</a></dt>
-<dd>
-<div class="block"><span class="strong">Deprecated.</span>
-<div class="block"><i>2.5 use <a href="./org/apache/commons/io/input/ReversedLinesFileReader.html#ReversedLinesFileReader(java.io.File, java.nio.charset.Charset)"><code>ReversedLinesFileReader.ReversedLinesFileReader(File, Charset)</code></a> instead</i></div>
-</div>
-</dd>
-<dt><span class="strong"><a href="./org/apache/commons/io/input/ReversedLinesFileReader.html#ReversedLinesFileReader(java.io.File, java.nio.charset.Charset)">ReversedLinesFileReader(File, Charset)</a></span> - Constructor for class org.apache.commons.io.input.<a href="./org/apache/commons/io/input/ReversedLinesFileReader.html" title="class in org.apache.commons.io.input">ReversedLinesFileReader</a></dt>
-<dd>
-<div class="block">Creates a ReversedLinesFileReader with default block size of 4KB and the
- specified encoding.</div>
-</dd>
-<dt><span class="strong"><a href="./org/apache/commons/io/input/ReversedLinesFileReader.html#ReversedLinesFileReader(java.io.File, int, java.nio.charset.Charset)">ReversedLinesFileReader(File, int, Charset)</a></span> - Constructor for class org.apache.commons.io.input.<a href="./org/apache/commons/io/input/ReversedLinesFileReader.html" title="class in org.apache.commons.io.input">ReversedLinesFileReader</a></dt>
-<dd>
-<div class="block">Creates a ReversedLinesFileReader with the given block size and encoding.</div>
-</dd>
-<dt><span class="strong"><a href="./org/apache/commons/io/input/ReversedLinesFileReader.html#ReversedLinesFileReader(java.io.File, int, java.lang.String)">ReversedLinesFileReader(File, int, String)</a></span> - Constructor for class org.apache.commons.io.input.<a href="./org/apache/commons/io/input/ReversedLinesFileReader.html" title="class in org.apache.commons.io.input">ReversedLinesFileReader</a></dt>
-<dd>
-<div class="block">Creates a ReversedLinesFileReader with the given block size and encoding.</div>
-</dd>
-<dt><span class="strong"><a href="./org/apache/commons/io/input/Tailer.html#run()">run()</a></span> - Method in class org.apache.commons.io.input.<a href="./org/apache/commons/io/input/Tailer.html" title="class in org.apache.commons.io.input">Tailer</a></dt>
-<dd>
-<div class="block">Follows changes in the file, calling the TailerListener's handle method for each new line.</div>
-</dd>
-<dt><span class="strong"><a href="./org/apache/commons/io/monitor/FileAlterationMonitor.html#run()">run()</a></span> - Method in class org.apache.commons.io.monitor.<a href="./org/apache/commons/io/monitor/FileAlterationMonitor.html" title="class in org.apache.commons.io.monitor">FileAlterationMonitor</a></dt>
-<dd>
-<div class="block">Run.</div>
-</dd>
-</dl>
-<a name="_S_">
-<!--   -->
-</a>
-<h2 class="title">S</h2>
-<dl>
-<dt><span class="strong"><a href="./org/apache/commons/io/IOCase.html#SENSITIVE">SENSITIVE</a></span> - Static variable in class org.apache.commons.io.<a href="./org/apache/commons/io/IOCase.html" title="class in org.apache.commons.io">IOCase</a></dt>
-<dd>
-<div class="block">The constant for case sensitive regardless of operating system.</div>
-</dd>
-<dt><span class="strong"><a href="./org/apache/commons/io/FilenameUtils.html#separatorsToSystem(java.lang.String)">separatorsToSystem(String)</a></span> - Static method in class org.apache.commons.io.<a href="./org/apache/commons/io/FilenameUtils.html" title="class in org.apache.commons.io">FilenameUtils</a></dt>
-<dd>
-<div class="block">Converts all separators to the system separator.</div>
-</dd>
-<dt><span class="strong"><a href="./org/apache/commons/io/FilenameUtils.html#separatorsToUnix(java.lang.String)">separatorsToUnix(String)</a></span> - Static method in class org.apache.commons.io.<a href="./org/apache/commons/io/FilenameUtils.html" title="class in org.apache.commons.io">FilenameUtils</a></dt>
-<dd>
-<div class="block">Converts all separators to the Unix separator of forward slash.</div>
-</dd>
-<dt><span class="strong"><a href="./org/apache/commons/io/FilenameUtils.html#separatorsToWindows(java.lang.String)">separatorsToWindows(String)</a></span> - Static method in class org.apache.commons.io.<a href="./org/apache/commons/io/FilenameUtils.html" title="class in org.apache.commons.io">FilenameUtils</a></dt>
-<dd>
-<div class="block">Converts all separators to the Windows separator of backslash.</div>
-</dd>
-<dt><span class="strong"><a href="./org/apache/commons/io/monitor/FileEntry.html#setChildren(org.apache.commons.io.monitor.FileEntry[])">setChildren(FileEntry[])</a></span> - Method in class org.apache.commons.io.monitor.<a href="./org/apache/commons/io/monitor/FileEntry.html" title="class in org.apache.commons.io.monitor">FileEntry</a></dt>
-<dd>
-<div class="block">Set the directory's files.</div>
-</dd>
-<dt><span class="strong"><a href="./org/apache/commons/io/monitor/FileEntry.html#setDirectory(boolean)">setDirectory(boolean)</a></span> - Method in class org.apache.commons.io.monitor.<a href="./org/apache/commons/io/monitor/FileEntry.html" title="class in org.apache.commons.io.monitor">FileEntry</a></dt>
-<dd>
-<div class="block">Set whether the file is a directory or not.</div>
-</dd>
-<dt><span class="strong"><a href="./org/apache/commons/io/monitor/FileEntry.html#setExists(boolean)">setExists(boolean)</a></span> - Method in class org.apache.commons.io.monitor.<a href="./org/apache/commons/io/monitor/FileEntry.html" title="class in org.apache.commons.io.monitor">FileEntry</a></dt>
-<dd>
-<div class="block">Set whether the file existed the last time it
- was checked.</div>
-</dd>
-<dt><span class="strong"><a href="./org/apache/commons/io/filefilter/AndFileFilter.html#setFileFilters(java.util.List)">setFileFilters(List&lt;IOFileFilter&gt;)</a></span> - Method in class org.apache.commons.io.filefilter.<a href="./org/apache/commons/io/filefilter/AndFileFilter.html" title="class in org.apache.commons.io.filefilter">AndFileFilter</a></dt>
-<dd>
-<div class="block">Sets the list of file filters, replacing any previously configured
- file filters on this filter.</div>
-</dd>
-<dt><span class="strong"><a href="./org/apache/commons/io/filefilter/ConditionalFileFilter.html#setFileFilters(java.util.List)">setFileFilters(List&lt;IOFileFilter&gt;)</a></span> - Method in interface org.apache.commons.io.filefilter.<a href="./org/apache/commons/io/filefilter/ConditionalFileFilter.html" title="interface in org.apache.commons.io.filefilter">ConditionalFileFilter</a></dt>
-<dd>
-<div class="block">Sets the list of file filters, replacing any previously configured
- file filters on this filter.</div>
-</dd>
-<dt><span class="strong"><a href="./org/apache/commons/io/filefilter/OrFileFilter.html#setFileFilters(java.util.List)">setFileFilters(List&lt;IOFileFilter&gt;)</a></span> - Method in class org.apache.commons.io.filefilter.<a href="./org/apache/commons/io/filefilter/OrFileFilter.html" title="class in org.apache.commons.io.filefilter">OrFileFilter</a></dt>
-<dd>
-<div class="block">Sets the list of file filters, replacing any previously configured
- file filters on this filter.</div>
-</dd>
-<dt><span class="strong"><a href="./org/apache/commons/io/monitor/FileEntry.html#setLastModified(long)">setLastModified(long)</a></span> - Method in class org.apache.commons.io.monitor.<a href="./org/apache/commons/io/monitor/FileEntry.html" title="class in org.apache.commons.io.monitor">FileEntry</a></dt>
-<dd>
-<div class="block">Return the last modified time from the last time it
- was checked.</div>
-</dd>
-<dt><span class="strong"><a href="./org/apache/commons/io/monitor/FileEntry.html#setLength(long)">setLength(long)</a></span> - Method in class org.apache.commons.io.monitor.<a href="./org/apache/commons/io/monitor/FileEntry.html" title="class in org.apache.commons.io.monitor">FileEntry</a></dt>
-<dd>
-<div class="block">Set the length.</div>
-</dd>
-<dt><span class="strong"><a href="./org/apache/commons/io/monitor/FileEntry.html#setName(java.lang.String)">setName(String)</a></span> - Method in class org.apache.commons.io.monitor.<a href="./org/apache/commons/io/monitor/FileEntry.html" title="class in org.apache.commons.io.monitor">FileEntry</a></dt>
-<dd>
-<div class="block">Set the file name.</div>
-</dd>
-<dt><span class="strong"><a href="./org/apache/commons/io/input/BoundedInputStream.html#setPropagateClose(boolean)">setPropagateClose(boolean)</a></span> - Method in class org.apache.commons.io.input.<a href="./org/apache/commons/io/input/BoundedInputStream.html" title="class in org.apache.commons.io.input">BoundedInputStream</a></dt>
-<dd>
-<div class="block">Set whether the <a href="./org/apache/commons/io/input/BoundedInputStream.html#close()"><code>BoundedInputStream.close()</code></a> method
- should propagate to the underling <a href="http://download.oracle.com/javase/6/docs/api/java/io/InputStream.html?is-external=true" title="class or interface in java.io"><code>InputStream</code></a>.</div>
-</dd>
-<dt><span class="strong"><a href="./org/apache/commons/io/monitor/FileAlterationMonitor.html#setThreadFactory(java.util.concurrent.ThreadFactory)">setThreadFactory(ThreadFactory)</a></span> - Method in class org.apache.commons.io.monitor.<a href="./org/apache/commons/io/monitor/FileAlterationMonitor.html" title="class in org.apache.commons.io.monitor">FileAlterationMonitor</a></dt>
-<dd>
-<div class="block">Set the thread factory.</div>
-</dd>
-<dt><span class="strong"><a href="./org/apache/commons/io/output/ByteArrayOutputStream.html#size()">size()</a></span> - Method in class org.apache.commons.io.output.<a href="./org/apache/commons/io/output/ByteArrayOutputStream.html" title="class in org.apache.commons.io.output">ByteArrayOutputStream</a></dt>
-<dd>
-<div class="block">Return the current size of the byte array.</div>
-</dd>
-<dt><span class="strong"><a href="./org/apache/commons/io/comparator/SizeFileComparator.html#SIZE_COMPARATOR">SIZE_COMPARATOR</a></span> - Static variable in class org.apache.commons.io.comparator.<a href="./org/apache/commons/io/comparator/SizeFileComparator.html" title="class in org.apache.commons.io.comparator">SizeFileComparator</a></dt>
-<dd>
-<div class="block">Size comparator instance - directories are treated as zero size</div>
-</dd>
-<dt><span class="strong"><a href="./org/apache/commons/io/comparator/SizeFileComparator.html#SIZE_REVERSE">SIZE_REVERSE</a></span> - Static variable in class org.apache.commons.io.comparator.<a href="./org/apache/commons/io/comparator/SizeFileComparator.html" title="class in org.apache.commons.io.comparator">SizeFileComparator</a></dt>
-<dd>
-<div class="block">Reverse size comparator instance - directories are treated as zero size</div>
-</dd>
-<dt><span class="strong"><a href="./org/apache/commons/io/comparator/SizeFileComparator.html#SIZE_SUMDIR_COMPARATOR">SIZE_SUMDIR_COMPARATOR</a></span> - Static variable in class org.apache.commons.io.comparator.<a href="./org/apache/commons/io/comparator/SizeFileComparator.html" title="class in org.apache.commons.io.comparator">SizeFileComparator</a></dt>
-<dd>
-<div class="block">Size comparator instance which sums the size of a directory's contents
- using <a href="./org/apache/commons/io/FileUtils.html#sizeOfDirectory(java.io.File)"><code>FileUtils.sizeOfDirectory(File)</code></a></div>
-</dd>
-<dt><span class="strong"><a href="./org/apache/commons/io/comparator/SizeFileComparator.html#SIZE_SUMDIR_REVERSE">SIZE_SUMDIR_REVERSE</a></span> - Static variable in class org.apache.commons.io.comparator.<a href="./org/apache/commons/io/comparator/SizeFileComparator.html" title="class in org.apache.commons.io.comparator">SizeFileComparator</a></dt>
-<dd>
-<div class="block">Reverse size comparator instance which sums the size of a directory's contents
- using <a href="./org/apache/commons/io/FileUtils.html#sizeOfDirectory(java.io.File)"><code>FileUtils.sizeOfDirectory(File)</code></a></div>
-</dd>
-<dt><a href="./org/apache/commons/io/comparator/SizeFileComparator.html" title="class in org.apache.commons.io.comparator"><span class="strong">SizeFileComparator</span></a> - Class in <a href="./org/apache/commons/io/comparator/package-summary.html">org.apache.commons.io.comparator</a></dt>
-<dd>
-<div class="block">Compare the <b>length/size</b> of two files for order (see
- <a href="http://download.oracle.com/javase/6/docs/api/java/io/File.html?is-external=true#length()" title="class or interface in java.io"><code>File.length()</code></a> and <a href="./org/apache/commons/io/FileUtils.html#sizeOfDirectory(java.io.File)"><code>FileUtils.sizeOfDirectory(File)</code></a>).</div>
-</dd>
-<dt><span class="strong"><a href="./org/apache/commons/io/comparator/SizeFileComparator.html#SizeFileComparator()">SizeFileComparator()</a></span> - Constructor for class org.apache.commons.io.comparator.<a href="./org/apache/commons/io/comparator/SizeFileComparator.html" title="class in org.apache.commons.io.comparator">SizeFileComparator</a></dt>
-<dd>
-<div class="block">Construct a file size comparator instance (directories treated as zero size).</div>
-</dd>
-<dt><span class="strong"><a href="./org/apache/commons/io/comparator/SizeFileComparator.html#SizeFileComparator(boolean)">SizeFileComparator(boolean)</a></span> - Constructor for class org.apache.commons.io.comparator.<a href="./org/apache/commons/io/comparator/SizeFileComparator.html" title="class in org.apache.commons.io.comparator">SizeFileComparator</a></dt>
-<dd>
-<div class="block">Construct a file size comparator instance specifying whether the size of
- the directory contents should be aggregated.</div>
-</dd>
-<dt><span class="strong"><a href="./org/apache/commons/io/filefilter/FileFilterUtils.html#sizeFileFilter(long)">sizeFileFilter(long)</a></span> - Static method in class org.apache.commons.io.filefilter.<a href="./org/apache/commons/io/filefilter/FileFilterUtils.html" title="class in org.apache.commons.io.filefilter">FileFilterUtils</a></dt>
-<dd>
-<div class="block">Returns a filter that returns true if the file is bigger than a certain size.</div>
-</dd>
-<dt><span class="strong"><a href="./org/apache/commons/io/filefilter/FileFilterUtils.html#sizeFileFilter(long, boolean)">sizeFileFilter(long, boolean)</a></span> - Static method in class org.apache.commons.io.filefilter.<a href="./org/apache/commons/io/filefilter/FileFilterUtils.html" title="class in org.apache.commons.io.filefilter">FileFilterUtils</a></dt>
-<dd>
-<div class="block">Returns a filter that filters based on file size.</div>
-</dd>
-<dt><a href="./org/apache/commons/io/filefilter/SizeFileFilter.html" title="class in org.apache.commons.io.filefilter"><span class="strong">SizeFileFilter</span></a> - Class in <a href="./org/apache/commons/io/filefilter/package-summary.html">org.apache.commons.io.filefilter</a></dt>
-<dd>
-<div class="block">Filters files based on size, can filter either smaller files or
- files equal to or larger than a given threshold.</div>
-</dd>
-<dt><span class="strong"><a href="./org/apache/commons/io/filefilter/SizeFileFilter.html#SizeFileFilter(long)">SizeFileFilter(long)</a></span> - Constructor for class org.apache.commons.io.filefilter.<a href="./org/apache/commons/io/filefilter/SizeFileFilter.html" title="class in org.apache.commons.io.filefilter">SizeFileFilter</a></dt>
-<dd>
-<div class="block">Constructs a new size file filter for files equal to or 
- larger than a certain size.</div>
-</dd>
-<dt><span class="strong"><a href="./org/apache/commons/io/filefilter/SizeFileFilter.html#SizeFileFilter(long, boolean)">SizeFileFilter(long, boolean)</a></span> - Constructor for class org.apache.commons.io.filefilter.<a href="./org/apache/commons/io/filefilter/SizeFileFilter.html" title="class in org.apache.commons.io.filefilter">SizeFileFilter</a></dt>
-<dd>
-<div class="block">Constructs a new size file filter for files based on a certain size
- threshold.</div>
-</dd>
-<dt><span class="strong"><a href="./org/apache/commons/io/FileUtils.html#sizeOf(java.io.File)">sizeOf(File)</a></span> - Static method in class org.apache.commons.io.<a href="./org/apache/commons/io/FileUtils.html" title="class in org.apache.commons.io">FileUtils</a></dt>
-<dd>
-<div class="block">Returns the size of the specified file or directory.</div>
-</dd>
-<dt><span class="strong"><a href="./org/apache/commons/io/FileUtils.html#sizeOfAsBigInteger(java.io.File)">sizeOfAsBigInteger(File)</a></span> - Static method in class org.apache.commons.io.<a href="./org/apache/commons/io/FileUtils.html" title="class in org.apache.commons.io">FileUtils</a></dt>
-<dd>
-<div class="block">Returns the size of the specified file or directory.</div>
-</dd>
-<dt><span class="strong"><a href="./org/apache/commons/io/FileUtils.html#sizeOfDirectory(java.io.File)">sizeOfDirectory(File)</a></span> - Static method in class org.apache.commons.io.<a href="./org/apache/commons/io/FileUtils.html" title="class in org.apache.commons.io">FileUtils</a></dt>
-<dd>
-<div class="block">Counts the size of a directory recursively (sum of the length of all files).</div>
-</dd>
-<dt><span class="strong"><a href="./org/apache/commons/io/FileUtils.html#sizeOfDirectoryAsBigInteger(java.io.File)">sizeOfDirectoryAsBigInteger(File)</a></span> - Static method in class org.apache.commons.io.<a href="./org/apache/commons/io/FileUtils.html" title="class in org.apache.commons.io">FileUtils</a></dt>
-<dd>
-<div class="block">Counts the size of a directory recursively (sum of the length of all files).</div>
-</dd>
-<dt><span class="strong"><a href="./org/apache/commons/io/filefilter/FileFilterUtils.html#sizeRangeFileFilter(long, long)">sizeRangeFileFilter(long, long)</a></span> - Static method in class org.apache.commons.io.filefilter.<a href="./org/apache/commons/io/filefilter/FileFilterUtils.html" title="class in org.apache.commons.io.filefilter">FileFilterUtils</a></dt>
-<dd>
-<div class="block">Returns a filter that accepts files whose size is &gt;= minimum size
- and &lt;= maximum size.</div>
-</dd>
-<dt><span class="strong"><a href="./org/apache/commons/io/input/BOMInputStream.html#skip(long)">skip(long)</a></span> - Method in class org.apache.commons.io.input.<a href="./org/apache/commons/io/input/BOMInputStream.html" title="class in org.apache.commons.io.input">BOMInputStream</a></dt>
-<dd>
-<div class="block">Invokes the delegate's <code>skip(long)</code> method, detecting and optionallyskipping BOM.</div>
-</dd>
-<dt><span class="strong"><a href="./org/apache/commons/io/input/BoundedInputStream.html#skip(long)">skip(long)</a></span> - Method in class org.apache.commons.io.input.<a href="./org/apache/commons/io/input/BoundedInputStream.html" title="class in org.apache.commons.io.input">BoundedInputStream</a></dt>
-<dd>
-<div class="block">Invokes the delegate's <code>skip(long)</code> method.</div>
-</dd>
-<dt><span class="strong"><a href="./org/apache/commons/io/input/BrokenInputStream.html#skip(long)">skip(long)</a></span> - Method in class org.apache.commons.io.input.<a href="./org/apache/commons/io/input/BrokenInputStream.html" title="class in org.apache.commons.io.input">BrokenInputStream</a></dt>
-<dd>
-<div class="block">Throws the configured exception.</div>
-</dd>
-<dt><span class="strong"><a href="./org/apache/commons/io/input/CharSequenceInputStream.html#skip(long)">skip(long)</a></span> - Method in class org.apache.commons.io.input.<a href="./org/apache/commons/io/input/CharSequenceInputStream.html" title="class in org.apache.commons.io.input">CharSequenceInputStream</a></dt>
-<dd>&nbsp;</dd>
-<dt><span class="strong"><a href="./org/apache/commons/io/input/CharSequenceReader.html#skip(long)">skip(long)</a></span> - Method in class org.apache.commons.io.input.<a href="./org/apache/commons/io/input/CharSequenceReader.html" title="class in org.apache.commons.io.input">CharSequenceReader</a></dt>
-<dd>
-<div class="block">Skip the specified number of characters.</div>
-</dd>
-<dt><span class="strong"><a href="./org/apache/commons/io/input/CountingInputStream.html#skip(long)">skip(long)</a></span> - Method in class org.apache.commons.io.input.<a href="./org/apache/commons/io/input/CountingInputStream.html" title="class in org.apache.commons.io.input">CountingInputStream</a></dt>
-<dd>
-<div class="block">Skips the stream over the specified number of bytes, adding the skipped
- amount to the count.</div>
-</dd>
-<dt><span class="strong"><a href="./org/apache/commons/io/input/NullInputStream.html#skip(long)">skip(long)</a></span> - Method in class org.apache.commons.io.input.<a href="./org/apache/commons/io/input/NullInputStream.html" title="class in org.apache.commons.io.input">NullInputStream</a></dt>
-<dd>
-<div class="block">Skip a specified number of bytes.</div>
-</dd>
-<dt><span class="strong"><a href="./org/apache/commons/io/input/NullReader.html#skip(long)">skip(long)</a></span> - Method in class org.apache.commons.io.input.<a href="./org/apache/commons/io/input/NullReader.html" title="class in org.apache.commons.io.input">NullReader</a></dt>
-<dd>
-<div class="block">Skip a specified number of characters.</div>
-</dd>
-<dt><span class="strong"><a href="./org/apache/commons/io/input/ProxyInputStream.html#skip(long)">skip(long)</a></span> - Method in class org.apache.commons.io.input.<a href="./org/apache/commons/io/input/ProxyInputStream.html" title="class in org.apache.commons.io.input">ProxyInputStream</a></dt>
-<dd>
-<div class="block">Invokes the delegate's <code>skip(long)</code> method.</div>
-</dd>
-<dt><span class="strong"><a href="./org/apache/commons/io/input/ProxyReader.html#skip(long)">skip(long)</a></span> - Method in class org.apache.commons.io.input.<a href="./org/apache/commons/io/input/ProxyReader.html" title="class in org.apache.commons.io.input">ProxyReader</a></dt>
-<dd>
-<div class="block">Invokes the delegate's <code>skip(long)</code> method.</div>
-</dd>
-<dt><span class="strong"><a href="./org/apache/commons/io/IOUtils.html#skip(java.io.InputStream, long)">skip(InputStream, long)</a></span> - Static method in class org.apache.commons.io.<a href="./org/apache/commons/io/IOUtils.html" title="class in org.apache.commons.io">IOUtils</a></dt>
-<dd>
-<div class="block">Skips bytes from an input byte stream.</div>
-</dd>
-<dt><span class="strong"><a href="./org/apache/commons/io/IOUtils.html#skip(java.nio.channels.ReadableByteChannel, long)">skip(ReadableByteChannel, long)</a></span> - Static method in class org.apache.commons.io.<a href="./org/apache/commons/io/IOUtils.html" title="class in org.apache.commons.io">IOUtils</a></dt>
-<dd>
-<div class="block">Skips bytes from a ReadableByteChannel.</div>
-</dd>
-<dt><span class="strong"><a href="./org/apache/commons/io/IOUtils.html#skip(java.io.Reader, long)">skip(Reader, long)</a></span> - Static method in class org.apache.commons.io.<a href="./org/apache/commons/io/IOUtils.html" title="class in org.apache.commons.io">IOUtils</a></dt>
-<dd>
-<div class="block">Skips characters from an input character stream.</div>
-</dd>
-<dt><span class="strong"><a href="./org/apache/commons/io/input/SwappedDataInputStream.html#skipBytes(int)">skipBytes(int)</a></span> - Method in class org.apache.commons.io.input.<a href="./org/apache/commons/io/input/SwappedDataInputStream.html" title="class in org.apache.commons.io.input">SwappedDataInputStream</a></dt>
-<dd>
-<div class="block">Invokes the delegate's <code>skip(int)</code> method.</div>
-</dd>
-<dt><span class="strong"><a href="./org/apache/commons/io/IOUtils.html#skipFully(java.io.InputStream, long)">skipFully(InputStream, long)</a></span> - Static method in class org.apache.commons.io.<a href="./org/apache/commons/io/IOUtils.html" title="class in org.apache.commons.io">IOUtils</a></dt>
-<dd>
-<div class="block">Skips the requested number of bytes or fail if there are not enough left.</div>
-</dd>
-<dt><span class="strong"><a href="./org/apache/commons/io/IOUtils.html#skipFully(java.nio.channels.ReadableByteChannel, long)">skipFully(ReadableByteChannel, long)</a></span> - Static method in class org.apache.commons.io.<a href="./org/apache/commons/io/IOUtils.html" title="class in org.apache.commons.io">IOUtils</a></dt>
-<dd>
-<div class="block">Skips the requested number of bytes or fail if there are not enough left.</div>
-</dd>
-<dt><span class="strong"><a href="./org/apache/commons/io/IOUtils.html#skipFully(java.io.Reader, long)">skipFully(Reader, long)</a></span> - Static method in class org.apache.commons.io.<a href="./org/apache/commons/io/IOUtils.html" title="class in org.apache.commons.io">IOUtils</a></dt>
-<dd>
-<div class="block">Skips the requested number of characters or fail if there are not enough left.</div>
-</dd>
-<dt><span class="strong"><a href="./org/apache/commons/io/monitor/FileAlterationMonitor.html#start()">start()</a></span> - Method in class org.apache.commons.io.monitor.<a href="./org/apache/commons/io/monitor/FileAlterationMonitor.html" title="class in org.apache.commons.io.monitor">FileAlterationMonitor</a></dt>
-<dd>
-<div class="block">Start monitoring.</div>
-</dd>
-<dt><span class="strong"><a href="./org/apache/commons/io/input/Tailer.html#stop()">stop()</a></span> - Method in class org.apache.commons.io.input.<a href="./org/apache/commons/io/input/Tailer.html" title="class in org.apache.commons.io.input">Tailer</a></dt>
-<dd>
-<div class="block">Allows the tailer to complete its current loop and return.</div>
-</dd>
-<dt><span class="strong"><a href="./org/apache/commons/io/monitor/FileAlterationMonitor.html#stop()">stop()</a></span> - Method in class org.apache.commons.io.monitor.<a href="./org/apache/commons/io/monitor/FileAlterationMonitor.html" title="class in org.apache.commons.io.monitor">FileAlterationMonitor</a></dt>
-<dd>
-<div class="block">Stop monitoring.</div>
-</dd>
-<dt><span class="strong"><a href="./org/apache/commons/io/monitor/FileAlterationMonitor.html#stop(long)">stop(long)</a></span> - Method in class org.apache.commons.io.monitor.<a href="./org/apache/commons/io/monitor/FileAlterationMonitor.html" title="class in org.apache.commons.io.monitor">FileAlterationMonitor</a></dt>
-<dd>
-<div class="block">Stop monitoring.</div>
-</dd>
-<dt><a href="./org/apache/commons/io/output/StringBuilderWriter.html" title="class in org.apache.commons.io.output"><span class="strong">StringBuilderWriter</span></a> - Class in <a href="./org/apache/commons/io/output/package-summary.html">org.apache.commons.io.output</a></dt>
-<dd>
-<div class="block"><a href="http://download.oracle.com/javase/6/docs/api/java/io/Writer.html?is-external=true" title="class or interface in java.io"><code>Writer</code></a> implementation that outputs to a <a href="http://download.oracle.com/javase/6/docs/api/java/lang/StringBuilder.html?is-external=true" title="class or interface in java.lang"><code>StringBuilder</code></a>.</div>
-</dd>
-<dt><span class="strong"><a href="./org/apache/commons/io/output/StringBuilderWriter.html#StringBuilderWriter()">StringBuilderWriter()</a></span> - Constructor for class org.apache.commons.io.output.<a href="./org/apache/commons/io/output/StringBuilderWriter.html" title="class in org.apache.commons.io.output">StringBuilderWriter</a></dt>
-<dd>
-<div class="block">Construct a new <a href="http://download.oracle.com/javase/6/docs/api/java/lang/StringBuilder.html?is-external=true" title="class or interface in java.lang"><code>StringBuilder</code></a> instance with default capacity.</div>
-</dd>
-<dt><span class="strong"><a href="./org/apache/commons/io/output/StringBuilderWriter.html#StringBuilderWriter(int)">StringBuilderWriter(int)</a></span> - Constructor for class org.apache.commons.io.output.<a href="./org/apache/commons/io/output/StringBuilderWriter.html" title="class in org.apache.commons.io.output">StringBuilderWriter</a></dt>
-<dd>
-<div class="block">Construct a new <a href="http://download.oracle.com/javase/6/docs/api/java/lang/StringBuilder.html?is-external=true" title="class or interface in java.lang"><code>StringBuilder</code></a> instance with the specified capacity.</div>
-</dd>
-<dt><span class="strong"><a href="./org/apache/commons/io/output/StringBuilderWriter.html#StringBuilderWriter(java.lang.StringBuilder)">StringBuilderWriter(StringBuilder)</a></span> - Constructor for class org.apache.commons.io.output.<a href="./org/apache/commons/io/output/StringBuilderWriter.html" title="class in org.apache.commons.io.output">StringBuilderWriter</a></dt>
-<dd>
-<div class="block">Construct a new instance with the specified <a href="http://download.oracle.com/javase/6/docs/api/java/lang/StringBuilder.html?is-external=true" title="class or interface in java.lang"><code>StringBuilder</code></a>.</div>
-</dd>
-<dt><span class="strong"><a href="./org/apache/commons/io/filefilter/FileFilterUtils.html#suffixFileFilter(java.lang.String)">suffixFileFilter(String)</a></span> - Static method in class org.apache.commons.io.filefilter.<a href="./org/apache/commons/io/filefilter/FileFilterUtils.html" title="class in org.apache.commons.io.filefilter">FileFilterUtils</a></dt>
-<dd>
-<div class="block">Returns a filter that returns true if the filename ends with the specified text.</div>
-</dd>
-<dt><span class="strong"><a href="./org/apache/commons/io/filefilter/FileFilterUtils.html#suffixFileFilter(java.lang.String, org.apache.commons.io.IOCase)">suffixFileFilter(String, IOCase)</a></span> - Static method in class org.apache.commons.io.filefilter.<a href="./org/apache/commons/io/filefilter/FileFilterUtils.html" title="class in org.apache.commons.io.filefilter">FileFilterUtils</a></dt>
-<dd>
-<div class="block">Returns a filter that returns true if the filename ends with the specified text.</div>
-</dd>
-<dt><a href="./org/apache/commons/io/filefilter/SuffixFileFilter.html" title="class in org.apache.commons.io.filefilter"><span class="strong">SuffixFileFilter</span></a> - Class in <a href="./org/apache/commons/io/filefilter/package-summary.html">org.apache.commons.io.filefilter</a></dt>
-<dd>
-<div class="block">Filters files based on the suffix (what the filename ends with).</div>
-</dd>
-<dt><span class="strong"><a href="./org/apache/commons/io/filefilter/SuffixFileFilter.html#SuffixFileFilter(java.lang.String)">SuffixFileFilter(String)</a></span> - Constructor for class org.apache.commons.io.filefilter.<a href="./org/apache/commons/io/filefilter/SuffixFileFilter.html" title="class in org.apache.commons.io.filefilter">SuffixFileFilter</a></dt>
-<dd>
-<div class="block">Constructs a new Suffix file filter for a single extension.</div>
-</dd>
-<dt><span class="strong"><a href="./org/apache/commons/io/filefilter/SuffixFileFilter.html#SuffixFileFilter(java.lang.String, org.apache.commons.io.IOCase)">SuffixFileFilter(String, IOCase)</a></span> - Constructor for class org.apache.commons.io.filefilter.<a href="./org/apache/commons/io/filefilter/SuffixFileFilter.html" title="class in org.apache.commons.io.filefilter">SuffixFileFilter</a></dt>
-<dd>
-<div class="block">Constructs a new Suffix file filter for a single extension
- specifying case-sensitivity.</div>
-</dd>
-<dt><span class="strong"><a href="./org/apache/commons/io/filefilter/SuffixFileFilter.html#SuffixFileFilter(java.lang.String[])">SuffixFileFilter(String[])</a></span> - Constructor for class org.apache.commons.io.filefilter.<a href="./org/apache/commons/io/filefilter/SuffixFileFilter.html" title="class in org.apache.commons.io.filefilter">SuffixFileFilter</a></dt>
-<dd>
-<div class="block">Constructs a new Suffix file filter for an array of suffixs.</div>
-</dd>
-<dt><span class="strong"><a href="./org/apache/commons/io/filefilter/SuffixFileFilter.html#SuffixFileFilter(java.lang.String[], org.apache.commons.io.IOCase)">SuffixFileFilter(String[], IOCase)</a></span> - Constructor for class org.apache.commons.io.filefilter.<a href="./org/apache/commons/io/filefilter/SuffixFileFilter.html" title="class in org.apache.commons.io.filefilter">SuffixFileFilter</a></dt>
-<dd>
-<div class="block">Constructs a new Suffix file filter for an array of suffixs
- specifying case-sensitivity.</div>
-</dd>
-<dt><span class="strong"><a href="./org/apache/commons/io/filefilter/SuffixFileFilter.html#SuffixFileFilter(java.util.List)">SuffixFileFilter(List&lt;String&gt;)</a></span> - Constructor for class org.apache.commons.io.filefilter.<a href="./org/apache/commons/io/filefilter/SuffixFileFilter.html" title="class in org.apache.commons.io.filefilter">SuffixFileFilter</a></dt>
-<dd>
-<div class="block">Constructs a new Suffix file filter for a list of suffixes.</div>
-</dd>
-<dt><span class="strong"><a href="./org/apache/commons/io/filefilter/SuffixFileFilter.html#SuffixFileFilter(java.util.List, org.apache.commons.io.IOCase)">SuffixFileFilter(List&lt;String&gt;, IOCase)</a></span> - Constructor for class org.apache.commons.io.filefilter.<a href="./org/apache/commons/io/filefilter/SuffixFileFilter.html" title="class in org.apache.commons.io.filefilter">SuffixFileFilter</a></dt>
-<dd>
-<div class="block">Constructs a new Suffix file filter for a list of suffixes
- specifying case-sensitivity.</div>
-</dd>
-<dt><span class="strong"><a href="./org/apache/commons/io/EndianUtils.html#swapDouble(double)">swapDouble(double)</a></span> - Static method in class org.apache.commons.io.<a href="./org/apache/commons/io/EndianUtils.html" title="class in org.apache.commons.io">EndianUtils</a></dt>
-<dd>
-<div class="block">Converts a "double" value between endian systems.</div>
-</dd>
-<dt><span class="strong"><a href="./org/apache/commons/io/EndianUtils.html#swapFloat(float)">swapFloat(float)</a></span> - Static method in class org.apache.commons.io.<a href="./org/apache/commons/io/EndianUtils.html" title="class in org.apache.commons.io">EndianUtils</a></dt>
-<dd>
-<div class="block">Converts a "float" value between endian systems.</div>
-</dd>
-<dt><span class="strong"><a href="./org/apache/commons/io/EndianUtils.html#swapInteger(int)">swapInteger(int)</a></span> - Static method in class org.apache.commons.io.<a href="./org/apache/commons/io/EndianUtils.html" title="class in org.apache.commons.io">EndianUtils</a></dt>
-<dd>
-<div class="block">Converts a "int" value between endian systems.</div>
-</dd>
-<dt><span class="strong"><a href="./org/apache/commons/io/EndianUtils.html#swapLong(long)">swapLong(long)</a></span> - Static method in class org.apache.commons.io.<a href="./org/apache/commons/io/EndianUtils.html" title="class in org.apache.commons.io">EndianUtils</a></dt>
-<dd>
-<div class="block">Converts a "long" value between endian systems.</div>
-</dd>
-<dt><a href="./org/apache/commons/io/input/SwappedDataInputStream.html" title="class in org.apache.commons.io.input"><span class="strong">SwappedDataInputStream</span></a> - Class in <a href="./org/apache/commons/io/input/package-summary.html">org.apache.commons.io.input</a></dt>
-<dd>
-<div class="block">DataInput for systems relying on little endian data formats.</div>
-</dd>
-<dt><span class="strong"><a href="./org/apache/commons/io/input/SwappedDataInputStream.html#SwappedDataInputStream(java.io.InputStream)">SwappedDataInputStream(InputStream)</a></span> - Constructor for class org.apache.commons.io.input.<a href="./org/apache/commons/io/input/SwappedDataInputStream.html" title="class in org.apache.commons.io.input">SwappedDataInputStream</a></dt>
-<dd>
-<div class="block">Constructs a SwappedDataInputStream.</div>
-</dd>
-<dt><span class="strong"><a href="./org/apache/commons/io/EndianUtils.html#swapShort(short)">swapShort(short)</a></span> - Static method in class org.apache.commons.io.<a href="./org/apache/commons/io/EndianUtils.html" title="class in org.apache.commons.io">EndianUtils</a></dt>
-<dd>
-<div class="block">Converts a "short" value between endian systems.</div>
-</dd>
-<dt><span class="strong"><a href="./org/apache/commons/io/IOCase.html#SYSTEM">SYSTEM</a></span> - Static variable in class org.apache.commons.io.<a href="./org/apache/commons/io/IOCase.html" title="class in org.apache.commons.io">IOCase</a></dt>
-<dd>
-<div class="block">The constant for case sensitivity determined by the current operating system.</div>
-</dd>
-</dl>
-<a name="_T_">
-<!--   -->
-</a>
-<h2 class="title">T</h2>
-<dl>
-<dt><a href="./org/apache/commons/io/input/TaggedInputStream.html" title="class in org.apache.commons.io.input"><span class="strong">TaggedInputStream</span></a> - Class in <a href="./org/apache/commons/io/input/package-summary.html">org.apache.commons.io.input</a></dt>
-<dd>
-<div class="block">An input stream decorator that tags potential exceptions so that the
- stream that caused the exception can easily be identified.</div>
-</dd>
-<dt><span class="strong"><a href="./org/apache/commons/io/input/TaggedInputStream.html#TaggedInputStream(java.io.InputStream)">TaggedInputStream(InputStream)</a></span> - Constructor for class org.apache.commons.io.input.<a href="./org/apache/commons/io/input/TaggedInputStream.html" title="class in org.apache.commons.io.input">TaggedInputStream</a></dt>
-<dd>
-<div class="block">Creates a tagging decorator for the given input stream.</div>
-</dd>
-<dt><a href="./org/apache/commons/io/TaggedIOException.html" title="class in org.apache.commons.io"><span class="strong">TaggedIOException</span></a> - Exception in <a href="./org/apache/commons/io/package-summary.html">org.apache.commons.io</a></dt>
-<dd>
-<div class="block">An <a href="http://download.oracle.com/javase/6/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io"><code>IOException</code></a> decorator that adds a serializable tag to the
- wrapped exception.</div>
-</dd>
-<dt><span class="strong"><a href="./org/apache/commons/io/TaggedIOException.html#TaggedIOException(java.io.IOException, java.io.Serializable)">TaggedIOException(IOException, Serializable)</a></span> - Constructor for exception org.apache.commons.io.<a href="./org/apache/commons/io/TaggedIOException.html" title="class in org.apache.commons.io">TaggedIOException</a></dt>
-<dd>
-<div class="block">Creates a tagged wrapper for the given exception.</div>
-</dd>
-<dt><a href="./org/apache/commons/io/output/TaggedOutputStream.html" title="class in org.apache.commons.io.output"><span class="strong">TaggedOutputStream</span></a> - Class in <a href="./org/apache/commons/io/output/package-summary.html">org.apache.commons.io.output</a></dt>
-<dd>
-<div class="block">An output stream decorator that tags potential exceptions so that the
- stream that caused the exception can easily be identified.</div>
-</dd>
-<dt><span class="strong"><a href="./org/apache/commons/io/output/TaggedOutputStream.html#TaggedOutputStream(java.io.OutputStream)">TaggedOutputStream(OutputStream)</a></span> - Constructor for class org.apache.commons.io.output.<a href="./org/apache/commons/io/output/TaggedOutputStream.html" title="class in org.apache.commons.io.output">TaggedOutputStream</a></dt>
-<dd>
-<div class="block">Creates a tagging decorator for the given output stream.</div>
-</dd>
-<dt><a href="./org/apache/commons/io/input/Tailer.html" title="class in org.apache.commons.io.input"><span class="strong">Tailer</span></a> - Class in <a href="./org/apache/commons/io/input/package-summary.html">org.apache.commons.io.input</a></dt>
-<dd>
-<div class="block">Simple implementation of the unix "tail -f" functionality.</div>
-</dd>
-<dt><span class="strong"><a href="./org/apache/commons/io/input/Tailer.html#Tailer(java.io.File, org.apache.commons.io.input.TailerListener)">Tailer(File, TailerListener)</a></span> - Constructor for class org.apache.commons.io.input.<a href="./org/apache/commons/io/input/Tailer.html" title="class in org.apache.commons.io.input">Tailer</a></dt>
-<dd>
-<div class="block">Creates a Tailer for the given file, starting from the beginning, with the default delay of 1.0s.</div>
-</dd>
-<dt><span class="strong"><a href="./org/apache/commons/io/input/Tailer.html#Tailer(java.io.File, org.apache.commons.io.input.TailerListener, long)">Tailer(File, TailerListener, long)</a></span> - Constructor for class org.apache.commons.io.input.<a href="./org/apache/commons/io/input/Tailer.html" title="class in org.apache.commons.io.input">Tailer</a></dt>
-<dd>
-<div class="block">Creates a Tailer for the given file, starting from the beginning.</div>
-</dd>
-<dt><span class="strong"><a href="./org/apache/commons/io/input/Tailer.html#Tailer(java.io.File, org.apache.commons.io.input.TailerListener, long, boolean)">Tailer(File, TailerListener, long, boolean)</a></span> - Constructor for class org.apache.commons.io.input.<a href="./org/apache/commons/io/input/Tailer.html" title="class in org.apache.commons.io.input">Tailer</a></dt>
-<dd>
-<div class="block">Creates a Tailer for the given file, with a delay other than the default 1.0s.</div>
-</dd>
-<dt><span class="strong"><a href="./org/apache/commons/io/input/Tailer.html#Tailer(java.io.File, org.apache.commons.io.input.TailerListener, long, boolean, boolean)">Tailer(File, TailerListener, long, boolean, boolean)</a></span> - Constructor for class org.apache.commons.io.input.<a href="./org/apache/commons/io/input/Tailer.html" title="class in org.apache.commons.io.input">Tailer</a></dt>
-<dd>
-<div class="block">Creates a Tailer for the given file, with a delay other than the default 1.0s.</div>
-</dd>
-<dt><span class="strong"><a href="./org/apache/commons/io/input/Tailer.html#Tailer(java.io.File, org.apache.commons.io.input.TailerListener, long, boolean, int)">Tailer(File, TailerListener, long, boolean, int)</a></span> - Constructor for class org.apache.commons.io.input.<a href="./org/apache/commons/io/input/Tailer.html" title="class in org.apache.commons.io.input">Tailer</a></dt>
-<dd>
-<div class="block">Creates a Tailer for the given file, with a specified buffer size.</div>
-</dd>
-<dt><span class="strong"><a href="./org/apache/commons/io/input/Tailer.html#Tailer(java.io.File, org.apache.commons.io.input.TailerListener, long, boolean, boolean, int)">Tailer(File, TailerListener, long, boolean, boolean, int)</a></span> - Constructor for class org.apache.commons.io.input.<a href="./org/apache/commons/io/input/Tailer.html" title="class in org.apache.commons.io.input">Tailer</a></dt>
-<dd>
-<div class="block">Creates a Tailer for the given file, with a specified buffer size.</div>
-</dd>
-<dt><a href="./org/apache/commons/io/input/TailerListener.html" title="interface in org.apache.commons.io.input"><span class="strong">TailerListener</span></a> - Interface in <a href="./org/apache/commons/io/input/package-summary.html">org.apache.commons.io.input</a></dt>
-<dd>
-<div class="block">Listener for events from a <a href="./org/apache/commons/io/input/Tailer.html" title="class in org.apache.commons.io.input"><code>Tailer</code></a>.</div>
-</dd>
-<dt><a href="./org/apache/commons/io/input/TailerListenerAdapter.html" title="class in org.apache.commons.io.input"><span class="strong">TailerListenerAdapter</span></a> - Class in <a href="./org/apache/commons/io/input/package-summary.html">org.apache.commons.io.input</a></dt>
-<dd>
-<div class="block"><a href="./org/apache/commons/io/input/TailerListener.html" title="interface in org.apache.commons.io.input"><code>TailerListener</code></a> Adapter.</div>
-</dd>
-<dt><span class="strong"><a href="./org/apache/commons/io/input/TailerListenerAdapter.html#TailerListenerAdapter()">TailerListenerAdapter()</a></span> - Constructor for class org.apache.commons.io.input.<a href="./org/apache/commons/io/input/TailerListenerAdapter.html" title="class in org.apache.commons.io.input">TailerListenerAdapter</a></dt>
-<dd>&nbsp;</dd>
-<dt><a href="./org/apache/commons/io/input/TeeInputStream.html" title="class in org.apache.commons.io.input"><span class="strong">TeeInputStream</span></a> - Class in <a href="./org/apache/commons/io/input/package-summary.html">org.apache.commons.io.input</a></dt>
-<dd>
-<div class="block">InputStream proxy that transparently writes a copy of all bytes read
- from the proxied stream to a given OutputStream.</div>
-</dd>
-<dt><span class="strong"><a href="./org/apache/commons/io/input/TeeInputStream.html#TeeInputStream(java.io.InputStream, java.io.OutputStream)">TeeInputStream(InputStream, OutputStream)</a></span> - Constructor for class org.apache.commons.io.input.<a href="./org/apache/commons/io/input/TeeInputStream.html" title="class in org.apache.commons.io.input">TeeInputStream</a></dt>
-<dd>
-<div class="block">Creates a TeeInputStream that proxies the given <a href="http://download.oracle.com/javase/6/docs/api/java/io/InputStream.html?is-external=true" title="class or interface in java.io"><code>InputStream</code></a>
- and copies all read bytes to the given <a href="http://download.oracle.com/javase/6/docs/api/java/io/OutputStream.html?is-external=true" title="class or interface in java.io"><code>OutputStream</code></a>.</div>
-</dd>
-<dt><span class="strong"><a href="./org/apache/commons/io/input/TeeInputStream.html#TeeInputStream(java.io.InputStream, java.io.OutputStream, boolean)">TeeInputStream(InputStream, OutputStream, boolean)</a></span> - Constructor for class org.apache.commons.io.input.<a href="./org/apache/commons/io/input/TeeInputStream.html" title="class in org.apache.commons.io.input">TeeInputStream</a></dt>
-<dd>
-<div class="block">Creates a TeeInputStream that proxies the given <a href="http://download.oracle.com/javase/6/docs/api/java/io/InputStream.html?is-external=true" title="class or interface in java.io"><code>InputStream</code></a>
- and copies all read bytes to the given <a href="http://download.oracle.com/javase/6/docs/api/java/io/OutputStream.html?is-external=true" title="class or interface in java.io"><code>OutputStream</code></a>.</div>
-</dd>
-<dt><a href="./org/apache/commons/io/output/TeeOutputStream.html" title="class in org.apache.commons.io.output"><span class="strong">TeeOutputStream</span></a> - Class in <a href="./org/apache/commons/io/output/package-summary.html">org.apache.commons.io.output</a></dt>
-<dd>
-<div class="block">Classic splitter of OutputStream.</div>
-</dd>
-<dt><span class="strong"><a href="./org/apache/commons/io/output/TeeOutputStream.html#TeeOutputStream(java.io.OutputStream, java.io.OutputStream)">TeeOutputStream(OutputStream, OutputStream)</a></span> - Constructor for class org.apache.commons.io.output.<a href="./org/apache/commons/io/output/TeeOutputStream.html" title="class in org.apache.commons.io.output">TeeOutputStream</a></dt>
-<dd>
-<div class="block">Constructs a TeeOutputStream.</div>
-</dd>
-<dt><a href="./org/apache/commons/io/output/ThresholdingOutputStream.html" title="class in org.apache.commons.io.output"><span class="strong">ThresholdingOutputStream</span></a> - Class in <a href="./org/apache/commons/io/output/package-summary.html">org.apache.commons.io.output</a></dt>
-<dd>
-<div class="block">An output stream which triggers an event when a specified number of bytes of
- data have been written to it.</div>
-</dd>
-<dt><span class="strong"><a href="./org/apache/commons/io/output/ThresholdingOutputStream.html#ThresholdingOutputStream(int)">ThresholdingOutputStream(int)</a></span> - Constructor for class org.apache.commons.io.output.<a href="./org/apache/commons/io/output/ThresholdingOutputStream.html" title="class in org.apache.commons.io.output">ThresholdingOutputStream</a></dt>
-<dd>
-<div class="block">Constructs an instance of this class which will trigger an event at the
- specified threshold.</div>
-</dd>
-<dt><span class="strong"><a href="./org/apache/commons/io/output/DeferredFileOutputStream.html#thresholdReached()">thresholdReached()</a></span> - Method in class org.apache.commons.io.output.<a href="./org/apache/commons/io/output/DeferredFileOutputStream.html" title="class in org.apache.commons.io.output">DeferredFileOutputStream</a></dt>
-<dd>
-<div class="block">Switches the underlying output stream from a memory based stream to one
- that is backed by disk.</div>
-</dd>
-<dt><span class="strong"><a href="./org/apache/commons/io/output/ThresholdingOutputStream.html#thresholdReached()">thresholdReached()</a></span> - Method in class org.apache.commons.io.output.<a href="./org/apache/commons/io/output/ThresholdingOutputStream.html" title="class in org.apache.commons.io.output">ThresholdingOutputStream</a></dt>
-<dd>
-<div class="block">Indicates that the configured threshold has been reached, and that a
- subclass should take whatever action necessary on this event.</div>
-</dd>
-<dt><span class="strong"><a href="./org/apache/commons/io/TaggedIOException.html#throwCauseIfTaggedWith(java.lang.Throwable, java.lang.Object)">throwCauseIfTaggedWith(Throwable, Object)</a></span> - Static method in exception org.apache.commons.io.<a href="./org/apache/commons/io/TaggedIOException.html" title="class in org.apache.commons.io">TaggedIOException</a></dt>
-<dd>
-<div class="block">Throws the original <a href="http://download.oracle.com/javase/6/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io"><code>IOException</code></a> if the given throwable is
- a <a href="./org/apache/commons/io/TaggedIOException.html" title="class in org.apache.commons.io"><code>TaggedIOException</code></a> decorator the given tag.</div>
-</dd>
-<dt><span class="strong"><a href="./org/apache/commons/io/input/TaggedInputStream.html#throwIfCauseOf(java.lang.Throwable)">throwIfCauseOf(Throwable)</a></span> - Method in class org.apache.commons.io.input.<a href="./org/apache/commons/io/input/TaggedInputStream.html" title="class in org.apache.commons.io.input">TaggedInputStream</a></dt>
-<dd>
-<div class="block">Re-throws the original exception thrown by this stream.</div>
-</dd>
-<dt><span class="strong"><a href="./org/apache/commons/io/output/TaggedOutputStream.html#throwIfCauseOf(java.lang.Exception)">throwIfCauseOf(Exception)</a></span> - Method in class org.apache.commons.io.output.<a href="./org/apache/commons/io/output/TaggedOutputStream.html" title="class in org.apache.commons.io.output">TaggedOutputStream</a></dt>
-<dd>
-<div class="block">Re-throws the original exception thrown by this stream.</div>
-</dd>
-<dt><span class="strong"><a href="./org/apache/commons/io/IOUtils.html#toBufferedInputStream(java.io.InputStream)">toBufferedInputStream(InputStream)</a></span> - Static method in class org.apache.commons.io.<a href="./org/apache/commons/io/IOUtils.html" title="class in org.apache.commons.io">IOUtils</a></dt>
-<dd>
-<div class="block">Fetches entire contents of an <code>InputStream</code> and represent
- same data as result InputStream.</div>
-</dd>
-<dt><span class="strong"><a href="./org/apache/commons/io/output/ByteArrayOutputStream.html#toBufferedInputStream(java.io.InputStream)">toBufferedInputStream(InputStream)</a></span> - Static method in class org.apache.commons.io.output.<a href="./org/apache/commons/io/output/ByteArrayOutputStream.html" title="class in org.apache.commons.io.output">ByteArrayOutputStream</a></dt>
-<dd>
-<div class="block">Fetches entire contents of an <code>InputStream</code> and represent
- same data as result InputStream.</div>
-</dd>
-<dt><span class="strong"><a href="./org/apache/commons/io/IOUtils.html#toBufferedReader(java.io.Reader)">toBufferedReader(Reader)</a></span> - Static method in class org.apache.commons.io.<a href="./org/apache/commons/io/IOUtils.html" title="class in org.apache.commons.io">IOUtils</a></dt>
-<dd>
-<div class="block">Returns the given reader if it is a <a href="http://download.oracle.com/javase/6/docs/api/java/io/BufferedReader.html?is-external=true" title="class or interface in java.io"><code>BufferedReader</code></a>, otherwise creates a BufferedReader from the given
- reader.</div>
-</dd>
-<dt><span class="strong"><a href="./org/apache/commons/io/IOUtils.html#toByteArray(java.io.InputStream)">toByteArray(InputStream)</a></span> - Static method in class org.apache.commons.io.<a href="./org/apache/commons/io/IOUtils.html" title="class in org.apache.commons.io">IOUtils</a></dt>
-<dd>
-<div class="block">Gets the contents of an <code>InputStream</code> as a <code>byte[]</code>.</div>
-</dd>
-<dt><span class="strong"><a href="./org/apache/commons/io/IOUtils.html#toByteArray(java.io.InputStream, long)">toByteArray(InputStream, long)</a></span> - Static method in class org.apache.commons.io.<a href="./org/apache/commons/io/IOUtils.html" title="class in org.apache.commons.io">IOUtils</a></dt>
-<dd>
-<div class="block">Gets contents of an <code>InputStream</code> as a <code>byte[]</code>.</div>
-</dd>
-<dt><span class="strong"><a href="./org/apache/commons/io/IOUtils.html#toByteArray(java.io.InputStream, int)">toByteArray(InputStream, int)</a></span> - Static method in class org.apache.commons.io.<a href="./org/apache/commons/io/IOUtils.html" title="class in org.apache.commons.io">IOUtils</a></dt>
-<dd>
-<div class="block">Gets the contents of an <code>InputStream</code> as a <code>byte[]</code>.</div>
-</dd>
-<dt><span class="strong"><a href="./org/apache/commons/io/IOUtils.html#toByteArray(java.io.Reader)">toByteArray(Reader)</a></span> - Static method in class org.apache.commons.io.<a href="./org/apache/commons/io/IOUtils.html" title="class in org.apache.commons.io">IOUtils</a></dt>
-<dd>
-<div class="block"><span class="strong">Deprecated.</span>
-<div class="block"><i>2.5 use <a href="./org/apache/commons/io/IOUtils.html#toByteArray(java.io.Reader, java.nio.charset.Charset)"><code>IOUtils.toByteArray(Reader, Charset)</code></a> instead</i></div>
-</div>
-</dd>
-<dt><span class="strong"><a href="./org/apache/commons/io/IOUtils.html#toByteArray(java.io.Reader, java.nio.charset.Charset)">toByteArray(Reader, Charset)</a></span> - Static method in class org.apache.commons.io.<a href="./org/apache/commons/io/IOUtils.html" title="class in org.apache.commons.io">IOUtils</a></dt>
-<dd>
-<div class="block">Gets the contents of a <code>Reader</code> as a <code>byte[]</code>
- using the specified character encoding.</div>
-</dd>
-<dt><span class="strong"><a href="./org/apache/commons/io/IOUtils.html#toByteArray(java.io.Reader, java.lang.String)">toByteArray(Reader, String)</a></span> - Static method in class org.apache.commons.io.<a href="./org/apache/commons/io/IOUtils.html" title="class in org.apache.commons.io">IOUtils</a></dt>
-<dd>
-<div class="block">Gets the contents of a <code>Reader</code> as a <code>byte[]</code>
- using the specified character encoding.</div>
-</dd>
-<dt><span class="strong"><a href="./org/apache/commons/io/IOUtils.html#toByteArray(java.lang.String)">toByteArray(String)</a></span> - Static method in class org.apache.commons.io.<a href="./org/apache/commons/io/IOUtils.html" title="class in org.apache.commons.io">IOUtils</a></dt>
-<dd>
-<div class="block"><span class="strong">Deprecated.</span>
-<div class="block"><i>2.5 Use <a href="http://download.oracle.com/javase/6/docs/api/java/lang/String.html?is-external=true#getBytes()" title="class or interface in java.lang"><code>String.getBytes()</code></a> instead</i></div>
-</div>
-</dd>
-<dt><span class="strong"><a href="./org/apache/commons/io/IOUtils.html#toByteArray(java.net.URI)">toByteArray(URI)</a></span> - Static method in class org.apache.commons.io.<a href="./org/apache/commons/io/IOUtils.html" title="class in org.apache.commons.io">IOUtils</a></dt>
-<dd>
-<div class="block">Gets the contents of a <code>URI</code> as a <code>byte[]</code>.</div>
-</dd>
-<dt><span class="strong"><a href="./org/apache/commons/io/IOUtils.html#toByteArray(java.net.URL)">toByteArray(URL)</a></span> - Static method in class org.apache.commons.io.<a href="./org/apache/commons/io/IOUtils.html" title="class in org.apache.commons.io">IOUtils</a></dt>
-<dd>
-<div class="block">Gets the contents of a <code>URL</code> as a <code>byte[]</code>.</div>
-</dd>
-<dt><span class="strong"><a href="./org/apache/commons/io/IOUtils.html#toByteArray(java.net.URLConnection)">toByteArray(URLConnection)</a></span> - Static method in class org.apache.commons.io.<a href="./org/apache/commons/io/IOUtils.html" title="class in org.apache.commons.io">IOUtils</a></dt>
-<dd>
-<div class="block">Gets the contents of a <code>URLConnection</code> as a <code>byte[]</code>.</div>
-</dd>
-<dt><span class="strong"><a href="./org/apache/commons/io/output/ByteArrayOutputStream.html#toByteArray()">toByteArray()</a></span> - Method in class org.apache.commons.io.output.<a href="./org/apache/commons/io/output/ByteArrayOutputStream.html" title="class in org.apache.commons.io.output">ByteArrayOutputStream</a></dt>
-<dd>
-<div class="block">Gets the curent contents of this byte stream as a byte array.</div>
-</dd>
-<dt><span class="strong"><a href="./org/apache/commons/io/IOUtils.html#toCharArray(java.io.InputStream)">toCharArray(InputStream)</a></span> - Static method in class org.apache.commons.io.<a href="./org/apache/commons/io/IOUtils.html" title="class in org.apache.commons.io">IOUtils</a></dt>
-<dd>
-<div class="block"><span class="strong">Deprecated.</span>
-<div class="block"><i>2.5 use <a href="./org/apache/commons/io/IOUtils.html#toCharArray(java.io.InputStream, java.nio.charset.Charset)"><code>IOUtils.toCharArray(InputStream, Charset)</code></a> instead</i></div>
-</div>
-</dd>
-<dt><span class="strong"><a href="./org/apache/commons/io/IOUtils.html#toCharArray(java.io.InputStream, java.nio.charset.Charset)">toCharArray(InputStream, Charset)</a></span> - Static method in class org.apache.commons.io.<a href="./org/apache/commons/io/IOUtils.html" title="class in org.apache.commons.io">IOUtils</a></dt>
-<dd>
-<div class="block">Gets the contents of an <code>InputStream</code> as a character array
- using the specified character encoding.</div>
-</dd>
-<dt><span class="strong"><a href="./org/apache/commons/io/IOUtils.html#toCharArray(java.io.InputStream, java.lang.String)">toCharArray(InputStream, String)</a></span> - Static method in class org.apache.commons.io.<a href="./org/apache/commons/io/IOUtils.html" title="class in org.apache.commons.io">IOUtils</a></dt>
-<dd>
-<div class="block">Gets the contents of an <code>InputStream</code> as a character array
- using the specified character encoding.</div>
-</dd>
-<dt><span class="strong"><a href="./org/apache/commons/io/IOUtils.html#toCharArray(java.io.Reader)">toCharArray(Reader)</a></span> - Static method in class org.apache.commons.io.<a href="./org/apache/commons/io/IOUtils.html" title="class in org.apache.commons.io">IOUtils</a></dt>
-<dd>
-<div class="block">Gets the contents of a <code>Reader</code> as a character array.</div>
-</dd>
-<dt><span class="strong"><a href="./org/apache/commons/io/Charsets.html#toCharset(java.nio.charset.Charset)">toCharset(Charset)</a></span> - Static method in class org.apache.commons.io.<a href="./org/apache/commons/io/Charsets.html" title="class in org.apache.commons.io">Charsets</a></dt>
-<dd>
-<div class="block">Returns the given Charset or the default Charset if the given Charset is null.</div>
-</dd>
-<dt><span class="strong"><a href="./org/apache/commons/io/Charsets.html#toCharset(java.lang.String)">toCharset(String)</a></span> - Static method in class org.apache.commons.io.<a href="./org/apache/commons/io/Charsets.html" title="class in org.apache.commons.io">Charsets</a></dt>
-<dd>
-<div class="block">Returns a Charset for the named charset.</div>
-</dd>
-<dt><span class="strong"><a href="./org/apache/commons/io/FileUtils.html#toFile(java.net.URL)">toFile(URL)</a></span> - Static method in class org.apache.commons.io.<a href="./org/apache/commons/io/FileUtils.html" title="class in org.apache.commons.io">FileUtils</a></dt>
-<dd>
-<div class="block">Convert from a <code>URL</code> to a <code>File</code>.</div>
-</dd>
-<dt><span class="strong"><a href="./org/apache/commons/io/FileUtils.html#toFiles(java.net.URL[])">toFiles(URL[])</a></span> - Static method in class org.apache.commons.io.<a href="./org/apache/commons/io/FileUtils.html" title="class in org.apache.commons.io">FileUtils</a></dt>
-<dd>
-<div class="block">Converts each of an array of <code>URL</code> to a <code>File</code>.</div>
-</dd>
-<dt><span class="strong"><a href="./org/apache/commons/io/IOUtils.html#toInputStream(java.lang.CharSequence)">toInputStream(CharSequence)</a></span> - Static method in class org.apache.commons.io.<a href="./org/apache/commons/io/IOUtils.html" title="class in org.apache.commons.io">IOUtils</a></dt>
-<dd>
-<div class="block"><span class="strong">Deprecated.</span>
-<div class="block"><i>2.5 use <a href="./org/apache/commons/io/IOUtils.html#toInputStream(java.lang.CharSequence, java.nio.charset.Charset)"><code>IOUtils.toInputStream(CharSequence, Charset)</code></a> instead</i></div>
-</div>
-</dd>
-<dt><span class="strong"><a href="./org/apache/commons/io/IOUtils.html#toInputStream(java.lang.CharSequence, java.nio.charset.Charset)">toInputStream(CharSequence, Charset)</a></span> - Static method in class org.apache.commons.io.<a href="./org/apache/commons/io/IOUtils.html" title="class in org.apache.commons.io">IOUtils</a></dt>
-<dd>
-<div class="block">Converts the specified CharSequence to an input stream, encoded as bytes
- using the specified character encoding.</div>
-</dd>
-<dt><span class="strong"><a href="./org/apache/commons/io/IOUtils.html#toInputStream(java.lang.CharSequence, java.lang.String)">toInputStream(CharSequence, String)</a></span> - Static method in class org.apache.commons.io.<a href="./org/apache/commons/io/IOUtils.html" title="class in org.apache.commons.io">IOUtils</a></dt>
-<dd>
-<div class="block">Converts the specified CharSequence to an input stream, encoded as bytes
- using the specified character encoding.</div>
-</dd>
-<dt><span class="strong"><a href="./org/apache/commons/io/IOUtils.html#toInputStream(java.lang.String)">toInputStream(String)</a></span> - Static method in class org.apache.commons.io.<a href="./org/apache/commons/io/IOUtils.html" title="class in org.apache.commons.io">IOUtils</a></dt>
-<dd>
-<div class="block"><span class="strong">Deprecated.</span>
-<div class="block"><i>2.5 use <a href="./org/apache/commons/io/IOUtils.html#toInputStream(java.lang.String, java.nio.charset.Charset)"><code>IOUtils.toInputStream(String, Charset)</code></a> instead</i></div>
-</div>
-</dd>
-<dt><span class="strong"><a href="./org/apache/commons/io/IOUtils.html#toInputStream(java.lang.String, java.nio.charset.Charset)">toInputStream(String, Charset)</a></span> - Static method in class org.apache.commons.io.<a href="./org/apache/commons/io/IOUtils.html" title="class in org.apache.commons.io">IOUtils</a></dt>
-<dd>
-<div class="block">Converts the specified string to an input stream, encoded as bytes
- using the specified character encoding.</div>
-</dd>
-<dt><span class="strong"><a href="./org/apache/commons/io/IOUtils.html#toInputStream(java.lang.String, java.lang.String)">toInputStream(String, String)</a></span> - Static method in class org.apache.commons.io.<a href="./org/apache/commons/io/IOUtils.html" title="class in org.apache.commons.io">IOUtils</a></dt>
-<dd>
-<div class="block">Converts the specified string to an input stream, encoded as bytes
- using the specified character encoding.</div>
-</dd>
-<dt><span class="strong"><a href="./org/apache/commons/io/output/ByteArrayOutputStream.html#toInputStream()">toInputStream()</a></span> - Method in class org.apache.commons.io.output.<a href="./org/apache/commons/io/output/ByteArrayOutputStream.html" title="class in org.apache.commons.io.output">ByteArrayOutputStream</a></dt>
-<dd>
-<div class="block">Gets the current contents of this byte stream as a Input Stream.</div>
-</dd>
-<dt><span class="strong"><a href="./org/apache/commons/io/filefilter/FileFilterUtils.html#toList(org.apache.commons.io.filefilter.IOFileFilter...)">toList(IOFileFilter...)</a></span> - Static method in class org.apache.commons.io.filefilter.<a href="./org/apache/commons/io/filefilter/FileFilterUtils.html" title="class in org.apache.commons.io.filefilter">FileFilterUtils</a></dt>
-<dd>
-<div class="block">Create a List of file filters.</div>
-</dd>
-<dt><span class="strong"><a href="./org/apache/commons/io/ByteOrderMark.html#toString()">toString()</a></span> - Method in class org.apache.commons.io.<a href="./org/apache/commons/io/ByteOrderMark.html" title="class in org.apache.commons.io">ByteOrderMark</a></dt>
-<dd>
-<div class="block">Provide a String representation of the BOM.</div>
-</dd>
-<dt><span class="strong"><a href="./org/apache/commons/io/comparator/CompositeFileComparator.html#toString()">toString()</a></span> - Method in class org.apache.commons.io.comparator.<a href="./org/apache/commons/io/comparator/CompositeFileComparator.html" title="class in org.apache.commons.io.comparator">CompositeFileComparator</a></dt>
-<dd>
-<div class="block">String representation of this file comparator.</div>
-</dd>
-<dt><span class="strong"><a href="./org/apache/commons/io/comparator/ExtensionFileComparator.html#toString()">toString()</a></span> - Method in class org.apache.commons.io.comparator.<a href="./org/apache/commons/io/comparator/ExtensionFileComparator.html" title="class in org.apache.commons.io.comparator">ExtensionFileComparator</a></dt>
-<dd>
-<div class="block">String representation of this file comparator.</div>
-</dd>
-<dt><span class="strong"><a href="./org/apache/commons/io/comparator/NameFileComparator.html#toString()">toString()</a></span> - Method in class org.apache.commons.io.comparator.<a href="./org/apache/commons/io/comparator/NameFileComparator.html" title="class in org.apache.commons.io.comparator">NameFileComparator</a></dt>
-<dd>
-<div class="block">String representation of this file comparator.</div>
-</dd>
-<dt><span class="strong"><a href="./org/apache/commons/io/comparator/PathFileComparator.html#toString()">toString()</a></span> - Method in class org.apache.commons.io.comparator.<a href="./org/apache/commons/io/comparator/PathFileComparator.html" title="class in org.apache.commons.io.comparator">PathFileComparator</a></dt>
-<dd>
-<div class="block">String representation of this file comparator.</div>
-</dd>
-<dt><span class="strong"><a href="./org/apache/commons/io/comparator/SizeFileComparator.html#toString()">toString()</a></span> - Method in class org.apache.commons.io.comparator.<a href="./org/apache/commons/io/comparator/SizeFileComparator.html" title="class in org.apache.commons.io.comparator">SizeFileComparator</a></dt>
-<dd>
-<div class="block">String representation of this file comparator.</div>
-</dd>
-<dt><span class="strong"><a href="./org/apache/commons/io/FileDeleteStrategy.html#toString()">toString()</a></span> - Method in class org.apache.commons.io.<a href="./org/apache/commons/io/FileDeleteStrategy.html" title="class in org.apache.commons.io">FileDeleteStrategy</a></dt>
-<dd>
-<div class="block">Gets a string describing the delete strategy.</div>
-</dd>
-<dt><span class="strong"><a href="./org/apache/commons/io/filefilter/AbstractFileFilter.html#toString()">toString()</a></span> - Method in class org.apache.commons.io.filefilter.<a href="./org/apache/commons/io/filefilter/AbstractFileFilter.html" title="class in org.apache.commons.io.filefilter">AbstractFileFilter</a></dt>
-<dd>
-<div class="block">Provide a String representaion of this file filter.</div>
-</dd>
-<dt><span class="strong"><a href="./org/apache/commons/io/filefilter/AgeFileFilter.html#toString()">toString()</a></span> - Method in class org.apache.commons.io.filefilter.<a href="./org/apache/commons/io/filefilter/AgeFileFilter.html" title="class in org.apache.commons.io.filefilter">AgeFileFilter</a></dt>
-<dd>
-<div class="block">Provide a String representaion of this file filter.</div>
-</dd>
-<dt><span class="strong"><a href="./org/apache/commons/io/filefilter/AndFileFilter.html#toString()">toString()</a></span> - Method in class org.apache.commons.io.filefilter.<a href="./org/apache/commons/io/filefilter/AndFileFilter.html" title="class in org.apache.commons.io.filefilter">AndFileFilter</a></dt>
-<dd>
-<div class="block">Provide a String representaion of this file filter.</div>
-</dd>
-<dt><span class="strong"><a href="./org/apache/commons/io/filefilter/DelegateFileFilter.html#toString()">toString()</a></span> - Method in class org.apache.commons.io.filefilter.<a href="./org/apache/commons/io/filefilter/DelegateFileFilter.html" title="class in org.apache.commons.io.filefilter">DelegateFileFilter</a></dt>
-<dd>
-<div class="block">Provide a String representaion of this file filter.</div>
-</dd>
-<dt><span class="strong"><a href="./org/apache/commons/io/filefilter/MagicNumberFileFilter.html#toString()">toString()</a></span> - Method in class org.apache.commons.io.filefilter.<a href="./org/apache/commons/io/filefilter/MagicNumberFileFilter.html" title="class in org.apache.commons.io.filefilter">MagicNumberFileFilter</a></dt>
-<dd>
-<div class="block">Returns a String representation of the file filter, which includes the
- magic number bytes and byte offset.</div>
-</dd>
-<dt><span class="strong"><a href="./org/apache/commons/io/filefilter/NameFileFilter.html#toString()">toString()</a></span> - Method in class org.apache.commons.io.filefilter.<a href="./org/apache/commons/io/filefilter/NameFileFilter.html" title="class in org.apache.commons.io.filefilter">NameFileFilter</a></dt>
-<dd>
-<div class="block">Provide a String representaion of this file filter.</div>
-</dd>
-<dt><span class="strong"><a href="./org/apache/commons/io/filefilter/NotFileFilter.html#toString()">toString()</a></span> - Method in class org.apache.commons.io.filefilter.<a href="./org/apache/commons/io/filefilter/NotFileFilter.html" title="class in org.apache.commons.io.filefilter">NotFileFilter</a></dt>
-<dd>
-<div class="block">Provide a String representaion of this file filter.</div>
-</dd>
-<dt><span class="strong"><a href="./org/apache/commons/io/filefilter/OrFileFilter.html#toString()">toString()</a></span> - Method in class org.apache.commons.io.filefilter.<a href="./org/apache/commons/io/filefilter/OrFileFilter.html" title="class in org.apache.commons.io.filefilter">OrFileFilter</a></dt>
-<dd>
-<div class="block">Provide a String representaion of this file filter.</div>
-</dd>
-<dt><span class="strong"><a href="./org/apache/commons/io/filefilter/PrefixFileFilter.html#toString()">toString()</a></span> - Method in class org.apache.commons.io.filefilter.<a href="./org/apache/commons/io/filefilter/PrefixFileFilter.html" title="class in org.apache.commons.io.filefilter">PrefixFileFilter</a></dt>
-<dd>
-<div class="block">Provide a String representaion of this file filter.</div>
-</dd>
-<dt><span class="strong"><a href="./org/apache/commons/io/filefilter/SizeFileFilter.html#toString()">toString()</a></span> - Method in class org.apache.commons.io.filefilter.<a href="./org/apache/commons/io/filefilter/SizeFileFilter.html" title="class in org.apache.commons.io.filefilter">SizeFileFilter</a></dt>
-<dd>
-<div class="block">Provide a String representaion of this file filter.</div>
-</dd>
-<dt><span class="strong"><a href="./org/apache/commons/io/filefilter/SuffixFileFilter.html#toString()">toString()</a></span> - Method in class org.apache.commons.io.filefilter.<a href="./org/apache/commons/io/filefilter/SuffixFileFilter.html" title="class in org.apache.commons.io.filefilter">SuffixFileFilter</a></dt>
-<dd>
-<div class="block">Provide a String representaion of this file filter.</div>
-</dd>
-<dt><span class="strong"><a href="./org/apache/commons/io/filefilter/WildcardFileFilter.html#toString()">toString()</a></span> - Method in class org.apache.commons.io.filefilter.<a href="./org/apache/commons/io/filefilter/WildcardFileFilter.html" title="class in org.apache.commons.io.filefilter">WildcardFileFilter</a></dt>
-<dd>
-<div class="block">Provide a String representation of this file filter.</div>
-</dd>
-<dt><span class="strong"><a href="./org/apache/commons/io/input/BoundedInputStream.html#toString()">toString()</a></span> - Method in class org.apache.commons.io.input.<a href="./org/apache/commons/io/input/BoundedInputStream.html" title="class in org.apache.commons.io.input">BoundedInputStream</a></dt>
-<dd>
-<div class="block">Invokes the delegate's <code>toString()</code> method.</div>
-</dd>
-<dt><span class="strong"><a href="./org/apache/commons/io/input/CharSequenceReader.html#toString()">toString()</a></span> - Method in class org.apache.commons.io.input.<a href="./org/apache/commons/io/input/CharSequenceReader.html" title="class in org.apache.commons.io.input">CharSequenceReader</a></dt>
-<dd>
-<div class="block">Return a String representation of the underlying
- character sequence.</div>
-</dd>
-<dt><span class="strong"><a href="./org/apache/commons/io/IOCase.html#toString()">toString()</a></span> - Method in class org.apache.commons.io.<a href="./org/apache/commons/io/IOCase.html" title="class in org.apache.commons.io">IOCase</a></dt>
-<dd>
-<div class="block">Gets a string describing the sensitivity.</div>
-</dd>
-<dt><span class="strong"><a href="./org/apache/commons/io/IOUtils.html#toString(java.io.InputStream)">toString(InputStream)</a></span> - Static method in class org.apache.commons.io.<a href="./org/apache/commons/io/IOUtils.html" title="class in org.apache.commons.io">IOUtils</a></dt>
-<dd>
-<div class="block"><span class="strong">Deprecated.</span>
-<div class="block"><i>2.5 use <a href="./org/apache/commons/io/IOUtils.html#toString(java.io.InputStream, java.nio.charset.Charset)"><code>IOUtils.toString(InputStream, Charset)</code></a> instead</i></div>
-</div>
-</dd>
-<dt><span class="strong"><a href="./org/apache/commons/io/IOUtils.html#toString(java.io.InputStream, java.nio.charset.Charset)">toString(InputStream, Charset)</a></span> - Static method in class org.apache.commons.io.<a href="./org/apache/commons/io/IOUtils.html" title="class in org.apache.commons.io">IOUtils</a></dt>
-<dd>
-<div class="block">Gets the contents of an <code>InputStream</code> as a String
- using the specified character encoding.</div>
-</dd>
-<dt><span class="strong"><a href="./org/apache/commons/io/IOUtils.html#toString(java.io.InputStream, java.lang.String)">toString(InputStream, String)</a></span> - Static method in class org.apache.commons.io.<a href="./org/apache/commons/io/IOUtils.html" title="class in org.apache.commons.io">IOUtils</a></dt>
-<dd>
-<div class="block">Gets the contents of an <code>InputStream</code> as a String
- using the specified character encoding.</div>
-</dd>
-<dt><span class="strong"><a href="./org/apache/commons/io/IOUtils.html#toString(java.io.Reader)">toString(Reader)</a></span> - Static method in class org.apache.commons.io.<a href="./org/apache/commons/io/IOUtils.html" title="class in org.apache.commons.io">IOUtils</a></dt>
-<dd>
-<div class="block">Gets the contents of a <code>Reader</code> as a String.</div>
-</dd>
-<dt><span class="strong"><a href="./org/apache/commons/io/IOUtils.html#toString(java.net.URI)">toString(URI)</a></span> - Static method in class org.apache.commons.io.<a href="./org/apache/commons/io/IOUtils.html" title="class in org.apache.commons.io">IOUtils</a></dt>
-<dd>
-<div class="block"><span class="strong">Deprecated.</span>
-<div class="block"><i>2.5 use <a href="./org/apache/commons/io/IOUtils.html#toString(java.net.URI, java.nio.charset.Charset)"><code>IOUtils.toString(URI, Charset)</code></a> instead</i></div>
-</div>
-</dd>
-<dt><span class="strong"><a href="./org/apache/commons/io/IOUtils.html#toString(java.net.URI, java.nio.charset.Charset)">toString(URI, Charset)</a></span> - Static method in class org.apache.commons.io.<a href="./org/apache/commons/io/IOUtils.html" title="class in org.apache.commons.io">IOUtils</a></dt>
-<dd>
-<div class="block">Gets the contents at the given URI.</div>
-</dd>
-<dt><span class="strong"><a href="./org/apache/commons/io/IOUtils.html#toString(java.net.URI, java.lang.String)">toString(URI, String)</a></span> - Static method in class org.apache.commons.io.<a href="./org/apache/commons/io/IOUtils.html" title="class in org.apache.commons.io">IOUtils</a></dt>
-<dd>
-<div class="block">Gets the contents at the given URI.</div>
-</dd>
-<dt><span class="strong"><a href="./org/apache/commons/io/IOUtils.html#toString(java.net.URL)">toString(URL)</a></span> - Static method in class org.apache.commons.io.<a href="./org/apache/commons/io/IOUtils.html" title="class in org.apache.commons.io">IOUtils</a></dt>
-<dd>
-<div class="block"><span class="strong">Deprecated.</span>
-<div class="block"><i>2.5 use <a href="./org/apache/commons/io/IOUtils.html#toString(java.net.URL, java.nio.charset.Charset)"><code>IOUtils.toString(URL, Charset)</code></a> instead</i></div>
-</div>
-</dd>
-<dt><span class="strong"><a href="./org/apache/commons/io/IOUtils.html#toString(java.net.URL, java.nio.charset.Charset)">toString(URL, Charset)</a></span> - Static method in class org.apache.commons.io.<a href="./org/apache/commons/io/IOUtils.html" title="class in org.apache.commons.io">IOUtils</a></dt>
-<dd>
-<div class="block">Gets the contents at the given URL.</div>
-</dd>
-<dt><span class="strong"><a href="./org/apache/commons/io/IOUtils.html#toString(java.net.URL, java.lang.String)">toString(URL, String)</a></span> - Static method in class org.apache.commons.io.<a href="./org/apache/commons/io/IOUtils.html" title="class in org.apache.commons.io">IOUtils</a></dt>
-<dd>
-<div class="block">Gets the contents at the given URL.</div>
-</dd>
-<dt><span class="strong"><a href="./org/apache/commons/io/IOUtils.html#toString(byte[])">toString(byte[])</a></span> - Static method in class org.apache.commons.io.<a href="./org/apache/commons/io/IOUtils.html" title="class in org.apache.commons.io">IOUtils</a></dt>
-<dd>
-<div class="block"><span class="strong">Deprecated.</span>
-<div class="block"><i>2.5 Use <a href="http://download.oracle.com/javase/6/docs/api/java/lang/String.html?is-external=true#String(byte[])" title="class or interface in java.lang"><code>String.String(byte[])</code></a> instead</i></div>
-</div>
-</dd>
-<dt><span class="strong"><a href="./org/apache/commons/io/IOUtils.html#toString(byte[], java.lang.String)">toString(byte[], String)</a></span> - Static method in class org.apache.commons.io.<a href="./org/apache/commons/io/IOUtils.html" title="class in org.apache.commons.io">IOUtils</a></dt>
-<dd>
-<div class="block">Gets the contents of a <code>byte[]</code> as a String
- using the specified character encoding.</div>
-</dd>
-<dt><span class="strong"><a href="./org/apache/commons/io/monitor/FileAlterationObserver.html#toString()">toString()</a></span> - Method in class org.apache.commons.io.monitor.<a href="./org/apache/commons/io/monitor/FileAlterationObserver.html" title="class in org.apache.commons.io.monitor">FileAlterationObserver</a></dt>
-<dd>
-<div class="block">Provide a String representation of this observer.</div>
-</dd>
-<dt><span class="strong"><a href="./org/apache/commons/io/output/ByteArrayOutputStream.html#toString()">toString()</a></span> - Method in class org.apache.commons.io.output.<a href="./org/apache/commons/io/output/ByteArrayOutputStream.html" title="class in org.apache.commons.io.output">ByteArrayOutputStream</a></dt>
-<dd>
-<div class="block"><span class="strong">Deprecated.</span>
-<div class="block"><i>2.5 use <a href="./org/apache/commons/io/output/ByteArrayOutputStream.html#toString(java.lang.String)"><code>ByteArrayOutputStream.toString(String)</code></a> instead</i></div>
-</div>
-</dd>
-<dt><span class="strong"><a href="./org/apache/commons/io/output/ByteArrayOutputStream.html#toString(java.lang.String)">toString(String)</a></span> - Method in class org.apache.commons.io.output.<a href="./org/apache/commons/io/output/ByteArrayOutputStream.html" title="class in org.apache.commons.io.output">ByteArrayOutputStream</a></dt>
-<dd>
-<div class="block">Gets the curent contents of this byte stream as a string
- using the specified encoding.</div>
-</dd>
-<dt><span class="strong"><a href="./org/apache/commons/io/output/ByteArrayOutputStream.html#toString(java.nio.charset.Charset)">toString(Charset)</a></span> - Method in class org.apache.commons.io.output.<a href="./org/apache/commons/io/output/ByteArrayOutputStream.html" title="class in org.apache.commons.io.output">ByteArrayOutputStream</a></dt>
-<dd>
-<div class="block">Gets the curent contents of this byte stream as a string
- using the specified encoding.</div>
-</dd>
-<dt><span class="strong"><a href="./org/apache/commons/io/output/StringBuilderWriter.html#toString()">toString()</a></span> - Method in class org.apache.commons.io.output.<a href="./org/apache/commons/io/output/StringBuilderWriter.html" title="class in org.apache.commons.io.output">StringBuilderWriter</a></dt>
-<dd>
-<div class="block">Returns <a href="http://download.oracle.com/javase/6/docs/api/java/lang/StringBuilder.html?is-external=true#toString()" title="class or interface in java.lang"><code>StringBuilder.toString()</code></a>.</div>
-</dd>
-<dt><span class="strong"><a href="./org/apache/commons/io/FileUtils.html#touch(java.io.File)">touch(File)</a></span> - Static method in class org.apache.commons.io.<a href="./org/apache/commons/io/FileUtils.html" title="class in org.apache.commons.io">FileUtils</a></dt>
-<dd>
-<div class="block">Implements the same behaviour as the "touch" utility on Unix.</div>
-</dd>
-<dt><span class="strong"><a href="./org/apache/commons/io/FileUtils.html#toURLs(java.io.File[])">toURLs(File[])</a></span> - Static method in class org.apache.commons.io.<a href="./org/apache/commons/io/FileUtils.html" title="class in org.apache.commons.io">FileUtils</a></dt>
-<dd>
-<div class="block">Converts each of an array of <code>File</code> to a <code>URL</code>.</div>
-</dd>
-<dt><span class="strong"><a href="./org/apache/commons/io/FileCleaner.html#track(java.io.File, java.lang.Object)">track(File, Object)</a></span> - Static method in class org.apache.commons.io.<a href="./org/apache/commons/io/FileCleaner.html" title="class in org.apache.commons.io">FileCleaner</a></dt>
-<dd>
-<div class="block"><span class="strong">Deprecated.</span>
-<div class="block"><i>Use <a href="./org/apache/commons/io/FileCleaningTracker.html#track(java.io.File, java.lang.Object)"><code>FileCleaningTracker.track(File, Object)</code></a>.</i></div>
-</div>
-</dd>
-<dt><span class="strong"><a href="./org/apache/commons/io/FileCleaner.html#track(java.io.File, java.lang.Object, org.apache.commons.io.FileDeleteStrategy)">track(File, Object, FileDeleteStrategy)</a></span> - Static method in class org.apache.commons.io.<a href="./org/apache/commons/io/FileCleaner.html" title="class in org.apache.commons.io">FileCleaner</a></dt>
-<dd>
-<div class="block"><span class="strong">Deprecated.</span>
-<div class="block"><i>Use <a href="./org/apache/commons/io/FileCleaningTracker.html#track(java.io.File, java.lang.Object, org.apache.commons.io.FileDeleteStrategy)"><code>FileCleaningTracker.track(File, Object, FileDeleteStrategy)</code></a>.</i></div>
-</div>
-</dd>
-<dt><span class="strong"><a href="./org/apache/commons/io/FileCleaner.html#track(java.lang.String, java.lang.Object)">track(String, Object)</a></span> - Static method in class org.apache.commons.io.<a href="./org/apache/commons/io/FileCleaner.html" title="class in org.apache.commons.io">FileCleaner</a></dt>
-<dd>
-<div class="block"><span class="strong">Deprecated.</span>
-<div class="block"><i>Use <a href="./org/apache/commons/io/FileCleaningTracker.html#track(java.lang.String, java.lang.Object)"><code>FileCleaningTracker.track(String, Object)</code></a>.</i></div>
-</div>
-</dd>
-<dt><span class="strong"><a href="./org/apache/commons/io/FileCleaner.html#track(java.lang.String, java.lang.Object, org.apache.commons.io.FileDeleteStrategy)">track(String, Object, FileDeleteStrategy)</a></span> - Static method in class org.apache.commons.io.<a href="./org/apache/commons/io/FileCleaner.html" title="class in org.apache.commons.io">FileCleaner</a></dt>
-<dd>
-<div class="block"><span class="strong">Deprecated.</span>
-<div class="block"><i>Use <a href="./org/apache/commons/io/FileCleaningTracker.html#track(java.lang.String, java.lang.Object, org.apache.commons.io.FileDeleteStrategy)"><code>FileCleaningTracker.track(String, Object, FileDeleteStrategy)</code></a>.</i></div>
-</div>
-</dd>
-<dt><span class="strong"><a href="./org/apache/commons/io/FileCleaningTracker.html#track(java.io.File, java.lang.Object)">track(File, Object)</a></span> - Method in class org.apache.commons.io.<a href="./org/apache/commons/io/FileCleaningTracker.html" title="class in org.apache.commons.io">FileCleaningTracker</a></dt>
-<dd>
-<div class="block">Track the specified file, using the provided marker, deleting the file
- when the marker instance is garbage collected.</div>
-</dd>
-<dt><span class="strong"><a href="./org/apache/commons/io/FileCleaningTracker.html#track(java.io.File, java.lang.Object, org.apache.commons.io.FileDeleteStrategy)">track(File, Object, FileDeleteStrategy)</a></span> - Method in class org.apache.commons.io.<a href="./org/apache/commons/io/FileCleaningTracker.html" title="class in org.apache.commons.io">FileCleaningTracker</a></dt>
-<dd>
-<div class="block">Track the specified file, using the provided marker, deleting the file
- when the marker instance is garbage collected.</div>
-</dd>
-<dt><span class="strong"><a href="./org/apache/commons/io/FileCleaningTracker.html#track(java.lang.String, java.lang.Object)">track(String, Object)</a></span> - Method in class org.apache.commons.io.<a href="./org/apache/commons/io/FileCleaningTracker.html" title="class in org.apache.commons.io">FileCleaningTracker</a></dt>
-<dd>
-<div class="block">Track the specified file, using the provided marker, deleting the file
- when the marker instance is garbage collected.</div>
-</dd>
-<dt><span class="strong"><a href="./org/apache/commons/io/FileCleaningTracker.html#track(java.lang.String, java.lang.Object, org.apache.commons.io.FileDeleteStrategy)">track(String, Object, FileDeleteStrategy)</a></span> - Method in class org.apache.commons.io.<a href="./org/apache/commons/io/FileCleaningTracker.html" title="class in org.apache.commons.io">FileCleaningTracker</a></dt>
-<dd>
-<div class="block">Track the specified file, using the provided marker, deleting the file
- when the marker instance is garbage collected.</div>
-</dd>
-<dt><span class="strong"><a href="./org/apache/commons/io/filefilter/TrueFileFilter.html#TRUE">TRUE</a></span> - Static variable in class org.apache.commons.io.filefilter.<a href="./org/apache/commons/io/filefilter/TrueFileFilter.html" title="class in org.apache.commons.io.filefilter">TrueFileFilter</a></dt>
-<dd>
-<div class="block">Singleton instance of true filter.</div>
-</dd>
-<dt><span class="strong"><a href="./org/apache/commons/io/filefilter/FileFilterUtils.html#trueFileFilter()">trueFileFilter()</a></span> - Static method in class org.apache.commons.io.filefilter.<a href="./org/apache/commons/io/filefilter/FileFilterUtils.html" title="class in org.apache.commons.io.filefilter">FileFilterUtils</a></dt>
-<dd>
-<div class="block">Returns a filter that always returns true.</div>
-</dd>
-<dt><a href="./org/apache/commons/io/filefilter/TrueFileFilter.html" title="class in org.apache.commons.io.filefilter"><span class="strong">TrueFileFilter</span></a> - Class in <a href="./org/apache/commons/io/filefilter/package-summary.html">org.apache.commons.io.filefilter</a></dt>
-<dd>
-<div class="block">A file filter that always returns true.</div>
-</dd>
-<dt><span class="strong"><a href="./org/apache/commons/io/filefilter/TrueFileFilter.html#TrueFileFilter()">TrueFileFilter()</a></span> - Constructor for class org.apache.commons.io.filefilter.<a href="./org/apache/commons/io/filefilter/TrueFileFilter.html" title="class in org.apache.commons.io.filefilter">TrueFileFilter</a></dt>
-<dd>
-<div class="block">Restrictive constructor.</div>
-</dd>
-</dl>
-<a name="_U_">
-<!--   -->
-</a>
-<h2 class="title">U</h2>
-<dl>
-<dt><span class="strong"><a href="./org/apache/commons/io/Charsets.html#US_ASCII">US_ASCII</a></span> - Static variable in class org.apache.commons.io.<a href="./org/apache/commons/io/Charsets.html" title="class in org.apache.commons.io">Charsets</a></dt>
-<dd>
-<div class="block">
- Seven-bit ASCII, also known as ISO646-US, also known as the Basic Latin block of the Unicode character set.</div>
-</dd>
-<dt><span class="strong"><a href="./org/apache/commons/io/Charsets.html#UTF_16">UTF_16</a></span> - Static variable in class org.apache.commons.io.<a href="./org/apache/commons/io/Charsets.html" title="class in org.apache.commons.io">Charsets</a></dt>
-<dd>
-<div class="block">
- Sixteen-bit Unicode Transformation Format, The byte order specified by a mandatory initial byte-order mark
- (either order accepted on input, big-endian used on output)</div>
-</dd>
-<dt><span class="strong"><a href="./org/apache/commons/io/ByteOrderMark.html#UTF_16BE">UTF_16BE</a></span> - Static variable in class org.apache.commons.io.<a href="./org/apache/commons/io/ByteOrderMark.html" title="class in org.apache.commons.io">ByteOrderMark</a></dt>
-<dd>
-<div class="block">UTF-16BE BOM (Big-Endian)</div>
-</dd>
-<dt><span class="strong"><a href="./org/apache/commons/io/Charsets.html#UTF_16BE">UTF_16BE</a></span> - Static variable in class org.apache.commons.io.<a href="./org/apache/commons/io/Charsets.html" title="class in org.apache.commons.io">Charsets</a></dt>
-<dd>
-<div class="block">
- Sixteen-bit Unicode Transformation Format, big-endian byte order.</div>
-</dd>
-<dt><span class="strong"><a href="./org/apache/commons/io/ByteOrderMark.html#UTF_16LE">UTF_16LE</a></span> - Static variable in class org.apache.commons.io.<a href="./org/apache/commons/io/ByteOrderMark.html" title="class in org.apache.commons.io">ByteOrderMark</a></dt>
-<dd>
-<div class="block">UTF-16LE BOM (Little-Endian)</div>
-</dd>
-<dt><span class="strong"><a href="./org/apache/commons/io/Charsets.html#UTF_16LE">UTF_16LE</a></span> - Static variable in class org.apache.commons.io.<a href="./org/apache/commons/io/Charsets.html" title="class in org.apache.commons.io">Charsets</a></dt>
-<dd>
-<div class="block">
- Sixteen-bit Unicode Transformation Format, little-endian byte order.</div>
-</dd>
-<dt><span class="strong"><a href="./org/apache/commons/io/ByteOrderMark.html#UTF_32BE">UTF_32BE</a></span> - Static variable in class org.apache.commons.io.<a href="./org/apache/commons/io/ByteOrderMark.html" title="class in org.apache.commons.io">ByteOrderMark</a></dt>
-<dd>
-<div class="block">UTF-32BE BOM (Big-Endian)</div>
-</dd>
-<dt><span class="strong"><a href="./org/apache/commons/io/ByteOrderMark.html#UTF_32LE">UTF_32LE</a></span> - Static variable in class org.apache.commons.io.<a href="./org/apache/commons/io/ByteOrderMark.html" title="class in org.apache.commons.io">ByteOrderMark</a></dt>
-<dd>
-<div class="block">UTF-32LE BOM (Little-Endian)</div>
-</dd>
-<dt><span class="strong"><a href="./org/apache/commons/io/ByteOrderMark.html#UTF_8">UTF_8</a></span> - Static variable in class org.apache.commons.io.<a href="./org/apache/commons/io/ByteOrderMark.html" title="class in org.apache.commons.io">ByteOrderMark</a></dt>
-<dd>
-<div class="block">UTF-8 BOM</div>
-</dd>
-<dt><span class="strong"><a href="./org/apache/commons/io/Charsets.html#UTF_8">UTF_8</a></span> - Static variable in class org.apache.commons.io.<a href="./org/apache/commons/io/Charsets.html" title="class in org.apache.commons.io">Charsets</a></dt>
-<dd>
-<div class="block">
- Eight-bit Unicode Transformation Format.</div>
-</dd>
-<dt><span class="strong"><a href="./org/apache/commons/io/ByteOrderMark.html#UTF_BOM">UTF_BOM</a></span> - Static variable in class org.apache.commons.io.<a href="./org/apache/commons/io/ByteOrderMark.html" title="class in org.apache.commons.io">ByteOrderMark</a></dt>
-<dd>
-<div class="block">Unicode BOM character; external form depends on the encoding.</div>
-</dd>
-</dl>
-<a name="_V_">
-<!--   -->
-</a>
-<h2 class="title">V</h2>
-<dl>
-<dt><span class="strong"><a href="./org/apache/commons/io/filefilter/HiddenFileFilter.html#VISIBLE">VISIBLE</a></span> - Static variable in class org.apache.commons.io.filefilter.<a href="./org/apache/commons/io/filefilter/HiddenFileFilter.html" title="class in org.apache.commons.io.filefilter">HiddenFileFilter</a></dt>
-<dd>
-<div class="block">Singleton instance of <i>visible</i> filter</div>
-</dd>
-</dl>
-<a name="_W_">
-<!--   -->
-</a>
-<h2 class="title">W</h2>
-<dl>
-<dt><span class="strong"><a href="./org/apache/commons/io/FileUtils.html#waitFor(java.io.File, int)">waitFor(File, int)</a></span> - Static method in class org.apache.commons.io.<a href="./org/apache/commons/io/FileUtils.html" title="class in org.apache.commons.io">FileUtils</a></dt>
-<dd>
-<div class="block">Waits for NFS to propagate a file creation, imposing a timeout.</div>
-</dd>
-<dt><span class="strong"><a href="./org/apache/commons/io/DirectoryWalker.html#walk(java.io.File, java.util.Collection)">walk(File, Collection&lt;T&gt;)</a></span> - Method in class org.apache.commons.io.<a href="./org/apache/commons/io/DirectoryWalker.html" title="class in org.apache.commons.io">DirectoryWalker</a></dt>
-<dd>
-<div class="block">Internal method that walks the directory hierarchy in a depth-first manner.</div>
-</dd>
-<dt><a href="./org/apache/commons/io/filefilter/WildcardFileFilter.html" title="class in org.apache.commons.io.filefilter"><span class="strong">WildcardFileFilter</span></a> - Class in <a href="./org/apache/commons/io/filefilter/package-summary.html">org.apache.commons.io.filefilter</a></dt>
-<dd>
-<div class="block">Filters files using the supplied wildcards.</div>
-</dd>
-<dt><span class="strong"><a href="./org/apache/commons/io/filefilter/WildcardFileFilter.html#WildcardFileFilter(java.lang.String)">WildcardFileFilter(String)</a></span> - Constructor for class org.apache.commons.io.filefilter.<a href="./org/apache/commons/io/filefilter/WildcardFileFilter.html" title="class in org.apache.commons.io.filefilter">WildcardFileFilter</a></dt>
-<dd>
-<div class="block">Construct a new case-sensitive wildcard filter for a single wildcard.</div>
-</dd>
-<dt><span class="strong"><a href="./org/apache/commons/io/filefilter/WildcardFileFilter.html#WildcardFileFilter(java.lang.String, org.apache.commons.io.IOCase)">WildcardFileFilter(String, IOCase)</a></span> - Constructor for class org.apache.commons.io.filefilter.<a href="./org/apache/commons/io/filefilter/WildcardFileFilter.html" title="class in org.apache.commons.io.filefilter">WildcardFileFilter</a></dt>
-<dd>
-<div class="block">Construct a new wildcard filter for a single wildcard specifying case-sensitivity.</div>
-</dd>
-<dt><span class="strong"><a href="./org/apache/commons/io/filefilter/WildcardFileFilter.html#WildcardFileFilter(java.lang.String[])">WildcardFileFilter(String[])</a></span> - Constructor for class org.apache.commons.io.filefilter.<a href="./org/apache/commons/io/filefilter/WildcardFileFilter.html" title="class in org.apache.commons.io.filefilter">WildcardFileFilter</a></dt>
-<dd>
-<div class="block">Construct a new case-sensitive wildcard filter for an array of wildcards.</div>
-</dd>
-<dt><span class="strong"><a href="./org/apache/commons/io/filefilter/WildcardFileFilter.html#WildcardFileFilter(java.lang.String[], org.apache.commons.io.IOCase)">WildcardFileFilter(String[], IOCase)</a></span> - Constructor for class org.apache.commons.io.filefilter.<a href="./org/apache/commons/io/filefilter/WildcardFileFilter.html" title="class in org.apache.commons.io.filefilter">WildcardFileFilter</a></dt>
-<dd>
-<div class="block">Construct a new wildcard filter for an array of wildcards specifying case-sensitivity.</div>
-</dd>
-<dt><span class="strong"><a href="./org/apache/commons/io/filefilter/WildcardFileFilter.html#WildcardFileFilter(java.util.List)">WildcardFileFilter(List&lt;String&gt;)</a></span> - Constructor for class org.apache.commons.io.filefilter.<a href="./org/apache/commons/io/filefilter/WildcardFileFilter.html" title="class in org.apache.commons.io.filefilter">WildcardFileFilter</a></dt>
-<dd>
-<div class="block">Construct a new case-sensitive wildcard filter for a list of wildcards.</div>
-</dd>
-<dt><span class="strong"><a href="./org/apache/commons/io/filefilter/WildcardFileFilter.html#WildcardFileFilter(java.util.List, org.apache.commons.io.IOCase)">WildcardFileFilter(List&lt;String&gt;, IOCase)</a></span> - Constructor for class org.apache.commons.io.filefilter.<a href="./org/apache/commons/io/filefilter/WildcardFileFilter.html" title="class in org.apache.commons.io.filefilter">WildcardFileFilter</a></dt>
-<dd>
-<div class="block">Construct a new wildcard filter for a list of wildcards specifying case-sensitivity.</div>
-</dd>
-<dt><a href="./org/apache/commons/io/filefilter/WildcardFilter.html" title="class in org.apache.commons.io.filefilter"><span class="strong">WildcardFilter</span></a> - Class in <a href="./org/apache/commons/io/filefilter/package-summary.html">org.apache.commons.io.filefilter</a></dt>
-<dd>
-<div class="block"><span class="strong">Deprecated.</span>
-<div class="block"><i>Use WilcardFileFilter. Deprecated as this class performs directory
- filtering which it shouldn't do, but that can't be removed due to compatability.</i></div>
-</div>
-</dd>
-<dt><span class="strong"><a href="./org/apache/commons/io/filefilter/WildcardFilter.html#WildcardFilter(java.lang.String)">WildcardFilter(String)</a></span> - Constructor for class org.apache.commons.io.filefilter.<a href="./org/apache/commons/io/filefilter/WildcardFilter.html" title="class in org.apache.commons.io.filefilter">WildcardFilter</a></dt>
-<dd>
-<div class="block"><span class="strong">Deprecated.</span></div>
-<div class="block">Construct a new case-sensitive wildcard filter for a single wildcard.</div>
-</dd>
-<dt><span class="strong"><a href="./org/apache/commons/io/filefilter/WildcardFilter.html#WildcardFilter(java.lang.String[])">WildcardFilter(String[])</a></span> - Constructor for class org.apache.commons.io.filefilter.<a href="./org/apache/commons/io/filefilter/WildcardFilter.html" title="class in org.apache.commons.io.filefilter">WildcardFilter</a></dt>
-<dd>
-<div class="block"><span class="strong">Deprecated.</span></div>
-<div class="block">Construct a new case-sensitive wildcard filter for an array of wildcards.</div>
-</dd>
-<dt><span class="strong"><a href="./org/apache/commons/io/filefilter/WildcardFilter.html#WildcardFilter(java.util.List)">WildcardFilter(List&lt;String&gt;)</a></span> - Constructor for class org.apache.commons.io.filefilter.<a href="./org/apache/commons/io/filefilter/WildcardFilter.html" title="class in org.apache.commons.io.filefilter">WildcardFilter</a></dt>
-<dd>
-<div class="block"><span class="strong">Deprecated.</span></div>
-<div class="block">Construct a new case-sensitive wildcard filter for a list of wildcards.</div>
-</dd>
-<dt><span class="strong"><a href="./org/apache/commons/io/FilenameUtils.html#wildcardMatch(java.lang.String, java.lang.String)">wildcardMatch(String, String)</a></span> - Static method in class org.apache.commons.io.<a href="./org/apache/commons/io/FilenameUtils.html" title="class in org.apache.commons.io">FilenameUtils</a></dt>
-<dd>
-<div class="block">Checks a filename to see if it matches the specified wildcard matcher,
- always testing case-sensitive.</div>
-</dd>
-<dt><span class="strong"><a href="./org/apache/commons/io/FilenameUtils.html#wildcardMatch(java.lang.String, java.lang.String, org.apache.commons.io.IOCase)">wildcardMatch(String, String, IOCase)</a></span> - Static method in class org.apache.commons.io.<a href="./org/apache/commons/io/FilenameUtils.html" title="class in org.apache.commons.io">FilenameUtils</a></dt>
-<dd>
-<div class="block">Checks a filename to see if it matches the specified wildcard matcher
- allowing control over case-sensitivity.</div>
-</dd>
-<dt><span class="strong"><a href="./org/apache/commons/io/FilenameUtils.html#wildcardMatchOnSystem(java.lang.String, java.lang.String)">wildcardMatchOnSystem(String, String)</a></span> - Static method in class org.apache.commons.io.<a href="./org/apache/commons/io/FilenameUtils.html" title="class in org.apache.commons.io">FilenameUtils</a></dt>
-<dd>
-<div class="block">Checks a filename to see if it matches the specified wildcard matcher
- using the case rules of the system.</div>
-</dd>
-<dt><span class="strong"><a href="./org/apache/commons/io/FileUtils.html#write(java.io.File, java.lang.CharSequence)">write(File, CharSequence)</a></span> - Static method in class org.apache.commons.io.<a href="./org/apache/commons/io/FileUtils.html" title="class in org.apache.commons.io">FileUtils</a></dt>
-<dd>
-<div class="block"><span class="strong">Deprecated.</span>
-<div class="block"><i>2.5 use <a href="./org/apache/commons/io/FileUtils.html#write(java.io.File, java.lang.CharSequence, java.nio.charset.Charset)"><code>FileUtils.write(File, CharSequence, Charset)</code></a> instead</i></div>
-</div>
-</dd>
-<dt><span class="strong"><a href="./org/apache/commons/io/FileUtils.html#write(java.io.File, java.lang.CharSequence, boolean)">write(File, CharSequence, boolean)</a></span> - Static method in class org.apache.commons.io.<a href="./org/apache/commons/io/FileUtils.html" title="class in org.apache.commons.io">FileUtils</a></dt>
-<dd>
-<div class="block"><span class="strong">Deprecated.</span>
-<div class="block"><i>2.5 use <a href="./org/apache/commons/io/FileUtils.html#write(java.io.File, java.lang.CharSequence, java.nio.charset.Charset, boolean)"><code>FileUtils.write(File, CharSequence, Charset, boolean)</code></a> instead</i></div>
-</div>
-</dd>
-<dt><span class="strong"><a href="./org/apache/commons/io/FileUtils.html#write(java.io.File, java.lang.CharSequence, java.nio.charset.Charset)">write(File, CharSequence, Charset)</a></span> - Static method in class org.apache.commons.io.<a href="./org/apache/commons/io/FileUtils.html" title="class in org.apache.commons.io">FileUtils</a></dt>
-<dd>
-<div class="block">Writes a CharSequence to a file creating the file if it does not exist.</div>
-</dd>
-<dt><span class="strong"><a href="./org/apache/commons/io/FileUtils.html#write(java.io.File, java.lang.CharSequence, java.lang.String)">write(File, CharSequence, String)</a></span> - Static method in class org.apache.commons.io.<a href="./org/apache/commons/io/FileUtils.html" title="class in org.apache.commons.io">FileUtils</a></dt>
-<dd>
-<div class="block">Writes a CharSequence to a file creating the file if it does not exist.</div>
-</dd>
-<dt><span class="strong"><a href="./org/apache/commons/io/FileUtils.html#write(java.io.File, java.lang.CharSequence, java.nio.charset.Charset, boolean)">write(File, CharSequence, Charset, boolean)</a></span> - Static method in class org.apache.commons.io.<a href="./org/apache/commons/io/FileUtils.html" title="class in org.apache.commons.io">FileUtils</a></dt>
-<dd>
-<div class="block">Writes a CharSequence to a file creating the file if it does not exist.</div>
-</dd>
-<dt><span class="strong"><a href="./org/apache/commons/io/FileUtils.html#write(java.io.File, java.lang.CharSequence, java.lang.String, boolean)">write(File, CharSequence, String, boolean)</a></span> - Static method in class org.apache.commons.io.<a href="./org/apache/commons/io/FileUtils.html" title="class in org.apache.commons.io">FileUtils</a></dt>
-<dd>
-<div class="block">Writes a CharSequence to a file creating the file if it does not exist.</div>
-</dd>
-<dt><span class="strong"><a href="./org/apache/commons/io/IOUtils.html#write(byte[], java.io.OutputStream)">write(byte[], OutputStream)</a></span> - Static method in class org.apache.commons.io.<a href="./org/apache/commons/io/IOUtils.html" title="class in org.apache.commons.io">IOUtils</a></dt>
-<dd>
-<div class="block">Writes bytes from a <code>byte[]</code> to an <code>OutputStream</code>.</div>
-</dd>
-<dt><span class="strong"><a href="./org/apache/commons/io/IOUtils.html#write(byte[], java.io.Writer)">write(byte[], Writer)</a></span> - Static method in class org.apache.commons.io.<a href="./org/apache/commons/io/IOUtils.html" title="class in org.apache.commons.io">IOUtils</a></dt>
-<dd>
-<div class="block"><span class="strong">Deprecated.</span>
-<div class="block"><i>2.5 use <a href="./org/apache/commons/io/IOUtils.html#write(byte[], java.io.Writer, java.nio.charset.Charset)"><code>IOUtils.write(byte[], Writer, Charset)</code></a> instead</i></div>
-</div>
-</dd>
-<dt><span class="strong"><a href="./org/apache/commons/io/IOUtils.html#write(byte[], java.io.Writer, java.nio.charset.Charset)">write(byte[], Writer, Charset)</a></span> - Static method in class org.apache.commons.io.<a href="./org/apache/commons/io/IOUtils.html" title="class in org.apache.commons.io">IOUtils</a></dt>
-<dd>
-<div class="block">Writes bytes from a <code>byte[]</code> to chars on a <code>Writer</code>
- using the specified character encoding.</div>
-</dd>
-<dt><span class="strong"><a href="./org/apache/commons/io/IOUtils.html#write(byte[], java.io.Writer, java.lang.String)">write(byte[], Writer, String)</a></span> - Static method in class org.apache.commons.io.<a href="./org/apache/commons/io/IOUtils.html" title="class in org.apache.commons.io">IOUtils</a></dt>
-<dd>
-<div class="block">Writes bytes from a <code>byte[]</code> to chars on a <code>Writer</code>
- using the specified character encoding.</div>
-</dd>
-<dt><span class="strong"><a href="./org/apache/commons/io/IOUtils.html#write(char[], java.io.Writer)">write(char[], Writer)</a></span> - Static method in class org.apache.commons.io.<a href="./org/apache/commons/io/IOUtils.html" title="class in org.apache.commons.io">IOUtils</a></dt>
-<dd>
-<div class="block">Writes chars from a <code>char[]</code> to a <code>Writer</code>
- using the default character encoding of the platform.</div>
-</dd>
-<dt><span class="strong"><a href="./org/apache/commons/io/IOUtils.html#write(char[], java.io.OutputStream)">write(char[], OutputStream)</a></span> - Static method in class org.apache.commons.io.<a href="./org/apache/commons/io/IOUtils.html" title="class in org.apache.commons.io">IOUtils</a></dt>
-<dd>
-<div class="block"><span class="strong">Deprecated.</span>
-<div class="block"><i>2.5 use <a href="./org/apache/commons/io/IOUtils.html#write(char[], java.io.OutputStream, java.nio.charset.Charset)"><code>IOUtils.write(char[], OutputStream, Charset)</code></a> instead</i></div>
-</div>
-</dd>
-<dt><span class="strong"><a href="./org/apache/commons/io/IOUtils.html#write(char[], java.io.OutputStream, java.nio.charset.Charset)">write(char[], OutputStream, Charset)</a></span> - Static method in class org.apache.commons.io.<a href="./org/apache/commons/io/IOUtils.html" title="class in org.apache.commons.io">IOUtils</a></dt>
-<dd>
-<div class="block">Writes chars from a <code>char[]</code> to bytes on an
- <code>OutputStream</code> using the specified character encoding.</div>
-</dd>
-<dt><span class="strong"><a href="./org/apache/commons/io/IOUtils.html#write(char[], java.io.OutputStream, java.lang.String)">write(char[], OutputStream, String)</a></span> - Static method in class org.apache.commons.io.<a href="./org/apache/commons/io/IOUtils.html" title="class in org.apache.commons.io">IOUtils</a></dt>
-<dd>
-<div class="block">Writes chars from a <code>char[]</code> to bytes on an
- <code>OutputStream</code> using the specified character encoding.</div>
-</dd>
-<dt><span class="strong"><a href="./org/apache/commons/io/IOUtils.html#write(java.lang.CharSequence, java.io.Writer)">write(CharSequence, Writer)</a></span> - Static method in class org.apache.commons.io.<a href="./org/apache/commons/io/IOUtils.html" title="class in org.apache.commons.io">IOUtils</a></dt>
-<dd>
-<div class="block">Writes chars from a <code>CharSequence</code> to a <code>Writer</code>.</div>
-</dd>
-<dt><span class="strong"><a href="./org/apache/commons/io/IOUtils.html#write(java.lang.CharSequence, java.io.OutputStream)">write(CharSequence, OutputStream)</a></span> - Static method in class org.apache.commons.io.<a href="./org/apache/commons/io/IOUtils.html" title="class in org.apache.commons.io">IOUtils</a></dt>
-<dd>
-<div class="block"><span class="strong">Deprecated.</span>
-<div class="block"><i>2.5 use <a href="./org/apache/commons/io/IOUtils.html#write(java.lang.CharSequence, java.io.OutputStream, java.nio.charset.Charset)"><code>IOUtils.write(CharSequence, OutputStream, Charset)</code></a> instead</i></div>
-</div>
-</dd>
-<dt><span class="strong"><a href="./org/apache/commons/io/IOUtils.html#write(java.lang.CharSequence, java.io.OutputStream, java.nio.charset.Charset)">write(CharSequence, OutputStream, Charset)</a></span> - Static method in class org.apache.commons.io.<a href="./org/apache/commons/io/IOUtils.html" title="class in org.apache.commons.io">IOUtils</a></dt>
-<dd>
-<div class="block">Writes chars from a <code>CharSequence</code> to bytes on an
- <code>OutputStream</code> using the specified character encoding.</div>
-</dd>
-<dt><span class="strong"><a href="./org/apache/commons/io/IOUtils.html#write(java.lang.CharSequence, java.io.OutputStream, java.lang.String)">write(CharSequence, OutputStream, String)</a></span> - Static method in class org.apache.commons.io.<a href="./org/apache/commons/io/IOUtils.html" title="class in org.apache.commons.io">IOUtils</a></dt>
-<dd>
-<div class="block">Writes chars from a <code>CharSequence</code> to bytes on an
- <code>OutputStream</code> using the specified character encoding.</div>
-</dd>
-<dt><span class="strong"><a href="./org/apache/commons/io/IOUtils.html#write(java.lang.String, java.io.Writer)">write(String, Writer)</a></span> - Static method in class org.apache.commons.io.<a href="./org/apache/commons/io/IOUtils.html" title="class in org.apache.commons.io">IOUtils</a></dt>
-<dd>
-<div class="block">Writes chars from a <code>String</code> to a <code>Writer</code>.</div>
-</dd>
-<dt><span class="strong"><a href="./org/apache/commons/io/IOUtils.html#write(java.lang.String, java.io.OutputStream)">write(String, OutputStream)</a></span> - Static method in class org.apache.commons.io.<a href="./org/apache/commons/io/IOUtils.html" title="class in org.apache.commons.io">IOUtils</a></dt>
-<dd>
-<div class="block"><span class="strong">Deprecated.</span>
-<div class="block"><i>2.5 use <a href="./org/apache/commons/io/IOUtils.html#write(java.lang.String, java.io.OutputStream, java.nio.charset.Charset)"><code>IOUtils.write(String, OutputStream, Charset)</code></a> instead</i></div>
-</div>
-</dd>
-<dt><span class="strong"><a href="./org/apache/commons/io/IOUtils.html#write(java.lang.String, java.io.OutputStream, java.nio.charset.Charset)">write(String, OutputStream, Charset)</a></span> - Static method in class org.apache.commons.io.<a href="./org/apache/commons/io/IOUtils.html" title="class in org.apache.commons.io">IOUtils</a></dt>
-<dd>
-<div class="block">Writes chars from a <code>String</code> to bytes on an
- <code>OutputStream</code> using the specified character encoding.</div>
-</dd>
-<dt><span class="strong"><a href="./org/apache/commons/io/IOUtils.html#write(java.lang.String, java.io.OutputStream, java.lang.String)">write(String, OutputStream, String)</a></span> - Static method in class org.apache.commons.io.<a href="./org/apache/commons/io/IOUtils.html" title="class in org.apache.commons.io">IOUtils</a></dt>
-<dd>
-<div class="block">Writes chars from a <code>String</code> to bytes on an
- <code>OutputStream</code> using the specified character encoding.</div>
-</dd>
-<dt><span class="strong"><a href="./org/apache/commons/io/IOUtils.html#write(java.lang.StringBuffer, java.io.Writer)">write(StringBuffer, Writer)</a></span> - Static method in class org.apache.commons.io.<a href="./org/apache/commons/io/IOUtils.html" title="class in org.apache.commons.io">IOUtils</a></dt>
-<dd>
-<div class="block"><span class="strong">Deprecated.</span>
-<div class="block"><i>replaced by write(CharSequence, Writer)</i></div>
-</div>
-</dd>
-<dt><span class="strong"><a href="./org/apache/commons/io/IOUtils.html#write(java.lang.StringBuffer, java.io.OutputStream)">write(StringBuffer, OutputStream)</a></span> - Static method in class org.apache.commons.io.<a href="./org/apache/commons/io/IOUtils.html" title="class in org.apache.commons.io">IOUtils</a></dt>
-<dd>
-<div class="block"><span class="strong">Deprecated.</span>
-<div class="block"><i>replaced by write(CharSequence, OutputStream)</i></div>
-</div>
-</dd>
-<dt><span class="strong"><a href="./org/apache/commons/io/IOUtils.html#write(java.lang.StringBuffer, java.io.OutputStream, java.lang.String)">write(StringBuffer, OutputStream, String)</a></span> - Static method in class org.apache.commons.io.<a href="./org/apache/commons/io/IOUtils.html" title="class in org.apache.commons.io">IOUtils</a></dt>
-<dd>
-<div class="block"><span class="strong">Deprecated.</span>
-<div class="block"><i>replaced by write(CharSequence, OutputStream, String)</i></div>
-</div>
-</dd>
-<dt><span class="strong"><a href="./org/apache/commons/io/output/BrokenOutputStream.html#write(int)">write(int)</a></span> - Method in class org.apache.commons.io.output.<a href="./org/apache/commons/io/output/BrokenOutputStream.html" title="class in org.apache.commons.io.output">BrokenOutputStream</a></dt>
-<dd>
-<div class="block">Throws the configured exception.</div>
-</dd>
-<dt><span class="strong"><a href="./org/apache/commons/io/output/ByteArrayOutputStream.html#write(byte[], int, int)">write(byte[], int, int)</a></span> - Method in class org.apache.commons.io.output.<a href="./org/apache/commons/io/output/ByteArrayOutputStream.html" title="class in org.apache.commons.io.output">ByteArrayOutputStream</a></dt>
-<dd>
-<div class="block">Write the bytes to byte array.</div>
-</dd>
-<dt><span class="strong"><a href="./org/apache/commons/io/output/ByteArrayOutputStream.html#write(int)">write(int)</a></span> - Method in class org.apache.commons.io.output.<a href="./org/apache/commons/io/output/ByteArrayOutputStream.html" title="class in org.apache.commons.io.output">ByteArrayOutputStream</a></dt>
-<dd>
-<div class="block">Write a byte to byte array.</div>
-</dd>
-<dt><span class="strong"><a href="./org/apache/commons/io/output/ByteArrayOutputStream.html#write(java.io.InputStream)">write(InputStream)</a></span> - Method in class org.apache.commons.io.output.<a href="./org/apache/commons/io/output/ByteArrayOutputStream.html" title="class in org.apache.commons.io.output">ByteArrayOutputStream</a></dt>
-<dd>
-<div class="block">Writes the entire contents of the specified input stream to this
- byte stream.</div>
-</dd>
-<dt><span class="strong"><a href="./org/apache/commons/io/output/ClosedOutputStream.html#write(int)">write(int)</a></span> - Method in class org.apache.commons.io.output.<a href="./org/apache/commons/io/output/ClosedOutputStream.html" title="class in org.apache.commons.io.output">ClosedOutputStream</a></dt>
-<dd>
-<div class="block">Throws an <a href="http://download.oracle.com/javase/6/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io"><code>IOException</code></a> to indicate that the stream is closed.</div>
-</dd>
-<dt><span class="strong"><a href="./org/apache/commons/io/output/DemuxOutputStream.html#write(int)">write(int)</a></span> - Method in class org.apache.commons.io.output.<a href="./org/apache/commons/io/output/DemuxOutputStream.html" title="class in org.apache.commons.io.output">DemuxOutputStream</a></dt>
-<dd>
-<div class="block">Writes byte to stream associated with current thread.</div>
-</dd>
-<dt><span class="strong"><a href="./org/apache/commons/io/output/FileWriterWithEncoding.html#write(int)">write(int)</a></span> - Method in class org.apache.commons.io.output.<a href="./org/apache/commons/io/output/FileWriterWithEncoding.html" title="class in org.apache.commons.io.output">FileWriterWithEncoding</a></dt>
-<dd>
-<div class="block">Write a character.</div>
-</dd>
-<dt><span class="strong"><a href="./org/apache/commons/io/output/FileWriterWithEncoding.html#write(char[])">write(char[])</a></span> - Method in class org.apache.commons.io.output.<a href="./org/apache/commons/io/output/FileWriterWithEncoding.html" title="class in org.apache.commons.io.output">FileWriterWithEncoding</a></dt>
-<dd>
-<div class="block">Write the characters from an array.</div>
-</dd>
-<dt><span class="strong"><a href="./org/apache/commons/io/output/FileWriterWithEncoding.html#write(char[], int, int)">write(char[], int, int)</a></span> - Method in class org.apache.commons.io.output.<a href="./org/apache/commons/io/output/FileWriterWithEncoding.html" title="class in org.apache.commons.io.output">FileWriterWithEncoding</a></dt>
-<dd>
-<div class="block">Write the specified characters from an array.</div>
-</dd>
-<dt><span class="strong"><a href="./org/apache/commons/io/output/FileWriterWithEncoding.html#write(java.lang.String)">write(String)</a></span> - Method in class org.apache.commons.io.output.<a href="./org/apache/commons/io/output/FileWriterWithEncoding.html" title="class in org.apache.commons.io.output">FileWriterWithEncoding</a></dt>
-<dd>
-<div class="block">Write the characters from a string.</div>
-</dd>
-<dt><span class="strong"><a href="./org/apache/commons/io/output/FileWriterWithEncoding.html#write(java.lang.String, int, int)">write(String, int, int)</a></span> - Method in class org.apache.commons.io.output.<a href="./org/apache/commons/io/output/FileWriterWithEncoding.html" title="class in org.apache.commons.io.output">FileWriterWithEncoding</a></dt>
-<dd>
-<div class="block">Write the specified characters from a string.</div>
-</dd>
-<dt><span class="strong"><a href="./org/apache/commons/io/output/LockableFileWriter.html#write(int)">write(int)</a></span> - Method in class org.apache.commons.io.output.<a href="./org/apache/commons/io/output/LockableFileWriter.html" title="class in org.apache.commons.io.output">LockableFileWriter</a></dt>
-<dd>
-<div class="block">Write a character.</div>
-</dd>
-<dt><span class="strong"><a href="./org/apache/commons/io/output/LockableFileWriter.html#write(char[])">write(char[])</a></span> - Method in class org.apache.commons.io.output.<a href="./org/apache/commons/io/output/LockableFileWriter.html" title="class in org.apache.commons.io.output">LockableFileWriter</a></dt>
-<dd>
-<div class="block">Write the characters from an array.</div>
-</dd>
-<dt><span class="strong"><a href="./org/apache/commons/io/output/LockableFileWriter.html#write(char[], int, int)">write(char[], int, int)</a></span> - Method in class org.apache.commons.io.output.<a href="./org/apache/commons/io/output/LockableFileWriter.html" title="class in org.apache.commons.io.output">LockableFileWriter</a></dt>
-<dd>
-<div class="block">Write the specified characters from an array.</div>
-</dd>
-<dt><span class="strong"><a href="./org/apache/commons/io/output/LockableFileWriter.html#write(java.lang.String)">write(String)</a></span> - Method in class org.apache.commons.io.output.<a href="./org/apache/commons/io/output/LockableFileWriter.html" title="class in org.apache.commons.io.output">LockableFileWriter</a></dt>
-<dd>
-<div class="block">Write the characters from a string.</div>
-</dd>
-<dt><span class="strong"><a href="./org/apache/commons/io/output/LockableFileWriter.html#write(java.lang.String, int, int)">write(String, int, int)</a></span> - Method in class org.apache.commons.io.output.<a href="./org/apache/commons/io/output/LockableFileWriter.html" title="class in org.apache.commons.io.output">LockableFileWriter</a></dt>
-<dd>
-<div class="block">Write the specified characters from a string.</div>
-</dd>
-<dt><span class="strong"><a href="./org/apache/commons/io/output/NullOutputStream.html#write(byte[], int, int)">write(byte[], int, int)</a></span> - Method in class org.apache.commons.io.output.<a href="./org/apache/commons/io/output/NullOutputStream.html" title="class in org.apache.commons.io.output">NullOutputStream</a></dt>
-<dd>
-<div class="block">Does nothing - output to <code>/dev/null</code>.</div>
-</dd>
-<dt><span class="strong"><a href="./org/apache/commons/io/output/NullOutputStream.html#write(int)">write(int)</a></span> - Method in class org.apache.commons.io.output.<a href="./org/apache/commons/io/output/NullOutputStream.html" title="class in org.apache.commons.io.output">NullOutputStream</a></dt>
-<dd>
-<div class="block">Does nothing - output to <code>/dev/null</code>.</div>
-</dd>
-<dt><span class="strong"><a href="./org/apache/commons/io/output/NullOutputStream.html#write(byte[])">write(byte[])</a></span> - Method in class org.apache.commons.io.output.<a href="./org/apache/commons/io/output/NullOutputStream.html" title="class in org.apache.commons.io.output">NullOutputStream</a></dt>
-<dd>
-<div class="block">Does nothing - output to <code>/dev/null</code>.</div>
-</dd>
-<dt><span class="strong"><a href="./org/apache/commons/io/output/NullWriter.html#write(int)">write(int)</a></span> - Method in class org.apache.commons.io.output.<a href="./org/apache/commons/io/output/NullWriter.html" title="class in org.apache.commons.io.output">NullWriter</a></dt>
-<dd>
-<div class="block">Does nothing - output to <code>/dev/null</code>.</div>
-</dd>
-<dt><span class="strong"><a href="./org/apache/commons/io/output/NullWriter.html#write(char[])">write(char[])</a></span> - Method in class org.apache.commons.io.output.<a href="./org/apache/commons/io/output/NullWriter.html" title="class in org.apache.commons.io.output">NullWriter</a></dt>
-<dd>
-<div class="block">Does nothing - output to <code>/dev/null</code>.</div>
-</dd>
-<dt><span class="strong"><a href="./org/apache/commons/io/output/NullWriter.html#write(char[], int, int)">write(char[], int, int)</a></span> - Method in class org.apache.commons.io.output.<a href="./org/apache/commons/io/output/NullWriter.html" title="class in org.apache.commons.io.output">NullWriter</a></dt>
-<dd>
-<div class="block">Does nothing - output to <code>/dev/null</code>.</div>
-</dd>
-<dt><span class="strong"><a href="./org/apache/commons/io/output/NullWriter.html#write(java.lang.String)">write(String)</a></span> - Method in class org.apache.commons.io.output.<a href="./org/apache/commons/io/output/NullWriter.html" title="class in org.apache.commons.io.output">NullWriter</a></dt>
-<dd>
-<div class="block">Does nothing - output to <code>/dev/null</code>.</div>
-</dd>
-<dt><span class="strong"><a href="./org/apache/commons/io/output/NullWriter.html#write(java.lang.String, int, int)">write(String, int, int)</a></span> - Method in class org.apache.commons.io.output.<a href="./org/apache/commons/io/output/NullWriter.html" title="class in org.apache.commons.io.output">NullWriter</a></dt>
-<dd>
-<div class="block">Does nothing - output to <code>/dev/null</code>.</div>
-</dd>
-<dt><span class="strong"><a href="./org/apache/commons/io/output/ProxyOutputStream.html#write(int)">write(int)</a></span> - Method in class org.apache.commons.io.output.<a href="./org/apache/commons/io/output/ProxyOutputStream.html" title="class in org.apache.commons.io.output">ProxyOutputStream</a></dt>
-<dd>
-<div class="block">Invokes the delegate's <code>write(int)</code> method.</div>
-</dd>
-<dt><span class="strong"><a href="./org/apache/commons/io/output/ProxyOutputStream.html#write(byte[])">write(byte[])</a></span> - Method in class org.apache.commons.io.output.<a href="./org/apache/commons/io/output/ProxyOutputStream.html" title="class in org.apache.commons.io.output">ProxyOutputStream</a></dt>
-<dd>
-<div class="block">Invokes the delegate's <code>write(byte[])</code> method.</div>
-</dd>
-<dt><span class="strong"><a href="./org/apache/commons/io/output/ProxyOutputStream.html#write(byte[], int, int)">write(byte[], int, int)</a></span> - Method in class org.apache.commons.io.output.<a href="./org/apache/commons/io/output/ProxyOutputStream.html" title="class in org.apache.commons.io.output">ProxyOutputStream</a></dt>
-<dd>
-<div class="block">Invokes the delegate's <code>write(byte[])</code> method.</div>
-</dd>
-<dt><span class="strong"><a href="./org/apache/commons/io/output/ProxyWriter.html#write(int)">write(int)</a></span> - Method in class org.apache.commons.io.output.<a href="./org/apache/commons/io/output/ProxyWriter.html" title="class in org.apache.commons.io.output">ProxyWriter</a></dt>
-<dd>
-<div class="block">Invokes the delegate's <code>write(int)</code> method.</div>
-</dd>
-<dt><span class="strong"><a href="./org/apache/commons/io/output/ProxyWriter.html#write(char[])">write(char[])</a></span> - Method in class org.apache.commons.io.output.<a href="./org/apache/commons/io/output/ProxyWriter.html" title="class in org.apache.commons.io.output">ProxyWriter</a></dt>
-<dd>
-<div class="block">Invokes the delegate's <code>write(char[])</code> method.</div>
-</dd>
-<dt><span class="strong"><a href="./org/apache/commons/io/output/ProxyWriter.html#write(char[], int, int)">write(char[], int, int)</a></span> - Method in class org.apache.commons.io.output.<a href="./org/apache/commons/io/output/ProxyWriter.html" title="class in org.apache.commons.io.output">ProxyWriter</a></dt>
-<dd>
-<div class="block">Invokes the delegate's <code>write(char[], int, int)</code> method.</div>
-</dd>
-<dt><span class="strong"><a href="./org/apache/commons/io/output/ProxyWriter.html#write(java.lang.String)">write(String)</a></span> - Method in class org.apache.commons.io.output.<a href="./org/apache/commons/io/output/ProxyWriter.html" title="class in org.apache.commons.io.output">ProxyWriter</a></dt>
-<dd>
-<div class="block">Invokes the delegate's <code>write(String)</code> method.</div>
-</dd>
-<dt><span class="strong"><a href="./org/apache/commons/io/output/ProxyWriter.html#write(java.lang.String, int, int)">write(String, int, int)</a></span> - Method in class org.apache.commons.io.output.<a href="./org/apache/commons/io/output/ProxyWriter.html" title="class in org.apache.commons.io.output">ProxyWriter</a></dt>
-<dd>
-<div class="block">Invokes the delegate's <code>write(String)</code> method.</div>
-</dd>
-<dt><span class="strong"><a href="./org/apache/commons/io/output/StringBuilderWriter.html#write(java.lang.String)">write(String)</a></span> - Method in class org.apache.commons.io.output.<a href="./org/apache/commons/io/output/StringBuilderWriter.html" title="class in org.apache.commons.io.output">StringBuilderWriter</a></dt>
-<dd>
-<div class="block">Write a String to the <a href="http://download.oracle.com/javase/6/docs/api/java/lang/StringBuilder.html?is-external=true" title="class or interface in java.lang"><code>StringBuilder</code></a>.</div>
-</dd>
-<dt><span class="strong"><a href="./org/apache/commons/io/output/StringBuilderWriter.html#write(char[], int, int)">write(char[], int, int)</a></span> - Method in class org.apache.commons.io.output.<a href="./org/apache/commons/io/output/StringBuilderWriter.html" title="class in org.apache.commons.io.output">StringBuilderWriter</a></dt>
-<dd>
-<div class="block">Write a portion of a character array to the <a href="http://download.oracle.com/javase/6/docs/api/java/lang/StringBuilder.html?is-external=true" title="class or interface in java.lang"><code>StringBuilder</code></a>.</div>
-</dd>
-<dt><span class="strong"><a href="./org/apache/commons/io/output/TeeOutputStream.html#write(byte[])">write(byte[])</a></span> - Method in class org.apache.commons.io.output.<a href="./org/apache/commons/io/output/TeeOutputStream.html" title="class in org.apache.commons.io.output">TeeOutputStream</a></dt>
-<dd>
-<div class="block">Write the bytes to both streams.</div>
-</dd>
-<dt><span class="strong"><a href="./org/apache/commons/io/output/TeeOutputStream.html#write(byte[], int, int)">write(byte[], int, int)</a></span> - Method in class org.apache.commons.io.output.<a href="./org/apache/commons/io/output/TeeOutputStream.html" title="class in org.apache.commons.io.output">TeeOutputStream</a></dt>
-<dd>
-<div class="block">Write the specified bytes to both streams.</div>
-</dd>
-<dt><span class="strong"><a href="./org/apache/commons/io/output/TeeOutputStream.html#write(int)">write(int)</a></span> - Method in class org.apache.commons.io.output.<a href="./org/apache/commons/io/output/TeeOutputStream.html" title="class in org.apache.commons.io.output">TeeOutputStream</a></dt>
-<dd>
-<div class="block">Write a byte to both streams.</div>
-</dd>
-<dt><span class="strong"><a href="./org/apache/commons/io/output/ThresholdingOutputStream.html#write(int)">write(int)</a></span> - Method in class org.apache.commons.io.output.<a href="./org/apache/commons/io/output/ThresholdingOutputStream.html" title="class in org.apache.commons.io.output">ThresholdingOutputStream</a></dt>
-<dd>
-<div class="block">Writes the specified byte to this output stream.</div>
-</dd>
-<dt><span class="strong"><a href="./org/apache/commons/io/output/ThresholdingOutputStream.html#write(byte[])">write(byte[])</a></span> - Method in class org.apache.commons.io.output.<a href="./org/apache/commons/io/output/ThresholdingOutputStream.html" title="class in org.apache.commons.io.output">ThresholdingOutputStream</a></dt>
-<dd>
-<div class="block">Writes <code>b.length</code> bytes from the specified byte array to this
- output stream.</div>
-</dd>
-<dt><span class="strong"><a href="./org/apache/commons/io/output/ThresholdingOutputStream.html#write(byte[], int, int)">write(byte[], int, int)</a></span> - Method in class org.apache.commons.io.output.<a href="./org/apache/commons/io/output/ThresholdingOutputStream.html" title="class in org.apache.commons.io.output">ThresholdingOutputStream</a></dt>
-<dd>
-<div class="block">Writes <code>len</code> bytes from the specified byte array starting at
- offset <code>off</code> to this output stream.</div>
-</dd>
-<dt><span class="strong"><a href="./org/apache/commons/io/output/WriterOutputStream.html#write(byte[], int, int)">write(byte[], int, int)</a></span> - Method in class org.apache.commons.io.output.<a href="./org/apache/commons/io/output/WriterOutputStream.html" title="class in org.apache.commons.io.output">WriterOutputStream</a></dt>
-<dd>
-<div class="block">Write bytes from the specified byte array to the stream.</div>
-</dd>
-<dt><span class="strong"><a href="./org/apache/commons/io/output/WriterOutputStream.html#write(byte[])">write(byte[])</a></span> - Method in class org.apache.commons.io.output.<a href="./org/apache/commons/io/output/WriterOutputStream.html" title="class in org.apache.commons.io.output">WriterOutputStream</a></dt>
-<dd>
-<div class="block">Write bytes from the specified byte array to the stream.</div>
-</dd>
-<dt><span class="strong"><a href="./org/apache/commons/io/output/WriterOutputStream.html#write(int)">write(int)</a></span> - Method in class org.apache.commons.io.output.<a href="./org/apache/commons/io/output/WriterOutputStream.html" title="class in org.apache.commons.io.output">WriterOutputStream</a></dt>
-<dd>
-<div class="block">Write a single byte to the stream.</div>
-</dd>
-<dt><span class="strong"><a href="./org/apache/commons/io/output/XmlStreamWriter.html#write(char[], int, int)">write(char[], int, int)</a></span> - Method in class org.apache.commons.io.output.<a href="./org/apache/commons/io/output/XmlStreamWriter.html" title="class in org.apache.commons.io.output">XmlStreamWriter</a></dt>
-<dd>
-<div class="block">Write the characters to the underlying writer, detecing encoding.</div>
-</dd>
-<dt><span class="strong"><a href="./org/apache/commons/io/FileUtils.html#writeByteArrayToFile(java.io.File, byte[])">writeByteArrayToFile(File, byte[])</a></span> - Static method in class org.apache.commons.io.<a href="./org/apache/commons/io/FileUtils.html" title="class in org.apache.commons.io">FileUtils</a></dt>
-<dd>
-<div class="block">Writes a byte array to a file creating the file if it does not exist.</div>
-</dd>
-<dt><span class="strong"><a href="./org/apache/commons/io/FileUtils.html#writeByteArrayToFile(java.io.File, byte[], boolean)">writeByteArrayToFile(File, byte[], boolean)</a></span> - Static method in class org.apache.commons.io.<a href="./org/apache/commons/io/FileUtils.html" title="class in org.apache.commons.io">FileUtils</a></dt>
-<dd>
-<div class="block">Writes a byte array to a file creating the file if it does not exist.</div>
-</dd>
-<dt><span class="strong"><a href="./org/apache/commons/io/FileUtils.html#writeByteArrayToFile(java.io.File, byte[], int, int)">writeByteArrayToFile(File, byte[], int, int)</a></span> - Static method in class org.apache.commons.io.<a href="./org/apache/commons/io/FileUtils.html" title="class in org.apache.commons.io">FileUtils</a></dt>
-<dd>
-<div class="block">Writes <code>len</code> bytes from the specified byte array starting
- at offset <code>off</code> to a file, creating the file if it does
- not exist.</div>
-</dd>
-<dt><span class="strong"><a href="./org/apache/commons/io/FileUtils.html#writeByteArrayToFile(java.io.File, byte[], int, int, boolean)">writeByteArrayToFile(File, byte[], int, int, boolean)</a></span> - Static method in class org.apache.commons.io.<a href="./org/apache/commons/io/FileUtils.html" title="class in org.apache.commons.io">FileUtils</a></dt>
-<dd>
-<div class="block">Writes <code>len</code> bytes from the specified byte array starting
- at offset <code>off</code> to a file, creating the file if it does
- not exist.</div>
-</dd>
-<dt><span class="strong"><a href="./org/apache/commons/io/FileUtils.html#writeLines(java.io.File, java.lang.String, java.util.Collection)">writeLines(File, String, Collection&lt;?&gt;)</a></span> - Static method in class org.apache.commons.io.<a href="./org/apache/commons/io/FileUtils.html" title="class in org.apache.commons.io">FileUtils</a></dt>
-<dd>
-<div class="block">Writes the <code>toString()</code> value of each item in a collection to
- the specified <code>File</code> line by line.</div>
-</dd>
-<dt><span class="strong"><a href="./org/apache/commons/io/FileUtils.html#writeLines(java.io.File, java.lang.String, java.util.Collection, boolean)">writeLines(File, String, Collection&lt;?&gt;, boolean)</a></span> - Static method in class org.apache.commons.io.<a href="./org/apache/commons/io/FileUtils.html" title="class in org.apache.commons.io">FileUtils</a></dt>
-<dd>
-<div class="block">Writes the <code>toString()</code> value of each item in a collection to
- the specified <code>File</code> line by line, optionally appending.</div>
-</dd>
-<dt><span class="strong"><a href="./org/apache/commons/io/FileUtils.html#writeLines(java.io.File, java.util.Collection)">writeLines(File, Collection&lt;?&gt;)</a></span> - Static method in class org.apache.commons.io.<a href="./org/apache/commons/io/FileUtils.html" title="class in org.apache.commons.io">FileUtils</a></dt>
-<dd>
-<div class="block">Writes the <code>toString()</code> value of each item in a collection to
- the specified <code>File</code> line by line.</div>
-</dd>
-<dt><span class="strong"><a href="./org/apache/commons/io/FileUtils.html#writeLines(java.io.File, java.util.Collection, boolean)">writeLines(File, Collection&lt;?&gt;, boolean)</a></span> - Static method in class org.apache.commons.io.<a href="./org/apache/commons/io/FileUtils.html" title="class in org.apache.commons.io">FileUtils</a></dt>
-<dd>
-<div class="block">Writes the <code>toString()</code> value of each item in a collection to
- the specified <code>File</code> line by line.</div>
-</dd>
-<dt><span class="strong"><a href="./org/apache/commons/io/FileUtils.html#writeLines(java.io.File, java.lang.String, java.util.Collection, java.lang.String)">writeLines(File, String, Collection&lt;?&gt;, String)</a></span> - Static method in class org.apache.commons.io.<a href="./org/apache/commons/io/FileUtils.html" title="class in org.apache.commons.io">FileUtils</a></dt>
-<dd>
-<div class="block">Writes the <code>toString()</code> value of each item in a collection to
- the specified <code>File</code> line by line.</div>
-</dd>
-<dt><span class="strong"><a href="./org/apache/commons/io/FileUtils.html#writeLines(java.io.File, java.lang.String, java.util.Collection, java.lang.String, boolean)">writeLines(File, String, Collection&lt;?&gt;, String, boolean)</a></span> - Static method in class org.apache.commons.io.<a href="./org/apache/commons/io/FileUtils.html" title="class in org.apache.commons.io">FileUtils</a></dt>
-<dd>
-<div class="block">Writes the <code>toString()</code> value of each item in a collection to
- the specified <code>File</code> line by line.</div>
-</dd>
-<dt><span class="strong"><a href="./org/apache/commons/io/FileUtils.html#writeLines(java.io.File, java.util.Collection, java.lang.String)">writeLines(File, Collection&lt;?&gt;, String)</a></span> - Static method in class org.apache.commons.io.<a href="./org/apache/commons/io/FileUtils.html" title="class in org.apache.commons.io">FileUtils</a></dt>
-<dd>
-<div class="block">Writes the <code>toString()</code> value of each item in a collection to
- the specified <code>File</code> line by line.</div>
-</dd>
-<dt><span class="strong"><a href="./org/apache/commons/io/FileUtils.html#writeLines(java.io.File, java.util.Collection, java.lang.String, boolean)">writeLines(File, Collection&lt;?&gt;, String, boolean)</a></span> - Static method in class org.apache.commons.io.<a href="./org/apache/commons/io/FileUtils.html" title="class in org.apache.commons.io">FileUtils</a></dt>
-<dd>
-<div class="block">Writes the <code>toString()</code> value of each item in a collection to
- the specified <code>File</code> line by line.</div>
-</dd>
-<dt><span class="strong"><a href="./org/apache/commons/io/IOUtils.html#writeLines(java.util.Collection, java.lang.String, java.io.OutputStream)">writeLines(Collection&lt;?&gt;, String, OutputStream)</a></span> - Static method in class org.apache.commons.io.<a href="./org/apache/commons/io/IOUtils.html" title="class in org.apache.commons.io">IOUtils</a></dt>
-<dd>
-<div class="block"><span class="strong">Deprecated.</span>
-<div class="block"><i>2.5 use <a href="./org/apache/commons/io/IOUtils.html#writeLines(java.util.Collection, java.lang.String, java.io.OutputStream, java.nio.charset.Charset)"><code>IOUtils.writeLines(Collection, String, OutputStream, Charset)</code></a> instead</i></div>
-</div>
-</dd>
-<dt><span class="strong"><a href="./org/apache/commons/io/IOUtils.html#writeLines(java.util.Collection, java.lang.String, java.io.OutputStream, java.nio.charset.Charset)">writeLines(Collection&lt;?&gt;, String, OutputStream, Charset)</a></span> - Static method in class org.apache.commons.io.<a href="./org/apache/commons/io/IOUtils.html" title="class in org.apache.commons.io">IOUtils</a></dt>
-<dd>
-<div class="block">Writes the <code>toString()</code> value of each item in a collection to
- an <code>OutputStream</code> line by line, using the specified character
- encoding and the specified line ending.</div>
-</dd>
-<dt><span class="strong"><a href="./org/apache/commons/io/IOUtils.html#writeLines(java.util.Collection, java.lang.String, java.io.OutputStream, java.lang.String)">writeLines(Collection&lt;?&gt;, String, OutputStream, String)</a></span> - Static method in class org.apache.commons.io.<a href="./org/apache/commons/io/IOUtils.html" title="class in org.apache.commons.io">IOUtils</a></dt>
-<dd>
-<div class="block">Writes the <code>toString()</code> value of each item in a collection to
- an <code>OutputStream</code> line by line, using the specified character
- encoding and the specified line ending.</div>
-</dd>
-<dt><span class="strong"><a href="./org/apache/commons/io/IOUtils.html#writeLines(java.util.Collection, java.lang.String, java.io.Writer)">writeLines(Collection&lt;?&gt;, String, Writer)</a></span> - Static method in class org.apache.commons.io.<a href="./org/apache/commons/io/IOUtils.html" title="class in org.apache.commons.io">IOUtils</a></dt>
-<dd>
-<div class="block">Writes the <code>toString()</code> value of each item in a collection to
- a <code>Writer</code> line by line, using the specified line ending.</div>
-</dd>
-<dt><a href="./org/apache/commons/io/output/WriterOutputStream.html" title="class in org.apache.commons.io.output"><span class="strong">WriterOutputStream</span></a> - Class in <a href="./org/apache/commons/io/output/package-summary.html">org.apache.commons.io.output</a></dt>
-<dd>
-<div class="block"><a href="http://download.oracle.com/javase/6/docs/api/java/io/OutputStream.html?is-external=true" title="class or interface in java.io"><code>OutputStream</code></a> implementation that transforms a byte stream to a
- character stream using a specified charset encoding and writes the resulting
- stream to a <a href="http://download.oracle.com/javase/6/docs/api/java/io/Writer.html?is-external=true" title="class or interface in java.io"><code>Writer</code></a>.</div>
-</dd>
-<dt><span class="strong"><a href="./org/apache/commons/io/output/WriterOutputStream.html#WriterOutputStream(java.io.Writer, java.nio.charset.CharsetDecoder)">WriterOutputStream(Writer, CharsetDecoder)</a></span> - Constructor for class org.apache.commons.io.output.<a href="./org/apache/commons/io/output/WriterOutputStream.html" title="class in org.apache.commons.io.output">WriterOutputStream</a></dt>
-<dd>
-<div class="block">Constructs a new <a href="./org/apache/commons/io/output/WriterOutputStream.html" title="class in org.apache.commons.io.output"><code>WriterOutputStream</code></a> with a default output buffer size of
- 1024 characters.</div>
-</dd>
-<dt><span class="strong"><a href="./org/apache/commons/io/output/WriterOutputStream.html#WriterOutputStream(java.io.Writer, java.nio.charset.CharsetDecoder, int, boolean)">WriterOutputStream(Writer, CharsetDecoder, int, boolean)</a></span> - Constructor for class org.apache.commons.io.output.<a href="./org/apache/commons/io/output/WriterOutputStream.html" title="class in org.apache.commons.io.output">WriterOutputStream</a></dt>
-<dd>
-<div class="block">Constructs a new <a href="./org/apache/commons/io/output/WriterOutputStream.html" title="class in org.apache.commons.io.output"><code>WriterOutputStream</code></a>.</div>
-</dd>
-<dt><span class="strong"><a href="./org/apache/commons/io/output/WriterOutputStream.html#WriterOutputStream(java.io.Writer, java.nio.charset.Charset, int, boolean)">WriterOutputStream(Writer, Charset, int, boolean)</a></span> - Constructor for class org.apache.commons.io.output.<a href="./org/apache/commons/io/output/WriterOutputStream.html" title="class in org.apache.commons.io.output">WriterOutputStream</a></dt>
-<dd>
-<div class="block">Constructs a new <a href="./org/apache/commons/io/output/WriterOutputStream.html" title="class in org.apache.commons.io.output"><code>WriterOutputStream</code></a>.</div>
-</dd>
-<dt><span class="strong"><a href="./org/apache/commons/io/output/WriterOutputStream.html#WriterOutputStream(java.io.Writer, java.nio.charset.Charset)">WriterOutputStream(Writer, Charset)</a></span> - Constructor for class org.apache.commons.io.output.<a href="./org/apache/commons/io/output/WriterOutputStream.html" title="class in org.apache.commons.io.output">WriterOutputStream</a></dt>
-<dd>
-<div class="block">Constructs a new <a href="./org/apache/commons/io/output/WriterOutputStream.html" title="class in org.apache.commons.io.output"><code>WriterOutputStream</code></a> with a default output buffer size of
- 1024 characters.</div>
-</dd>
-<dt><span class="strong"><a href="./org/apache/commons/io/output/WriterOutputStream.html#WriterOutputStream(java.io.Writer, java.lang.String, int, boolean)">WriterOutputStream(Writer, String, int, boolean)</a></span> - Constructor for class org.apache.commons.io.output.<a href="./org/apache/commons/io/output/WriterOutputStream.html" title="class in org.apache.commons.io.output">WriterOutputStream</a></dt>
-<dd>
-<div class="block">Constructs a new <a href="./org/apache/commons/io/output/WriterOutputStream.html" title="class in org.apache.commons.io.output"><code>WriterOutputStream</code></a>.</div>
-</dd>
-<dt><span class="strong"><a href="./org/apache/commons/io/output/WriterOutputStream.html#WriterOutputStream(java.io.Writer, java.lang.String)">WriterOutputStream(Writer, String)</a></span> - Constructor for class org.apache.commons.io.output.<a href="./org/apache/commons/io/output/WriterOutputStream.html" title="class in org.apache.commons.io.output">WriterOutputStream</a></dt>
-<dd>
-<div class="block">Constructs a new <a href="./org/apache/commons/io/output/WriterOutputStream.html" title="class in org.apache.commons.io.output"><code>WriterOutputStream</code></a> with a default output buffer size of
- 1024 characters.</div>
-</dd>
-<dt><span class="strong"><a href="./org/apache/commons/io/output/WriterOutputStream.html#WriterOutputStream(java.io.Writer)">WriterOutputStream(Writer)</a></span> - Constructor for class org.apache.commons.io.output.<a href="./org/apache/commons/io/output/WriterOutputStream.html" title="class in org.apache.commons.io.output">WriterOutputStream</a></dt>
-<dd>
-<div class="block"><span class="strong">Deprecated.</span>
-<div class="block"><i>2.5 use <a href="./org/apache/commons/io/output/WriterOutputStream.html#WriterOutputStream(java.io.Writer, java.nio.charset.Charset)"><code>WriterOutputStream.WriterOutputStream(Writer, Charset)</code></a> instead</i></div>
-</div>
-</dd>
-<dt><span class="strong"><a href="./org/apache/commons/io/FileUtils.html#writeStringToFile(java.io.File, java.lang.String, java.nio.charset.Charset)">writeStringToFile(File, String, Charset)</a></span> - Static method in class org.apache.commons.io.<a href="./org/apache/commons/io/FileUtils.html" title="class in org.apache.commons.io">FileUtils</a></dt>
-<dd>
-<div class="block">Writes a String to a file creating the file if it does not exist.</div>
-</dd>
-<dt><span class="strong"><a href="./org/apache/commons/io/FileUtils.html#writeStringToFile(java.io.File, java.lang.String, java.lang.String)">writeStringToFile(File, String, String)</a></span> - Static method in class org.apache.commons.io.<a href="./org/apache/commons/io/FileUtils.html" title="class in org.apache.commons.io">FileUtils</a></dt>
-<dd>
-<div class="block">Writes a String to a file creating the file if it does not exist.</div>
-</dd>
-<dt><span class="strong"><a href="./org/apache/commons/io/FileUtils.html#writeStringToFile(java.io.File, java.lang.String, java.nio.charset.Charset, boolean)">writeStringToFile(File, String, Charset, boolean)</a></span> - Static method in class org.apache.commons.io.<a href="./org/apache/commons/io/FileUtils.html" title="class in org.apache.commons.io">FileUtils</a></dt>
-<dd>
-<div class="block">Writes a String to a file creating the file if it does not exist.</div>
-</dd>
-<dt><span class="strong"><a href="./org/apache/commons/io/FileUtils.html#writeStringToFile(java.io.File, java.lang.String, java.lang.String, boolean)">writeStringToFile(File, String, String, boolean)</a></span> - Static method in class org.apache.commons.io.<a href="./org/apache/commons/io/FileUtils.html" title="class in org.apache.commons.io">FileUtils</a></dt>
-<dd>
-<div class="block">Writes a String to a file creating the file if it does not exist.</div>
-</dd>
-<dt><span class="strong"><a href="./org/apache/commons/io/FileUtils.html#writeStringToFile(java.io.File, java.lang.String)">writeStringToFile(File, String)</a></span> - Static method in class org.apache.commons.io.<a href="./org/apache/commons/io/FileUtils.html" title="class in org.apache.commons.io">FileUtils</a></dt>
-<dd>
-<div class="block"><span class="strong">Deprecated.</span>
-<div class="block"><i>2.5 use <a href="./org/apache/commons/io/FileUtils.html#writeStringToFile(java.io.File, java.lang.String, java.nio.charset.Charset)"><code>FileUtils.writeStringToFile(File, String, Charset)</code></a> instead</i></div>
-</div>
-</dd>
-<dt><span class="strong"><a href="./org/apache/commons/io/FileUtils.html#writeStringToFile(java.io.File, java.lang.String, boolean)">writeStringToFile(File, String, boolean)</a></span> - Static method in class org.apache.commons.io.<a href="./org/apache/commons/io/FileUtils.html" title="class in org.apache.commons.io">FileUtils</a></dt>
-<dd>
-<div class="block"><span class="strong">Deprecated.</span>
-<div class="block"><i>2.5 use <a href="./org/apache/commons/io/FileUtils.html#writeStringToFile(java.io.File, java.lang.String, java.nio.charset.Charset, boolean)"><code>FileUtils.writeStringToFile(File, String, Charset, boolean)</code></a> instead</i></div>
-</div>
-</dd>
-<dt><span class="strong"><a href="./org/apache/commons/io/EndianUtils.html#writeSwappedDouble(byte[], int, double)">writeSwappedDouble(byte[], int, double)</a></span> - Static method in class org.apache.commons.io.<a href="./org/apache/commons/io/EndianUtils.html" title="class in org.apache.commons.io">EndianUtils</a></dt>
-<dd>
-<div class="block">Writes a "double" value to a byte array at a given offset.</div>
-</dd>
-<dt><span class="strong"><a href="./org/apache/commons/io/EndianUtils.html#writeSwappedDouble(java.io.OutputStream, double)">writeSwappedDouble(OutputStream, double)</a></span> - Static method in class org.apache.commons.io.<a href="./org/apache/commons/io/EndianUtils.html" title="class in org.apache.commons.io">EndianUtils</a></dt>
-<dd>
-<div class="block">Writes a "double" value to an OutputStream.</div>
-</dd>
-<dt><span class="strong"><a href="./org/apache/commons/io/EndianUtils.html#writeSwappedFloat(byte[], int, float)">writeSwappedFloat(byte[], int, float)</a></span> - Static method in class org.apache.commons.io.<a href="./org/apache/commons/io/EndianUtils.html" title="class in org.apache.commons.io">EndianUtils</a></dt>
-<dd>
-<div class="block">Writes a "float" value to a byte array at a given offset.</div>
-</dd>
-<dt><span class="strong"><a href="./org/apache/commons/io/EndianUtils.html#writeSwappedFloat(java.io.OutputStream, float)">writeSwappedFloat(OutputStream, float)</a></span> - Static method in class org.apache.commons.io.<a href="./org/apache/commons/io/EndianUtils.html" title="class in org.apache.commons.io">EndianUtils</a></dt>
-<dd>
-<div class="block">Writes a "float" value to an OutputStream.</div>
-</dd>
-<dt><span class="strong"><a href="./org/apache/commons/io/EndianUtils.html#writeSwappedInteger(byte[], int, int)">writeSwappedInteger(byte[], int, int)</a></span> - Static method in class org.apache.commons.io.<a href="./org/apache/commons/io/EndianUtils.html" title="class in org.apache.commons.io">EndianUtils</a></dt>
-<dd>
-<div class="block">Writes a "int" value to a byte array at a given offset.</div>
-</dd>
-<dt><span class="strong"><a href="./org/apache/commons/io/EndianUtils.html#writeSwappedInteger(java.io.OutputStream, int)">writeSwappedInteger(OutputStream, int)</a></span> - Static method in class org.apache.commons.io.<a href="./org/apache/commons/io/EndianUtils.html" title="class in org.apache.commons.io">EndianUtils</a></dt>
-<dd>
-<div class="block">Writes a "int" value to an OutputStream.</div>
-</dd>
-<dt><span class="strong"><a href="./org/apache/commons/io/EndianUtils.html#writeSwappedLong(byte[], int, long)">writeSwappedLong(byte[], int, long)</a></span> - Static method in class org.apache.commons.io.<a href="./org/apache/commons/io/EndianUtils.html" title="class in org.apache.commons.io">EndianUtils</a></dt>
-<dd>
-<div class="block">Writes a "long" value to a byte array at a given offset.</div>
-</dd>
-<dt><span class="strong"><a href="./org/apache/commons/io/EndianUtils.html#writeSwappedLong(java.io.OutputStream, long)">writeSwappedLong(OutputStream, long)</a></span> - Static method in class org.apache.commons.io.<a href="./org/apache/commons/io/EndianUtils.html" title="class in org.apache.commons.io">EndianUtils</a></dt>
-<dd>
-<div class="block">Writes a "long" value to an OutputStream.</div>
-</dd>
-<dt><span class="strong"><a href="./org/apache/commons/io/EndianUtils.html#writeSwappedShort(byte[], int, short)">writeSwappedShort(byte[], int, short)</a></span> - Static method in class org.apache.commons.io.<a href="./org/apache/commons/io/EndianUtils.html" title="class in org.apache.commons.io">EndianUtils</a></dt>
-<dd>
-<div class="block">Writes a "short" value to a byte array at a given offset.</div>
-</dd>
-<dt><span class="strong"><a href="./org/apache/commons/io/EndianUtils.html#writeSwappedShort(java.io.OutputStream, short)">writeSwappedShort(OutputStream, short)</a></span> - Static method in class org.apache.commons.io.<a href="./org/apache/commons/io/EndianUtils.html" title="class in org.apache.commons.io">EndianUtils</a></dt>
-<dd>
-<div class="block">Writes a "short" value to an OutputStream.</div>
-</dd>
-<dt><span class="strong"><a href="./org/apache/commons/io/output/ByteArrayOutputStream.html#writeTo(java.io.OutputStream)">writeTo(OutputStream)</a></span> - Method in class org.apache.commons.io.output.<a href="./org/apache/commons/io/output/ByteArrayOutputStream.html" title="class in org.apache.commons.io.output">ByteArrayOutputStream</a></dt>
-<dd>
-<div class="block">Writes the entire contents of this byte stream to the
- specified output stream.</div>
-</dd>
-<dt><span class="strong"><a href="./org/apache/commons/io/output/DeferredFileOutputStream.html#writeTo(java.io.OutputStream)">writeTo(OutputStream)</a></span> - Method in class org.apache.commons.io.output.<a href="./org/apache/commons/io/output/DeferredFileOutputStream.html" title="class in org.apache.commons.io.output">DeferredFileOutputStream</a></dt>
-<dd>
-<div class="block">Writes the data from this output stream to the specified output stream,
- after it has been closed.</div>
-</dd>
-</dl>
-<a name="_X_">
-<!--   -->
-</a>
-<h2 class="title">X</h2>
-<dl>
-<dt><a href="./org/apache/commons/io/input/XmlStreamReader.html" title="class in org.apache.commons.io.input"><span class="strong">XmlStreamReader</span></a> - Class in <a href="./org/apache/commons/io/input/package-summary.html">org.apache.commons.io.input</a></dt>
-<dd>
-<div class="block">Character stream that handles all the necessary Voodo to figure out the
- charset encoding of the XML document within the stream.</div>
-</dd>
-<dt><span class="strong"><a href="./org/apache/commons/io/input/XmlStreamReader.html#XmlStreamReader(java.io.File)">XmlStreamReader(File)</a></span> - Constructor for class org.apache.commons.io.input.<a href="./org/apache/commons/io/input/XmlStreamReader.html" title="class in org.apache.commons.io.input">XmlStreamReader</a></dt>
-<dd>
-<div class="block">Creates a Reader for a File.</div>
-</dd>
-<dt><span class="strong"><a href="./org/apache/commons/io/input/XmlStreamReader.html#XmlStreamReader(java.io.InputStream)">XmlStreamReader(InputStream)</a></span> - Constructor for class org.apache.commons.io.input.<a href="./org/apache/commons/io/input/XmlStreamReader.html" title="class in org.apache.commons.io.input">XmlStreamReader</a></dt>
-<dd>
-<div class="block">Creates a Reader for a raw InputStream.</div>
-</dd>
-<dt><span class="strong"><a href="./org/apache/commons/io/input/XmlStreamReader.html#XmlStreamReader(java.io.InputStream, boolean)">XmlStreamReader(InputStream, boolean)</a></span> - Constructor for class org.apache.commons.io.input.<a href="./org/apache/commons/io/input/XmlStreamReader.html" title="class in org.apache.commons.io.input">XmlStreamReader</a></dt>
-<dd>
-<div class="block">Creates a Reader for a raw InputStream.</div>
-</dd>
-<dt><span class="strong"><a href="./org/apache/commons/io/input/XmlStreamReader.html#XmlStreamReader(java.io.InputStream, boolean, java.lang.String)">XmlStreamReader(InputStream, boolean, String)</a></span> - Constructor for class org.apache.commons.io.input.<a href="./org/apache/commons/io/input/XmlStreamReader.html" title="class in org.apache.commons.io.input">XmlStreamReader</a></dt>
-<dd>
-<div class="block">Creates a Reader for a raw InputStream.</div>
-</dd>
-<dt><span class="strong"><a href="./org/apache/commons/io/input/XmlStreamReader.html#XmlStreamReader(java.net.URL)">XmlStreamReader(URL)</a></span> - Constructor for class org.apache.commons.io.input.<a href="./org/apache/commons/io/input/XmlStreamReader.html" title="class in org.apache.commons.io.input">XmlStreamReader</a></dt>
-<dd>
-<div class="block">Creates a Reader using the InputStream of a URL.</div>
-</dd>
-<dt><span class="strong"><a href="./org/apache/commons/io/input/XmlStreamReader.html#XmlStreamReader(java.net.URLConnection, java.lang.String)">XmlStreamReader(URLConnection, String)</a></span> - Constructor for class org.apache.commons.io.input.<a href="./org/apache/commons/io/input/XmlStreamReader.html" title="class in org.apache.commons.io.input">XmlStreamReader</a></dt>
-<dd>
-<div class="block">Creates a Reader using the InputStream of a URLConnection.</div>
-</dd>
-<dt><span class="strong"><a href="./org/apache/commons/io/input/XmlStreamReader.html#XmlStreamReader(java.io.InputStream, java.lang.String)">XmlStreamReader(InputStream, String)</a></span> - Constructor for class org.apache.commons.io.input.<a href="./org/apache/commons/io/input/XmlStreamReader.html" title="class in org.apache.commons.io.input">XmlStreamReader</a></dt>
-<dd>
-<div class="block">Creates a Reader using an InputStream an the associated content-type
- header.</div>
-</dd>
-<dt><span class="strong"><a href="./org/apache/commons/io/input/XmlStreamReader.html#XmlStreamReader(java.io.InputStream, java.lang.String, boolean, java.lang.String)">XmlStreamReader(InputStream, String, boolean, String)</a></span> - Constructor for class org.apache.commons.io.input.<a href="./org/apache/commons/io/input/XmlStreamReader.html" title="class in org.apache.commons.io.input">XmlStreamReader</a></dt>
-<dd>
-<div class="block">Creates a Reader using an InputStream an the associated content-type
- header.</div>
-</dd>
-<dt><span class="strong"><a href="./org/apache/commons/io/input/XmlStreamReader.html#XmlStreamReader(java.io.InputStream, java.lang.String, boolean)">XmlStreamReader(InputStream, String, boolean)</a></span> - Constructor for class org.apache.commons.io.input.<a href="./org/apache/commons/io/input/XmlStreamReader.html" title="class in org.apache.commons.io.input">XmlStreamReader</a></dt>
-<dd>
-<div class="block">Creates a Reader using an InputStream an the associated content-type
- header.</div>
-</dd>
-<dt><a href="./org/apache/commons/io/input/XmlStreamReaderException.html" title="class in org.apache.commons.io.input"><span class="strong">XmlStreamReaderException</span></a> - Exception in <a href="./org/apache/commons/io/input/package-summary.html">org.apache.commons.io.input</a></dt>
-<dd>
-<div class="block">The XmlStreamReaderException is thrown by the XmlStreamReader constructors if
- the charset encoding can not be determined according to the XML 1.0
- specification and RFC 3023.</div>
-</dd>
-<dt><span class="strong"><a href="./org/apache/commons/io/input/XmlStreamReaderException.html#XmlStreamReaderException(java.lang.String, java.lang.String, java.lang.String, java.lang.String)">XmlStreamReaderException(String, String, String, String)</a></span> - Constructor for exception org.apache.commons.io.input.<a href="./org/apache/commons/io/input/XmlStreamReaderException.html" title="class in org.apache.commons.io.input">XmlStreamReaderException</a></dt>
-<dd>
-<div class="block">Creates an exception instance if the charset encoding could not be
- determined.</div>
-</dd>
-<dt><span class="strong"><a href="./org/apache/commons/io/input/XmlStreamReaderException.html#XmlStreamReaderException(java.lang.String, java.lang.String, java.lang.String, java.lang.String, java.lang.String, java.lang.String)">XmlStreamReaderException(String, String, String, String, String, String)</a></span> - Constructor for exception org.apache.commons.io.input.<a href="./org/apache/commons/io/input/XmlStreamReaderException.html" title="class in org.apache.commons.io.input">XmlStreamReaderException</a></dt>
-<dd>
-<div class="block">Creates an exception instance if the charset encoding could not be
- determined.</div>
-</dd>
-<dt><a href="./org/apache/commons/io/output/XmlStreamWriter.html" title="class in org.apache.commons.io.output"><span class="strong">XmlStreamWriter</span></a> - Class in <a href="./org/apache/commons/io/output/package-summary.html">org.apache.commons.io.output</a></dt>
-<dd>
-<div class="block">Character stream that handles all the necessary Voodo to figure out the
- charset encoding of the XML document written to the stream.</div>
-</dd>
-<dt><span class="strong"><a href="./org/apache/commons/io/output/XmlStreamWriter.html#XmlStreamWriter(java.io.OutputStream)">XmlStreamWriter(OutputStream)</a></span> - Constructor for class org.apache.commons.io.output.<a href="./org/apache/commons/io/output/XmlStreamWriter.html" title="class in org.apache.commons.io.output">XmlStreamWriter</a></dt>
-<dd>
-<div class="block">Construct an new XML stream writer for the specified output stream
- with a default encoding of UTF-8.</div>
-</dd>
-<dt><span class="strong"><a href="./org/apache/commons/io/output/XmlStreamWriter.html#XmlStreamWriter(java.io.OutputStream, java.lang.String)">XmlStreamWriter(OutputStream, String)</a></span> - Constructor for class org.apache.commons.io.output.<a href="./org/apache/commons/io/output/XmlStreamWriter.html" title="class in org.apache.commons.io.output">XmlStreamWriter</a></dt>
-<dd>
-<div class="block">Construct an new XML stream writer for the specified output stream
- with the specified default encoding.</div>
-</dd>
-<dt><span class="strong"><a href="./org/apache/commons/io/output/XmlStreamWriter.html#XmlStreamWriter(java.io.File)">XmlStreamWriter(File)</a></span> - Constructor for class org.apache.commons.io.output.<a href="./org/apache/commons/io/output/XmlStreamWriter.html" title="class in org.apache.commons.io.output">XmlStreamWriter</a></dt>
-<dd>
-<div class="block">Construct an new XML stream writer for the specified file
- with a default encoding of UTF-8.</div>
-</dd>
-<dt><span class="strong"><a href="./org/apache/commons/io/output/XmlStreamWriter.html#XmlStreamWriter(java.io.File, java.lang.String)">XmlStreamWriter(File, String)</a></span> - Constructor for class org.apache.commons.io.output.<a href="./org/apache/commons/io/output/XmlStreamWriter.html" title="class in org.apache.commons.io.output">XmlStreamWriter</a></dt>
-<dd>
-<div class="block">Construct an new XML stream writer for the specified file
- with the specified default encoding.</div>
-</dd>
-</dl>
-<a href="#_A_">A</a>&nbsp;<a href="#_B_">B</a>&nbsp;<a href="#_C_">C</a>&nbsp;<a href="#_D_">D</a>&nbsp;<a href="#_E_">E</a>&nbsp;<a href="#_F_">F</a>&nbsp;<a href="#_G_">G</a>&nbsp;<a href="#_H_">H</a>&nbsp;<a href="#_I_">I</a>&nbsp;<a href="#_L_">L</a>&nbsp;<a href="#_M_">M</a>&nbsp;<a href="#_N_">N</a>&nbsp;<a href="#_O_">O</a>&nbsp;<a href="#_P_">P</a>&nbsp;<a href="#_R_">R</a>&nbsp;<a href="#_S_">S</a>&nbsp;<a href="#_T_">T</a>&nbsp;<a href="#_U_">U</a>&nbsp;<a href="#_V_">V</a>&nbsp;<a href="#_W_">W</a>&nbsp;<a href="#_X_">X</a>&nbsp;</div>
-<!-- ======= START OF BOTTOM NAVBAR ====== -->
-<div class="bottomNav"><a name="navbar_bottom">
-<!--   -->
-</a><a href="#skip-navbar_bottom" title="Skip navigation links"></a><a name="navbar_bottom_firstrow">
-<!--   -->
-</a>
-<ul class="navList" title="Navigation">
-<li><a href="./overview-summary.html">Overview</a></li>
-<li>Package</li>
-<li>Class</li>
-<li>Use</li>
-<li><a href="./overview-tree.html">Tree</a></li>
-<li><a href="./deprecated-list.html">Deprecated</a></li>
-<li class="navBarCell1Rev">Index</li>
-<li><a href="./help-doc.html">Help</a></li>
-</ul>
-</div>
-<div class="subNav">
-<ul class="navList">
-<li>Prev</li>
-<li>Next</li>
-</ul>
-<ul class="navList">
-<li><a href="./index.html?index-all.html" target="_top">Frames</a></li>
-<li><a href="index-all.html" target="_top">No Frames</a></li>
-</ul>
-<ul class="navList" id="allclasses_navbar_bottom">
-<li><a href="./allclasses-noframe.html">All Classes</a></li>
-</ul>
-<div>
-<script type="text/javascript"><!--
-  allClassesLink = document.getElementById("allclasses_navbar_bottom");
-  if(window==top) {
-    allClassesLink.style.display = "block";
-  }
-  else {
-    allClassesLink.style.display = "none";
-  }
-  //-->
-</script>
-</div>
-<a name="skip-navbar_bottom">
-<!--   -->
-</a></div>
-<!-- ======== END OF BOTTOM NAVBAR ======= -->
-<p class="legalCopy"><small>Copyright &#169; 2002-2013 <a href="http://www.apache.org/">The Apache Software Foundation</a>. All Rights Reserved.</small></p>
-</body>
-</html>
\ No newline at end of file
diff --git a/0.12-release/apache-rat-core/src/test/resources/oasis/good/oasisgood1.txt b/0.12-release/apache-rat-core/src/test/resources/oasis/good/oasisgood1.txt
deleted file mode 100644
index 6deff76..0000000
--- a/0.12-release/apache-rat-core/src/test/resources/oasis/good/oasisgood1.txt
+++ /dev/null
@@ -1,10 +0,0 @@
-Copyright (c) OASIS Open 2002-2011. All Rights Reserved.
-
-All capitalized terms in the following text have the meanings assigned
-to them in the OASIS Intellectual Property Rights Policy (the "OASIS
-IPR Policy"). The full Policy may be found at the OASIS website.
- 
-This document and translations of it may be copied and furnished to
-others, and derivative works that comment on or otherwise explain it
-or assist in its implementation may be prepared, copied, published,
-and distributed
\ No newline at end of file
diff --git a/0.12-release/apache-rat-core/src/test/resources/violations/FilterTest.cs b/0.12-release/apache-rat-core/src/test/resources/violations/FilterTest.cs
deleted file mode 100644
index 6d9e1d5..0000000
--- a/0.12-release/apache-rat-core/src/test/resources/violations/FilterTest.cs
+++ /dev/null
@@ -1,90 +0,0 @@
-﻿#if NET_2_0
-using System;
-using System.Collections.Generic;
-using System.Xml;
-using log4net.Appender;
-using log4net.Config;
-using log4net.Core;
-using log4net.Filter;
-using log4net.Repository;
-using NUnit.Framework;
-
-namespace log4net.Tests.Filter
-{
-    [TestFixture]
-    public class FilterTest
-    {
-        [Test]
-        public void FilterConfigurationTest()
-        {
-            XmlDocument log4netConfig = new XmlDocument();
-            #region Load log4netConfig
-            log4netConfig.LoadXml(@"
-            <log4net>
-            <appender name=""MemoryAppender"" type=""log4net.Appender.MemoryAppender, log4net"">
-                <filter type=""log4net.Tests.Filter.MultiplePropertyFilter, log4net.Tests"">
-                    <condition>
-                        <key value=""ABC"" />
-                        <stringToMatch value=""123"" />
-                    </condition>
-                    <condition>
-                        <key value=""DEF"" />
-                        <stringToMatch value=""456"" />
-                    </condition>
-                </filter>
-            </appender>
-            <root>
-                <level value=""ALL"" />
-                <appender-ref ref=""MemoryAppender"" />
-            </root>
-            </log4net>");
-            #endregion
-
-            ILoggerRepository rep = LogManager.CreateRepository(Guid.NewGuid().ToString());
-            XmlConfigurator.Configure(rep, log4netConfig["log4net"]);
-
-            IAppender[] appenders = LogManager.GetRepository(rep.Name).GetAppenders();
-            Assert.IsTrue(appenders.Length == 1);
-
-            IAppender appender = Array.Find(appenders, a => a.Name == "MemoryAppender");
-            Assert.IsNotNull(appender);
-
-            MultiplePropertyFilter multiplePropertyFilter = 
-                ((AppenderSkeleton)appender).FilterHead as MultiplePropertyFilter;
-
-            var conditions = multiplePropertyFilter.GetConditions();
-            Assert.AreEqual(2, conditions.Length);
-            Assert.AreEqual("ABC", conditions[0].Key);
-            Assert.AreEqual("123", conditions[0].StringToMatch);
-            Assert.AreEqual("DEF", conditions[1].Key);
-            Assert.AreEqual("456", conditions[1].StringToMatch);
-        }
-    }
-
-    public class MultiplePropertyFilter : FilterSkeleton
-    {
-        private readonly List<Condition> _conditions = new List<Condition>();
-
-        public override FilterDecision Decide(LoggingEvent loggingEvent)
-        {
-            return FilterDecision.Accept;
-        }
-
-        public Condition[] GetConditions()
-        {
-            return _conditions.ToArray();
-        }
-
-        public void AddCondition(Condition condition)
-        {
-            _conditions.Add(condition);
-        }
-        
-        public class Condition
-        {
-            public string Key { get; set; }
-            public string StringToMatch { get; set; }
-        }
-    }
-}
-#endif
diff --git a/0.12-release/apache-rat-core/src/test/resources/violations/bad.txt b/0.12-release/apache-rat-core/src/test/resources/violations/bad.txt
deleted file mode 100644
index 92c55d5..0000000
--- a/0.12-release/apache-rat-core/src/test/resources/violations/bad.txt
+++ /dev/null
@@ -1 +0,0 @@
-This file has no license.
diff --git a/0.12-release/apache-rat-plugin/pom.xml b/0.12-release/apache-rat-plugin/pom.xml
deleted file mode 100644
index 0240a66..0000000
--- a/0.12-release/apache-rat-plugin/pom.xml
+++ /dev/null
@@ -1,304 +0,0 @@
-<?xml version="1.0"?>
-<!--
-  Licensed to the Apache Software Foundation (ASF) under one or more
-  contributor license agreements.  See the NOTICE file distributed with
-  this work for additional information regarding copyright ownership.
-  The ASF licenses this file to You under the Apache License, Version 2.0
-  (the "License"); you may not use this file except in compliance with
-  the License.  You may obtain a copy of the License at
-
-      http://www.apache.org/licenses/LICENSE-2.0
-
-  Unless required by applicable law or agreed to in writing, software
-  distributed under the License is distributed on an "AS IS" BASIS,
-  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-  See the License for the specific language governing permissions and
-  limitations under the License.
--->
-<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
-  <modelVersion>4.0.0</modelVersion>
-  <parent>
-    <artifactId>apache-rat-project</artifactId>
-    <groupId>org.apache.rat</groupId>
-    <version>0.12</version>
-  </parent>
-  <artifactId>apache-rat-plugin</artifactId>
-  <packaging>maven-plugin</packaging>
-  <name>Apache Creadur Rat::Plugin4Maven</name>
-  <description>A plugin for Apache Maven that runs Apache Rat
-   to audit the source to be distributed.</description>
-  <inceptionYear>2007</inceptionYear>
-  <prerequisites>
-    <maven>${mavenVersion}</maven>
-  </prerequisites>
-  <properties>
-    <currentVersion>${project.version}</currentVersion>
-    <doxiaVersion>1.6</doxiaVersion>
-    <doxiaSitetoolsVersion>1.6</doxiaSitetoolsVersion>
-  </properties>
-  <build>
-    <resources>
-      <resource>
-        <filtering>false</filtering>
-        <directory>src/main/resources</directory>
-      </resource>
-      <resource>
-        <filtering>true</filtering>
-        <directory>src/main/filtered-resources</directory>
-      </resource>
-      <resource>
-        <directory>..</directory>
-        <targetPath>META-INF</targetPath>
-        <includes>
-          <include>RELEASE_NOTES.txt</include>
-        </includes>
-      </resource>
-    </resources>
-    <pluginManagement>
-      <plugins>
-         <plugin>
-           <groupId>org.apache.maven.plugins</groupId>
-          <artifactId>maven-plugin-plugin</artifactId>
-          <configuration>
-            <skipErrorNoDescriptorsFound>true</skipErrorNoDescriptorsFound>
-          </configuration>
-          <executions>
-            <execution>
-              <id>mojo-descriptor</id>
-              <goals>
-                <goal>descriptor</goal>
-              </goals>
-            </execution>
-            <!-- to generate help goal -->
-            <execution>
-              <id>help-goal</id>
-              <goals>
-                <goal>helpmojo</goal>
-              </goals>
-            </execution>
-          </executions>
-        </plugin>
-        <plugin>
-          <groupId>org.apache.rat</groupId>
-          <artifactId>apache-rat-plugin</artifactId>
-          <configuration>
-            <excludes>
-              <!-- These files does not have license headers because they are used to test license headers -->
-              <exclude>src/it/it1/src.apt</exclude>
-              <exclude>src/test/resources/unit/it2/src.txt</exclude>
-              <exclude>src/test/resources/unit/it3/src.apt</exclude>
-              <exclude>**/*.iml</exclude>
-              <!-- RAT-171: needs to be added since SCM ignores are only parsed in project root -->
-              <exclude>**/.bzrignore</exclude>
-            </excludes>
-          </configuration>
-        </plugin>
-        <!--This plugin's configuration is used to store Eclipse m2e settings only. It has no influence on the Maven build itself.-->
-        <plugin>
-        	<groupId>org.eclipse.m2e</groupId>
-        	<artifactId>lifecycle-mapping</artifactId>
-        	<version>1.0.0</version>
-        	<configuration>
-        		<lifecycleMappingMetadata>
-        			<pluginExecutions>
-        				<pluginExecution>
-        					<pluginExecutionFilter>
-        						<groupId>
-        							org.apache.maven.plugins
-        						</groupId>
-        						<artifactId>
-        							maven-plugin-plugin
-        						</artifactId>
-        						<versionRange>[3.4,)</versionRange>
-        						<goals>
-        							<goal>descriptor</goal>
-        							<goal>helpmojo</goal>
-        						</goals>
-        					</pluginExecutionFilter>
-        					<action>
-        						<ignore />
-        					</action>
-        				</pluginExecution>
-        			</pluginExecutions>
-        		</lifecycleMappingMetadata>
-        	</configuration>
-        </plugin>
-      </plugins>
-    </pluginManagement>
-    <plugins>
-      <plugin>
-        <groupId>org.apache.maven.plugins</groupId>
-        <artifactId>maven-invoker-plugin</artifactId>
-        <version>1.10</version>
-        <configuration>
-          <projectsDirectory>src/it</projectsDirectory>
-          <cloneProjectsTo>${project.build.directory}/invoker</cloneProjectsTo>
-          <pomIncludes>
-            <pomInclude>*/pom.xml</pomInclude>
-          </pomIncludes>
-          <localRepositoryPath>${project.build.directory}/local-repo</localRepositoryPath>
-          <settingsFile>src/it/settings.xml</settingsFile>
-          <postBuildHookScript>verify</postBuildHookScript>
-        </configuration>
-        <executions>
-          <execution>
-            <id>integration-test</id>
-            <goals>
-              <goal>install</goal>
-              <goal>run</goal>
-            </goals>
-          </execution>
-        </executions>
-      </plugin>
-    </plugins>
-  </build>
-
-  <dependencies>
-    <dependency>
-      <groupId>org.apache.rat</groupId>
-      <artifactId>apache-rat-core</artifactId>
-    </dependency>
-    <dependency>
-      <groupId>junit</groupId>
-      <artifactId>junit</artifactId>
-    </dependency>
-    <dependency>
-      <groupId>org.mockito</groupId>
-      <artifactId>mockito-all</artifactId>
-    </dependency>
-    <dependency>
-      <groupId>org.apache.maven.plugin-tools</groupId>
-      <artifactId>maven-plugin-annotations</artifactId>
-      <version>${mavenPluginPluginVersion}</version>
-      <scope>provided</scope>
-    </dependency>
-    <dependency>
-      <groupId>org.apache.maven</groupId>
-      <artifactId>maven-artifact</artifactId>
-      <version>${mavenVersion}</version>
-    </dependency>
-    <dependency>
-      <groupId>org.apache.maven</groupId>
-      <artifactId>maven-artifact-manager</artifactId>
-      <version>${mavenVersion}</version>
-    </dependency>
-    <dependency>
-      <groupId>org.apache.maven</groupId>
-      <artifactId>maven-model</artifactId>
-      <version>${mavenVersion}</version>
-    </dependency>
-    <dependency>
-      <groupId>org.apache.maven</groupId>
-      <artifactId>maven-plugin-api</artifactId>
-      <version>${mavenVersion}</version>
-    </dependency>
-    <dependency>
-      <groupId>org.apache.maven</groupId>
-      <artifactId>maven-project</artifactId>
-      <version>${mavenVersion}</version>
-    </dependency>
-    <dependency>
-      <groupId>org.apache.maven</groupId>
-      <artifactId>maven-settings</artifactId>
-      <version>${mavenVersion}</version>
-      <scope>test</scope>
-    </dependency>
-    <dependency>
-      <groupId>org.apache.maven.doxia</groupId>
-      <artifactId>doxia-core</artifactId>
-      <version>${doxiaVersion}</version>
-      <exclusions>
-        <exclusion>
-          <groupId>xerces</groupId>
-          <artifactId>xercesImpl</artifactId>
-        </exclusion>
-      </exclusions>
-    </dependency>
-    <dependency>
-      <groupId>org.apache.maven.doxia</groupId>
-      <artifactId>doxia-decoration-model</artifactId>
-      <version>${doxiaSitetoolsVersion}</version>
-    </dependency>
-    <dependency>
-      <groupId>org.apache.maven.doxia</groupId>
-      <artifactId>doxia-sink-api</artifactId>
-      <version>${doxiaVersion}</version>
-    </dependency>
-    <dependency>
-      <groupId>org.apache.maven.doxia</groupId>
-      <artifactId>doxia-site-renderer</artifactId>
-      <version>${doxiaSitetoolsVersion}</version>
-    </dependency>
-    <dependency>
-      <groupId>org.apache.maven.reporting</groupId>
-      <artifactId>maven-reporting-api</artifactId>
-      <version>3.0</version>
-    </dependency>
-    <dependency>
-      <groupId>org.apache.maven.shared</groupId>
-      <artifactId>maven-plugin-testing-harness</artifactId>
-      <version>1.1</version>
-      <scope>test</scope>
-    </dependency>
-    <dependency>
-      <groupId>org.codehaus.plexus</groupId>
-      <artifactId>plexus-utils</artifactId>
-      <version>3.0.21</version>
-    </dependency>
-  </dependencies>
-  <reporting>
-    <plugins>
-      <plugin>
-        <groupId>org.apache.maven.plugins</groupId>
-        <artifactId>maven-javadoc-plugin</artifactId>
-      </plugin>
-      <plugin>
-        <groupId>org.apache.maven.plugins</groupId>
-        <artifactId>maven-plugin-plugin</artifactId>
-        <version>${mavenPluginPluginVersion}</version>
-      </plugin>
-    </plugins>
-  </reporting>
-  <developers>
-    <developer>
-      <id>jochen</id>
-      <name>Jochen Wiedmann</name>
-      <email>jochen.wiedmann@gmail.com</email>
-    </developer>
-  </developers>
-  <contributors>
-    <contributor>
-      <name>Bernd Bohmann</name>
-      <email>bommel@apache.org</email>
-    </contributor>
-    <contributor>
-      <name>Lars Trieloff</name>
-      <email>lars@trieloff.net</email>
-    </contributor>
-    <contributor>
-      <name>Jukka Zitting</name>
-      <email>jukka@apache.org</email>
-    </contributor>
-  </contributors>
-  <!--
-  <profiles>
-    <profile>
-      <id>apache-release</id>
-      <build>
-        <plugins>
-          <plugin>
-            <artifactId>maven-docck-plugin</artifactId>
-              <executions>
-                <execution>
-                  <goals>
-                    <goal>check</goal>
-                  </goals>
-                </execution>
-              </executions>
-          </plugin>
-        </plugins>
-      </build>
-    </profile>
-  </profiles>
--->
-</project>
diff --git a/0.12-release/apache-rat-plugin/src/changes/changes.xml b/0.12-release/apache-rat-plugin/src/changes/changes.xml
deleted file mode 100644
index b0d266b..0000000
--- a/0.12-release/apache-rat-plugin/src/changes/changes.xml
+++ /dev/null
@@ -1,73 +0,0 @@
-<?xml version='1.0'?>
-<!-- 
-   Licensed to the Apache Software Foundation (ASF) under one or more
-   contributor license agreements.  See the NOTICE file distributed with
-   this work for additional information regarding copyright ownership.
-   The ASF licenses this file to You under the Apache License, Version 2.0
-   (the "License"); you may not use this file except in compliance with
-   the License.  You may obtain a copy of the License at
-  
-        http://www.apache.org/licenses/LICENSE-2.0
-  
-   Unless required by applicable law or agreed to in writing, software
-   distributed under the License is distributed on an "AS IS" BASIS,
-   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-   See the License for the specific language governing permissions and
-   limitations under the License.
--->
-<document>
-  <properties>
-    <title>Changes in the Rat Maven Plugin</title>
-  </properties>
-  <body>
-    <release version="0.12" date="Not yet released">
-      <action dev="jochen" type="add" issue="RAT-208">
-        Added parameters includesFile, excludesFile, includesFileCharacterset, and
-        excludesFileCharacterset, and support thereof.
-      </action>
-    </release>
-    <release version="1.0-alpha-4" date="Not yet released">
-      <action dev="jochen" type="fix" issue="MOJO-866">
-        Added @requiresDependencyResolution to the RatReportMojo, so that
-        the dependencies are guaranteed to be present, if the mojo is
-        invoked from the command line.
-      </action>
-      <action dev="jochen" type="fix" issue="RAT-35"
-          due-to="Jukka Zitting" due-to-email="jukka@apache.org">
-        Incorrect number of unapproved licenses reported by rat:check
-      </action>
-    </release>
-    <release version="1.0-alpha-3" date="2007-Aug-28">
-      <action dev="jochen" type="fix">
-        Upgraded rat-lib to 0.5.1.
-      </action>
-    </release>
-    <release version="1.0-alpha-2" date="2007-Jun-16">
-      <action dev="jochen" type="add" due-to="Bernd Bohmann"
-          due-to-email="bommel@apache.org" issue="MOJO-685">
-        Added the IDEA specific default excludes.
-      </action>
-      <action dev="jochen" type="add" due-to="Bernd Bohmann"
-          due-to-email="bommel@apache.org" issue="MOJO-685">
-        Added the possibility to exclude subprojects.
-      </action>
-      <action dev="jochen" type="fix" due-to="Lars Trieloff"
-          due-to-email="lars@trieloff.net" issue="MOJO-661">
-        Upgrade to rat-lib-0.5
-      </action>
-      <action dev="jochen" type="fix">
-        The plugin description on the project-reports page was wrong.
-      </action>
-      <action dev="jochen" type="fix" issue="MOJO-819">
-        The plugins report contains now relative paths in the
-        default configuration, in order to avoid exposing
-        unnecessary information on public sites.
-      </action>
-    </release>
-    <release version="1.0-alpha-1" date="2007-Feb-12">
-      <action dev="jochen" type="add">
-        Initial release.
-      </action>
-    </release>
-  </body>
-</document>
diff --git a/0.12-release/apache-rat-plugin/src/it/it1/invoker.properties b/0.12-release/apache-rat-plugin/src/it/it1/invoker.properties
deleted file mode 100644
index 6e8c347..0000000
--- a/0.12-release/apache-rat-plugin/src/it/it1/invoker.properties
+++ /dev/null
@@ -1,16 +0,0 @@
-# Licensed to the Apache Software Foundation (ASF) under one or more
-# contributor license agreements.  See the NOTICE file distributed with
-# this work for additional information regarding copyright ownership.
-# The ASF licenses this file to You under the Apache License, Version 2.0
-# (the "License"); you may not use this file except in compliance with
-# the License.  You may obtain a copy of the License at
-#
-#     http://www.apache.org/licenses/LICENSE-2.0
-#
-# Unless required by applicable law or agreed to in writing, software
-# distributed under the License is distributed on an "AS IS" BASIS,
-# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-# See the License for the specific language governing permissions and
-# limitations under the License.
-
-invoker.goals = clean apache-rat:check
diff --git a/0.12-release/apache-rat-plugin/src/it/it1/pom.xml b/0.12-release/apache-rat-plugin/src/it/it1/pom.xml
deleted file mode 100644
index 58eea9b..0000000
--- a/0.12-release/apache-rat-plugin/src/it/it1/pom.xml
+++ /dev/null
@@ -1,55 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!--
-  Licensed to the Apache Software Foundation (ASF) under one or more
-  contributor license agreements.  See the NOTICE file distributed with
-  this work for additional information regarding copyright ownership.
-  The ASF licenses this file to You under the Apache License, Version 2.0
-  (the "License"); you may not use this file except in compliance with
-  the License.  You may obtain a copy of the License at
-
-      http://www.apache.org/licenses/LICENSE-2.0
-
-  Unless required by applicable law or agreed to in writing, software
-  distributed under the License is distributed on an "AS IS" BASIS,
-  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-  See the License for the specific language governing permissions and
-  limitations under the License.
--->
-<project
-    xmlns="http://maven.apache.org/POM/4.0.0"
-    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
-    xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
-  <modelVersion>4.0.0</modelVersion>
-  <groupId>org.apache.rat.test</groupId>
-  <artifactId>it1</artifactId>
-  <version>1.0</version>
-  <build>
-    <plugins>
-      <plugin>
-        <groupId>org.apache.rat</groupId>
-        <artifactId>apache-rat-plugin</artifactId>
-        <version>@pom.version@</version>
-        <configuration>
-          <licenses>
-            <license implementation="org.apache.rat.analysis.license.SimplePatternBasedLicense">
-              <licenseFamilyCategory>YAL__</licenseFamilyCategory>
-              <licenseFamilyName>Yet Another Software License</licenseFamilyName>
-              <notes></notes>
-              <patterns>
-                <pattern>Yet Another License</pattern>
-              </patterns>
-            </license>
-          </licenses>
-          <licenseFamilies>
-            <licenseFamily implementation="org.apache.rat.license.SimpleLicenseFamily">
-              <familyName>Yet Another Software License</familyName>
-            </licenseFamily>
-          </licenseFamilies>
-          <includes>
-            <include>src.apt</include>
-          </includes>
-        </configuration>
-      </plugin>
-    </plugins>
-  </build>
-</project>
diff --git a/0.12-release/apache-rat-plugin/src/it/it1/src.apt b/0.12-release/apache-rat-plugin/src/it/it1/src.apt
deleted file mode 100644
index 01ab206..0000000
--- a/0.12-release/apache-rat-plugin/src/it/it1/src.apt
+++ /dev/null
@@ -1,12 +0,0 @@
-~~   Yet Another License, just for test purposes
-
-    --------------
-    Some text file
-    --------------
-
-Some text file
-
-  This is a text file, which intentionally has no Apache License Header.
-  Instead, it contains a dummy license header. The Rat plugin should
-  accept it with a proper custom license matcher.
-
diff --git a/0.12-release/apache-rat-plugin/src/it/it1/verify.groovy b/0.12-release/apache-rat-plugin/src/it/it1/verify.groovy
deleted file mode 100644
index 1309c96..0000000
--- a/0.12-release/apache-rat-plugin/src/it/it1/verify.groovy
+++ /dev/null
@@ -1,19 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements.  See the NOTICE file distributed with
- * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You under the Apache License, Version 2.0
- * (the "License"); you may not use this file except in compliance with
- * the License.  You may obtain a copy of the License at
- *
- *     http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-content = new File( basedir, 'target/rat.txt' ).text;
-
-assert content.contains( 'YAL__ src.apt' );
\ No newline at end of file
diff --git a/0.12-release/apache-rat-plugin/src/it/it4_RAT-168/invoker.properties b/0.12-release/apache-rat-plugin/src/it/it4_RAT-168/invoker.properties
deleted file mode 100644
index 6486eb1..0000000
--- a/0.12-release/apache-rat-plugin/src/it/it4_RAT-168/invoker.properties
+++ /dev/null
@@ -1,16 +0,0 @@
-# Licensed to the Apache Software Foundation (ASF) under one or more
-# contributor license agreements.  See the NOTICE file distributed with
-# this work for additional information regarding copyright ownership.
-# The ASF licenses this file to You under the Apache License, Version 2.0
-# (the "License"); you may not use this file except in compliance with
-# the License.  You may obtain a copy of the License at
-#
-#     http://www.apache.org/licenses/LICENSE-2.0
-#
-# Unless required by applicable law or agreed to in writing, software
-# distributed under the License is distributed on an "AS IS" BASIS,
-# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-# See the License for the specific language governing permissions and
-# limitations under the License.
-
-invoker.goals = clean apache-rat:rat
diff --git a/0.12-release/apache-rat-plugin/src/it/it4_RAT-168/pom.xml b/0.12-release/apache-rat-plugin/src/it/it4_RAT-168/pom.xml
deleted file mode 100644
index 0a419e3..0000000
--- a/0.12-release/apache-rat-plugin/src/it/it4_RAT-168/pom.xml
+++ /dev/null
@@ -1,40 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!--
-  Licensed to the Apache Software Foundation (ASF) under one or more
-  contributor license agreements.  See the NOTICE file distributed with
-  this work for additional information regarding copyright ownership.
-  The ASF licenses this file to You under the Apache License, Version 2.0
-  (the "License"); you may not use this file except in compliance with
-  the License.  You may obtain a copy of the License at
-
-      http://www.apache.org/licenses/LICENSE-2.0
-
-  Unless required by applicable law or agreed to in writing, software
-  distributed under the License is distributed on an "AS IS" BASIS,
-  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-  See the License for the specific language governing permissions and
-  limitations under the License.
--->
-<project
-    xmlns="http://maven.apache.org/POM/4.0.0"
-    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
-    xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
-  <modelVersion>4.0.0</modelVersion>
-  <groupId>org.apache.rat.test</groupId>
-  <artifactId>it4rat168</artifactId>
-  <version>1.0</version>
-  <build>
-    <plugins>
-      <plugin>
-        <groupId>org.apache.rat</groupId>
-        <artifactId>apache-rat-plugin</artifactId>
-        <version>@pom.version@</version>
-        <configuration>
-          <includes>
-            <include>pom.xml</include>
-          </includes>
-        </configuration>
-      </plugin>
-    </plugins>
-  </build>
-</project>
diff --git a/0.12-release/apache-rat-plugin/src/it/it4_RAT-168/verify.groovy b/0.12-release/apache-rat-plugin/src/it/it4_RAT-168/verify.groovy
deleted file mode 100644
index 3786118..0000000
--- a/0.12-release/apache-rat-plugin/src/it/it4_RAT-168/verify.groovy
+++ /dev/null
@@ -1,28 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements.  See the NOTICE file distributed with
- * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You under the Apache License, Version 2.0
- * (the "License"); you may not use this file except in compliance with
- * the License.  You may obtain a copy of the License at
- *
- *     http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-content = new File( basedir, 'build.log' ).text;
-
-assert content.contains( 'BUILD SUCCESS' );
-
-/*
- * [WARNING] No resources included
- */
-assert ! content.contains( '[WARNING]' );
-
-report = new File( basedir, 'target/site/rat-report.html' ).text;
-
-assert report.contains( 'AL    pom.xml' );
diff --git a/0.12-release/apache-rat-plugin/src/it/settings.xml b/0.12-release/apache-rat-plugin/src/it/settings.xml
deleted file mode 100644
index c8f77f0..0000000
--- a/0.12-release/apache-rat-plugin/src/it/settings.xml
+++ /dev/null
@@ -1,55 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-
-<!--
-Licensed to the Apache Software Foundation (ASF) under one
-or more contributor license agreements.  See the NOTICE file
-distributed with this work for additional information
-regarding copyright ownership.  The ASF licenses this file
-to you under the Apache License, Version 2.0 (the
-"License"); you may not use this file except in compliance
-with the License.  You may obtain a copy of the License at
-
-  http://www.apache.org/licenses/LICENSE-2.0
-
-Unless required by applicable law or agreed to in writing,
-software distributed under the License is distributed on an
-"AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
-KIND, either express or implied.  See the License for the
-specific language governing permissions and limitations
-under the License.
--->
-
-<settings>
-  <profiles>
-    <profile>
-      <id>it-repo</id>
-      <activation>
-        <activeByDefault>true</activeByDefault>
-      </activation>
-      <repositories>
-        <repository>
-          <id>local.central</id>
-          <url>@localRepositoryUrl@</url>
-          <releases>
-            <enabled>true</enabled>
-          </releases>
-          <snapshots>
-            <enabled>true</enabled>
-          </snapshots>
-        </repository>
-      </repositories>
-      <pluginRepositories>
-        <pluginRepository>
-          <id>local.central</id>
-          <url>@localRepositoryUrl@</url>
-          <releases>
-            <enabled>true</enabled>
-          </releases>
-          <snapshots>
-            <enabled>true</enabled>
-          </snapshots>
-        </pluginRepository>
-      </pluginRepositories>
-    </profile>
-  </profiles>
-</settings>
diff --git a/0.12-release/apache-rat-plugin/src/main/filtered-resources/org/apache/rat/mp/rat-report.properties b/0.12-release/apache-rat-plugin/src/main/filtered-resources/org/apache/rat/mp/rat-report.properties
deleted file mode 100644
index 48a3828..0000000
--- a/0.12-release/apache-rat-plugin/src/main/filtered-resources/org/apache/rat/mp/rat-report.properties
+++ /dev/null
@@ -1,23 +0,0 @@
-#
-# Licensed to the Apache Software Foundation (ASF) under one or more
-# contributor license agreements.  See the NOTICE file distributed with
-# this work for additional information regarding copyright ownership.
-# The ASF licenses this file to You under the Apache License, Version 2.0
-# (the "License"); you may not use this file except in compliance with
-# the License.  You may obtain a copy of the License at
-#
-#      http://www.apache.org/licenses/LICENSE-2.0
-#
-# Unless required by applicable law or agreed to in writing, software
-# distributed under the License is distributed on an "AS IS" BASIS,
-# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-# See the License for the specific language governing permissions and
-# limitations under the License.
-#
-
-report.rat.name=Rat Report
-report.rat.description=Report on compliance to license related source code policies
-report.rat.title=Rat (Release Audit Tool) results
-report.rat.link=The following document contains the results of
-report.rat.fullName=Rat (Release Audit Tool)
-report.rat.url=${project.url}
diff --git a/0.12-release/apache-rat-plugin/src/main/java/org/apache/rat/mp/AbstractRatMojo.java b/0.12-release/apache-rat-plugin/src/main/java/org/apache/rat/mp/AbstractRatMojo.java
deleted file mode 100644
index 1a8eef2..0000000
--- a/0.12-release/apache-rat-plugin/src/main/java/org/apache/rat/mp/AbstractRatMojo.java
+++ /dev/null
@@ -1,551 +0,0 @@
-/*
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- *
- *   http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-package org.apache.rat.mp;
-
-import static org.apache.rat.mp.util.ConfigurationHelper.newInstance;
-import static org.apache.rat.mp.util.ExclusionHelper.addEclipseDefaults;
-import static org.apache.rat.mp.util.ExclusionHelper.addIdeaDefaults;
-import static org.apache.rat.mp.util.ExclusionHelper.addMavenDefaults;
-import static org.apache.rat.mp.util.ExclusionHelper.addPlexusAndScmDefaults;
-
-import java.io.BufferedInputStream;
-import java.io.BufferedReader;
-import java.io.File;
-import java.io.FileInputStream;
-import java.io.IOException;
-import java.io.InputStream;
-import java.io.InputStreamReader;
-import java.io.PrintWriter;
-import java.io.Reader;
-import java.io.StringWriter;
-import java.io.Writer;
-import java.lang.reflect.UndeclaredThrowableException;
-import java.util.ArrayList;
-import java.util.Arrays;
-import java.util.Collections;
-import java.util.HashSet;
-import java.util.List;
-import java.util.Set;
-
-import javax.xml.transform.TransformerConfigurationException;
-
-
-import org.apache.commons.io.IOUtils;
-import org.apache.maven.plugin.AbstractMojo;
-import org.apache.maven.plugin.MojoExecutionException;
-import org.apache.maven.plugin.MojoFailureException;
-import org.apache.maven.plugins.annotations.Parameter;
-import org.apache.maven.project.MavenProject;
-import org.apache.rat.Defaults;
-import org.apache.rat.Report;
-import org.apache.rat.ReportConfiguration;
-import org.apache.rat.analysis.IHeaderMatcher;
-import org.apache.rat.analysis.util.HeaderMatcherMultiplexer;
-import org.apache.rat.api.RatException;
-import org.apache.rat.config.SourceCodeManagementSystems;
-import org.apache.rat.license.ILicenseFamily;
-import org.apache.rat.mp.util.ScmIgnoreParser;
-import org.apache.rat.report.IReportable;
-import org.apache.rat.report.claim.ClaimStatistic;
-import org.codehaus.plexus.util.DirectoryScanner;
-
-/**
- * Abstract base class for Mojos, which are running Rat.
- */
-public abstract class AbstractRatMojo extends AbstractMojo {
-
-    /**
-     * The base directory, in which to search for files.
-     */
-    @Parameter(property = "rat.basedir", defaultValue = "${basedir}", required = true)
-    private File basedir;
-
-    /**
-     * Specifies the licenses to accept. Deprecated, use {@link #licenses}
-     * instead.
-     *
-     * @deprecated Use {@link #licenses} instead.
-     */
-    @Deprecated
-    @Parameter
-    private HeaderMatcherSpecification[] licenseMatchers;
-
-    /**
-     * Specifies the licenses to accept. By default, these are added to the
-     * default licenses, unless you set {@link #addDefaultLicenseMatchers} to
-     * false.
-     *
-     * @since 0.8
-     */
-    @Parameter
-    private IHeaderMatcher[] licenses;
-
-    /**
-     * The set of approved license family names.
-     *
-     * @deprecated Use {@link #licenseFamilies} instead.
-     */
-    @Deprecated
-    private LicenseFamilySpecification[] licenseFamilyNames;
-
-    /**
-     * Specifies the license families to accept.
-     *
-     * @since 0.8
-     */
-    @Parameter
-    private ILicenseFamily[] licenseFamilies;
-
-    /**
-     * Whether to add the default list of license matchers.
-     */
-    @Parameter(property = "rat.addDefaultLicenseMatchers", defaultValue = "true")
-    private boolean addDefaultLicenseMatchers;
-
-    /**
-     * Specifies files, which are included in the report. By default, all files
-     * are included.
-     */
-    @Parameter
-    private String[] includes;
-
-    /**
-     * Specifies a file, from which to read includes. Basically, an alternative to
-     * specifying the includes as a list.
-     */
-    @Parameter(property="rat.includesFile")
-    private String includesFile;
-
-    /**
-     * Specifies the include files character set. Defaults to @code{${project.build.sourceEncoding}),
-     * or @code{UTF8}.
-     */
-    @Parameter(property="rat.includesFileCharset", defaultValue="${project.build.sourceEncoding}")
-    private String includesFileCharset;
-    
-    /**
-     * Specifies files, which are excluded in the report. By default, no files
-     * are excluded.
-     */
-    @Parameter
-    private String[] excludes;
-
-    /**
-     * Specifies a file, from which to read excludes. Basically, an alternative to
-     * specifying the excludes as a list.  The excludesFile is assumed to be using the
-     * UFT8 character set.
-     */
-    @Parameter(property="rat.excludesFile")
-    private String excludesFile;
-
-    /**
-     * Specifies the include files character set. Defaults to @code{${project.build.sourceEncoding}),
-     * or @code{UTF8}.
-     */
-    @Parameter(property="rat.excludesFileCharset", defaultValue="${project.build.sourceEncoding}")
-    private String excludesFileCharset;
-
-    /**
-     * Whether to use the default excludes when scanning for files. The default
-     * excludes are:
-     * <ul>
-     * <li>meta data files for source code management / revision control systems,
-     * see {@link SourceCodeManagementSystems}</li>
-     * <li>temporary files used by Maven, see <a
-     * href="#useMavenDefaultExcludes">useMavenDefaultExcludes</a></li>
-     * <li>configuration files for Eclipse, see <a
-     * href="#useEclipseDefaultExcludes">useEclipseDefaultExcludes</a></li>
-     * <li>configuration files for IDEA, see <a
-     * href="#useIdeaDefaultExcludes">useIdeaDefaultExcludes</a></li>
-     * </ul>
-     */
-    @Parameter(property = "rat.useDefaultExcludes", defaultValue = "true")
-    private boolean useDefaultExcludes;
-
-    /**
-     * Whether to use the Maven specific default excludes when scanning for
-     * files. Maven specific default excludes are given by the constant
-     * MAVEN_DEFAULT_EXCLUDES: The <code>target</code> directory, the
-     * <code>cobertura.ser</code> file, and so on.
-     */
-    @Parameter(property = "rat.useMavenDefaultExcludes", defaultValue = "true")
-    private boolean useMavenDefaultExcludes;
-
-    /**
-     * Whether to parse source code management system (SCM) ignore files and use their contents as excludes.
-     * At the moment this works for the following SCMs:
-     *
-     * @see org.apache.rat.config.SourceCodeManagementSystems
-     */
-    @Parameter(property = "rat.parseSCMIgnoresAsExcludes", defaultValue = "true")
-    private boolean parseSCMIgnoresAsExcludes;
-
-    /**
-     * Whether to use the Eclipse specific default excludes when scanning for
-     * files. Eclipse specific default excludes are given by the constant
-     * ECLIPSE_DEFAULT_EXCLUDES: The <code>.classpath</code> and
-     * <code>.project</code> files, the <code>.settings</code> directory, and so
-     * on.
-     */
-    @Parameter(property = "rat.useEclipseDefaultExcludes", defaultValue = "true")
-    private boolean useEclipseDefaultExcludes;
-
-    /**
-     * Whether to use the IDEA specific default excludes when scanning for
-     * files. IDEA specific default excludes are given by the constant
-     * IDEA_DEFAULT_EXCLUDES: The <code>*.iml</code>, <code>*.ipr</code> and
-     * <code>*.iws</code> files and the <code>.idea</code> directory.
-     */
-    @Parameter(property = "rat.useIdeaDefaultExcludes", defaultValue = "true")
-    private boolean useIdeaDefaultExcludes;
-
-    /**
-     * Whether to exclude subprojects. This is recommended, if you want a
-     * separate apache-rat-plugin report for each subproject.
-     */
-    @Parameter(property = "rat.excludeSubprojects", defaultValue = "true")
-    private boolean excludeSubProjects;
-
-    /**
-     * Will skip the plugin execution, e.g. for technical builds that do not take license compliance into account.
-     *
-     * @since 0.11
-     */
-    @Parameter(property = "rat.skip", defaultValue = "false")
-    protected boolean skip;
-
-    /**
-     * Holds the maven-internal project to allow resolution of artifact properties during mojo runs.
-     */
-    @Parameter(defaultValue = "${project}", required = true, readonly = true)
-    private MavenProject project;
-
-    /**
-     * @return Returns the Maven project.
-     */
-    protected MavenProject getProject() {
-        return project;
-    }
-
-    /**
-     * Returns the set of {@link IHeaderMatcher header matchers} to use.
-     *
-     * @return list of license matchers to use
-     * @throws MojoFailureException   An error in the plugin configuration was detected.
-     * @throws MojoExecutionException An error occurred while calculating the result.
-     */
-    private List<IHeaderMatcher> mergeLicenseMatchers()
-            throws MojoFailureException, MojoExecutionException {
-        List<IHeaderMatcher> matchers = new ArrayList<IHeaderMatcher>();
-
-        if (licenses != null) {
-            matchers.addAll(Arrays.asList(licenses));
-            getLog().info("Added " + licenses.length + " additional default licenses.");
-        }
-
-        if (licenseMatchers != null) {
-            for (final HeaderMatcherSpecification spec : licenseMatchers) {
-                matchers.add(newInstance(IHeaderMatcher.class, spec.getClassName()));
-            }
-        }
-
-        if (addDefaultLicenseMatchers) {
-            getLog().info("Enabled default license matchers.");
-            matchers.addAll(Defaults.DEFAULT_MATCHERS);
-        }
-        logLicenseMatchers(matchers);
-
-        return matchers;
-    }
-
-    private void logLicenseMatchers(List<IHeaderMatcher> matchers) {
-        if (getLog().isDebugEnabled()) {
-            getLog().debug("The following license matchers are activated:");
-            for (IHeaderMatcher matcher : matchers) {
-                getLog().debug("* " + matcher.toString());
-            }
-        }
-
-    }
-
-    /**
-     * Creates an iterator over the files to check.
-     *
-     * @return A container of files, which are being checked.
-     * @throws MojoExecutionException in case of errors. I/O errors result in UndeclaredThrowableExceptions.
-     */
-    protected IReportable getResources() throws MojoExecutionException {
-        final DirectoryScanner ds = new DirectoryScanner();
-        ds.setBasedir(basedir);
-        setExcludes(ds);
-        setIncludes(ds);
-        ds.scan();
-        whenDebuggingLogExcludedFiles(ds);
-        final String[] files = ds.getIncludedFiles();
-        logAboutIncludedFiles(files);
-        try {
-            return new FilesReportable(basedir, files);
-        } catch (final IOException e) {
-            throw new UndeclaredThrowableException(e);
-        }
-    }
-
-    private void logAboutIncludedFiles(final String[] files) {
-        if (files.length == 0) {
-            getLog().warn("No resources included.");
-        } else {
-            getLog().info(
-                    files.length
-                            + " resources included (use -debug for more details)");
-            if (getLog().isDebugEnabled()) {
-                for (final String resource : files) {
-                    getLog().debug(" - included " + resource);
-                }
-            }
-        }
-    }
-
-    private void whenDebuggingLogExcludedFiles(final DirectoryScanner ds) {
-        if (getLog().isDebugEnabled()) {
-            final String[] excludedFiles = ds.getExcludedFiles();
-            if (excludedFiles.length == 0) {
-                getLog().debug("No excluded resources.");
-            } else {
-                getLog().debug(
-                        "Excluded " + excludedFiles.length + " resources:");
-                for (final String resource : excludedFiles) {
-                    getLog().debug(" - excluded " + resource);
-                }
-            }
-        }
-    }
-
-    private void setIncludes(DirectoryScanner ds) throws MojoExecutionException {
-        if ((includes != null  &&  includes.length > 0)  ||  includesFile != null) {
-        	final List<String> includeList = new ArrayList<String>();
-        	if (includes != null) {
-        		includeList.addAll(Arrays.asList(includes));
-        	}
-        	if (includesFile != null) {
-        		final String charset = includesFileCharset == null ? "UTF8" : includesFileCharset;
-        		final File f = new File(includesFile);
-        		if (!f.isFile()) {
-        			getLog().error("IncludesFile not found: " + f.getAbsolutePath());
-        		} else {
-        			getLog().info("Includes loaded from file " + includesFile + ", using character set " + charset);
-        		}
-        		includeList.addAll(getPatternsFromFile(f, charset));
-        	}
-            ds.setIncludes(includeList.toArray(new String[includeList.size()]));
-        }
-    }
-
-    private List<String> getPatternsFromFile(File pFile, String pCharset) throws MojoExecutionException {
-    	InputStream is = null;
-    	BufferedInputStream bis = null;
-    	Reader r = null;
-    	BufferedReader br = null;
-    	Throwable th = null;
-    	final List<String> patterns = new ArrayList<String>();
-    	try {
-    		is = new FileInputStream(pFile);
-    		bis = new BufferedInputStream(is);
-    		r = new InputStreamReader(bis, pCharset);
-    		br = new BufferedReader(r);
-    		for (;;) {
-    			final String s = br.readLine();
-    			if (s == null) {
-    				break;
-    			}
-    			patterns.add(s);
-    		}
-    		br.close();
-    		br = null;
-    		r.close();
-    		r = null;
-    		bis.close();
-    		bis = null;
-    		is.close();
-    		is = null;
-    	} catch (Throwable t) {
-    		th = t;
-    	} finally {
-    		if (br != null) { try { br.close(); } catch (Throwable t) { if (th == null) { th = t; } } }
-    		if (r != null) { try { r.close(); } catch (Throwable t) { if (th == null) { th = t; } } }
-    		if (bis != null) { try { bis.close(); } catch (Throwable t) { if (th == null) { th = t; } } }
-    		if (is != null) { try { is.close(); } catch (Throwable t) { if (th == null) { th = t; } } }
-    	}
-    	if (th != null) {
-    		if (th instanceof RuntimeException) { throw (RuntimeException) th; }
-    		if (th instanceof Error) { throw (Error) th; }
-    		throw new MojoExecutionException(th.getMessage(), th);
-    	}
-    	return patterns;
-    }
-    
-    private void setExcludes(DirectoryScanner ds) throws MojoExecutionException {
-        final List<String> excludeList = mergeDefaultExclusions();
-        if (excludes == null || excludes.length == 0) {
-            getLog().info("No excludes explicitly specified.");
-        } else {
-        	for (final String exclude : excludes) {
-                getLog().info("Exclude: " + exclude);
-            }
-        }
-        if (excludes != null) {
-            Collections.addAll(excludeList, excludes);
-        }
-        if (!excludeList.isEmpty()) {
-            final String[] allExcludes = excludeList.toArray(new String[excludeList
-                    .size()]);
-            ds.setExcludes(allExcludes);
-        }
-    }
-
-    private List<String> mergeDefaultExclusions() throws MojoExecutionException {
-        final Set<String> results = new HashSet<String>();
-
-        addPlexusAndScmDefaults(getLog(), useDefaultExcludes, results);
-        addMavenDefaults(getLog(), useMavenDefaultExcludes, results);
-        addEclipseDefaults(getLog(), useEclipseDefaultExcludes, results);
-        addIdeaDefaults(getLog(), useIdeaDefaultExcludes, results);
-
-        if (parseSCMIgnoresAsExcludes) {
-            getLog().info("Will parse SCM ignores for exclusions...");
-            results.addAll(ScmIgnoreParser.getExclusionsFromSCM(getLog(), project.getBasedir()));
-            getLog().info("Finished adding exclusions from SCM ignore files.");
-        }
-
-        if (excludeSubProjects && project != null
-                && project.getModules() != null) {
-            for (final Object o : project.getModules()) {
-                final String moduleSubPath = (String) o;
-                results.add(moduleSubPath + "/**/*");
-            }
-        }
-
-        getLog().debug("Finished creating list of implicit excludes.");
-        if (results.isEmpty()) {
-            getLog().info("No excludes implicitly specified.");
-        } else {
-            getLog().info(
-                    results.size()
-                            + " implicit excludes (use -debug for more details).");
-            for (final String exclude : results) {
-                getLog().debug("Implicit exclude: " + exclude);
-            }
-        }
-        if (excludesFile != null) {
-        	final File f = new File(excludesFile);
-        	if (!f.isFile()) {
-        		getLog().error("Excludes file not found: " + f.getAbsolutePath());
-        	}
-        	if (!f.canRead()) {
-        		getLog().error("Excludes file not readable: " + f.getAbsolutePath());
-        	}
-        	final String charset = excludesFileCharset == null ? "UTF8" : excludesFileCharset;
-        	getLog().info("Loading excludes from file " + f + ", using character set " + charset);
-        	results.addAll(getPatternsFromFile(f, charset));
-        }
-
-        return new ArrayList<String>(results);
-    }
-
-    /**
-     * Creates the report as a string.
-     *
-     * @param styleSheet The style sheet to use when formatting the report
-     * @return Report contents
-     * @throws MojoFailureException   An error in the plugin configuration was detected.
-     * @throws MojoExecutionException An error occurred while creating the report.
-     */
-    protected String createReport(InputStream styleSheet)
-            throws MojoExecutionException, MojoFailureException {
-        StringWriter sw = new StringWriter();
-        PrintWriter pw = null;
-        try {
-            pw = new PrintWriter(sw);
-            createReport(new PrintWriter(sw), styleSheet);
-            final String result = sw.toString();
-            pw.close();
-            pw = null;
-            sw.close();
-            sw = null;
-            return result;
-        } catch (IOException e) {
-            throw new MojoExecutionException(e.getMessage(), e);
-        } finally {
-            IOUtils.closeQuietly(pw);
-            IOUtils.closeQuietly(sw);
-        }
-    }
-
-    /**
-     * Writes the report to the given stream.
-     *
-     * @param out   The target writer, to which the report is being written.
-     * @param style The stylesheet to use, or <code>null</code> for raw XML
-     * @return the current statistic.
-     * @throws MojoFailureException   An error in the plugin configuration was detected.
-     * @throws MojoExecutionException Another error occurred while creating the report.
-     */
-    protected ClaimStatistic createReport(Writer out, InputStream style)
-            throws MojoExecutionException, MojoFailureException {
-        final ReportConfiguration configuration = getConfiguration();
-        try {
-            if (style != null) {
-                return Report.report(out, getResources(), style, configuration);
-            } else {
-                return Report.report(getResources(), out, configuration);
-            }
-        } catch (final TransformerConfigurationException e) {
-            throw new MojoExecutionException(e.getMessage(), e);
-        } catch (final IOException e) {
-            throw new MojoExecutionException(e.getMessage(), e);
-        } catch (final InterruptedException e) {
-            throw new MojoExecutionException(e.getMessage(), e);
-        } catch (final RatException e) {
-            throw new MojoExecutionException(e.getMessage(), e);
-        }
-    }
-
-    protected ReportConfiguration getConfiguration()
-            throws MojoFailureException, MojoExecutionException {
-        final ReportConfiguration configuration = new ReportConfiguration();
-        configuration.setHeaderMatcher(new HeaderMatcherMultiplexer(
-                mergeLicenseMatchers()));
-        configuration.setApprovedLicenseNames(mergeApprovedLicenseNames());
-        configuration.setApproveDefaultLicenses(addDefaultLicenseMatchers);
-        return configuration;
-    }
-
-    private List<ILicenseFamily> mergeApprovedLicenseNames()
-            throws MojoExecutionException, MojoFailureException {
-        final List<ILicenseFamily> list = new ArrayList<ILicenseFamily>();
-        if (licenseFamilies != null) {
-            getLog().info("Added " + licenseFamilies.length + " custom approved licenses.");
-            list.addAll(Arrays.asList(licenseFamilies));
-        }
-        if (licenseFamilyNames != null) {
-            for (final LicenseFamilySpecification spec : licenseFamilyNames) {
-                list.add(newInstance(ILicenseFamily.class, spec.getClassName()));
-            }
-        }
-        return list;
-    }
-}
diff --git a/0.12-release/apache-rat-plugin/src/main/java/org/apache/rat/mp/FilesReportable.java b/0.12-release/apache-rat-plugin/src/main/java/org/apache/rat/mp/FilesReportable.java
deleted file mode 100644
index ae339ed..0000000
--- a/0.12-release/apache-rat-plugin/src/main/java/org/apache/rat/mp/FilesReportable.java
+++ /dev/null
@@ -1,110 +0,0 @@
-package org.apache.rat.mp;
-
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- *
- *   http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-
-import org.apache.rat.api.Document;
-import org.apache.rat.api.MetaData;
-import org.apache.rat.api.RatException;
-import org.apache.rat.document.impl.DocumentImplUtils;
-import org.apache.rat.report.IReportable;
-import org.apache.rat.report.RatReport;
-
-import java.io.File;
-import java.io.FileInputStream;
-import java.io.IOException;
-import java.io.InputStream;
-import java.io.InputStreamReader;
-import java.io.Reader;
-
-
-/**
- * Implementation of IReportable that traverses over a set of files.
- */
-class FilesReportable implements IReportable
-{
-    private final File basedir;
-
-    private final String[] files;
-
-    FilesReportable( File basedir, String[] files )
-            throws IOException
-    {
-        final File currentDir = new File( System.getProperty( "user.dir" ) ).getCanonicalFile();
-        final File f = basedir.getCanonicalFile();
-        if ( currentDir.equals( f ) )
-        {
-            this.basedir = null;
-        }
-        else
-        {
-            this.basedir = basedir;
-        }
-        this.files = files;
-    }
-
-    public void run( RatReport report ) throws RatException
-    {
-        FileDocument document = new FileDocument();
-        for (String file : files) {
-            document.setFile(new File(basedir, file));
-            document.getMetaData().clear();
-            report.report(document);
-        }
-    }
-
-    private class FileDocument implements Document
-    {
-        private File file;
-        private final MetaData metaData = new MetaData();
-        
-        void setFile( File file )
-        {
-            this.file = file;
-        }
-
-        public boolean isComposite() {
-            return DocumentImplUtils.isZip(file);
-        }
-
-        public Reader reader() throws IOException
-        {
-            final InputStream in = new FileInputStream( file );
-            return new InputStreamReader( in );
-        }
-
-        public String getName()
-        {
-            return DocumentImplUtils.toName( file );
-        }
-
-        public MetaData getMetaData() {
-            return metaData;
-        }
-        
-        public InputStream inputStream() throws IOException {
-            return new FileInputStream(file);
-        }
-        
-        @Override
-        public String toString() {
-            return "File:" + file.getAbsolutePath();
-        }
-    }
-}
diff --git a/0.12-release/apache-rat-plugin/src/main/java/org/apache/rat/mp/HeaderMatcherSpecification.java b/0.12-release/apache-rat-plugin/src/main/java/org/apache/rat/mp/HeaderMatcherSpecification.java
deleted file mode 100644
index 0c0c306..0000000
--- a/0.12-release/apache-rat-plugin/src/main/java/org/apache/rat/mp/HeaderMatcherSpecification.java
+++ /dev/null
@@ -1,53 +0,0 @@
-package org.apache.rat.mp;
-
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- *
- *   http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-
-/**
- * Used to specify additional license matchers. A license matcher is basically a class, which implements
- * {@link org.apache.rat.analysis.IHeaderMatcher}.
- */
-public class HeaderMatcherSpecification
-{
-    /**
-     * The license matchers class name.
-     */
-    private String className;
-
-    /**
-     * Returns the license matchers class name.
-     * 
-     * @return Class name of the license matcher.
-     */
-    public String getClassName()
-    {
-        return className;
-    }
-
-    /**
-     * Sets the license matchers class name. Required.
-     * 
-     * @param pClassName
-     *            Class name of the license matcher.
-     */
-    public void setClassName( String pClassName )
-    {
-        className = pClassName;
-    }
-}
diff --git a/0.12-release/apache-rat-plugin/src/main/java/org/apache/rat/mp/LicenseFamilySpecification.java b/0.12-release/apache-rat-plugin/src/main/java/org/apache/rat/mp/LicenseFamilySpecification.java
deleted file mode 100644
index 5bd4941..0000000
--- a/0.12-release/apache-rat-plugin/src/main/java/org/apache/rat/mp/LicenseFamilySpecification.java
+++ /dev/null
@@ -1,53 +0,0 @@
-package org.apache.rat.mp;
-
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- *
- *   http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-
-/**
- * Used to specify additional license families. A license family is basically a class, which implements
- * {@link org.apache.rat.license.ILicenseFamily}.
- */
-public class LicenseFamilySpecification
-{
-    /**
-     * The license family's class name.
-     */
-    private String className;
-
-    /**
-     * Returns the license familys class name.
-     * 
-     * @return Class name of the license family.
-     */
-    public String getClassName()
-    {
-        return className;
-    }
-
-    /**
-     * Sets the license family's class name. Required.
-     * 
-     * @param pClassName
-     *            Class name of the license family.
-     */
-    public void setClassName( String pClassName )
-    {
-        className = pClassName;
-    }
-}
diff --git a/0.12-release/apache-rat-plugin/src/main/java/org/apache/rat/mp/RatCheckException.java b/0.12-release/apache-rat-plugin/src/main/java/org/apache/rat/mp/RatCheckException.java
deleted file mode 100644
index 0016953..0000000
--- a/0.12-release/apache-rat-plugin/src/main/java/org/apache/rat/mp/RatCheckException.java
+++ /dev/null
@@ -1,32 +0,0 @@
-package org.apache.rat.mp;
-
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- *
- *   http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-
-import org.apache.maven.plugin.MojoFailureException;
-
-public class RatCheckException extends MojoFailureException
-{
-    private static final long serialVersionUID = -1720861476741779140L;
-
-    public RatCheckException( String message )
-    {
-        super( message );
-    }
-}
diff --git a/0.12-release/apache-rat-plugin/src/main/java/org/apache/rat/mp/RatCheckMojo.java b/0.12-release/apache-rat-plugin/src/main/java/org/apache/rat/mp/RatCheckMojo.java
deleted file mode 100644
index fef94fa..0000000
--- a/0.12-release/apache-rat-plugin/src/main/java/org/apache/rat/mp/RatCheckMojo.java
+++ /dev/null
@@ -1,210 +0,0 @@
-package org.apache.rat.mp;
-
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- *
- *   http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-
-import org.apache.commons.io.IOUtils;
-import org.apache.maven.plugin.MojoExecutionException;
-import org.apache.maven.plugin.MojoFailureException;
-import org.apache.maven.plugins.annotations.LifecyclePhase;
-import org.apache.maven.plugins.annotations.Mojo;
-import org.apache.maven.plugins.annotations.Parameter;
-import org.apache.rat.Defaults;
-import org.apache.rat.ReportConfiguration;
-import org.apache.rat.config.AddLicenseHeaders;
-import org.apache.rat.config.ReportFormat;
-import org.apache.rat.report.claim.ClaimStatistic;
-
-import java.io.File;
-import java.io.FileInputStream;
-import java.io.FileNotFoundException;
-import java.io.FileWriter;
-import java.io.IOException;
-import java.io.InputStream;
-
-/**
- * Run Rat to perform a violation check.
- */
-@Mojo(name = "check", defaultPhase = LifecyclePhase.VALIDATE)
-public class RatCheckMojo extends AbstractRatMojo {
-    /**
-     * Where to store the report.
-     */
-    @Parameter(property = "rat.outputFile", defaultValue = "${project.build.directory}/rat.txt")
-    private File reportFile;
-
-    /**
-     * Output style of the report. Use "plain" (the default) for a plain text
-     * report or "xml" for the raw XML report. Alternatively you can give the
-     * path of an XSL transformation that will be applied on the raw XML to
-     * produce the report written to the output file.
-     */
-    @Parameter(property = "rat.outputStyle", defaultValue = "plain")
-    private String reportStyle;
-
-    /**
-     * Maximum number of files with unapproved licenses.
-     */
-    @Parameter(property = "rat.numUnapprovedLicenses", defaultValue = "0")
-    private int numUnapprovedLicenses;
-
-    /**
-     * Whether to add license headers; possible values are
-     * {@code forced}, {@code true}, and {@code false} (default).
-     */
-    @Parameter(property = "rat.addLicenseHeaders", defaultValue = "false")
-    private String addLicenseHeaders;
-
-    /**
-     * Copyright message to add to license headers. This option is
-     * ignored, unless {@code addLicenseHeaders} is set to {@code true},
-     * or {@code forced}.
-     */
-    @Parameter(property = "rat.copyrightMessage")
-    private String copyrightMessage;
-
-    /**
-     * Will ignore rat errors and display a log message if any.
-     * Its use is NOT RECOMMENDED, but quite convenient on occasion.
-     *
-     * @since 0.9
-     */
-    @Parameter(property = "rat.ignoreErrors", defaultValue = "false")
-    private boolean ignoreErrors;
-
-    /**
-     * Whether to output the names of files that have unapproved licenses to the
-     * console.
-     *
-     * @since 0.12
-     */
-    @Parameter(property = "rat.consoleOutput", defaultValue = "false")
-    private boolean consoleOutput;
-
-    private ClaimStatistic getRawReport()
-            throws MojoExecutionException, MojoFailureException {
-        FileWriter fw = null;
-        try {
-            fw = new FileWriter(reportFile);
-            final ClaimStatistic statistic = createReport(fw, getStyleSheet());
-            fw.close();
-            fw = null;
-            return statistic;
-        } catch (IOException e) {
-            throw new MojoExecutionException(e.getMessage(), e);
-        } finally {
-            IOUtils.closeQuietly(fw);
-        }
-    }
-
-    /**
-     * Returns the XSL stylesheet to be used for formatting the report.
-     *
-     * @return report stylesheet, or <code>null</code> for raw XML
-     * @throws MojoExecutionException if the stylesheet can not be found
-     * @see #reportStyle
-     */
-    private InputStream getStyleSheet() throws MojoExecutionException {
-        if (reportStyle == null || ReportFormat.PLAIN.is(reportStyle)) {
-            return Defaults.getPlainStyleSheet();
-        } else if (ReportFormat.XML.is(reportStyle)) {
-            return null;
-        } else {
-            try {
-                return new FileInputStream(reportStyle);
-            } catch (FileNotFoundException e) {
-                throw new MojoExecutionException(
-                        "Unable to find report stylesheet: " + reportStyle, e);
-            }
-        }
-    }
-
-    /**
-     * Invoked by Maven to execute the Mojo.
-     *
-     * @throws MojoFailureException   An error in the plugin configuration was detected.
-     * @throws MojoExecutionException Another error occurred while executing the plugin.
-     */
-    public void execute() throws MojoExecutionException, MojoFailureException {
-        if (skip) {
-            getLog().info("RAT will not execute since it is configured to be skipped via system property 'rat.skip'.");
-            return;
-        }
-
-        final File parent = reportFile.getParentFile();
-        if (!parent.mkdirs() && !parent.isDirectory()) {
-            throw new MojoExecutionException("Could not create report parent directory " + parent);
-        }
-
-        final ClaimStatistic report = getRawReport();
-        check(report);
-    }
-
-    protected void check(ClaimStatistic statistics)
-            throws MojoFailureException {
-        if (numUnapprovedLicenses > 0) {
-            getLog().info("You requested to accept " + numUnapprovedLicenses + " files with unapproved licenses.");
-        }
-
-        int numApproved = statistics.getNumApproved();
-        getLog().info("Rat check: Summary over all files. Unapproved: " + statistics.getNumUnApproved() + //
-                ", unknown: " + statistics.getNumUnknown() + //
-                ", generated: " + statistics.getNumGenerated() + //
-                ", approved: " + numApproved + //
-                (numApproved > 0 ? " licenses." : " license."));
-
-        if (numUnapprovedLicenses < statistics.getNumUnApproved()) {
-            if (consoleOutput) {
-                try {
-                    getLog().warn(createReport(Defaults.getUnapprovedLicensesStyleSheet()).trim());
-                } catch (MojoExecutionException e) {
-                    getLog().warn("Unable to print the files with unapproved licenses to the console.");
-                }
-            }
-
-            final String seeReport = " See RAT report in: " + reportFile;
-            if (!ignoreErrors) {
-                throw new RatCheckException("Too many files with unapproved license: " + statistics.getNumUnApproved() + seeReport);
-            } else {
-                getLog().warn("Rat check: " + statistics.getNumUnApproved() + " files with unapproved licenses." + seeReport);
-            }
-        }
-    }
-
-    @Override
-    protected ReportConfiguration getConfiguration()
-            throws MojoFailureException, MojoExecutionException {
-        final ReportConfiguration configuration = super.getConfiguration();
-
-        if (AddLicenseHeaders.FORCED.name().equalsIgnoreCase(addLicenseHeaders)) {
-            configuration.setAddingLicenses(true);
-            configuration.setAddingLicensesForced(true);
-            configuration.setCopyrightMessage(copyrightMessage);
-        } else if (AddLicenseHeaders.TRUE.name().equalsIgnoreCase(addLicenseHeaders)) {
-            configuration.setAddingLicenses(true);
-            configuration.setCopyrightMessage(copyrightMessage);
-        } else if (AddLicenseHeaders.FALSE.name().equalsIgnoreCase(addLicenseHeaders)) {
-            // Nothing to do
-        } else {
-            throw new MojoFailureException("Invalid value for addLicenseHeaders: Expected " + AddLicenseHeaders.getValuesForHelp() + ", got "
-                    + addLicenseHeaders);
-        }
-        return configuration;
-    }
-}
diff --git a/0.12-release/apache-rat-plugin/src/main/java/org/apache/rat/mp/RatReportMojo.java b/0.12-release/apache-rat-plugin/src/main/java/org/apache/rat/mp/RatReportMojo.java
deleted file mode 100644
index 8d1eae6..0000000
--- a/0.12-release/apache-rat-plugin/src/main/java/org/apache/rat/mp/RatReportMojo.java
+++ /dev/null
@@ -1,313 +0,0 @@
-package org.apache.rat.mp;
-
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- *
- *   http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-
-import org.apache.maven.artifact.Artifact;
-import org.apache.maven.artifact.factory.ArtifactFactory;
-import org.apache.maven.artifact.repository.ArtifactRepository;
-import org.apache.maven.artifact.resolver.ArtifactNotFoundException;
-import org.apache.maven.artifact.resolver.ArtifactResolutionException;
-import org.apache.maven.artifact.resolver.ArtifactResolver;
-import org.apache.maven.artifact.versioning.InvalidVersionSpecificationException;
-import org.apache.maven.artifact.versioning.VersionRange;
-import org.apache.maven.doxia.site.decoration.Body;
-import org.apache.maven.doxia.site.decoration.DecorationModel;
-import org.apache.maven.doxia.site.decoration.Skin;
-import org.apache.maven.doxia.siterenderer.Renderer;
-import org.apache.maven.doxia.siterenderer.RendererException;
-import org.apache.maven.doxia.siterenderer.RenderingContext;
-import org.apache.maven.doxia.siterenderer.SiteRenderingContext;
-import org.apache.maven.doxia.siterenderer.sink.SiteRendererSink;
-import org.apache.maven.plugin.MojoExecutionException;
-import org.apache.maven.plugin.MojoFailureException;
-import org.apache.maven.plugins.annotations.Component;
-import org.apache.maven.plugins.annotations.Mojo;
-import org.apache.maven.plugins.annotations.Parameter;
-import org.apache.maven.plugins.annotations.ResolutionScope;
-import org.apache.maven.reporting.MavenReport;
-import org.apache.maven.reporting.MavenReportException;
-import org.apache.rat.Defaults;
-import org.codehaus.doxia.sink.Sink;
-
-import java.io.File;
-import java.io.FileWriter;
-import java.io.IOException;
-import java.io.Writer;
-import java.util.HashMap;
-import java.util.Iterator;
-import java.util.Locale;
-import java.util.Map;
-import java.util.ResourceBundle;
-
-
-/**
- * Generates a report with Rat's output.
- */
-@SuppressWarnings("deprecation") // MavenReport invokes the deprecated Sink implementation
-@Mojo(name = "rat", requiresDependencyResolution = ResolutionScope.TEST)
-public class RatReportMojo extends AbstractRatMojo implements MavenReport {
-    public static final String DOT_HTML = ".html";
-    @Component
-    private Renderer siteRenderer;
-
-    @Component
-    private ArtifactFactory factory;
-
-    @Component
-    private ArtifactResolver resolver;
-
-    /**
-     * Specifies the directory where the report will be generated
-     */
-    @Parameter(defaultValue = "${project.reporting.outputDirectory}", required = true)
-    private File outputDirectory;
-
-    @Parameter(defaultValue = "${localRepository}", required = true, readonly = true)
-    private ArtifactRepository localRepository;
-
-    /**
-     * Returns the skins artifact file.
-     *
-     * @return Artifact file
-     * @throws MojoFailureException   An error in the plugin configuration was detected.
-     * @throws MojoExecutionException An error occurred while searching for the artifact file.
-     */
-    private File getSkinArtifactFile() throws MojoFailureException, MojoExecutionException {
-        final Skin skin = Skin.getDefaultSkin();
-
-        String version = skin.getVersion();
-        final Artifact artifact;
-        try {
-            if (version == null) {
-                version = Artifact.RELEASE_VERSION;
-            }
-            VersionRange versionSpec = VersionRange.createFromVersionSpec(version);
-            artifact =
-                    factory.createDependencyArtifact(skin.getGroupId(), skin.getArtifactId(), versionSpec, "jar", null,
-                            null);
-
-            resolver.resolve(artifact, getProject().getRemoteArtifactRepositories(), localRepository);
-        } catch (InvalidVersionSpecificationException e) {
-            throw new MojoFailureException("The skin version '" + version + "' is not valid: " + e.getMessage());
-        } catch (ArtifactResolutionException e) {
-            throw new MojoExecutionException("Unable to find skin", e);
-        } catch (ArtifactNotFoundException e) {
-            throw new MojoFailureException("The skin does not exist: " + e.getMessage());
-        }
-
-        return artifact.getFile();
-    }
-
-    /**
-     * Called from Maven to invoke the plugin.
-     *
-     * @throws MojoFailureException   An error in the plugin configuration was detected.
-     * @throws MojoExecutionException An error occurred while creating the report.
-     */
-    public void execute() throws MojoExecutionException, MojoFailureException {
-        if (skip) {
-            getLog().info("RAT will not execute since it is configured to be skipped via system property 'rat.skip'.");
-            return;
-        }
-
-        final DecorationModel model = new DecorationModel();
-        model.setBody(new Body());
-        final Map<String, String> attributes = new HashMap<String, String>();
-        attributes.put("outputEncoding", "UTF-8");
-        final Locale locale = Locale.getDefault();
-        try {
-            final SiteRenderingContext siteContext =
-                    siteRenderer.createContextForSkin(getSkinArtifactFile(), attributes, model, getName(locale),
-                            locale);
-            final RenderingContext context = new RenderingContext(outputDirectory, getOutputName() + DOT_HTML);
-
-            final SiteRendererSink sink = new SiteRendererSink(context);
-            generate(sink, locale);
-
-            if (!outputDirectory.mkdirs() && !outputDirectory.isDirectory()) {
-                throw new IOException("Could not create output directory " + outputDirectory);
-            }
-
-
-            final Writer writer = new FileWriter(new File(outputDirectory, getOutputName() + DOT_HTML));
-
-            siteRenderer.generateDocument(writer, sink, siteContext);
-
-            siteRenderer.copyResources(siteContext, new File(getProject().getBasedir(), "src/site/resources"),
-                    outputDirectory);
-        } catch (IOException e) {
-            throw new MojoExecutionException(e.getMessage(), e);
-        } catch (MavenReportException e) {
-            throw new MojoExecutionException(e.getMessage(), e);
-        } catch (RendererException e) {
-            throw new MojoExecutionException(e.getMessage(), e);
-        }
-    }
-
-    /**
-     * Returns, whether the report may be generated.
-     *
-     * @return Always true.
-     */
-    public boolean canGenerateReport() {
-        return true;
-    }
-
-    /**
-     * Searches for a Rat artifact in the dependency list and returns its version.
-     *
-     * @return Version number, if found, or null.
-     */
-    private String getRatVersion() {
-        for (@SuppressWarnings("unchecked") // library is not yet generified
-             Iterator<Artifact> iter = getProject().getDependencyArtifacts().iterator(); iter.hasNext(); ) {
-            Artifact a = iter.next();
-            if ("rat-lib".equals(a.getArtifactId())) {
-                return a.getVersion();
-            }
-        }
-        return null;
-    }
-
-    /**
-     * Writes the report to the Doxia sink.
-     *
-     * @param sink   The doxia sink, kind of a SAX handler.
-     * @param locale The locale to use for writing the report.
-     * @throws MavenReportException Writing the report failed.
-     */
-    public void generate(Sink sink, Locale locale) throws MavenReportException {
-        ResourceBundle bundle = getBundle(locale);
-        final String title = bundle.getString("report.rat.title");
-        sink.head();
-        sink.title();
-        sink.text(title);
-        sink.title_();
-        sink.head_();
-
-        sink.body();
-
-        sink.section1();
-        sink.sectionTitle1();
-        sink.text(title);
-        sink.sectionTitle1_();
-
-        sink.paragraph();
-        sink.text(bundle.getString("report.rat.link") + " ");
-        sink.link(bundle.getString("report.rat.url"));
-        sink.text(bundle.getString("report.rat.fullName"));
-        sink.link_();
-        final String ratVersion = getRatVersion();
-        if (ratVersion != null) {
-            sink.text(" " + ratVersion);
-        }
-        sink.text(".");
-        sink.paragraph_();
-
-        sink.paragraph();
-        sink.verbatim(true);
-        try {
-            sink.text(createReport(Defaults.getDefaultStyleSheet()));
-        } catch (MojoExecutionException e) {
-            throw new MavenReportException(e.getMessage(), e);
-        } catch (MojoFailureException e) {
-            throw new MavenReportException(e.getMessage(), e);
-        }
-        sink.verbatim_();
-        sink.paragraph_();
-        sink.section1_();
-        sink.body_();
-    }
-
-    /**
-     * Returns the reports category name.
-     *
-     * @return {@link MavenReport#CATEGORY_PROJECT_REPORTS}
-     */
-    public String getCategoryName() {
-        return MavenReport.CATEGORY_PROJECT_REPORTS;
-    }
-
-    /**
-     * Returns the reports bundle
-     *
-     * @param locale Requested locale of the bundle
-     * @return The bundle, which is used to read localized strings.
-     */
-    private ResourceBundle getBundle(Locale locale) {
-        return ResourceBundle.getBundle("org/apache/rat/mp/rat-report", locale, getClass().getClassLoader());
-    }
-
-    /**
-     * Returns the reports description.
-     *
-     * @param locale Requested locale of the bundle
-     * @return Report description, as given by the key "report.rat.description" in the bundle.
-     */
-    public String getDescription(Locale locale) {
-        return getBundle(locale).getString("report.rat.description");
-    }
-
-    /**
-     * Returns the reports name.
-     *
-     * @param locale Requested locale of the bundle
-     * @return Report name, as given by the key "report.rat.name" in the bundle.
-     */
-    public String getName(Locale locale) {
-        return getBundle(locale).getString("report.rat.name");
-    }
-
-    /**
-     * Returns the reports file name.
-     *
-     * @return "rat-report"
-     */
-    public String getOutputName() {
-        return "rat-report";
-    }
-
-    /**
-     * Returns the reports output directory.
-     *
-     * @return Value of the "outputDirectory" parameter.
-     */
-    public File getReportOutputDirectory() {
-        return outputDirectory;
-    }
-
-    /**
-     * Returns, whether this is an external report.
-     *
-     * @return Always false.
-     */
-    public boolean isExternalReport() {
-        return false;
-    }
-
-    /**
-     * Sets the reports output directory.
-     *
-     * @param pOutputDirectory Reports target directory.
-     */
-    public void setReportOutputDirectory(File pOutputDirectory) {
-        outputDirectory = pOutputDirectory;
-    }
-}
diff --git a/0.12-release/apache-rat-plugin/src/main/java/org/apache/rat/mp/util/ConfigurationHelper.java b/0.12-release/apache-rat-plugin/src/main/java/org/apache/rat/mp/util/ConfigurationHelper.java
deleted file mode 100644
index b1bb664..0000000
--- a/0.12-release/apache-rat-plugin/src/main/java/org/apache/rat/mp/util/ConfigurationHelper.java
+++ /dev/null
@@ -1,61 +0,0 @@
-package org.apache.rat.mp.util;
-
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- *
- *   http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-
-import org.apache.maven.plugin.MojoExecutionException;
-import org.apache.maven.plugin.MojoFailureException;
-
-public final class ConfigurationHelper {
-
-    private ConfigurationHelper() {
-        // prevent instantiation
-    }
-
-    public static <T> T newInstance(final Class<T> clazz, final String className)
-            throws MojoExecutionException, MojoFailureException {
-        try {
-            final ClassLoader cl = Thread.currentThread()
-                    .getContextClassLoader();
-            @SuppressWarnings("unchecked") // incorrect cast will be caught below
-            final T o = (T) cl.loadClass(className).newInstance();
-
-            if (!clazz.isAssignableFrom(o.getClass())) {
-                throw new MojoFailureException("The class "
-                        + o.getClass().getName() + " does not implement "
-                        + clazz.getName());
-            }
-            return o;
-        } catch (final InstantiationException e) {
-            throw new MojoExecutionException("Failed to instantiate class "
-                    + className + ": " + e.getMessage(), e);
-        } catch (final ClassCastException e) {
-            throw new MojoExecutionException("The class " + className
-                    + " is not implementing " + clazz.getName() + ": "
-                    + e.getMessage(), e);
-        } catch (final IllegalAccessException e) {
-            throw new MojoExecutionException("Illegal access to class "
-                    + className + ": " + e.getMessage(), e);
-        } catch (final ClassNotFoundException e) {
-            throw new MojoExecutionException("Class " + className
-                    + " not found: " + e.getMessage(), e);
-        }
-    }
-
-}
diff --git a/0.12-release/apache-rat-plugin/src/main/java/org/apache/rat/mp/util/ExclusionHelper.java b/0.12-release/apache-rat-plugin/src/main/java/org/apache/rat/mp/util/ExclusionHelper.java
deleted file mode 100644
index a1f7b6b..0000000
--- a/0.12-release/apache-rat-plugin/src/main/java/org/apache/rat/mp/util/ExclusionHelper.java
+++ /dev/null
@@ -1,118 +0,0 @@
-package org.apache.rat.mp.util;
-
-import org.apache.maven.plugin.logging.Log;
-import org.apache.rat.config.SourceCodeManagementSystems;
-import org.codehaus.plexus.util.DirectoryScanner;
-
-import java.util.Arrays;
-import java.util.Collections;
-import java.util.List;
-import java.util.Set;
-
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- *
- *   http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-
-/**
- * This class encapsulates the file/directory exclusion handling of RAT.
- * Visibility is to allow testing and usage in the maven plugin itself.
- */
-public final class ExclusionHelper {
-    /**
-     * The Maven specific default excludes.
-     */
-    static final List<String> MAVEN_DEFAULT_EXCLUDES = Collections
-            .unmodifiableList(Arrays.asList(//
-                    "target/**/*", //
-                    "cobertura.ser", //
-                    "release.properties", //
-                    ".repository", // Used by Jenkins when a Maven job uses a private repository that is "Local to the workspace"
-                    "build.log", // RAT-160: until now maven-invoker-plugin runs create a build.log that is not part of a release
-                    ".mvn", // Project configuration since Maven 3.3.1 which contains maven.config, jvm.config, extensions.xml
-                    "pom.xml.releaseBackup"));
-
-    /**
-     * The Eclipse specific default excludes.
-     */
-    static final List<String> ECLIPSE_DEFAULT_EXCLUDES = Collections
-            .unmodifiableList(Arrays.asList(".classpath",//
-                    ".project", //
-                    ".settings/**/*"));
-
-    /**
-     * The IDEA specific default excludes.
-     */
-    static final List<String> IDEA_DEFAULT_EXCLUDES = Collections
-            .unmodifiableList(Arrays.asList(//
-                    "*.iml", //
-                    "*.ipr", //
-                    "*.iws", //
-                    ".idea/**/*"));
-
-    public static void addPlexusAndScmDefaults(Log log, final boolean useDefaultExcludes,
-                                               final Set<String> excludeList1) {
-        if (useDefaultExcludes) {
-            log.debug("Adding plexus default exclusions...");
-            Collections.addAll(excludeList1, DirectoryScanner.DEFAULTEXCLUDES);
-            log.debug("Adding SCM default exclusions...");
-            excludeList1.addAll(//
-                    SourceCodeManagementSystems.getPluginExclusions());
-        } else {
-            log.debug("rat.useDefaultExcludes set to false. "
-                    + "Plexus and SCM default exclusions will not be added");
-        }
-    }
-
-    public static void addMavenDefaults(Log log, boolean useMavenDefaultExcludes,
-                                        final Set<String> excludeList) {
-        if (useMavenDefaultExcludes) {
-            log.debug("Adding exclusions often needed by Maven projects...");
-            excludeList.addAll(MAVEN_DEFAULT_EXCLUDES);
-        } else {
-            log.debug("rat.useMavenDefaultExcludes set to false. "
-                    + "Exclusions often needed by Maven projects will not be added.");
-        }
-    }
-
-    public static void addEclipseDefaults(Log log, boolean useEclipseDefaultExcludes,
-                                          final Set<String> excludeList) {
-        if (useEclipseDefaultExcludes) {
-            log.debug("Adding exclusions often needed by projects "
-                    + "developed in Eclipse...");
-            excludeList.addAll(ECLIPSE_DEFAULT_EXCLUDES);
-        } else {
-            log.debug("rat.useEclipseDefaultExcludes set to false. "
-                    + "Exclusions often needed by projects developed in "
-                    + "Eclipse will not be added.");
-        }
-    }
-
-    public static void addIdeaDefaults(Log log, boolean useIdeaDefaultExcludes,
-                                       final Set<String> excludeList) {
-        if (useIdeaDefaultExcludes) {
-            log.debug("Adding exclusions often needed by projects "
-                    + "developed in IDEA...");
-            excludeList.addAll(IDEA_DEFAULT_EXCLUDES);
-        } else {
-            log.debug("rat.useIdeaDefaultExcludes set to false. "
-                    + "Exclusions often needed by projects developed in "
-                    + "IDEA will not be added.");
-        }
-    }
-
-}
diff --git a/0.12-release/apache-rat-plugin/src/main/java/org/apache/rat/mp/util/ScmIgnoreParser.java b/0.12-release/apache-rat-plugin/src/main/java/org/apache/rat/mp/util/ScmIgnoreParser.java
deleted file mode 100644
index 27627a1..0000000
--- a/0.12-release/apache-rat-plugin/src/main/java/org/apache/rat/mp/util/ScmIgnoreParser.java
+++ /dev/null
@@ -1,118 +0,0 @@
-package org.apache.rat.mp.util;
-
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- *
- *   http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-
-
-import org.apache.commons.io.IOUtils;
-import org.apache.maven.plugin.logging.Log;
-import org.apache.rat.config.SourceCodeManagementSystems;
-
-import java.io.BufferedReader;
-import java.io.File;
-import java.io.FileReader;
-import java.io.IOException;
-import java.util.ArrayList;
-import java.util.Arrays;
-import java.util.List;
-
-/**
- * Helper to parse SCM ignore files to add entries as excludes during RAT runs.
- * Since we log errors it needs to reside inside of the maven plugin.
- */
-public final class ScmIgnoreParser {
-    private ScmIgnoreParser() {
-        // prevent instantiation of utility class
-    }
-
-    private static List<String> COMMENT_PREFIXES = Arrays.asList("#", "##", "//", "/**", "/*");
-
-    /**
-     * Parses excludes from the given SCM ignore file.
-     *
-     * @param log       Maven log to show output during RAT runs.
-     * @param scmIgnore if <code>null</code> or invalid an empty list of exclusions is returned.
-     * @return all exclusions (=non-comment lines) from the SCM ignore file.
-     */
-    public static List<String> getExcludesFromFile(final Log log, final File scmIgnore) {
-
-        final List<String> exclusionLines = new ArrayList<String>();
-
-        if (scmIgnore != null && scmIgnore.exists() && scmIgnore.isFile()) {
-            log.info("Parsing exclusions from " + scmIgnore);
-            BufferedReader reader = null;
-            try {
-                reader = new BufferedReader(new FileReader(scmIgnore));
-                String line;
-                while ((line = reader.readLine()) != null) {
-                    if (!isComment(line)) {
-                        exclusionLines.add(line);
-                        log.debug("Added " + line);
-                    }
-                }
-            } catch (final IOException e) {
-                log.warn("Cannot parse " + scmIgnore + " for exclusions. Will skip this file.");
-                log.debug("Skip parsing " + scmIgnore + " due to " + e.getMessage());
-            } finally {
-                IOUtils.closeQuietly(reader);
-            }
-        }
-        return exclusionLines;
-    }
-
-    /**
-     * Parse ignore files from all known SCMs that have ignore files.
-     *
-     * @param log     Show information via maven logger.
-     * @param baseDir base directory from which to look for SCM ignores.
-     * @return Exclusions from the SCM ignore files.
-     */
-    public static List<String> getExclusionsFromSCM(final Log log, final File baseDir) {
-        List<String> exclusions = new ArrayList<String>();
-        for (SourceCodeManagementSystems scm : SourceCodeManagementSystems.values()) {
-            if (scm.hasIgnoreFile()) {
-                exclusions.addAll(getExcludesFromFile(log, new File(baseDir, scm.getIgnoreFile())));
-            }
-        }
-        return exclusions;
-
-    }
-
-    /**
-     * Determines whether the given line is a comment or not based on scanning
-     * for prefixes
-     * {@see COMMENT_PREFIXES}.
-     *
-     * @param line line to verify.
-     * @return <code>true</code> if the given line is a commented out line.
-     */
-    static boolean isComment(final String line) {
-        if (line == null || line.length() <= 0) {
-            return false;
-        }
-
-        final String trimLine = line.trim();
-        for (String prefix : COMMENT_PREFIXES) {
-            if (trimLine.startsWith(prefix)) {
-                return true;
-            }
-        }
-        return false;
-    }
-}
diff --git a/0.12-release/apache-rat-plugin/src/main/resources/org/apache/rat/mp/package.html b/0.12-release/apache-rat-plugin/src/main/resources/org/apache/rat/mp/package.html
deleted file mode 100644
index f80d317..0000000
--- a/0.12-release/apache-rat-plugin/src/main/resources/org/apache/rat/mp/package.html
+++ /dev/null
@@ -1,29 +0,0 @@
-<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 3.2 Final//EN">
-<html>
-<head>
-<!--
-
-  Licensed to the Apache Software Foundation (ASF) under one
-  or more contributor license agreements.  See the NOTICE file
-  distributed with this work for additional information
-  regarding copyright ownership.  The ASF licenses this file
-  to you under the Apache License, Version 2.0 (the
-  "License"); you may not use this file except in compliance
-  with the License.  You may obtain a copy of the License at
-
-    http://www.apache.org/licenses/LICENSE-2.0
-
-  Unless required by applicable law or agreed to in writing,
-  software distributed under the License is distributed on an
-  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
-  KIND, either express or implied.  See the License for the
-  specific language governing permissions and limitations
-  under the License.
-
--->
-</head>
-<body>
-This package contains the Rat plugins for
-<a href="http://maven.apache.org">Maven 2</a>.
-</body>
-</html>
diff --git a/0.12-release/apache-rat-plugin/src/site/apt/examples/basic.apt.vm b/0.12-release/apache-rat-plugin/src/site/apt/examples/basic.apt.vm
deleted file mode 100644
index 8a48288..0000000
--- a/0.12-release/apache-rat-plugin/src/site/apt/examples/basic.apt.vm
+++ /dev/null
@@ -1,44 +0,0 @@
-~~   Licensed to the Apache Software Foundation (ASF) under one or more
-~~   contributor license agreements.  See the NOTICE file distributed with
-~~   this work for additional information regarding copyright ownership.
-~~   The ASF licenses this file to You under the Apache License, Version 2.0
-~~   (the "License"); you may not use this file except in compliance with
-~~   the License.  You may obtain a copy of the License at
-~~  
-~~        http://www.apache.org/licenses/LICENSE-2.0
-~~  
-~~   Unless required by applicable law or agreed to in writing, software
-~~   distributed under the License is distributed on an "AS IS" BASIS,
-~~   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-~~   See the License for the specific language governing permissions and
-~~   limitations under the License.
-
- -----------------
- Basic use
- -----------------
-
-Basic use
-
-  Basic use means that you configure the plugin from the POM.
-  However, it doesn't run automatically, but on demand:
-
-------------------------------------------------------------------
-  mvn apache-rat:check
-------------------------------------------------------------------
-
-  To achieve that, a section like the following needs to be
-  added to your POM:
-
-------------------------------------------------------------------
-  <build>
-    <plugins>
-      ...
-      <plugin>
-        <groupId>org.apache.rat</groupId>
-        <artifactId>apache-rat-plugin</artifactId>
-        <version>${currentVersion}</version>
-      </plugin>
-      ...
-    </plugins>
-  </build>
-------------------------------------------------------------------
diff --git a/0.12-release/apache-rat-plugin/src/site/apt/examples/custom-license.apt.vm b/0.12-release/apache-rat-plugin/src/site/apt/examples/custom-license.apt.vm
deleted file mode 100644
index 351d13f..0000000
--- a/0.12-release/apache-rat-plugin/src/site/apt/examples/custom-license.apt.vm
+++ /dev/null
@@ -1,133 +0,0 @@
-~~   Licensed to the Apache Software Foundation (ASF) under one or more
-~~   contributor license agreements.  See the NOTICE file distributed with
-~~   this work for additional information regarding copyright ownership.
-~~   The ASF licenses this file to You under the Apache License, Version 2.0
-~~   (the "License"); you may not use this file except in compliance with
-~~   the License.  You may obtain a copy of the License at
-~~  
-~~        http://www.apache.org/licenses/LICENSE-2.0
-~~  
-~~   Unless required by applicable law or agreed to in writing, software
-~~   distributed under the License is distributed on an "AS IS" BASIS,
-~~   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-~~   See the License for the specific language governing permissions and
-~~   limitations under the License.
-
- -----------------------
- Custom License Matchers
- -----------------------
-
-Custom License Matchers
-
-  Rat comes with a set of predefined license matchers, that can be used
-  some typical licenses. However, they will not always be sufficient.
-  In such cases, you may use a custom license matcher.
-
-  A custom license matcher is an implementation of
-  <<<org.apache.rat.analysis.IHeaderMatcher>>>. Suggest that your
-  source files must contain a header like the following:
-
-------------------------------------------------------------------
-  /**
-   * Yet Another Software License, 1.0
-   *
-   * Lots of text, specifying the users rights, and whatever ...
-   */
-------------------------------------------------------------------
-
-  A very easy way to search for such headers would be to scan
-  for the string "Yet Another Software License, 1.0". And here's
-  how you would do that in your POM:
-
-------------------------------------------------------------------
-  <build>
-    <plugins>
-      ...
-      <plugin>
-        <groupId>org.apache.rat</groupId>
-        <artifactId>apache-rat-plugin</artifactId>
-        <version>${currentVersion}</version>
-        <configuration>
-          <licenses>
-            <license implementation="org.apache.rat.analysis.license.SimplePatternBasedLicense">
-              <licenseFamilyCategory>YASL1</licenseFamilyCategory>
-              <licenseFamilyName>Yet Another Software License (YASL) 1.0</licenseFamilyName>
-              <notes></notes>
-              <patterns>
-                <pattern>Yet Another Software License, 1.0</pattern>
-              </patterns>
-            </license>
-          </licenses>
-        </configuration>
-      </plugin>
-      ...
-    </plugins>
-  </build>
-------------------------------------------------------------------
-
-  The following terms are used in the example:
-
-*-----------------------+-----------+
-| licenseFamilyCategory | The license family category is a very short string (exactly 5 characters, preferrably no blanks),
-|                       | which identifies the license. For example, this could be <<<AL20>>> to identify the
-|                       |  Apache License, 2.0.
-*-----------------------+-----------+
-| licenseFamilyName     | The license family name is a longer string, which gives the licenses full name. For example,
-|                       | this could be <<<Apache License, 2.0>>>.
-*-----------------------+-----------+
-| notes                 | You might specify additional notes here, like "Dual licensed GPL/MPL".
-*-----------------------+-----------+
-| patterns              | Specifies a set of patterns being searched. The source file is assumed to contain the
-|                       | license header, if at least one of these patterns is found.
-*-----------------------+-----------+
-
-Approved License Families
-
-  Detecting the license is not enough in many cases as the "new"
-  license may not be considered approved by Rat.  In order to make a
-  license approved you provide a custom implementation of
-  <<<org.apache.rat.license.ILicenseFamily>>>.  Usually all you need
-  to provide the name of the license, in which case the built-in
-  <<<SimpleLicenseFamily>>> will do.
-
-  To continue the example, in order to make the YASL1 license approved
-  you'd use
-
-------------------------------------------------------------------
-  <build>
-    <plugins>
-      ...
-      <plugin>
-        <groupId>org.apache.rat</groupId>
-        <artifactId>apache-rat-plugin</artifactId>
-        <version>${currentVersion}</version>
-        <configuration>
-          <licenses>
-            <license implementation="org.apache.rat.analysis.license.SimplePatternBasedLicense">
-              <licenseFamilyCategory>YASL1</licenseFamilyCategory>
-              <licenseFamilyName>Yet Another Software License (YASL) 1.0</licenseFamilyName>
-              <notes></notes>
-              <patterns>
-                <pattern>Yet Another Software License, 1.0</pattern>
-              </patterns>
-            </license>
-          </licenses>
-          <licenseFamilies>
-            <licenseFamily implementation="org.apache.rat.license.SimpleLicenseFamily">
-              <familyName>Yet Another Software License</familyName>
-            </licenseFamily>
-          </licenseFamilies>
-        </configuration>
-      </plugin>
-      ...
-    </plugins>
-  </build>
-------------------------------------------------------------------
-
-  The following terms are used in the example:
-
-*-----------------------+-----------+
-| familyName            | The name of the license family name that is approved.
-|                       | This should match <<<licenseFamilyName>>> of your <<<licenseMatcher>>>
-*-----------------------+-----------+
-
diff --git a/0.12-release/apache-rat-plugin/src/site/apt/examples/site.apt.vm b/0.12-release/apache-rat-plugin/src/site/apt/examples/site.apt.vm
deleted file mode 100644
index 57f8fdd..0000000
--- a/0.12-release/apache-rat-plugin/src/site/apt/examples/site.apt.vm
+++ /dev/null
@@ -1,44 +0,0 @@
-~~   Licensed to the Apache Software Foundation (ASF) under one or more
-~~   contributor license agreements.  See the NOTICE file distributed with
-~~   this work for additional information regarding copyright ownership.
-~~   The ASF licenses this file to You under the Apache License, Version 2.0
-~~   (the "License"); you may not use this file except in compliance with
-~~   the License.  You may obtain a copy of the License at
-~~  
-~~        http://www.apache.org/licenses/LICENSE-2.0
-~~  
-~~   Unless required by applicable law or agreed to in writing, software
-~~   distributed under the License is distributed on an "AS IS" BASIS,
-~~   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-~~   See the License for the specific language governing permissions and
-~~   limitations under the License.
-
- ---------------------------------------
- Adding a report to the generated site
- ---------------------------------------
-
-Adding a report to the generated site
-
-  The typical use case is that you want the plugin to run whenever you invoke
-
-------------------------------------------------------------------
-  mvn site
-------------------------------------------------------------------
-
-  That way, the report will be added to the generated
-  site. This is done by simply adding the following section to
-  your POM:
-
-------------------------------------------------------------------
-  <reporting>
-    <plugins>
-      ...
-      <plugin>
-        <groupId>org.apache.rat</groupId>
-        <artifactId>apache-rat-plugin</artifactId>
-        <version>${currentVersion}</version>
-      </plugin>
-      ...
-    </plugins>
-  </reporting>
-------------------------------------------------------------------
diff --git a/0.12-release/apache-rat-plugin/src/site/apt/examples/verify.apt.vm b/0.12-release/apache-rat-plugin/src/site/apt/examples/verify.apt.vm
deleted file mode 100644
index 8938cad..0000000
--- a/0.12-release/apache-rat-plugin/src/site/apt/examples/verify.apt.vm
+++ /dev/null
@@ -1,86 +0,0 @@
-~~   Licensed to the Apache Software Foundation (ASF) under one or more
-~~   contributor license agreements.  See the NOTICE file distributed with
-~~   this work for additional information regarding copyright ownership.
-~~   The ASF licenses this file to You under the Apache License, Version 2.0
-~~   (the "License"); you may not use this file except in compliance with
-~~   the License.  You may obtain a copy of the License at
-~~  
-~~        http://www.apache.org/licenses/LICENSE-2.0
-~~  
-~~   Unless required by applicable law or agreed to in writing, software
-~~   distributed under the License is distributed on an "AS IS" BASIS,
-~~   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-~~   See the License for the specific language governing permissions and
-~~   limitations under the License.
-
- -----------------
- Verify phase example
- -----------------
-
-Verify phase example
-
-  This example demonstrates how to configure the plugin to
-  run automatically as part of the "verify" phase:
-
-------------------------------------------------------------------
-  <build>
-    <plugins>
-      ...
-      <plugin>
-        <groupId>org.apache.rat</groupId>
-        <artifactId>apache-rat-plugin</artifactId>
-        <version>${currentVersion}</version>
-        <executions>
-          <execution>
-            <phase>verify</phase>
-            <goals>
-              <goal>check</goal>
-            </goals>
-          </execution>
-        </executions>
-      </plugin>
-      ...
-    </plugins>
-  </build>
-------------------------------------------------------------------
-
-  In larger projects, the plugin may take some time to run. In
-  such cases, it may be desirable not to run the plugin with
-  every build, but only in important cases like a release build:
-
-------------------------------------------------------------------
-  <profiles>
-    <profile>
-      <id>release</id>
-      <build>
-        <plugins>
-          ...
-          <plugin>
-            <groupId>org.apache.rat</groupId>
-            <artifactId>apache-rat-plugin</artifactId>
-            <version>${currentVersion}</version>
-            <executions>
-              <execution>
-                <phase>verify</phase>
-                <goals>
-                  <goal>check</goal>
-                </goals>
-              </execution>
-            </executions>
-          </plugin>
-          ...
-        </plugins>
-      </build>
-    </profile>
-  </profiles>
-------------------------------------------------------------------
-
-  Note, that this is almost the same example as before, except
-  that the plugin configuration has been embedded into a profile.
-  In this case, the plugin is only executed, when the "release"
-  profile is activated by adding <<<-Prelease>>> to the command
-  line, for example like this:
-
-------------------------------------------------------------------
-  mvn -Prelease install
-------------------------------------------------------------------
diff --git a/0.12-release/apache-rat-plugin/src/site/apt/index.apt b/0.12-release/apache-rat-plugin/src/site/apt/index.apt
deleted file mode 100644
index d2f9058..0000000
--- a/0.12-release/apache-rat-plugin/src/site/apt/index.apt
+++ /dev/null
@@ -1,55 +0,0 @@
-~~   Licensed to the Apache Software Foundation (ASF) under one or more
-~~   contributor license agreements.  See the NOTICE file distributed with
-~~   this work for additional information regarding copyright ownership.
-~~   The ASF licenses this file to You under the Apache License, Version 2.0
-~~   (the "License"); you may not use this file except in compliance with
-~~   the License.  You may obtain a copy of the License at
-~~  
-~~        http://www.apache.org/licenses/LICENSE-2.0
-~~  
-~~   Unless required by applicable law or agreed to in writing, software
-~~   distributed under the License is distributed on an "AS IS" BASIS,
-~~   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-~~   See the License for the specific language governing permissions and
-~~   limitations under the License.
-
- ------
- Introduction
- ------
-
-
-The Rat Maven Plugin
-
-  This plugin may be used to run Rat, the
-  {{{../index.html}Release Audit Tool}}. It
-  verifies, whether your source code matches standards like the
-  {{{http://www.apache.org/legal/src-headers.html}ASF Source Header
-  and Copyright Notice Policy}}.
-
-* Goals Overview
-
-  The following goals are available:
-
-  * {{{./check-mojo.html}apache-rat:check}} Runs Rat and creates a report, which is written
-    to a plain text file.
-
-  * {{{./rat-mojo.html}apache-rat:rat}} Runs Rat and creates a report, which will be added
-    to the generated site.
-
-* Usage
-
-  Instructions on how to use the Rat Maven Plugin can be found on the {{{./usage.html}usage page}}.
-
-* Examples
-
-  To provide you with better understanding of some usages of the Rat Maven Plugin,
-  you can take a look into the following examples:
-
-  * {{{./examples/basic.html}Basic use}} of the apache-rat:check goal.
-
-  * {{{./examples/verify.html}Automatically}} running the apache-rat:check goal
-    when the project is built.
-
-  * Adding the report to the {{{./examples/site.html}generated site}}.
-
-  * Applying a {{{./examples/custom-license.html}custom license}}.
diff --git a/0.12-release/apache-rat-plugin/src/site/apt/usage.apt.vm b/0.12-release/apache-rat-plugin/src/site/apt/usage.apt.vm
deleted file mode 100644
index 710f9bb..0000000
--- a/0.12-release/apache-rat-plugin/src/site/apt/usage.apt.vm
+++ /dev/null
@@ -1,81 +0,0 @@
-~~   Licensed to the Apache Software Foundation (ASF) under one or more
-~~   contributor license agreements.  See the NOTICE file distributed with
-~~   this work for additional information regarding copyright ownership.
-~~   The ASF licenses this file to You under the Apache License, Version 2.0
-~~   (the "License"); you may not use this file except in compliance with
-~~   the License.  You may obtain a copy of the License at
-~~  
-~~        http://www.apache.org/licenses/LICENSE-2.0
-~~  
-~~   Unless required by applicable law or agreed to in writing, software
-~~   distributed under the License is distributed on an "AS IS" BASIS,
-~~   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-~~   See the License for the specific language governing permissions and
-~~   limitations under the License.
-
- ------
- Usage
- ------
-
-Usage
-
-  To use the plugin, you've got two options: First of all, it can
-  create a simple text file, called <<<target/rat.txt>>>, with the
-  plugins output. This is done by invoking the <<<apache-rat:check>>> goal.
-
-  You may also add a report to the generated site. This is your
-  second option.
-
-*Writing the report to a text file
-
-  To create a text file with the report, you need to run the
-  <<<apache-rat:check>>> goal. Add a section like the following to your POM:
-
-------------------------------------------------------------------
-  <build>
-    <plugins>
-      ...
-      <plugin>
-        <groupId>org.apache.rat</groupId>
-        <artifactId>apache-rat-plugin</artifactId>
-        <version>${project.version}</version>
-      </plugin>
-      ...
-    </plugins>
-  </build>
-------------------------------------------------------------------
-
-  Once you have done that, the plugin can be run from the command
-  line by simply typing
-
-------------------------------------------------------------------
-  mvn apache-rat:check
-------------------------------------------------------------------
-
-  An example for running the plugin automatically can be found
-  {{{./examples/verify.html}here}}.
-
-*Adding the report to the generated site
-
-  A section like the following must be added to your POM:
-
-------------------------------------------------------------------
-  <reporting>
-    <plugins>
-      ...
-      <plugin>
-        <groupId>org.apache.rat</groupId>
-        <artifactId>apache-rat-plugin</artifactId>
-        <version>${project.version}</version>
-      </plugin>
-      ...
-    </plugins>
-  </reporting>
-------------------------------------------------------------------
-
-  The report will be created automatically when you generate the
-  site:
-
-------------------------------------------------------------------
-  mvn site
-------------------------------------------------------------------
diff --git a/0.12-release/apache-rat-plugin/src/site/fml/faq.fml b/0.12-release/apache-rat-plugin/src/site/fml/faq.fml
deleted file mode 100644
index f46cdfb..0000000
--- a/0.12-release/apache-rat-plugin/src/site/fml/faq.fml
+++ /dev/null
@@ -1,77 +0,0 @@
-<?xml version="1.0"?>
-<!-- 
-   Licensed to the Apache Software Foundation (ASF) under one or more
-   contributor license agreements.  See the NOTICE file distributed with
-   this work for additional information regarding copyright ownership.
-   The ASF licenses this file to You under the Apache License, Version 2.0
-   (the "License"); you may not use this file except in compliance with
-   the License.  You may obtain a copy of the License at
-  
-        http://www.apache.org/licenses/LICENSE-2.0
-  
-   Unless required by applicable law or agreed to in writing, software
-   distributed under the License is distributed on an "AS IS" BASIS,
-   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-   See the License for the specific language governing permissions and
-   limitations under the License.
--->
-<faqs id="FAQ" title="Frequently Asked Questions">
-  <part id="General">
-    <faq id="what">
-      <question>What is Rat?</question>
-      <answer>
-        <p>
-          Basically, you can think of it as a tool that checks,
-          whether you're source files are carrying proper
-          license headers. Almost any non-trivial organization
-          has a policy for license headers. In the case
-          of the <a href="http://www.apache.org/">Apache Software
-          Foundation (ASF)</a>, this is the
-          <a href="http://www.apache.org/legal/src-headers.html">ASF
-          Source Header and Copyright Notice Policy</a>.
-        </p>
-      </answer>
-    </faq>
-    <faq id="where">
-      <question>Where do I find Apache Rat?</question>
-      <answer>
-        <p>
-          Apache Rat is now part of the 
-          <a href='http://creadur.apache.org'>Apache Creadur</a> project,
-          a home for all sorts of software that helps audit and review
-          software distributions.
-        </p>
-      </answer>
-    </faq>
-    <faq id="why">
-      <question>Why should I use the Maven plugin to run Apache Rat?</question>
-      <answer>
-        <p>Because it makes running Rat trivial. Basically, you just
-          add the plugin to the <code>build/plugins</code> section
-          of your POM and run <code>mvn apache-rat:check</code>. Using Rat
-          cannot be simpler.
-        </p>
-      </answer>
-    </faq>
-  </part>
-
-  <part id="Configuration">
-    <faq id="includeSubprojects">
-      <question>
-        The apache-rat-plugin creates a report for every subproject.
-        I want a single report for the whole project, which includes
-        the subprojects.
-      </question>
-      <answer>
-        <p>Set the configuration parameter "excludeSubProjects"
-          to false.</p>
-      </answer>
-    </faq>
-    <faq id="customLicense">
-      <question>Can I use Rat to validate against a custom license header?</question>
-      <answer>
-        <p>See <a href="examples/custom-license.html">this example</a> to see how.</p>
-      </answer>
-    </faq>
-  </part>
-</faqs>
diff --git a/0.12-release/apache-rat-plugin/src/site/resources/css/site.css b/0.12-release/apache-rat-plugin/src/site/resources/css/site.css
deleted file mode 100644
index 3683f87..0000000
--- a/0.12-release/apache-rat-plugin/src/site/resources/css/site.css
+++ /dev/null
@@ -1,27 +0,0 @@
-/*
-  Licensed to the Apache Software Foundation (ASF) under one
-  or more contributor license agreements.  See the NOTICE file
-  distributed with this work for additional information
-  regarding copyright ownership.  The ASF licenses this file
-  to you under the Apache License, Version 2.0 (the
-  "License"); you may not use this file except in compliance
-  with the License.  You may obtain a copy of the License at
-
-    http://www.apache.org/licenses/LICENSE-2.0
-
-  Unless required by applicable law or agreed to in writing,
-  software distributed under the License is distributed on an
-  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
-  KIND, either express or implied.  See the License for the
-  specific language governing permissions and limitations
-  under the License.    
-*/
-footer {
-    font-family: "Mate SC", "Lucida Console", Monaco, monospace;
-    font-size: 9pt;
-    padding: 5px 10px;
-    text-align: justify;
-    border: thin solid #D0D0D0;
-    background-color: #F8F8F8;
-    color: #404040;
-}
\ No newline at end of file
diff --git a/0.12-release/apache-rat-plugin/src/site/site.xml b/0.12-release/apache-rat-plugin/src/site/site.xml
deleted file mode 100644
index 68a881f..0000000
--- a/0.12-release/apache-rat-plugin/src/site/site.xml
+++ /dev/null
@@ -1,46 +0,0 @@
-<?xml version='1.0'?>
-<!-- 
-   Licensed to the Apache Software Foundation (ASF) under one or more
-   contributor license agreements.  See the NOTICE file distributed with
-   this work for additional information regarding copyright ownership.
-   The ASF licenses this file to You under the Apache License, Version 2.0
-   (the "License"); you may not use this file except in compliance with
-   the License.  You may obtain a copy of the License at
-  
-        http://www.apache.org/licenses/LICENSE-2.0
-  
-   Unless required by applicable law or agreed to in writing, software
-   distributed under the License is distributed on an "AS IS" BASIS,
-   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-   See the License for the specific language governing permissions and
-   limitations under the License.
--->
-<project xmlns="http://maven.apache.org/DECORATION/1.3.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
-         xsi:schemaLocation="http://maven.apache.org/DECORATION/1.3.0 http://maven.apache.org/xsd/decoration-1.3.0.xsd"
-         name="Apache Rat&trade; Plugin for Apache Maven">
-  <body>
-    <head>
-        <link 
-            href='http://fonts.googleapis.com/css?family=Mate+SC' 
-            rel='stylesheet' 
-            type='text/css'/>
-    </head>
-  
-    <menu ref="parent"/>
-
-    <menu name="Overview">
-      <item name="Introduction" href="index.html"/>
-      <item name="Goals" href="plugin-info.html"/>
-      <item name="Usage" href="usage.html"/>
-      <item name="FAQ" href="faq.html"/>
-    </menu>
-    <menu name="Examples">
-      <item name="Basic use" href="examples/basic.html"/>
-      <item name="Running the plugin automatically" href="examples/verify.html"/>
-      <item name="Adding a report to the site" href="examples/site.html"/>
-      <item name="Custom license" href="examples/custom-license.html"/>
-    </menu>
-
-    <menu ref="reports"/>
-  </body>
-</project>
diff --git a/0.12-release/apache-rat-plugin/src/test/java/org/apache/rat/mp/RatCheckMojoTest.java b/0.12-release/apache-rat-plugin/src/test/java/org/apache/rat/mp/RatCheckMojoTest.java
deleted file mode 100644
index 1ed062e..0000000
--- a/0.12-release/apache-rat-plugin/src/test/java/org/apache/rat/mp/RatCheckMojoTest.java
+++ /dev/null
@@ -1,205 +0,0 @@
-package org.apache.rat.mp;
-
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements.  See the NOTICE file distributed with
- * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You under the Apache License, Version 2.0
- * (the "License"); you may not use this file except in compliance with
- * the License.  You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-import org.apache.commons.io.IOUtils;
-import org.apache.maven.model.Build;
-import org.apache.maven.plugin.testing.AbstractMojoTestCase;
-import org.apache.maven.plugin.testing.stubs.MavenProjectStub;
-import org.apache.rat.config.AddLicenseHeaders;
-
-import java.io.BufferedReader;
-import java.io.File;
-import java.io.FileInputStream;
-import java.io.IOException;
-import java.io.InputStreamReader;
-
-import static org.apache.rat.mp.RatTestHelpers.ensureRatReportIsCorrect;
-import static org.apache.rat.mp.RatTestHelpers.getSourceDirectory;
-import static org.apache.rat.mp.RatTestHelpers.newArtifactFactory;
-import static org.apache.rat.mp.RatTestHelpers.newArtifactRepository;
-import static org.apache.rat.mp.RatTestHelpers.newArtifactResolver;
-import static org.apache.rat.mp.RatTestHelpers.newSiteRenderer;
-
-/**
- * Test case for the {@link RatCheckMojo} and {@link RatReportMojo}.
- */
-public class RatCheckMojoTest extends AbstractMojoTestCase {
-
-    /**
-     * Creates a new instance of {@link RatCheckMojo}.
-     *
-     * @param pDir The directory, where to look for a pom.xml file.
-     * @return The configured Mojo.
-     * @throws Exception An error occurred while creating the Mojo.
-     */
-    private RatCheckMojo newRatCheckMojo(String pDir) throws Exception {
-        return (RatCheckMojo) newRatMojo(pDir, "check", false);
-    }
-
-    /**
-     * Creates a new instance of {@link AbstractRatMojo}.
-     *
-     * @param pDir  The directory, where to look for a pom.xml file.
-     * @param pGoal The goal, which the Mojo must implement.
-     * @return The configured Mojo.
-     * @throws Exception An error occurred while creating the Mojo.
-     */
-    private AbstractRatMojo newRatMojo(String pDir, String pGoal,
-                                       boolean pCreateCopy) throws Exception {
-        final File baseDir = new File(getBasedir());
-        final File testBaseDir = getSourceDirectory(getBasedir(), pDir,
-                pCreateCopy, baseDir);
-        File testPom = new File(testBaseDir, "pom.xml");
-        AbstractRatMojo mojo = (AbstractRatMojo) lookupMojo(pGoal, testPom);
-        assertNotNull(mojo);
-        final File buildDirectory = new File(new File(baseDir, "target/test"),
-                pDir);
-        setVariableValueToObject(mojo, "basedir", testBaseDir);
-        setVariableValueToObject(mojo, "addDefaultLicenseMatchers",
-                Boolean.TRUE);
-        setVariableValueToObject(mojo, "useDefaultExcludes", Boolean.TRUE);
-        setVariableValueToObject(mojo, "useMavenDefaultExcludes", Boolean.TRUE);
-        setVariableValueToObject(mojo, "useEclipseDefaultExcludes",
-                Boolean.TRUE);
-        setVariableValueToObject(mojo, "addLicenseHeaders", AddLicenseHeaders.FALSE.name());
-        final Build build = new Build();
-        build.setDirectory(buildDirectory.getPath());
-        final MavenProjectStub project = new MavenProjectStub() {
-            @Override
-            public Build getBuild() {
-                return build;
-            }
-        };
-        setVariableValueToObject(mojo, "project", project);
-        assertNotNull(
-                "Problem in test setup - you are missing a project in your mojo.",
-                project);
-        assertNotNull(
-                "The mojo is missing its MavenProject, which will result in an NPE during rat runs.",
-                mojo.getProject());
-        assertNotNull(
-                "No artifactRepos found, which will result in an NPE during rat runs.",
-                project.getRemoteArtifactRepositories());
-
-        if (mojo instanceof RatReportMojo) {
-            setVariableValueToObject(mojo, "localRepository",
-                    newArtifactRepository(container));
-            setVariableValueToObject(mojo, "resolver", newArtifactResolver());
-            setVariableValueToObject(mojo, "factory", newArtifactFactory());
-            setVariableValueToObject(mojo, "siteRenderer",
-                    newSiteRenderer(container));
-        } else if (mojo instanceof RatCheckMojo) {
-            final File ratTxtFile = new File(buildDirectory, "rat.txt");
-            setVariableValueToObject(mojo, "reportFile", ratTxtFile);
-        }
-        return mojo;
-    }
-
-    /**
-     * Reads the location of the rat text file from the Mojo.
-     *
-     * @param pMojo The configured Mojo.
-     * @return Value of the "reportFile" property.
-     * @throws Exception An error occurred while reading the property.
-     */
-    private File getRatTxtFile(RatCheckMojo pMojo) throws Exception {
-        return (File) getVariableValueFromObject(pMojo, "reportFile");
-    }
-
-    /**
-     * Runs a check, which should expose no problems.
-     *
-     * @throws Exception The test failed.
-     */
-    public void testIt1() throws Exception {
-        final RatCheckMojo mojo = newRatCheckMojo("it1");
-        final File ratTxtFile = getRatTxtFile(mojo);
-        mojo.execute();
-        ensureRatReportIsCorrect(ratTxtFile, 1, 0);
-    }
-
-    /**
-     * Runs a check, which should detect a problem.
-     *
-     * @throws Exception The test failed.
-     */
-    public void testIt2() throws Exception {
-        final RatCheckMojo mojo = newRatCheckMojo("it2");
-        final File ratTxtFile = getRatTxtFile(mojo);
-        try {
-            mojo.execute();
-            fail("Expected RatCheckException");
-        } catch (RatCheckException e) {
-            final String msg = e.getMessage();
-            // default value is "${project.build.directory}/rat.txt"
-            final String REPORTFILE = "rat.txt";
-
-            assertTrue("report filename was not contained in '" + msg + "'",
-                    msg.contains(REPORTFILE));
-            assertFalse("no null allowed in '" + msg + "'", (msg.toUpperCase()
-                    .contains("NULL")));
-        }
-        ensureRatReportIsCorrect(ratTxtFile, 1, 1);
-    }
-
-    private String getFirstLine(File pFile) throws IOException {
-        FileInputStream fis = null;
-        InputStreamReader reader = null;
-        BufferedReader breader = null;
-        try {
-            fis = new FileInputStream(pFile);
-            reader = new InputStreamReader(fis, "UTF8");
-            breader = new BufferedReader(reader);
-            final String result = breader.readLine();
-            breader.close();
-            return result;
-        } finally {
-            IOUtils.closeQuietly(fis);
-            IOUtils.closeQuietly(reader);
-            IOUtils.closeQuietly(breader);
-        }
-    }
-
-    /**
-     * Tests adding license headers.
-     */
-    public void testIt3() throws Exception {
-        final RatCheckMojo mojo = (RatCheckMojo) newRatMojo("it3", "check",
-                true);
-        setVariableValueToObject(mojo, "addLicenseHeaders", AddLicenseHeaders.TRUE.name());
-        setVariableValueToObject(mojo, "numUnapprovedLicenses",
-                1);
-        mojo.execute();
-        final File ratTxtFile = getRatTxtFile(mojo);
-        ensureRatReportIsCorrect(ratTxtFile, 1, 1);
-
-        final File baseDir = new File(getBasedir());
-        final File sourcesDir = new File(new File(baseDir, "target/it-source"),
-                "it3");
-        final String firstLineOrig = getFirstLine(new File(sourcesDir,
-                "src.apt"));
-        assertTrue(firstLineOrig.contains("--"));
-        assertFalse(firstLineOrig.contains("~~"));
-        final String firstLineModified = getFirstLine(new File(sourcesDir,
-                "src.apt.new"));
-        assertTrue(firstLineModified.contains("~~"));
-        assertFalse(firstLineModified.contains("--"));
-    }
-
-}
diff --git a/0.12-release/apache-rat-plugin/src/test/java/org/apache/rat/mp/RatTestHelpers.java b/0.12-release/apache-rat-plugin/src/test/java/org/apache/rat/mp/RatTestHelpers.java
deleted file mode 100644
index 8e9e846..0000000
--- a/0.12-release/apache-rat-plugin/src/test/java/org/apache/rat/mp/RatTestHelpers.java
+++ /dev/null
@@ -1,275 +0,0 @@
-package org.apache.rat.mp;
-
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements.  See the NOTICE file distributed with
- * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You under the Apache License, Version 2.0
- * (the "License"); you may not use this file except in compliance with
- * the License.  You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-import org.apache.commons.io.IOUtils;
-import org.apache.maven.artifact.factory.ArtifactFactory;
-import org.apache.maven.artifact.factory.DefaultArtifactFactory;
-import org.apache.maven.artifact.repository.ArtifactRepository;
-import org.apache.maven.artifact.repository.DefaultArtifactRepository;
-import org.apache.maven.artifact.repository.layout.ArtifactRepositoryLayout;
-import org.apache.maven.artifact.resolver.ArtifactResolver;
-import org.apache.maven.artifact.resolver.DefaultArtifactResolver;
-import org.apache.maven.doxia.siterenderer.Renderer;
-import org.apache.maven.settings.Settings;
-import org.apache.maven.settings.io.xpp3.SettingsXpp3Reader;
-import org.codehaus.plexus.PlexusContainer;
-import org.codehaus.plexus.util.DirectoryScanner;
-
-import java.io.BufferedReader;
-import java.io.File;
-import java.io.FileInputStream;
-import java.io.FileNotFoundException;
-import java.io.FileOutputStream;
-import java.io.FileReader;
-import java.io.IOException;
-import java.lang.reflect.InvocationHandler;
-import java.lang.reflect.Method;
-import java.lang.reflect.Proxy;
-
-/**
- * Test helpers used when verifying mojo interaction in RAT integration tests.
- */
-public final class RatTestHelpers {
-
-    /**
-     * @param pDir Removes the given directory recursively.
-     * @throws IOException in case of errors.
-     */
-    public static void remove(File pDir) throws IOException {
-        if (pDir.isFile()) {
-            if (!pDir.delete()) {
-                throw new IOException("Unable to delete file: " + pDir);
-            }
-        } else if (pDir.isDirectory()) {
-            final File[] files = pDir.listFiles();
-            if (files != null) {
-                for (File file : files) {
-                    remove(file);
-                }
-            }
-            if (!pDir.delete()) {
-                throw new IOException("Unable to delete directory: " + pDir);
-            }
-        } else if (pDir.exists()) {
-            throw new IOException("Unable to delete unknown object " + pDir);
-        }
-    }
-
-    /**
-     * Copies the given files recursively in order to get all integration test
-     * files into a target directory.
-     *
-     * @param pSource source files.
-     * @param pTarget target directory
-     * @throws IOException in case of errors.
-     */
-    public static void copy(File pSource, File pTarget) throws IOException {
-        if (pSource.isDirectory()) {
-            if (!pTarget.isDirectory() && !pTarget.mkdirs()) {
-                throw new IOException("Unable to create directory: " + pTarget);
-            }
-            final DirectoryScanner scanner = new DirectoryScanner();
-            scanner.setBasedir(pSource);
-            scanner.addDefaultExcludes();
-            scanner.setIncludes(new String[]{"*"});
-            scanner.scan();
-            final String[] dirs = scanner.getIncludedDirectories();
-
-            for (final String dir : dirs) {
-                if (!"".equals(dir)) {
-                    copy(new File(pSource, dir), new File(pTarget, dir));
-                }
-            }
-            final String[] files = scanner.getIncludedFiles();
-            for (String file : files) {
-                copy(new File(pSource, file), new File(pTarget, file));
-            }
-        } else if (pSource.isFile()) {
-            final FileInputStream fis = new FileInputStream(pSource);
-            final FileOutputStream fos = new FileOutputStream(pTarget);
-            final byte[] buffer = new byte[8192];
-            for (; ; ) {
-                int res = fis.read(buffer);
-                if (res == -1) {
-                    break;
-                }
-                if (res > 0) {
-                    fos.write(buffer, 0, res);
-                }
-            }
-            fos.close();
-            fis.close();
-        } else {
-            throw new IOException("Unable to copy unknown object " + pSource);
-        }
-    }
-
-    /**
-     * Creates a new instance of {@link Renderer}.
-     *
-     * @param container current plexus container.
-     * @return A configured instance of a Default renderer.
-     * @throws Exception Creating the object failed.
-     */
-    public static Renderer newSiteRenderer(PlexusContainer container)
-            throws Exception {
-        return (Renderer) container.lookup(Renderer.ROLE, "default");
-    }
-
-    /**
-     * Creates a new instance of {@link ArtifactFactory}.
-     *
-     * @return A configured instance of {@link DefaultArtifactFactory}.
-     * @throws Exception Creating the object failed.
-     */
-    public static ArtifactFactory newArtifactFactory() throws Exception {
-        final InvocationHandler handler = new InvocationHandler() {
-            public Object invoke(Object pProxy, Method pMethod, Object[] pArgs)
-                    throws Throwable {
-                System.out.println("Invoking method " + pMethod);
-                throw new IllegalStateException("Not implemented");
-            }
-        };
-        return (ArtifactFactory) Proxy.newProxyInstance(Thread.currentThread()
-                        .getContextClassLoader(),
-                new Class[]{ArtifactFactory.class}, handler);
-    }
-
-    /**
-     * Creates a new instance of {@link ArtifactResolver}.
-     *
-     * @return A configured instance of {@link DefaultArtifactResolver}.
-     * @throws Exception Creating the object failed.
-     */
-    public static ArtifactResolver newArtifactResolver() throws Exception {
-        final InvocationHandler handler = new InvocationHandler() {
-            public Object invoke(Object pProxy, Method pMethod, Object[] pArgs)
-                    throws Throwable {
-                System.out.println("Invoking method " + pMethod);
-                throw new IllegalStateException("Not implemented");
-            }
-        };
-        return (ArtifactResolver) Proxy.newProxyInstance(Thread.currentThread()
-                        .getContextClassLoader(),
-                new Class[]{ArtifactResolver.class}, handler);
-    }
-
-    /**
-     * Creates an instance of {@link ArtifactRepository}.
-     *
-     * @param container current plexus container.
-     * @return A configured instance of {@link DefaultArtifactRepository}.
-     * @throws Exception Creating the object failed.
-     */
-    public static ArtifactRepository newArtifactRepository(
-            PlexusContainer container) throws Exception {
-        File m2Dir = new File(System.getProperty("user.home"), ".m2");
-        File settingsFile = new File(m2Dir, "settings.xml");
-        String localRepo = null;
-        if (settingsFile.exists()) {
-            Settings settings = new SettingsXpp3Reader().read(new FileReader(
-                    settingsFile));
-            localRepo = settings.getLocalRepository();
-        }
-        if (localRepo == null) {
-            localRepo = System.getProperty("user.home") + "/.m2/repository";
-        }
-        ArtifactRepositoryLayout repositoryLayout = (ArtifactRepositoryLayout) container
-                .lookup(ArtifactRepositoryLayout.ROLE, "default");
-        return new DefaultArtifactRepository("local", "file://" + localRepo,
-                repositoryLayout);
-    }
-
-    public static File makeSourceDirectory(String mvnBaseDir, File pFile,
-                                           String pDir, boolean pCreateCopy) throws IOException {
-        if (!pCreateCopy) {
-            return pFile;
-        }
-
-        final File targetDir = new File(new File(new File(mvnBaseDir),
-                "target/it-source"), pDir);
-        remove(targetDir);
-        copy(pFile, targetDir);
-        return targetDir;
-    }
-
-    public static File getSourceDirectory(String mvnBaseDir, String pDir,
-                                          boolean pCreateCopy, final File baseDir) throws IOException {
-        return makeSourceDirectory(mvnBaseDir, new File(new File(baseDir,
-                "src/test/resources/unit"), pDir), pDir, pCreateCopy);
-    }
-
-    /**
-     * Reads the created report file and verifies, whether the detected numbers
-     * are matching.
-     *
-     * @param pRatTxtFile        The file to read.
-     * @param pNumALFiles        The number of files with AL.
-     * @param pNumNoLicenseFiles The number of files without license.
-     * @throws IOException              An error occurred while reading the file or the file does not
-     *                                  exist at all.
-     * @throws IllegalArgumentException In case of mismatches in file numbers passed in as parameter.
-     */
-    public static void ensureRatReportIsCorrect(File pRatTxtFile,
-                                                int pNumALFiles, int pNumNoLicenseFiles) throws IOException {
-        if (!pRatTxtFile.exists()) {
-            throw new FileNotFoundException("Could not find " + pRatTxtFile);
-        }
-        BufferedReader reader = null;
-        try {
-
-            reader = new BufferedReader(new FileReader(pRatTxtFile));
-            Integer numALFiles = null;
-            Integer numNoLicenseFiles = null;
-            for (; ; ) {
-                String line = reader.readLine();
-                if (line == null) {
-                    break;
-                }
-                int offset = line.indexOf("Apache Licensed: ");
-                if (offset >= 0) {
-                    numALFiles = new Integer(line.substring(
-                            offset + "Apache Licensed: ".length()).trim());
-                }
-                offset = line.indexOf("Unknown Licenses");
-                if (offset >= 0) {
-                    numNoLicenseFiles = new Integer(line.substring(0, offset)
-                            .trim());
-                }
-            }
-            reader.close();
-
-            if (!new Integer(pNumALFiles).equals(numALFiles)) {
-                throw new IllegalArgumentException(
-                        "Amount of licensed files does not match. Expected "
-                                + pNumALFiles + ", got " + numALFiles);
-            }
-
-            if (!new Integer(pNumNoLicenseFiles).equals(numNoLicenseFiles)) {
-                throw new IllegalArgumentException(
-                        "Amount of licensed files does not match. Expected "
-                                + pNumALFiles + ", got " + numALFiles);
-            }
-        } finally {
-            IOUtils.closeQuietly(reader);
-        }
-
-    }
-
-}
diff --git a/0.12-release/apache-rat-plugin/src/test/java/org/apache/rat/mp/util/ExclusionHelperTest.java b/0.12-release/apache-rat-plugin/src/test/java/org/apache/rat/mp/util/ExclusionHelperTest.java
deleted file mode 100644
index 696ea62..0000000
--- a/0.12-release/apache-rat-plugin/src/test/java/org/apache/rat/mp/util/ExclusionHelperTest.java
+++ /dev/null
@@ -1,108 +0,0 @@
-package org.apache.rat.mp.util;
-
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements.  See the NOTICE file distributed with
- * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You under the Apache License, Version 2.0
- * (the "License"); you may not use this file except in compliance with
- * the License.  You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-import org.apache.maven.plugin.logging.Log;
-import org.apache.rat.config.SourceCodeManagementSystems;
-import org.junit.Test;
-import org.junit.runner.RunWith;
-import org.mockito.Mock;
-import org.mockito.runners.MockitoJUnitRunner;
-
-import java.util.HashSet;
-import java.util.Set;
-
-import static org.apache.rat.mp.util.ExclusionHelper.ECLIPSE_DEFAULT_EXCLUDES;
-import static org.apache.rat.mp.util.ExclusionHelper.IDEA_DEFAULT_EXCLUDES;
-import static org.apache.rat.mp.util.ExclusionHelper.MAVEN_DEFAULT_EXCLUDES;
-import static org.apache.rat.mp.util.ExclusionHelper.addEclipseDefaults;
-import static org.apache.rat.mp.util.ExclusionHelper.addIdeaDefaults;
-import static org.apache.rat.mp.util.ExclusionHelper.addMavenDefaults;
-import static org.apache.rat.mp.util.ExclusionHelper.addPlexusAndScmDefaults;
-import static org.junit.Assert.assertEquals;
-import static org.junit.Assert.assertTrue;
-
-@RunWith(MockitoJUnitRunner.class)
-public class ExclusionHelperTest {
-
-    @Mock
-    private Log log;
-
-    @Test
-    public void testNumberOfExclusions() {
-        assertEquals("Did you change the number of eclipse excludes?", 3,
-                ECLIPSE_DEFAULT_EXCLUDES.size());
-        assertEquals("Did you change the number of idea excludes?", 4,
-                IDEA_DEFAULT_EXCLUDES.size());
-        assertEquals("Did you change the number of mvn excludes?", 7,
-                MAVEN_DEFAULT_EXCLUDES.size());
-    }
-
-    @Test
-    public void testAddingEclipseExclusions() {
-        final Set<String> exclusion = new HashSet<String>();
-        addEclipseDefaults(log, false, exclusion);
-        assertTrue(exclusion.isEmpty());
-        addEclipseDefaults(log, true, exclusion);
-        assertEquals(3, exclusion.size());
-        addEclipseDefaults(log, true, exclusion);
-        assertEquals(3, exclusion.size());
-    }
-
-    @Test
-    public void testAddingIdeaExclusions() {
-        final Set<String> exclusion = new HashSet<String>();
-        addIdeaDefaults(log, false, exclusion);
-        assertTrue(exclusion.isEmpty());
-        addIdeaDefaults(log, true, exclusion);
-        assertEquals(4, exclusion.size());
-        addIdeaDefaults(log, true, exclusion);
-        assertEquals(4, exclusion.size());
-    }
-
-    @Test
-    public void testAddingMavenExclusions() {
-        final Set<String> exclusion = new HashSet<String>();
-        addMavenDefaults(log, false, exclusion);
-        assertTrue(exclusion.isEmpty());
-        addMavenDefaults(log, true, exclusion);
-        assertEquals(7, exclusion.size());
-        addMavenDefaults(log, true, exclusion);
-        assertEquals(7, exclusion.size());
-    }
-
-    @Test
-    public void testAddingPlexusAndScmExclusion() {
-        final int expectedSizeMergedFromPlexusDefaultsAndScm = (38 + SourceCodeManagementSystems.getPluginExclusions().size());
-
-        final Set<String> exclusion = new HashSet<String>();
-        addPlexusAndScmDefaults(log, false, exclusion);
-        assertTrue(exclusion.isEmpty());
-        addPlexusAndScmDefaults(log, true, exclusion);
-        assertEquals(
-                "Did you upgrade plexus to get more default excludes?",//
-                expectedSizeMergedFromPlexusDefaultsAndScm,//
-                exclusion.size());
-        addPlexusAndScmDefaults(log, true, exclusion);
-        assertEquals(
-                "Did you upgrade plexus to get more default excludes?",//
-                expectedSizeMergedFromPlexusDefaultsAndScm,//
-                exclusion.size());
-    }
-
-}
diff --git a/0.12-release/apache-rat-plugin/src/test/java/org/apache/rat/mp/util/ScmIgnoreParserTest.java b/0.12-release/apache-rat-plugin/src/test/java/org/apache/rat/mp/util/ScmIgnoreParserTest.java
deleted file mode 100644
index 5b24c47..0000000
--- a/0.12-release/apache-rat-plugin/src/test/java/org/apache/rat/mp/util/ScmIgnoreParserTest.java
+++ /dev/null
@@ -1,108 +0,0 @@
-package org.apache.rat.mp.util;
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements.  See the NOTICE file distributed with
- * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You under the Apache License, Version 2.0
- * (the "License"); you may not use this file except in compliance with
- * the License.  You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-import org.apache.commons.io.IOUtils;
-import org.apache.maven.plugin.logging.Log;
-import org.junit.Rule;
-import org.junit.Test;
-import org.junit.rules.TemporaryFolder;
-import org.junit.runner.RunWith;
-import org.mockito.Mock;
-import org.mockito.runners.MockitoJUnitRunner;
-
-import java.io.BufferedWriter;
-import java.io.File;
-import java.io.FileWriter;
-import java.io.IOException;
-import java.util.List;
-
-import static org.apache.rat.mp.util.ScmIgnoreParser.getExcludesFromFile;
-import static org.apache.rat.mp.util.ScmIgnoreParser.getExclusionsFromSCM;
-import static org.apache.rat.mp.util.ScmIgnoreParser.isComment;
-import static org.junit.Assert.assertEquals;
-import static org.junit.Assert.assertFalse;
-import static org.junit.Assert.assertTrue;
-
-@RunWith(MockitoJUnitRunner.class)
-public class ScmIgnoreParserTest {
-    @Rule
-    public TemporaryFolder testFolder = new TemporaryFolder();
-
-    @Mock
-    private Log log;
-
-    private static String IGNORE_EXAMPLE = "**/*.java\r\n## Justus commentos\r\nignoredDirectory";
-
-    @Test
-    public void parseAsNoComments() {
-        assertFalse(isComment(null));
-        assertFalse(isComment(""));
-        assertFalse(isComment("This is a  normal line"));
-        assertFalse(isComment("**/ignoreMe/*"));
-        assertFalse(isComment("C:\\No Space In FileNames Please"));
-    }
-
-    @Test
-    public void parseAsComments() {
-        assertTrue(isComment(" # comment that is"));
-        assertTrue(isComment("## comment that is"));
-        assertTrue(isComment("## comment that is ## "));
-        assertTrue(isComment("     // comment that is ## "));
-        assertTrue(isComment("     /** comment that is **/ "));
-        assertTrue(isComment("     /* comment that is */ "));
-    }
-
-
-    @Test
-    public void parseFromNonExistingFileOrDirectoryOrNull() {
-        assertTrue(getExcludesFromFile(log, new File("./mustNotExist-RAT-171")).isEmpty());
-        assertTrue(getExcludesFromFile(log, null).isEmpty());
-        assertTrue(getExcludesFromFile(log, new File(".")).isEmpty());
-    }
-
-    @Test
-    public void parseFromTargetDirectoryHopefullyWithoutSCMIgnores() {
-        assertTrue(getExclusionsFromSCM(log, new File("./target")).isEmpty());
-    }
-
-    @Test
-    public void parseFromEmptyIgnoreFile() throws IOException {
-        File ignore = testFolder.newFile();
-        assertTrue(ignore.exists());
-        writeToFile(IGNORE_EXAMPLE, ignore);
-
-        final List<String> excludes = getExcludesFromFile(log, ignore);
-        assertFalse(excludes.isEmpty());
-        assertEquals(2, excludes.size());
-    }
-
-    private static void writeToFile(String contents, File file) throws IOException {
-        BufferedWriter bw = null;
-        try {
-            FileWriter fw = new FileWriter(file.getAbsoluteFile());
-            bw = new BufferedWriter(fw);
-            bw.write(contents);
-        } catch (IOException e) {
-            throw e;
-        } finally {
-            IOUtils.closeQuietly(bw);
-        }
-    }
-
-
-}
diff --git a/0.12-release/apache-rat-plugin/src/test/resources/unit/it1/.bzrignore b/0.12-release/apache-rat-plugin/src/test/resources/unit/it1/.bzrignore
deleted file mode 100644
index f59acc0..0000000
--- a/0.12-release/apache-rat-plugin/src/test/resources/unit/it1/.bzrignore
+++ /dev/null
@@ -1,5 +0,0 @@
-## RAT-171: Add rubbish and ensure that the plugin behaves properly
-DoesNotExistAtALL/**
-*\IllegalStuffNotExisting
-Lets-See*+?!OrWhat
-\\nDoesThatWorkAsWell\/
diff --git a/0.12-release/apache-rat-plugin/src/test/resources/unit/it1/pom.xml b/0.12-release/apache-rat-plugin/src/test/resources/unit/it1/pom.xml
deleted file mode 100644
index 81e7955..0000000
--- a/0.12-release/apache-rat-plugin/src/test/resources/unit/it1/pom.xml
+++ /dev/null
@@ -1,36 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!--
-  Licensed to the Apache Software Foundation (ASF) under one or more
-  contributor license agreements.  See the NOTICE file distributed with
-  this work for additional information regarding copyright ownership.
-  The ASF licenses this file to You under the Apache License, Version 2.0
-  (the "License"); you may not use this file except in compliance with
-  the License.  You may obtain a copy of the License at
-
-      http://www.apache.org/licenses/LICENSE-2.0
-
-  Unless required by applicable law or agreed to in writing, software
-  distributed under the License is distributed on an "AS IS" BASIS,
-  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-  See the License for the specific language governing permissions and
-  limitations under the License.
--->
-<project
-    xmlns="http://maven.apache.org/POM/4.0.0"
-    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
-    xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
-  <groupId>org.codehaus.mojo.rat.test</groupId>
-  <artifactId>it1</artifactId>
-  <version>1.0</version>
-  <build>
-    <plugins>
-      <plugin>
-        <groupId>org.apache.rat</groupId>
-        <artifactId>apache-rat-plugin</artifactId>
-        <version>@pom.version@</version>
-        <configuration>
-        </configuration>
-      </plugin>
-    </plugins>
-  </build>
-</project>
diff --git a/0.12-release/apache-rat-plugin/src/test/resources/unit/it2/pom.xml b/0.12-release/apache-rat-plugin/src/test/resources/unit/it2/pom.xml
deleted file mode 100644
index 82eac23..0000000
--- a/0.12-release/apache-rat-plugin/src/test/resources/unit/it2/pom.xml
+++ /dev/null
@@ -1,36 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!--
-  Licensed to the Apache Software Foundation (ASF) under one or more
-  contributor license agreements.  See the NOTICE file distributed with
-  this work for additional information regarding copyright ownership.
-  The ASF licenses this file to You under the Apache License, Version 2.0
-  (the "License"); you may not use this file except in compliance with
-  the License.  You may obtain a copy of the License at
-
-      http://www.apache.org/licenses/LICENSE-2.0
-
-  Unless required by applicable law or agreed to in writing, software
-  distributed under the License is distributed on an "AS IS" BASIS,
-  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-  See the License for the specific language governing permissions and
-  limitations under the License.
--->
-<project
-    xmlns="http://maven.apache.org/POM/4.0.0"
-    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
-    xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
-  <groupId>org.apache.rat.test</groupId>
-  <artifactId>it2</artifactId>
-  <version>1.0</version>
-  <build>
-    <plugins>
-      <plugin>
-        <groupId>org.apache.rat</groupId>
-        <artifactId>apache-rat-plugin</artifactId>
-        <version>@pom.version@</version>
-        <configuration>
-        </configuration>
-      </plugin>
-    </plugins>
-  </build>
-</project>
diff --git a/0.12-release/apache-rat-plugin/src/test/resources/unit/it2/src.txt b/0.12-release/apache-rat-plugin/src/test/resources/unit/it2/src.txt
deleted file mode 100644
index 72d9dff..0000000
--- a/0.12-release/apache-rat-plugin/src/test/resources/unit/it2/src.txt
+++ /dev/null
@@ -1,2 +0,0 @@
-This is a text file, which intentionally has no Apache License Header.
-The Rat plugin should detect it.
diff --git a/0.12-release/apache-rat-plugin/src/test/resources/unit/it3/pom.xml b/0.12-release/apache-rat-plugin/src/test/resources/unit/it3/pom.xml
deleted file mode 100644
index fff9f7c..0000000
--- a/0.12-release/apache-rat-plugin/src/test/resources/unit/it3/pom.xml
+++ /dev/null
@@ -1,36 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!--
-  Licensed to the Apache Software Foundation (ASF) under one or more
-  contributor license agreements.  See the NOTICE file distributed with
-  this work for additional information regarding copyright ownership.
-  The ASF licenses this file to You under the Apache License, Version 2.0
-  (the "License"); you may not use this file except in compliance with
-  the License.  You may obtain a copy of the License at
-
-      http://www.apache.org/licenses/LICENSE-2.0
-
-  Unless required by applicable law or agreed to in writing, software
-  distributed under the License is distributed on an "AS IS" BASIS,
-  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-  See the License for the specific language governing permissions and
-  limitations under the License.
--->
-<project
-    xmlns="http://maven.apache.org/POM/4.0.0"
-    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
-    xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
-  <groupId>org.apache.rat.test</groupId>
-  <artifactId>it3</artifactId>
-  <version>1.0</version>
-  <build>
-    <plugins>
-      <plugin>
-        <groupId>org.apache.rat</groupId>
-        <artifactId>apache-rat-plugin</artifactId>
-        <version>@pom.version@</version>
-        <configuration>
-        </configuration>
-      </plugin>
-    </plugins>
-  </build>
-</project>
diff --git a/0.12-release/apache-rat-plugin/src/test/resources/unit/it3/src.apt b/0.12-release/apache-rat-plugin/src/test/resources/unit/it3/src.apt
deleted file mode 100644
index d4236b7..0000000
--- a/0.12-release/apache-rat-plugin/src/test/resources/unit/it3/src.apt
+++ /dev/null
@@ -1,8 +0,0 @@
-    --------------
-    Some text file
-    --------------
-
-Some text file
-
-  This is a text file, which intentionally has no Apache License Header.
-  The Rat plugin should detect it.
diff --git a/0.12-release/apache-rat-tasks/pom.xml b/0.12-release/apache-rat-tasks/pom.xml
deleted file mode 100644
index 881fdda..0000000
--- a/0.12-release/apache-rat-tasks/pom.xml
+++ /dev/null
@@ -1,172 +0,0 @@
-<?xml version='1.0'?>
-<!--
-  Licensed to the Apache Software Foundation (ASF) under one or more
-  contributor license agreements.  See the NOTICE file distributed with
-  this work for additional information regarding copyright ownership.
-  The ASF licenses this file to You under the Apache License, Version 2.0
-  (the "License"); you may not use this file except in compliance with
-  the License.  You may obtain a copy of the License at
-
-      http://www.apache.org/licenses/LICENSE-2.0
-
-  Unless required by applicable law or agreed to in writing, software
-  distributed under the License is distributed on an "AS IS" BASIS,
-  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-  See the License for the specific language governing permissions and
-  limitations under the License.
--->
-<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
-  <modelVersion>4.0.0</modelVersion>
-  <parent>
-    <groupId>org.apache.rat</groupId>
-    <artifactId>apache-rat-project</artifactId>
-    <version>0.12</version>
-  </parent>
-  <artifactId>apache-rat-tasks</artifactId>
-  <packaging>jar</packaging>
-  <name>Apache Creadur Rat::Tasks4Ant</name>
-  <description>
- A plugin for Apache Ant that runs Apache Rat
-   to audit the source to be distributed.
-  </description>
-
-  <dependencies>
-    <dependency>
-      <groupId>org.apache.rat</groupId>
-      <artifactId>apache-rat-core</artifactId>
-    </dependency>
-    <dependency>
-      <groupId>org.apache.ant</groupId>
-      <artifactId>ant</artifactId>
-    </dependency>
-    <dependency>
-      <groupId>org.apache.ant</groupId>
-      <artifactId>ant-antunit</artifactId>
-    </dependency>
-    <dependency>
-      <groupId>junit</groupId>
-      <artifactId>junit</artifactId>
-    </dependency>
-    <dependency>
-      <groupId>org.apache.ant</groupId>
-      <artifactId>ant-testutil</artifactId>
-    </dependency>
-  </dependencies>
-
-  <build>
-    <resources>
-      <resource>
-        <filtering>false</filtering>
-        <directory>src/main/resources</directory>
-      </resource>
-      <resource>
-        <filtering>true</filtering>
-        <directory>src/main/filtered-resources</directory>
-      </resource>
-      <resource>
-        <directory>..</directory>
-        <targetPath>META-INF</targetPath>
-        <includes>
-          <include>RELEASE_NOTES.txt</include>
-        </includes>
-      </resource>
-    </resources>
-    <plugins>
-      <plugin>
-        <groupId>org.apache.maven.plugins</groupId>
-        <artifactId>maven-dependency-plugin</artifactId>
-        <executions>
-          <execution>
-            <phase>generate-test-resources</phase>
-            <goals>
-              <goal>copy-dependencies</goal>
-            </goals>
-            <configuration>
-              <stripVersion>true</stripVersion>
-              <includeArtifactIds>ant-antunit</includeArtifactIds>
-              <outputDirectory>${project.build.directory}/dependencies</outputDirectory>
-            </configuration>
-          </execution>
-        </executions>
-      </plugin>
-      <plugin>
-        <groupId>org.apache.maven.plugins</groupId>
-        <artifactId>maven-antrun-plugin</artifactId>
-        <executions>
-          <execution>
-            <phase>test</phase>
-            <goals>
-              <goal>run</goal>
-            </goals>
-            <configuration>
-              <target>
-                <ant antfile="src/test/resources/antunit/report-bad-configurations.xml" inheritAll="false" inheritRefs="false">
-                  <property name="jar.name" location="${project.build.outputDirectory}" />
-                  <property name="base.dir" location="${basedir}" />
-                  <property name="antunit.jar.name" location="${project.build.directory}/dependencies/ant-antunit.jar" />
-                  <property name="test.skipped" value="${maven.test.skip}" />
-                  <property name="test.classpath" refid="maven.test.classpath" />
-                </ant>
-                <ant antfile="src/test/resources/antunit/report-normal-operation.xml" inheritAll="false" inheritRefs="false">
-                  <property name="jar.name" location="${project.build.outputDirectory}" />
-                  <property name="base.dir" location="${basedir}" />
-                  <property name="antunit.jar.name" location="${project.build.directory}/dependencies/ant-antunit.jar" />
-                  <property name="test.skipped" value="${maven.test.skip}" />
-                  <property name="test.classpath" refid="maven.test.classpath" />
-                </ant>
-              </target>
-            </configuration>
-          </execution>
-        </executions>
-      </plugin>
-    </plugins>
-    
-    <pluginManagement>
-      <plugins>
-        <plugin>
-          <groupId>org.apache.rat</groupId>
-          <artifactId>apache-rat-plugin</artifactId>
-          <configuration>
-            <excludes>
-              <!-- This file does not have license header because it is used to test license headers -->
-              <exclude>src/test/resources/antunit/index.apt</exclude>
-            </excludes>
-          </configuration>
-        </plugin>
-        <plugin>
-          <groupId>org.eclipse.m2e</groupId>
-          <artifactId>lifecycle-mapping</artifactId>
-          <version>1.0.0</version>
-          <configuration>
-            <lifecycleMappingMetadata>
-              <pluginExecutions>
-                <pluginExecution>
-                  <pluginExecutionFilter>
-                    <groupId>org.apache.maven.plugins</groupId>
-                    <artifactId>maven-dependency-plugin</artifactId>
-                    <versionRange>[2.0,)</versionRange>
-                    <goals>
-                      <goal>copy-dependencies</goal>
-                    </goals>
-                  </pluginExecutionFilter>
-                  <action>
-                    <ignore />
-                  </action>
-                </pluginExecution>
-              </pluginExecutions>
-            </lifecycleMappingMetadata>
-          </configuration>
-        </plugin>
-      </plugins>
-    </pluginManagement>
-  </build>
-  <!-- Strangely no PMD report appears in this submodule -->
-  <reporting>
-    <plugins>
-      <plugin>
-        <groupId>org.apache.maven.plugins</groupId>
-        <artifactId>maven-pmd-plugin</artifactId>
-      </plugin>
-    </plugins>
-  </reporting>
-</project>
diff --git a/0.12-release/apache-rat-tasks/run-antunit.xml b/0.12-release/apache-rat-tasks/run-antunit.xml
deleted file mode 100644
index 6115bea..0000000
--- a/0.12-release/apache-rat-tasks/run-antunit.xml
+++ /dev/null
@@ -1,65 +0,0 @@
-<?xml version='1.0'?>
-<!--
-
- Licensed to the Apache Software Foundation (ASF) under one   *
- or more contributor license agreements.  See the NOTICE file *
- distributed with this work for additional information        *
- regarding copyright ownership.  The ASF licenses this file   *
- to you under the Apache License, Version 2.0 (the            *
- "License"); you may not use this file except in compliance   *
- with the License.  You may obtain a copy of the License at   *
-                                                              *
-   http://www.apache.org/licenses/LICENSE-2.0                 *
-                                                              *
- Unless required by applicable law or agreed to in writing,   *
- software distributed under the License is distributed on an  *
- "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY       *
- KIND, either express or implied.  See the License for the    *
- specific language governing permissions and limitations      *
- under the License.                                           *
-
--->
-<project name="AntUnit Tests for Rat Ant Tasks"
-         default="antunit">
-
-  <property name="jar.name" location="target/classes"/>
-  <property name="antunit.dir"
-            location="src/test/resources/antunit"/>
-  <path id="test-classpath">
-    <pathelement location="${jar.name}"/>
-    <pathelement location="../apache-rat-core/target/classes"/>
-    <pathelement location="target/test-classes"/>
-    <pathelement location="${user.home}/.m2/repository/org/apache/ant/ant-antunit/1.1/ant-antunit-1.1.jar"/>
-    <pathelement location="${user.home}/.m2/repository/commons-lang/commons-lang/2.1/commons-lang-2.1.jar"/>
-    <pathelement location="${user.home}/.m2/repository/commons-cli/commons-cli/1.1/commons-cli-1.1.jar"/>
-    <pathelement location="${user.home}/.m2/repository/commons-collections/commons-collections/3.2/commons-collections-3.2.jar"/>
-    <pathelement location="${user.home}/.m2/repository/commons-io/commons-io/1.4/commons-io-1.4.jar"/>
-  </path>
-  <property name="test.classpath" refid="test-classpath"/>
-
-  <target name="antunit">
-    <subant>
-      <fileset dir="${antunit.dir}"
-                    includes="report-*.xml"/>
-      <property name="jar.name" value="${jar.name}"/>
-      <property name="test.classpath" value="${test.classpath}"/>
-    </subant>
-  </target>
-
-  <target name="prepare-ant-run">
-    <fail unless="file">Must specify "file" property</fail>
-    <ant antfile="${file}">
-      <property name="jar.name" value="${jar.name}"/>
-      <property name="test.classpath" value="${test.classpath}"/>
-    </ant>
-  </target>
-
-  <target name="run-single-test">
-    <ant antfile="${antunit.dir}/${file}"
-         dir="${antunit.dir}"
-         target="${target}">
-      <property name="jar.name" value="${jar.name}"/>
-      <property name="test.classpath" value="${test.classpath}"/>
-    </ant>
-  </target>
-</project>
diff --git a/0.12-release/apache-rat-tasks/src/main/java/org/apache/rat/anttasks/FullTextLicenseMatcher.java b/0.12-release/apache-rat-tasks/src/main/java/org/apache/rat/anttasks/FullTextLicenseMatcher.java
deleted file mode 100644
index 03c9d74..0000000
--- a/0.12-release/apache-rat-tasks/src/main/java/org/apache/rat/anttasks/FullTextLicenseMatcher.java
+++ /dev/null
@@ -1,71 +0,0 @@
- /*
- * Licensed to the Apache Software Foundation (ASF) under one   *
- * or more contributor license agreements.  See the NOTICE file *
- * distributed with this work for additional information        *
- * regarding copyright ownership.  The ASF licenses this file   *
- * to you under the Apache License, Version 2.0 (the            *
- * "License"); you may not use this file except in compliance   *
- * with the License.  You may obtain a copy of the License at   *
- *                                                              *
- *   http://www.apache.org/licenses/LICENSE-2.0                 *
- *                                                              *
- * Unless required by applicable law or agreed to in writing,   *
- * software distributed under the License is distributed on an  *
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY       *
- * KIND, either express or implied.  See the License for the    *
- * specific language governing permissions and limitations      *
- * under the License.                                           *
- */ 
-package org.apache.rat.anttasks;
-
-import org.apache.rat.analysis.RatHeaderAnalysisException;
-import org.apache.rat.analysis.license.FullTextMatchingLicense;
-import org.apache.rat.api.Document;
-import org.apache.tools.ant.BuildException;
-import org.apache.tools.ant.Project;
-
-/**
- * Adapts {@link FullTextMatchingLicense FullTextMatchingLicense}
- * to Ant's method naming conventions so it becomes easy to write
- * text matching based license matchers inside an Ant build file.
- * @since Rat Antlib 0.9
- */
-public class FullTextLicenseMatcher extends FullTextMatchingLicense {
-    private boolean validated = false;
-    private String fullText = "";
-    private Project project;
-
-    public void setProject(Project project) {
-        this.project = project;
-    }
-
-    public void addText(String text) {
-        if (text != null && text.trim().length() > 0) {
-            setFullText(fullText += project.replaceProperties(text));
-        }
-    }
-
-    @Override
-    public boolean match(Document subject, String line) throws RatHeaderAnalysisException {
-        validate();
-        return super.match(subject, line);
-    }
-
-    private void validate() {
-        if (!validated) {
-            validated  = true;
-            if (!hasFullText()) {
-                throw new BuildException("You must specify the text to match.");
-            }
-            if (getLicenseFamilyCategory() == null) {
-                throw new BuildException("The licenseFamilyCategory attribute"
-                                         + " is required.");
-            }
-            if (getLicenseFamilyName() == null) {
-                throw new BuildException("The licenseFamilyName attribute"
-                                         + " is required.");
-            }
-        }
-    }
-
-}
diff --git a/0.12-release/apache-rat-tasks/src/main/java/org/apache/rat/anttasks/Report.java b/0.12-release/apache-rat-tasks/src/main/java/org/apache/rat/anttasks/Report.java
deleted file mode 100644
index dc9f5b0..0000000
--- a/0.12-release/apache-rat-tasks/src/main/java/org/apache/rat/anttasks/Report.java
+++ /dev/null
@@ -1,359 +0,0 @@
- /*
- * Licensed to the Apache Software Foundation (ASF) under one   *
- * or more contributor license agreements.  See the NOTICE file *
- * distributed with this work for additional information        *
- * regarding copyright ownership.  The ASF licenses this file   *
- * to you under the Apache License, Version 2.0 (the            *
- * "License"); you may not use this file except in compliance   *
- * with the License.  You may obtain a copy of the License at   *
- *                                                              *
- *   http://www.apache.org/licenses/LICENSE-2.0                 *
- *                                                              *
- * Unless required by applicable law or agreed to in writing,   *
- * software distributed under the License is distributed on an  *
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY       *
- * KIND, either express or implied.  See the License for the    *
- * specific language governing permissions and limitations      *
- * under the License.                                           *
- */ 
-package org.apache.rat.anttasks;
-
- import org.apache.commons.io.IOUtils;
- import org.apache.rat.Defaults;
- import org.apache.rat.ReportConfiguration;
- import org.apache.rat.analysis.IHeaderMatcher;
- import org.apache.rat.analysis.util.HeaderMatcherMultiplexer;
- import org.apache.rat.api.RatException;
- import org.apache.rat.license.ILicenseFamily;
- import org.apache.tools.ant.BuildException;
- import org.apache.tools.ant.Project;
- import org.apache.tools.ant.Task;
- import org.apache.tools.ant.taskdefs.LogOutputStream;
- import org.apache.tools.ant.types.EnumeratedAttribute;
- import org.apache.tools.ant.types.Resource;
- import org.apache.tools.ant.types.ResourceCollection;
- import org.apache.tools.ant.types.resources.Union;
- import org.apache.tools.ant.util.FileUtils;
-
- import javax.xml.transform.TransformerException;
- import java.io.File;
- import java.io.FileWriter;
- import java.io.IOException;
- import java.io.InputStream;
- import java.io.OutputStreamWriter;
- import java.io.PrintWriter;
- import java.util.ArrayList;
- import java.util.List;
-
-/**
- * A basic Ant task that generates a report on all files specified by
- * the nested resource collection(s).
- *
- * <p>IHeaderMatcher(s) can be specified as nested elements as well.</p>
- *
- * <p>The attribute <code>format</code> defines the output format and
- * can take the values
- * <ul>
- *   <li>xml - Rat's native XML output.</li>
- *   <li>styled - transforms the XML output using the given
- *   stylesheet.  The stylesheet attribute must be set as well if this
- *   attribute is used.</li>
- *   <li>plain - plain text using Rat's built-in stylesheet.  This is
- *   the default.</li>
- * </ul>
- */
-public class Report extends Task {
-
-    /**
-     * will hold any nested resource collection
-     */
-    private Union nestedResources;
-    /**
-     * The licenses we want to match on.
-     */
-    private ArrayList<IHeaderMatcher> licenseMatchers = new ArrayList<IHeaderMatcher>();
-
-    private ArrayList<ILicenseFamily> licenseNames = new ArrayList<ILicenseFamily>();
-
-    /**
-     * Whether to add the default list of license matchers.
-     */
-    private boolean addDefaultLicenseMatchers = true;
-    /**
-     * Where to send the report.
-     */
-    private File reportFile;
-    /**
-     * Which format to use.
-     */
-    private Format format = Format.PLAIN;
-    /**
-     * Which stylesheet to use.
-     */
-    private Resource stylesheet;
-    /**
-     * Whether to add license headers.
-     */
-    private AddLicenseHeaders addLicenseHeaders = new AddLicenseHeaders(AddLicenseHeaders.FALSE);
-    /**
-     * The copyright message.
-     */
-    private String copyrightMessage;
-
-    /**
-     * Adds resources that will be checked.
-     * @param rc resource to check.
-     */
-    public void add(ResourceCollection rc) {
-        if (nestedResources == null) {
-            nestedResources = new Union();
-        }
-        nestedResources.add(rc);
-    }
-
-    /**
-     * @param matcher Adds a license matcher.
-     */
-    public void add(IHeaderMatcher matcher) {
-        licenseMatchers.add(matcher);
-    }
-
-    public void add(ILicenseFamily license) {
-        licenseNames.add(license);
-    }
-
-    /**
-     * @param addDefaultLicenseMatchers Whether to add the default list of license matchers.
-     */
-    public void setAddDefaultLicenseMatchers(boolean addDefaultLicenseMatchers) {
-        this.addDefaultLicenseMatchers = addDefaultLicenseMatchers;
-    }
-
-    /**
-     * Where to send the report to.
-     * @param f report output file.
-     */
-    public void setReportFile(File f) {
-        reportFile = f;
-    }
-
-    /**
-     * Which format to use.
-     * @param f format. 
-     */
-    public void setFormat(Format f) {
-        if (f == null) {
-            throw new IllegalArgumentException("format must not be null");
-        }
-        format = f;
-    }
-
-    /**
-     * @param pAdd Whether to add license headers. 
-     */
-    public void setAddLicenseHeaders(AddLicenseHeaders pAdd) {
-        if (pAdd == null) {
-            throw new IllegalArgumentException("addLicenseHeaders must not be null");
-        }
-        addLicenseHeaders = pAdd;
-    }
-
-    /**
-     * @param pMessage copyright message to set.
-     */
-    public void setCopyrightMessage(String pMessage) {
-        copyrightMessage = pMessage;
-    }
-    
-    /**
-     * Which stylesheet to use (only meaningful with format='styled').
-     * @param u stylesheet.
-     */
-    public void addConfiguredStylesheet(Union u) {
-        if (stylesheet != null || u.size() != 1) {
-            throw new BuildException("You must not specify more than one"
-                                     + " stylesheet.");
-        }
-        stylesheet = (Resource) u.iterator().next();
-    }
-
-    /**
-     * Generates the report.
-     */
-    @Override
-    public void execute() {
-        validate();
-
-        PrintWriter out = null;
-        try {
-            if (reportFile == null) {
-                out = new PrintWriter(
-                          new OutputStreamWriter(
-                              new LogOutputStream(this, Project.MSG_INFO)
-                              )
-                          );
-            } else {
-                out = new PrintWriter(new FileWriter(reportFile));
-            }
-            createReport(out);
-            out.flush();
-        } catch (IOException ioex) {
-            throw new BuildException(ioex);
-        } catch (TransformerException e) {
-            throw new BuildException(e);
-        } catch (InterruptedException e) {
-            throw new BuildException(e);
-        } catch (RatException e) {
-            throw new BuildException(e);
-        } finally {
-            IOUtils.closeQuietly(out);
-        }
-    }
-
-    /**
-     * validates the task's configuration.
-     */
-    private void validate() {
-        if (nestedResources == null) {
-            throw new BuildException("You must specify at least one file to"
-                                     + " create the report for.");
-        }
-        if (!addDefaultLicenseMatchers && licenseMatchers.size() == 0) {
-            throw new BuildException("You must specify at least one license"
-                                     + " matcher");
-        }
-        if (format.getValue().equals(Format.STYLED_KEY)) {
-            if (stylesheet == null) {
-                throw new BuildException("You must specify a stylesheet when"
-                                         + " using the 'styled' format");
-            }
-            if (!stylesheet.isExists()) {
-                throw new BuildException("Cannot find specified stylesheet '"
-                                         + stylesheet + "'");
-            }
-        } else if (stylesheet != null) {
-            log("Ignoring stylesheet '" + stylesheet + "' when using format '"
-                + format.getValue() + "'", Project.MSG_WARN);
-        }
-    }
-
-    /**
-     * Writes the report to the given stream.
-     * 
-     * @param out stream to write report to.
-     * 
-     * @throws IOException in case of I/O errors.
-     * @throws InterruptedException in case of threading errors.
-     * @throws TransformerException in case of XML errors.
-     * @throws RatException in case of general errors.
-     */
-    private void createReport(PrintWriter out) throws IOException, TransformerException, InterruptedException, RatException {
-        final ReportConfiguration configuration = new ReportConfiguration();
-        configuration.setHeaderMatcher(new HeaderMatcherMultiplexer(getLicenseMatchers()));
-        configuration.setApprovedLicenseNames(getApprovedLicenseNames());
-        configuration.setApproveDefaultLicenses(addDefaultLicenseMatchers);
-        
-        if (AddLicenseHeaders.FORCED.equalsIgnoreCase(addLicenseHeaders.getValue())) {
-            configuration.setAddingLicenses(true);
-            configuration.setAddingLicensesForced(true);
-            configuration.setCopyrightMessage(copyrightMessage);
-        } else if (AddLicenseHeaders.TRUE.equalsIgnoreCase(addLicenseHeaders.getValue())) {
-            configuration.setAddingLicenses(true);
-            configuration.setCopyrightMessage(copyrightMessage);
-        } else if (!AddLicenseHeaders.FALSE.equalsIgnoreCase(addLicenseHeaders.getValue())) {
-            throw new BuildException("Invalid value for addLicenseHeaders: " + addLicenseHeaders.getValue());
-        }
-        ResourceCollectionContainer rcElement = new ResourceCollectionContainer(nestedResources);
-        if (format.getValue().equals(Format.XML_KEY)) {
-            org.apache.rat.Report.report(rcElement, out, configuration);
-        } else {
-            InputStream style = null;
-            try {
-                if (format.getValue().equals(Format.PLAIN_KEY)) {
-                    style = Defaults.getPlainStyleSheet();
-                } else if (format.getValue().equals(Format.STYLED_KEY)) {
-                    style = stylesheet.getInputStream();
-                } else {
-                    throw new BuildException("unsupported format '"
-                                             + format.getValue() + "'");
-                }
-                org.apache.rat.Report.report(out, rcElement, style,
-                                             configuration);
-            } finally {
-                FileUtils.close(style);
-            }
-        }
-    }
-
-    /**
-     * Flattens all nested matchers plus the default matchers (if
-     * required) into a single array.
-     */
-    private List<IHeaderMatcher> getLicenseMatchers() {
-        List<IHeaderMatcher> matchers = new ArrayList<IHeaderMatcher>(Defaults.DEFAULT_MATCHERS);
-        if (addDefaultLicenseMatchers) {
-            int nestedSize = licenseMatchers.size();
-            if (nestedSize != 0) {
-                matchers.addAll(licenseMatchers);
-            }
-        } else {
-            matchers = new ArrayList<IHeaderMatcher>();
-        }
-        return matchers;
-    }
-
-    private ILicenseFamily[] getApprovedLicenseNames() {
-        // TODO: add support for adding default licenses
-        ILicenseFamily[] results = null;
-        if (licenseNames.size() > 0) {
-            results = licenseNames.toArray(new ILicenseFamily[0]);
-        }
-        return results;
-    }
-
-    /**
-     * Type for the format attribute.
-     */
-    public static class Format extends EnumeratedAttribute {
-        static final String XML_KEY = "xml";
-        static final String STYLED_KEY = "styled";
-        static final String PLAIN_KEY = "plain";
-
-        static final Format PLAIN = new Format(PLAIN_KEY);
-
-        public Format() { super(); }
-
-        private Format(String s) {
-            this();
-            setValue(s);
-        }
-
-        @Override
-        public String[] getValues() {
-            return new String[] {
-                XML_KEY, STYLED_KEY, PLAIN_KEY
-            };
-        }
-    }
-
-    /**
-     * Type for the addLicenseHeaders attribute.
-     */
-    public static class AddLicenseHeaders extends EnumeratedAttribute {
-        static final String TRUE = "true";
-        static final String FALSE = "false";
-        static final String FORCED = "forced";
-
-        public AddLicenseHeaders() {}
-        public AddLicenseHeaders(String s) {
-            setValue(s);
-        }
-        
-        @Override
-        public String[] getValues() {
-            return new String[] {
-                TRUE, FALSE, FORCED
-            };
-        }
-    }
-}
diff --git a/0.12-release/apache-rat-tasks/src/main/java/org/apache/rat/anttasks/ResourceCollectionContainer.java b/0.12-release/apache-rat-tasks/src/main/java/org/apache/rat/anttasks/ResourceCollectionContainer.java
deleted file mode 100644
index ff882c1..0000000
--- a/0.12-release/apache-rat-tasks/src/main/java/org/apache/rat/anttasks/ResourceCollectionContainer.java
+++ /dev/null
@@ -1,105 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one   *
- * or more contributor license agreements.  See the NOTICE file *
- * distributed with this work for additional information        *
- * regarding copyright ownership.  The ASF licenses this file   *
- * to you under the Apache License, Version 2.0 (the            *
- * "License"); you may not use this file except in compliance   *
- * with the License.  You may obtain a copy of the License at   *
- *                                                              *
- *   http://www.apache.org/licenses/LICENSE-2.0                 *
- *                                                              *
- * Unless required by applicable law or agreed to in writing,   *
- * software distributed under the License is distributed on an  *
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY       *
- * KIND, either express or implied.  See the License for the    *
- * specific language governing permissions and limitations      *
- * under the License.                                           *
- */ 
-package org.apache.rat.anttasks;
-
-import java.io.File;
-import java.io.IOException;
-import java.io.InputStream;
-import java.io.InputStreamReader;
-import java.io.Reader;
-import java.util.Iterator;
-
-import org.apache.rat.api.Document;
-import org.apache.rat.api.MetaData;
-import org.apache.rat.api.RatException;
-import org.apache.rat.document.impl.DocumentImplUtils;
-import org.apache.rat.report.IReportable;
-import org.apache.rat.report.RatReport;
-import org.apache.tools.ant.types.Resource;
-import org.apache.tools.ant.types.ResourceCollection;
-import org.apache.tools.ant.types.resources.FileResource;
-
-/**
- * Implementation of IReportable that traverses over a resource
- * collection internally.
- */
-class ResourceCollectionContainer implements IReportable {
-    private final ResourceCollection rc;
-
-    ResourceCollectionContainer(ResourceCollection rc) {
-        this.rc = rc;
-    }
-
-    public void run(RatReport report) throws RatException {
-        ResourceDocument document = new ResourceDocument();
-        for (Iterator<?> iter = rc.iterator(); iter.hasNext(); ) {
-            Resource r = (Resource) iter.next();
-            if (!r.isDirectory()) {
-                document.setResource(r);
-                document.getMetaData().clear();
-                report.report(document);
-            }
-        }
-    }
-    private class ResourceDocument implements Document {
-
-        private Resource resource;
-        private final MetaData metaData = new MetaData();
-
-        private void setResource(Resource resource) {
-            this.resource = resource;
-        }
-        
-        public Reader reader() throws IOException {
-            final InputStream in = resource.getInputStream();
-            final Reader result = new InputStreamReader(in);
-            return result;
-        }
-
-        public String getName() {
-            // TODO: reconsider names
-            String result = null;
-            if (resource instanceof FileResource) {
-                final FileResource fileResource = (FileResource) resource;
-                final File file = fileResource.getFile();
-                result = DocumentImplUtils.toName(file);
-            } else {
-                result = resource.getName();
-            }
-            return result;
-        }
-
-        public boolean isComposite() {
-            if (resource instanceof FileResource) {
-                final FileResource fileResource = (FileResource) resource;
-                final File file = fileResource.getFile();
-                return DocumentImplUtils.isZip(file);
-            }
-            return false;
-        }
-        
-        public MetaData getMetaData() {
-            return metaData;
-        }
-        
-        public InputStream inputStream() throws IOException {
-            return resource.getInputStream();
-        }
-    }
-}
diff --git a/0.12-release/apache-rat-tasks/src/main/java/org/apache/rat/anttasks/SubstringLicenseMatcher.java b/0.12-release/apache-rat-tasks/src/main/java/org/apache/rat/anttasks/SubstringLicenseMatcher.java
deleted file mode 100644
index f2469eb..0000000
--- a/0.12-release/apache-rat-tasks/src/main/java/org/apache/rat/anttasks/SubstringLicenseMatcher.java
+++ /dev/null
@@ -1,72 +0,0 @@
- /*
- * Licensed to the Apache Software Foundation (ASF) under one   *
- * or more contributor license agreements.  See the NOTICE file *
- * distributed with this work for additional information        *
- * regarding copyright ownership.  The ASF licenses this file   *
- * to you under the Apache License, Version 2.0 (the            *
- * "License"); you may not use this file except in compliance   *
- * with the License.  You may obtain a copy of the License at   *
- *                                                              *
- *   http://www.apache.org/licenses/LICENSE-2.0                 *
- *                                                              *
- * Unless required by applicable law or agreed to in writing,   *
- * software distributed under the License is distributed on an  *
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY       *
- * KIND, either express or implied.  See the License for the    *
- * specific language governing permissions and limitations      *
- * under the License.                                           *
- */ 
-package org.apache.rat.anttasks;
-
-import java.util.ArrayList;
-import java.util.List;
-import org.apache.rat.analysis.license.SimplePatternBasedLicense;
-import org.apache.tools.ant.BuildException;
-
-/**
- * Adapts {@link SimplePatternBasedLicense SimplePatternBasedLicense}
- * to Ant's method naming conventions so it becomes easy to write
- * substring based license matchers inside an Ant build file.
- * @since Rat Antlib 0.8
- */
-public class SubstringLicenseMatcher extends SimplePatternBasedLicense {
-    private List<String> patterns = new ArrayList<String>();
-    private boolean validated = false;
-
-    public void addConfiguredPattern(Pattern p) {
-        patterns.add(p.getSubstring());
-    }
-
-    @Override
-    public String[] getPatterns() {
-        validate();
-        return patterns.toArray(new String[0]);
-    }
-
-    private void validate() {
-        if (!validated) {
-            validated  = true;
-            if (patterns.size() == 0) {
-                throw new BuildException("You must specify at least one nested"
-                                         + " pattern.");
-            }
-            if (getLicenseFamilyCategory() == null) {
-                throw new BuildException("The licenseFamilyCategory attribute"
-                                         + " is required.");
-            }
-            if (getLicenseFamilyName() == null) {
-                throw new BuildException("The licenseFamilyName attribute"
-                                         + " is required.");
-            }
-        }
-    }
-
-    /**
-     * A simple wrapper around a substring.
-     */
-    public static class Pattern {
-        private String substring;
-        public void setSubstring(String s) { substring = s; }
-        public String getSubstring() { return substring; }
-    }
-}
diff --git a/0.12-release/apache-rat-tasks/src/main/resources/org/apache/rat/anttasks/antlib.xml b/0.12-release/apache-rat-tasks/src/main/resources/org/apache/rat/anttasks/antlib.xml
deleted file mode 100644
index 80d65b0..0000000
--- a/0.12-release/apache-rat-tasks/src/main/resources/org/apache/rat/anttasks/antlib.xml
+++ /dev/null
@@ -1,79 +0,0 @@
-<?xml version='1.0'?>
-<!--
-
- Licensed to the Apache Software Foundation (ASF) under one   *
- or more contributor license agreements.  See the NOTICE file *
- distributed with this work for additional information        *
- regarding copyright ownership.  The ASF licenses this file   *
- to you under the Apache License, Version 2.0 (the            *
- "License"); you may not use this file except in compliance   *
- with the License.  You may obtain a copy of the License at   *
-                                                              *
-   http://www.apache.org/licenses/LICENSE-2.0                 *
-                                                              *
- Unless required by applicable law or agreed to in writing,   *
- software distributed under the License is distributed on an  *
- "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY       *
- KIND, either express or implied.  See the License for the    *
- specific language governing permissions and limitations      *
- under the License.                                           *
-
--->
-
-<antlib>
-  <taskdef name="report" classname="org.apache.rat.anttasks.Report"/>
-
-  <typedef name="substringMatcher"
-           classname="org.apache.rat.anttasks.SubstringLicenseMatcher"/>
-  <typedef name="fullTextMatcher"
-           classname="org.apache.rat.anttasks.FullTextLicenseMatcher"/>
-
-  <!-- typedef the built-in license matchers -->
-  <typedef name="asl20"
-    classname="org.apache.rat.analysis.license.ApacheSoftwareLicense20"/>
-  <typedef name="generated"
-    classname="org.apache.rat.analysis.generation.GeneratedLicenseNotRequired"/>
-  <typedef name="javadoc"
-    classname="org.apache.rat.analysis.generation.JavaDocLicenseNotRequired"/>
-  <typedef name="oasis"
-    classname="org.apache.rat.analysis.license.OASISLicense"/>
-  <typedef name="w3c"
-    classname="org.apache.rat.analysis.license.W3CLicense"/>
-  <typedef name="w3c-doc"
-    classname="org.apache.rat.analysis.license.W3CDocLicense"/>
-  <typedef name="dojo"
-    classname="org.apache.rat.analysis.license.DojoLicenseHeader"/>
-  <typedef name="gpl1"
-    classname="org.apache.rat.analysis.license.GPL1License"/>
-  <typedef name="gpl2"
-    classname="org.apache.rat.analysis.license.GPL2License"/>
-  <typedef name="gpl3"
-    classname="org.apache.rat.analysis.license.GPL3License"/>
-  <typedef name="mit"
-    classname="org.apache.rat.analysis.license.MITLicense"/>
-
-  <!-- typedef the built-in license families -->
-  <typedef name="w3c-doc-license"
-    classname="org.apache.rat.license.W3CDocumentLicenseFamily"/>
-  <typedef name="w3c-soft-license"
-    classname="org.apache.rat.license.W3CSoftwareLicenseFamily"/>
-  <typedef name="oasis-license"
-    classname="org.apache.rat.license.OASISLicenseFamily"/>
-  <typedef name="apache20-license"
-    classname="org.apache.rat.license.Apache20LicenseFamily"/> 
-  <typedef name="academic-free-21"
-    classname="org.apache.rat.license.AcademicFree21LicenseFamily"/> 
-  <typedef name="modified-bsd"
-    classname="org.apache.rat.license.ModifiedBSDLicenseFamily"/> 
-  <typedef name="approvedLicense"
-           classname="org.apache.rat.license.SimpleLicenseFamily"/> 
-  <typedef name="gpl1-family"
-    classname="org.apache.rat.license.GPL1LicenseFamily"/> 
-  <typedef name="gpl2-family"
-    classname="org.apache.rat.license.GPL2LicenseFamily"/> 
-  <typedef name="gpl3-family"
-    classname="org.apache.rat.license.GPL3LicenseFamily"/> 
-  <typedef name="mit-family"
-    classname="org.apache.rat.license.MITLicenseFamily"/> 
-    
-</antlib>
diff --git a/0.12-release/apache-rat-tasks/src/site/apt/examples/basic.apt.vm b/0.12-release/apache-rat-tasks/src/site/apt/examples/basic.apt.vm
deleted file mode 100644
index c9a8546..0000000
--- a/0.12-release/apache-rat-tasks/src/site/apt/examples/basic.apt.vm
+++ /dev/null
@@ -1,134 +0,0 @@
-~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
-~~   Licensed to the Apache Software Foundation (ASF) under one or more
-~~   contributor license agreements.  See the NOTICE file distributed with
-~~   this work for additional information regarding copyright ownership.
-~~   The ASF licenses this file to You under the Apache License, Version 2.0
-~~   (the "License"); you may not use this file except in compliance with
-~~   the License.  You may obtain a copy of the License at
-~~
-~~       http://www.apache.org/licenses/LICENSE-2.0
-~~
-~~   Unless required by applicable law or agreed to in writing, software
-~~   distributed under the License is distributed on an "AS IS" BASIS,
-~~   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-~~   See the License for the specific language governing permissions and
-~~   limitations under the License.
-~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
-
-                        ----
-                        Basic Usage Examples
-                        ----
-
-Examples
-
-  These examples assume you have installed the Rat Antlib in a way
-  that provides the Report task in the XML namespace associated with
-  the prefix <<<rat>>>.
-
-* Run Rat in default configuration on all files in directory
-  <<<src>>>.
-
----
-<rat:report>
-    <fileset dir="src"/>
-</rat:report>
----
-
-  The report will be written to Ant's logging system.
-
-  This corresponds to the command line
-
-+------------------------------------------+
-java -jar apache-rat-${project.version}.jar src
-+------------------------------------------+
-
-  except that Ant's default excludes will be applied when looking for
-  documents to check.
-
-* Run Rat on multiple directories
-
----
-<rat:report>
-    <fileset dir="module1/src/main"/>
-    <fileset dir="module2/src/test"/>
-</rat:report>
----
-
-* Adding license headers
-
-  The equivalent of
-
-+------------------------------------------+
-java -jar apache-rat-${project.version}.jar --addlicense
-  --copyright "Copyright 2008 Foo"
-  /path/to/project
-+------------------------------------------+
-
-  is
-
----
-<rat:report addLicenseHeaders="true"
-            coprightMessage="Copyright 2008 Foo">
-    <fileset dir="/path/to/project"/>
-</rat:report>
----
-
-* Create a styled HTML report
-
----
-<rat:report format="styled" reportFile="rat.html">
-    <fileset dir="src"/>
-    <stylesheet>
-        <file file="my/rat-xml-2-html.xslt"/>
-    </stylesheet>
-</rat:report>
----
-
-* Run Rat on a tarball located on a webserver
-
----
-<rat:report>
-    <tarfileset>
-        <gzipresource>
-            <url url="http://example.org/some.tar.gz"/>
-        </gzipresource>
-    </tarfileset>
-</rat:report>
----
-
-* Run Rat but make the Apache License Version 2.0 the only one
-  accepted
-
----
-<rat:report addDefaultLicenseMatchers="false">
-    <fileset dir="src"/>
-    <rat:asl20/>
-</rat:report>
----
-
-* Run Rat on all files in <<<src>>> that have been modified today
-
----
-<tstamp/>
-<rat:report xmlns:rat="antlib:org.apache.rat.anttasks">
-    <restrict>
-        <fileset dir="src"/>
-        <date when="after" datetime="${DSTAMP}" pattern="yyyyMMdd"/>
-    </restrict>
-</rat:report>
----
-
-* Make Rat only detect your custom license and mark this license
-  approved.
-
----
-<rat:report addDefaultLicenseMatchers="false">
-    <fileset dir="src"/>
-    <rat:substringMatcher licenseFamilyCategory="YASL1"
-             licenseFamilyName="Yet Another Software License, Version 1.0">
-        <pattern substring="Yet Another Software License, 1.0"/>
-    </rat:substringMatcher>
-    <rat:approvedLicense
-             familyName="Yet Another Software License, Version 1.0"/>
-</rat:report>
----
diff --git a/0.12-release/apache-rat-tasks/src/site/apt/examples/custom.apt b/0.12-release/apache-rat-tasks/src/site/apt/examples/custom.apt
deleted file mode 100644
index acf5e11..0000000
--- a/0.12-release/apache-rat-tasks/src/site/apt/examples/custom.apt
+++ /dev/null
@@ -1,156 +0,0 @@
-~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
-~~   Licensed to the Apache Software Foundation (ASF) under one or more
-~~   contributor license agreements.  See the NOTICE file distributed with
-~~   this work for additional information regarding copyright ownership.
-~~   The ASF licenses this file to You under the Apache License, Version 2.0
-~~   (the "License"); you may not use this file except in compliance with
-~~   the License.  You may obtain a copy of the License at
-~~
-~~       http://www.apache.org/licenses/LICENSE-2.0
-~~
-~~   Unless required by applicable law or agreed to in writing, software
-~~   distributed under the License is distributed on an "AS IS" BASIS,
-~~   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-~~   See the License for the specific language governing permissions and
-~~   limitations under the License.
-~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
-                ---
-                Custom Types
-                ---
-
-Custom Types
-
- It is possible to provide license matchers or license families of
- your own by implementing one of the Rat interfaces and providing the
- implementation as an Ant type.  This example will show how to use a
- custom license matcher.
-
- To be suitable as an Ant type your class must provide a public no-arg
- constructor (or no constructor at all).  If you want to support
- configuration of your instance via XML attributes or nested elements
- your type must provide methods that follow Ant's method naming
- conventions.  For details see the
- {{{http://ant.apache.org/manual/develop.html#writingowntask} Writing
- Your Own Task}} section in Ant's manual.
-
- For this example let us assume you want to match a license that looks
- like
-
-------------------------------------------------------------------
-  /**
-   * Yet Another Software License, 1.0
-   *
-   * Lots of text, specifying the users rights, and whatever ...
-   */
-------------------------------------------------------------------
-
- and to make things a bit more interesting the version number shall be
- configurable as an attribute on your type.
-
- An implementation of this matcher could look like
-
-------------------------------------------------------------------
-package org.example;
-
-import org.apache.rat.analysis.IHeaderMatcher;
-import org.apache.rat.analysis.RatHeaderAnalysisException;
-import org.apache.rat.api.Document;
-import org.apache.rat.api.MetaData;
-import org.apache.rat.api.MetaData.Datum;
-
-/** Just a POJO with no constructor at all */
-public class YASLMatcher implements IHeaderMatcher {
-    private final String MATCH = "Yet Another Software License, ";
-    private final String FAMILY = "YASL";
-    private final String ONE = "1.0";
-    private String matchWithVersion = MATCH + ONE;
-    private String familyWithVersion = FAMILY + ONE;
-
-    /** becomes the version attribute */
-    public void setVersion(String v) {
-       matchWithVersion = MATCH + v;
-       familyWithVersion = FAMILY + v;
-    }
-
-    public void reset() { }
-
-    /** trivial implementation that looks for a fixed string */
-    public boolean match(Document subject, String line)
-           throws RatHeaderAnalysisException {
-        if (line.indexOf(matchWithVersion) >= 0) {
-            // this is what matchers are supposed to do when they find a
-            // match, even though it is not documented very well
-            subject.getMetaData().set(new Datum(MetaData.RAT_URL_LICENSE_FAMILY_CATEGORY,
-                                      familyWithVersion));
-            return true;
-        }
-        return false;
-    }
-}
-------------------------------------------------------------------
-
- Actually it would be easier to use Rat's
- <<<SimplePatternBasedLicense>>> implementation or the built-in
- {{{../types.html#substringMatcher}<<<substringMatcher>>>}}, but this
- is just an example.
-
- In order to use your matcher it has to be defined as an Ant type.
- You do so by either using
- {{{http://ant.apache.org/manual/Tasks/typedef.html} <<<typedef>>>}} or
- {{{http://ant.apache.org/manual/Tasks/componentdef.html}
- <<<componentdef>>>}}.  If you are using Ant 1.8.x you should use
- <<<componentdef>>>.
-
- In the most simple case this means
-
-------------------------------------------------------------------
-<componentdef name="yasl"
-              classname="org.example.YASLMatcher"/>
-------------------------------------------------------------------
-
- Since you will be using classes from Rat's core in both the Report
- task and your implementation you must ensure they get loaded via the
- same classloader.  If you are using the <<<-lib>>> command line
- switch Rat's core will be part of Ant's core classloader and you don't
- need to reference it in the <<<typedef>>> for <<<yasl>>> at all.
-
- If you define the Rat Antlib via a <<<taskdef>>> task with a nested
- <<<classpath>>> then you just use the same <<<classpath>>> when
- defining your custom matcher as well and set <<<loaderRef>>> to the
- same name.  I.e.
-
--------
-<path id="rat-classpath">
-    <pathelement location="YOUR-PATH-TO/apache-rat-${version}.jar"/>
-    <pathelement location="YOUR-PATH-TO/yasl-matcher.jar"/>
-</path>
-<taskdef
-    classpathref="rat-classpath"
-    loaderref="rat-classloader"
-    resource="org/apache/rat/anttasks/antlib.xml">
-</taskdef>
-<componentdef name="yasl"
-    classpathref="rat-classpath"
-    loaderref="rat-classloader"
-    classname="org.example.YASLMatcher"/>
--------
-
- With a definition like this you can use your matcher as in
-
-------
-<report>
-    <fileset dir="src"/>
-    <yasl/>
-</report>
------
-
- to detect Version 1.0 or
-
-------
-<report>
-    <fileset dir="src"/>
-    <yasl version="2.0"/>
-</report>
------
-
- for 2.0.
diff --git a/0.12-release/apache-rat-tasks/src/site/apt/index.apt b/0.12-release/apache-rat-tasks/src/site/apt/index.apt
deleted file mode 100644
index 0d1ce30..0000000
--- a/0.12-release/apache-rat-tasks/src/site/apt/index.apt
+++ /dev/null
@@ -1,100 +0,0 @@
-~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
-~~   Licensed to the Apache Software Foundation (ASF) under one or more
-~~   contributor license agreements.  See the NOTICE file distributed with
-~~   this work for additional information regarding copyright ownership.
-~~   The ASF licenses this file to You under the Apache License, Version 2.0
-~~   (the "License"); you may not use this file except in compliance with
-~~   the License.  You may obtain a copy of the License at
-~~
-~~       http://www.apache.org/licenses/LICENSE-2.0
-~~
-~~   Unless required by applicable law or agreed to in writing, software
-~~   distributed under the License is distributed on an "AS IS" BASIS,
-~~   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-~~   See the License for the specific language governing permissions and
-~~   limitations under the License.
-~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
-
-                        -----
-                        Introduction
-                        -----
-
-Apache Rat Ant Task Library
-
- The Ant Task Library provides a single Ant task and a few supporting
- Ant types to run Rat, the {{{../index.html}Release Audit Tool}}, from
- inside {{{http://ant.apache.org/}Apache Ant}}.
-
- Using Ant's resource abstraction the task can be used to check files
- on disk as well as tarballs or even URLs directly.
-
-Requirements
-
- The Rat Ant Task Library requires Apache Ant 1.7.1 or higher (it
- works well with 1.8.x), Apache Rat core and transitively all
- dependencies of Apache Rat core.
-
- In order to use the tasks Java 5 is required as of Rat 0.9 - Rat 0.8
- and earlier require Java 1.4.
-
-Installation
-
-    There are several ways to use the Antlib:
-
-    * The traditional way:
-
--------
-<taskdef
-    resource="org/apache/rat/anttasks/antlib.xml">
-    <classpath>
-        <pathelement location="YOUR-PATH-TO/apache-rat-${version}.jar"/>
-    </classpath>
-</taskdef>
--------
-
-      With this you can use the report task like plain Ant tasks,
-      they'll live in the default namespace.  I.e. if you can run
-      <<<exec>>> without any namespace prefix, you can do so for
-      <<<report>>> as well.
-
-    * Similar, but assigning a namespace URI
-
--------
-<taskdef
-    uri="antlib:org.apache.rat.anttasks"
-    resource="org/apache/rat/anttasks/antlib.xml">
-    <classpath>
-        <pathelement location="YOUR-PATH-TO/apache-rat-${version}.jar"/>
-    </classpath>
-</taskdef>
--------
-
-      This puts your task into a separate namespace than Ant's
-      namespace.  You would use the tasks like
-
--------
-<project
-    xmlns:rat="antlib:org.apache.rat.anttasks"
-    xmlns="antlib:org.apache.tools.ant">
-    ...
-    <rat:report>
-        <fileset dir="src"/>
-    </rat:report>
--------
-
-      or a variation thereof.
-
-    * Using Ant's autodiscovery.  Place <<<apache-rat-tasks.jar>>> and
-      all dependencies into a directory and use <<<ant -lib
-      DIR-CONTAINING-THE-JAR>>> or copy it into <<<ANT_HOME/lib>>> -
-      and then in your build file, simply declare the namespace on the
-      <<<project>>> tag:
-
--------
-<project
-    xmlns:rat="antlib:org.apache.rat.anttasks"
-    xmlns="antlib:org.apache.tools.ant">
--------
-
-      and all tasks of this library will automatically be available in
-      the <<<rat>>> namespace without any <<<taskdef>>>.
diff --git a/0.12-release/apache-rat-tasks/src/site/apt/report.apt b/0.12-release/apache-rat-tasks/src/site/apt/report.apt
deleted file mode 100644
index 0086a4b..0000000
--- a/0.12-release/apache-rat-tasks/src/site/apt/report.apt
+++ /dev/null
@@ -1,136 +0,0 @@
-~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
-~~   Licensed to the Apache Software Foundation (ASF) under one or more
-~~   contributor license agreements.  See the NOTICE file distributed with
-~~   this work for additional information regarding copyright ownership.
-~~   The ASF licenses this file to You under the Apache License, Version 2.0
-~~   (the "License"); you may not use this file except in compliance with
-~~   the License.  You may obtain a copy of the License at
-~~
-~~       http://www.apache.org/licenses/LICENSE-2.0
-~~
-~~   Unless required by applicable law or agreed to in writing, software
-~~   distributed under the License is distributed on an "AS IS" BASIS,
-~~   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-~~   See the License for the specific language governing permissions and
-~~   limitations under the License.
-~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
-
-                -----
-                The Report Task
-                -----
-
-Report Task
-
-  The Report task is the heart of the Apache Rat Ant Task Library, it
-  runs Rat on a given set of resources and generates the report.
-
-  The task can work on any Ant
-  {{{http://ant.apache.org/manual/Types/resources.html}resource or
-  resource collection}} and the usual Ant selectors can be applied to
-  restrict things even further.
-
-  Reports can use Rat's internal XML or plain text format or be styled
-  by a custom XSLT stylesheet.
-
-  It is possible to define custom matchers for licenses not directly supported
-  by Rat via nested elements to the Report task.
-
-Attributes of the Task
-
-*-------------------------*-------------------------------+
-|Name                     |Description                    |
-*-------------------------*-------------------------------+
-| reportFile | Name of the file to write the report to.  If ommitted the report will be sent to Ant's logging system instead.
-*-------------------------*-------------------------------+
-| format | The format to use for the report.
-| | Choices are <<<xml>>> for Rat's XML format,
-| | <<<plain>>> for plain text using Rat's built-in stylesheet,
-| | <<<styled>>> transforms the XML output using the given stylesheet. The stylesheet nested element must be set as well if this attribute is used.
-| | Defaults to <<<plain>>>|
-*-------------------------*-------------------------------+
-| addDefaultLicenseMatchers | Whether to use Rat's built-in set of license matchers in addition to those specified as nested elements.
-| | Boolean, defaults to <<<true>>>.|
-*-------------------------*-------------------------------+
-| addLicenseHeaders | Whether to add license headers to files that don't have one.
-| | Choices are <<<true>>>, <<<false>>> and <<<forced>>> where <<<forced>>> would add a license even if Rat already found one.
-| | Boolean, defaults to <<<false>>>.|
-*-------------------------*-------------------------------+
-| copyrightMessage | If Rat is adding license headers: Sets the optional copyright message. This value is ignored, if no license headers are added.
-*-------------------------*-------------------------------+
-
-Nested Elements
-
-* Resources
-
-  The files to be checked by Rat are specified as nested
-  {{{http://ant.apache.org/manual/Types/resources.html} resource
-  (collection)(s)}}, the most basic one would probably be a
-  {{{http://ant.apache.org/manual/Types/fileset.html} fileset}}.
-
-  For example the following would check all Java files in the
-  <<<src>>> directory.
-
----
-<rat:report>
-    <fileset dir="src" includes="**/*.java"/>
-</rat:report>
----
-
-* Stylesheet
-
-  If the <<<format>>> attribute has been set to <<<styled>>> the XSLT
-  stylesheet to apply is specified as a nested resource element.  For
-  example
-
----
-<rat:report format="styled" reportFile="rat-report.html">
-    ...
-    <stylesheet>
-        <file file="my/rat-xml-2-html.xslt"/>
-    </stylesheet>
-</rat:report>
----
-
-* License Matchers
-
-  Any defined Ant type that implements the <<<IHeaderMatcher>>>
-  interface can be used as nested element to provide a matcher to Rat.
-  License matchers are the pieces that make Rat identify the license
-  of a document.
-
-  The Ant library already contains
-  {{{./types.html#License_Matchers}types for the built-in license
-  matchers}} but you can define your own classes for
-  {{{./examples/custom.html}custom matchers}}.
-
-  There are two scenarios where you'd use a nested element to define
-  license matchers to Rat.  The more common one would be if you wanted
-  Rat to detect and identify a license that isn't supported out of the
-  box - in this case you will want to write a custom matcher.
-
-  The second case would be if you want to only detect a subset of
-  licenses known to Rat for some reason.  For example if the only
-  license you want to detect was the Apache License 2.0 you'd first
-  disable the built-in matchers by setting
-  <<<addDefaultLicenseMatchers>>> to false and then explicitly add the
-  built-in <<<asl20>>> matcher
-
----
-<rat:report addDefaultLicenseMatchers="false">
-    <rat:asl20/>
-</rat:report>
----
-
-* Approved License Families
-
-  Any defined Ant type that implements the <<<ILicenseFamily>>>
-  interface can be used as nested element to provide a license family
-  as an approved license to Rat.
-
-  The Ant library already contains
-  {{{./types.html#License_Matchers}types for the built-in license families}}
-  but you can define your own classes for {{{./examples/custom.html}custom
-  families}}.  In most cases
-  {{{./types.html#approvedLicense}<<<approvedLicense>>>}} should be
-  sufficient, though.
-
diff --git a/0.12-release/apache-rat-tasks/src/site/apt/types.apt b/0.12-release/apache-rat-tasks/src/site/apt/types.apt
deleted file mode 100644
index 54d0bfe..0000000
--- a/0.12-release/apache-rat-tasks/src/site/apt/types.apt
+++ /dev/null
@@ -1,269 +0,0 @@
-~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
-~~   Licensed to the Apache Software Foundation (ASF) under one or more
-~~   contributor license agreements.  See the NOTICE file distributed with
-~~   this work for additional information regarding copyright ownership.
-~~   The ASF licenses this file to You under the Apache License, Version 2.0
-~~   (the "License"); you may not use this file except in compliance with
-~~   the License.  You may obtain a copy of the License at
-~~
-~~       http://www.apache.org/licenses/LICENSE-2.0
-~~
-~~   Unless required by applicable law or agreed to in writing, software
-~~   distributed under the License is distributed on an "AS IS" BASIS,
-~~   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-~~   See the License for the specific language governing permissions and
-~~   limitations under the License.
-~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
-
-                -----
-                Built-In Types
-                -----
-
-Built-In Types
-
- The Rat Antlib defines a few Ant types that can be used as nested
- elements to the {{{./report.html} Report Task}} as license matchers or
- license families.
-
- In order to stay compatible with Ant 1.7.1 these types are defined
- via {{{http://ant.apache.org/manual/Tasks/typedef.html}
- <<<typedef>>>}} rather than
- {{{http://ant.apache.org/manual/Tasks/componentdef.html}
- <<<componentdef>>>}} which means they can be defined outside of the
- Report task as well - but they will be completely useless there.
-
-{License Matchers}
-
- The following types correspond to the built-in license matchers of Rat:
-
-*-------*---------+-------------+
-| Typename | Detected License | Corresponding class |
-*-------*---------+-------------+
-| asl20 | Apache License 2.0 | <<<org.apache.rat.analysis.license.ApacheSoftwareLicense20>>>
-*-------*---------+-------------+
-| dojo | {{{http://dojotoolkit.org/community/licensing.shtml}License of the Dojo Toolkit}} | <<<org.apache.rat.analysis.license.DojoLicenseHeader>>>
-| <since Rat Antlib 0.8> | |
-*-------*---------+-------------+
-| generated | Generated documents that don't need a license | <<<org.apache.rat.analysis.generation.GeneratedLicenseNotRequired>>>
-*-------*---------+-------------+
-| gpl1 | {{{http://www.gnu.org/licenses/old-licenses/gpl-1.0.html}GNU General Public License, version 1}} | <<<org.apache.rat.analysis.license.GPL1License>>>
-| <since Rat Antlib 0.9> | |
-*-------*---------+-------------+
-| gpl2 | {{{http://www.gnu.org/licenses/old-licenses/gpl-2.0.html}GNU General Public License, version 2}} | <<<org.apache.rat.analysis.license.GPL2License>>>
-| <since Rat Antlib 0.9> | |
-*-------*---------+-------------+
-| gpl3 | {{{http://www.gnu.org/licenses/gpl.html}GNU General Public License, version 3}} | <<<org.apache.rat.analysis.license.GPL3License>>>
-| <since Rat Antlib 0.9> | |
-*-------*---------+-------------+
-| javadoc | Javadocs that don't need a license | <<<org.apache.rat.analysis.generation.JavaDocLicenseNotRequired>>>
-*-------*---------+-------------+
-| mit | {{{http://www.opensource.org/licenses/MIT}The MIT License}} | <<<org.apache.rat.analysis.license.MITLicense>>>
-| <since Rat Antlib 0.9> | |
-*-------*---------+-------------+
-| oasis | OASIS copyright claim plus derivative work clause | <<<org.apache.rat.analysis.license.OASISLicense>>>
-| <since Rat Antlib 0.8> | |
-*-------*---------+-------------+
-| w3c | {{{http://www.w3.org/Consortium/Legal/2002/copyright-software-20021231}W3C Software License}} | <<<org.apache.rat.analysis.license.W3CLicense>>>
-*-------*---------+-------------+
-| w3c-doc | {{{http://www.w3.org/Consortium/Legal/2002/copyright-documents-20021231}W3C Document License}} | <<<org.apache.rat.analysis.license.W3CDocLicense>>>
-*-------*---------+-------------+
-
- While these types may technically provide attributes or nested
- elements you should use them as sole tags.
-
-* {<<<substringMatcher>>>}
-
- <since Rat Antlib 0.8>
-
- For the simple case where a license can be detected by searching for
- a given string in a single line of the source code - in fact this is what
- many built-in implementations do - you can use the
- <<<substringMatcher>>> type.
-
-**  Attributes of the Type
-
-*-------------------------*-------------------------------+
-|Name                     |Description                    |
-*-------------------------*-------------------------------+
-| licenseFamilyCategory | Short name of the detected license.  Should be at most five characters long if you want to keep the layout of the plain text report.
-| | This will be printed next to to the checked file inside the plain text report and creates <<<header-type>>> elements inside the XML report.
-| | <<REQUIRED>>
-*-------------------------*-------------------------------+
-| licenseFamilyName | Long name of the detected license.  The value is checked against the list of approved licenses.
-| | This will not appear inside the plain text report and creates <<<license-family>>> elements inside the XML report.
-| | <<REQUIRED>>
-*-------------------------*-------------------------------+
-| notes | Additional notes you want to provide.
-| | This will not appear inside the plain text report and creates <<<header-sample>>> elements inside the XML report.
-*-------------------------*-------------------------------+
-
-**  Nested Elements Supported by the Type
-
- The substring(s) to look for are specified as nested <<<pattern>>>
- elements with a substring attribute.  You can specifiy multiple
- <<<pattern>>> elements and the <<<substringMatcher>>> will claim the
- license matches if at least one substring can be found.
-
- At least one pattern is required.
-
-** Example
-
- Taking the example of {{{./examples/custom.html}the custom types page}}
- in order to detect
-
-------------------------------------------------------------------
-  /**
-   * Yet Another Software License, 1.0
-   *
-   * Lots of text, specifying the users rights, and whatever ...
-   */
-------------------------------------------------------------------
-
-  you could use
-
-------------------------------------------------------------------
-<rat:report>
-    <fileset dir="src"/>
-    <rat:substringMatcher licenseFamilyCategory="YASL1"
-             licenseFamilyName="Yet Another Software License, Version 1.0">
-        <pattern substring="Yet Another Software License, 1.0"/>
-    </rat:substringMatcher>
-</rat:report>
-------------------------------------------------------------------
-
-* {<<<fullTextMatcher>>>}
-
- <since Rat Antlib 0.9>
-
- This matcher searches for the full text given, ignoring everything
- that is not a character or a number (and for US-ASCII characters it
- is case-insensitive).  This allows licenses to be detected that can't
- be identified by a single line, even if the formatting has been
- changed.
-
-**  Attributes of the Type
-
-*-------------------------*-------------------------------+
-|Name                     |Description                    |
-*-------------------------*-------------------------------+
-| licenseFamilyCategory | Short name of the detected license.  Should be at most five characters long if you want to keep the layout of the plain text report.
-| | This will be printed next to to the checked file inside the plain text report and creates <<<header-type>>> elements inside the XML report.
-| | <<REQUIRED>>
-*-------------------------*-------------------------------+
-| licenseFamilyName | Long name of the detected license.  The value is checked against the list of approved licenses.
-| | This will not appear inside the plain text report and creates <<<license-family>>> elements inside the XML report.
-| | <<REQUIRED>>
-*-------------------------*-------------------------------+
-| notes | Additional notes you want to provide.
-| | This will not appear inside the plain text report and creates <<<header-sample>>> elements inside the XML report.
-*-------------------------*-------------------------------+
-| fullText | The license text to look for.
-| | Everything that is not a character or a digit will be ignored.
-| | <<REQUIRED>> unless the text is specified as nested content.
-*-------------------------*-------------------------------+
-
- You can also nest the license text directly as content into the type.
-
-** Example
-
- Taking the example of {{{./examples/custom.html}the custom types page}}
- in order to detect
-
-------------------------------------------------------------------
-  /**
-   * Yet Another Software License, 1.0
-   *
-   * Lots of text, specifying the users rights, and whatever ...
-   */
-------------------------------------------------------------------
-
-  you could use
-
-------------------------------------------------------------------
-<rat:report>
-    <fileset dir="src"/>
-    <rat:fullTextMatcher licenseFamilyCategory="YASL1"
-             licenseFamilyName="Yet Another Software License, Version 1.0"
-             fullText="Yet Another Software License, 1.0 Lots of text, specifying the users rights, and whatever">
-    </rat:fullTextMatcher>
-</rat:report>
-------------------------------------------------------------------
-
-  or
-
-------------------------------------------------------------------
-<rat:report>
-    <fileset dir="src"/>
-    <rat:fullTextMatcher licenseFamilyCategory="YASL1"
-             licenseFamilyName="Yet Another Software License, Version 1.0">
-Yet Another Software License, 1.0
-
-Lots of text, specifying the users rights, and whatever
-    </rat:fullTextMatcher>
-</rat:report>
-------------------------------------------------------------------
-
-{License Families}
-
- The following types correspond to the built-in license families of Rat:
-
-*-------*---------+-------------+
-| Typename | License Family | Corresponding class |
-*-------*---------+-------------+
-*-------*---------+-------------+
-| academic-free-21 | Academic Free License 2.1 | <<<org.apache.rat.license.AcademicFree21LicenseFamily>>>
-| <since Rat Antlib 0.8> | |
-*-------*---------+-------------+
-| apache20-license | Apache License 2.0 | <<<org.apache.rat.license.Apache20LicenseFamily>>>
-*-------*---------+-------------+
-| gpl1-family | GNU General Public License, version 1 | <<<org.apache.rat.license.GPL1LicenseFamily>>>
-| <since Rat Antlib 0.9> | |
-*-------*---------+-------------+
-| gpl2-family | GNU General Public License, version 2 | <<<org.apache.rat.license.GPL2LicenseFamily>>>
-| <since Rat Antlib 0.9> | |
-*-------*---------+-------------+
-| gpl3-family | GNU General Public License, version 3 | <<<org.apache.rat.license.GPL3LicenseFamily>>>
-| <since Rat Antlib 0.9> | |
-*-------*---------+-------------+
-| mit-family | The MIT License | <<<org.apache.rat.license.MITLicenseFamily>>>
-| <since Rat Antlib 0.9> | |
-*-------*---------+-------------+
-| modified-bsd | Modified BSD License | <<<org.apache.rat.license.ModifiedBSDLicenseFamily>>>
-| <since Rat Antlib 0.8> | |
-*-------*---------+-------------+
-| oasis-license | OASIS copyright claim plus derivative work clause | <<<org.apache.rat.license.OASISLicenseFamily>>>
-| <since Rat Antlib 0.8> | |
-*-------*---------+-------------+
-| w3c-doc-license | {{{http://www.w3.org/Consortium/Legal/2002/copyright-documents-20021231}W3C Document License}} | <<<org.apache.rat.license.W3CDocumentLicenseFamily>>>
-*-------*---------+-------------+
-| w3c-soft-license | {{{http://www.w3.org/Consortium/Legal/2002/copyright-software-20021231}W3C Software License}} | <<<org.apache.rat.license.W3CSoftwareLicenseFamily>>>
-*-------*---------+-------------+
-
- While these types may technically provide attributes or nested
- elements you should use them as sole tags.
-
-* {<<<approvedLicense>>>}
-
- <since Rat Antlib 0.8>
-
- This wrapper type makes it easy to specify a license name for new
- approved licenses.  The type has a single attribute <<<familyName>>>
- that must match the license family name returned by the license
- matcher to make a license approved.
-
-** Example
-
- To make the YASL license of the {{substringMatcher}} Example approved
- you'd use
-
-------------------------------------------------------------------
-<rat:report>
-    <fileset dir="src"/>
-    <rat:substringMatcher licenseFamilyCategory="YASL1"
-             licenseFamilyName="Yet Another Software License, Version 1.0">
-        <pattern substring="Yet Another Software License, 1.0"/>
-    </rat:substringMatcher>
-    <rat:approvedLicense
-             familyName="Yet Another Software License, Version 1.0"/>
-</rat:report>
-------------------------------------------------------------------
diff --git a/0.12-release/apache-rat-tasks/src/site/resources/css/site.css b/0.12-release/apache-rat-tasks/src/site/resources/css/site.css
deleted file mode 100644
index 3683f87..0000000
--- a/0.12-release/apache-rat-tasks/src/site/resources/css/site.css
+++ /dev/null
@@ -1,27 +0,0 @@
-/*
-  Licensed to the Apache Software Foundation (ASF) under one
-  or more contributor license agreements.  See the NOTICE file
-  distributed with this work for additional information
-  regarding copyright ownership.  The ASF licenses this file
-  to you under the Apache License, Version 2.0 (the
-  "License"); you may not use this file except in compliance
-  with the License.  You may obtain a copy of the License at
-
-    http://www.apache.org/licenses/LICENSE-2.0
-
-  Unless required by applicable law or agreed to in writing,
-  software distributed under the License is distributed on an
-  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
-  KIND, either express or implied.  See the License for the
-  specific language governing permissions and limitations
-  under the License.    
-*/
-footer {
-    font-family: "Mate SC", "Lucida Console", Monaco, monospace;
-    font-size: 9pt;
-    padding: 5px 10px;
-    text-align: justify;
-    border: thin solid #D0D0D0;
-    background-color: #F8F8F8;
-    color: #404040;
-}
\ No newline at end of file
diff --git a/0.12-release/apache-rat-tasks/src/site/site.xml b/0.12-release/apache-rat-tasks/src/site/site.xml
deleted file mode 100644
index 1d90f0b..0000000
--- a/0.12-release/apache-rat-tasks/src/site/site.xml
+++ /dev/null
@@ -1,41 +0,0 @@
-<?xml version="1.0" ?>
-<!--
-  Licensed to the Apache Software Foundation (ASF) under one or more
-  contributor license agreements.  See the NOTICE file distributed with
-  this work for additional information regarding copyright ownership.
-  The ASF licenses this file to You under the Apache License, Version 2.0
-  (the "License"); you may not use this file except in compliance with
-  the License.  You may obtain a copy of the License at
-
-      http://www.apache.org/licenses/LICENSE-2.0
-
-  Unless required by applicable law or agreed to in writing, software
-  distributed under the License is distributed on an "AS IS" BASIS,
-  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-  See the License for the specific language governing permissions and
-  limitations under the License.
--->
-<project xmlns="http://maven.apache.org/DECORATION/1.3.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
-         xsi:schemaLocation="http://maven.apache.org/DECORATION/1.3.0 http://maven.apache.org/xsd/decoration-1.3.0.xsd"
-         name="Apache Rat&trade; Task Library for Apache Ant">
-  <body>  
-    <head>
-        <link 
-            href='http://fonts.googleapis.com/css?family=Mate+SC' 
-            rel='stylesheet' 
-            type='text/css'/>
-    </head>
-    
-    <menu ref="parent"/>
-    <menu name="Overview">
-      <item name="Introduction" href="index.html"/>
-      <item name="Report Task" href="report.html"/>
-      <item name="Types" href="types.html"/>
-    </menu>
-    <menu name="Examples">
-      <item name="Basic Usage" href="examples/basic.html"/>
-      <item name="Custom Types" href="examples/custom.html"/>
-    </menu>
-    <menu ref="reports"/>
-  </body>
-</project>
diff --git a/0.12-release/apache-rat-tasks/src/test/java/org/apache/rat/anttasks/AbstractRatAntTaskTest.java b/0.12-release/apache-rat-tasks/src/test/java/org/apache/rat/anttasks/AbstractRatAntTaskTest.java
deleted file mode 100644
index d40b271..0000000
--- a/0.12-release/apache-rat-tasks/src/test/java/org/apache/rat/anttasks/AbstractRatAntTaskTest.java
+++ /dev/null
@@ -1,87 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements.  See the NOTICE file distributed with
- * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You under the Apache License, Version 2.0
- * (the "License"); you may not use this file except in compliance with
- * the License.  You may obtain a copy of the License at
- *
- *     http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
-*/
-package org.apache.rat.anttasks;
-
-import org.apache.commons.io.IOUtils;
-import org.apache.tools.ant.BuildFileTest;
-import org.junit.Assert;
-
-import java.io.File;
-import java.io.FileReader;
-import java.io.IOException;
-import java.util.regex.Pattern;
-
-public abstract class AbstractRatAntTaskTest extends BuildFileTest {
-    private static final File tempDir = new File("target/anttasks");
-
-    protected abstract File getAntFile();
-
-    protected File getTempDir() {
-        return tempDir;
-    }
-
-    @Override
-    public void setUp() {
-        configureProject(getAntFile().getPath());
-    }
-
-    protected void assertLogDoesNotMatch(String pPattern) {
-        final String log = super.getLog();
-        Assert.assertFalse("Log matches the pattern: " + pPattern + ", got " + log,
-                isMatching(pPattern, log));
-    }
-
-    protected void assertLogMatches(String pPattern) {
-        final String log = super.getLog();
-        Assert.assertTrue("Log doesn't match string: " + pPattern + ", got " + log,
-                isMatching(pPattern, log));
-    }
-
-    private boolean isMatching(final String pPattern, final String pValue) {
-        return Pattern.compile(pPattern).matcher(pValue).find();
-    }
-
-    private String load(File pFile) throws IOException {
-        FileReader fr = new FileReader(pFile);
-        try {
-            final StringBuilder sb = new StringBuilder();
-            char[] buffer = new char[1024];
-            for (;;) {
-                int res = fr.read(buffer);
-                if (res == -1) {
-                    fr.close();
-                    fr = null;
-                    return sb.toString();
-                }
-                if (res > 0) {
-                    sb.append(buffer, 0, res);
-                }
-            }
-        } finally {
-            IOUtils.closeQuietly(fr);
-        }
-    }
-
-    protected void assertFileMatches(File pFile, String pPattern)
-            throws IOException {
-        final String content = load(pFile);
-        Assert.assertTrue("File " + pFile
-                + " doesn't match the pattern " + pPattern
-                + ", got " + content,
-                isMatching(pPattern, content));
-    }
-}
diff --git a/0.12-release/apache-rat-tasks/src/test/java/org/apache/rat/anttasks/ReportTest.java b/0.12-release/apache-rat-tasks/src/test/java/org/apache/rat/anttasks/ReportTest.java
deleted file mode 100644
index fb9518b..0000000
--- a/0.12-release/apache-rat-tasks/src/test/java/org/apache/rat/anttasks/ReportTest.java
+++ /dev/null
@@ -1,125 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements.  See the NOTICE file distributed with
- * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You under the Apache License, Version 2.0
- * (the "License"); you may not use this file except in compliance with
- * the License.  You may obtain a copy of the License at
- *
- *     http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-package org.apache.rat.anttasks;
-
-import org.apache.commons.io.IOUtils;
-import org.apache.tools.ant.BuildException;
-import org.junit.Assert;
-
-import java.io.BufferedReader;
-import java.io.File;
-import java.io.FileInputStream;
-import java.io.IOException;
-import java.io.InputStreamReader;
-
-public class ReportTest extends AbstractRatAntTaskTest {
-    private static final File antFile = new File("src/test/resources/antunit/report-junit.xml").getAbsoluteFile();
-
-    @Override
-    protected File getAntFile() {
-        return antFile;
-    }
-
-    public void testWithReportSentToAnt() throws Exception {
-        executeTarget("testWithReportSentToAnt");
-        assertLogMatches("AL +\\Q" + getAntFileName() + "\\E");
-    }
-
-    public void testWithReportSentToFile() throws Exception {
-        final File reportFile = new File(getTempDir(), "selftest.report");
-        if (!getTempDir().mkdirs() && !getTempDir().isDirectory()) {
-            throw new IOException("Could not create temporary directory " + getTempDir());
-        }
-        final String alLine = "AL +\\Q" + getAntFileName() + "\\E";
-        if (reportFile.isFile() && !reportFile.delete()) {
-            throw new IOException("Unable to remove report file " + reportFile);
-        }
-        executeTarget("testWithReportSentToFile");
-        assertLogDoesNotMatch(alLine);
-        Assert.assertTrue("Expected report file " + reportFile, reportFile.isFile());
-        assertFileMatches(reportFile, alLine);
-    }
-
-    public void testWithALUnknown() throws Exception {
-        executeTarget("testWithALUnknown");
-        assertLogDoesNotMatch("AL +\\Q" + getAntFileName() + "\\E");
-        assertLogMatches("\\!\\?\\?\\?\\?\\? +\\Q" + getAntFileName() + "\\E");
-    }
-
-    public void testCustomMatcher() throws Exception {
-        executeTarget("testCustomMatcher");
-        assertLogDoesNotMatch("AL +\\Q" + getAntFileName() + "\\E");
-        assertLogMatches("EXMPL +\\Q" + getAntFileName() + "\\E");
-    }
-
-    public void testNoResources() throws Exception {
-        try {
-            executeTarget("testNoResources");
-            fail("Expected Exception");
-        } catch (BuildException e) {
-            final String expect = "You must specify at least one file";
-            assertTrue("Expected " + expect + ", got " + e.getMessage(),
-                    e.getMessage().contains(expect));
-        }
-    }
-
-    public void testNoLicenseMatchers() throws Exception {
-        try {
-            executeTarget("testNoLicenseMatchers");
-            fail("Expected Exception");
-        } catch (BuildException e) {
-            final String expect = "at least one license";
-            assertTrue("Expected " + expect + ", got " + e.getMessage(),
-                    e.getMessage().contains(expect));
-        }
-    }
-
-    private String getAntFileName() {
-        return getAntFile().getPath().replace('\\', '/');
-    }
-
-    private String getFirstLine(File pFile) throws IOException {
-        FileInputStream fis = null;
-        InputStreamReader reader = null;
-        BufferedReader breader = null;
-        try {
-            fis = new FileInputStream(pFile);
-            reader = new InputStreamReader(fis, "UTF8");
-            breader = new BufferedReader(reader);
-            final String result = breader.readLine();
-            breader.close();
-            return result;
-        } finally {
-            IOUtils.closeQuietly(fis);
-            IOUtils.closeQuietly(reader);
-            IOUtils.closeQuietly(breader);
-        }
-    }
-
-    public void testAddLicenseHeaders() throws Exception {
-        executeTarget("testAddLicenseHeaders");
-
-        final File origFile = new File("target/anttasks/it-sources/index.apt");
-        final String origFirstLine = getFirstLine(origFile);
-        assertTrue(origFirstLine.contains("--"));
-        assertFalse(origFirstLine.contains("~~"));
-        final File modifiedFile = new File("target/anttasks/it-sources/index.apt.new");
-        final String modifiedFirstLine = getFirstLine(modifiedFile);
-        assertFalse(modifiedFirstLine.contains("--"));
-        assertTrue(modifiedFirstLine.contains("~~"));
-    }
-}
diff --git a/0.12-release/apache-rat-tasks/src/test/java/org/example/LicenseFamily.java b/0.12-release/apache-rat-tasks/src/test/java/org/example/LicenseFamily.java
deleted file mode 100644
index ef8527d..0000000
--- a/0.12-release/apache-rat-tasks/src/test/java/org/example/LicenseFamily.java
+++ /dev/null
@@ -1,26 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements.  See the NOTICE file distributed with
- * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You under the Apache License, Version 2.0
- * (the "License"); you may not use this file except in compliance with
- * the License.  You may obtain a copy of the License at
- *
- *     http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-package org.example;
-
-import org.apache.rat.license.ILicenseFamily;
-
-
-public class LicenseFamily implements ILicenseFamily {
-    public String getFamilyName() {
-        return "Example License";
-    }
-}
diff --git a/0.12-release/apache-rat-tasks/src/test/java/org/example/Matcher.java b/0.12-release/apache-rat-tasks/src/test/java/org/example/Matcher.java
deleted file mode 100644
index bead7a7..0000000
--- a/0.12-release/apache-rat-tasks/src/test/java/org/example/Matcher.java
+++ /dev/null
@@ -1,37 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements.  See the NOTICE file distributed with
- * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You under the Apache License, Version 2.0
- * (the "License"); you may not use this file except in compliance with
- * the License.  You may obtain a copy of the License at
- *
- *     http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-package org.example;
-
-import org.apache.rat.analysis.IHeaderMatcher;
-import org.apache.rat.analysis.RatHeaderAnalysisException;
-import org.apache.rat.analysis.license.BaseLicense;
-import org.apache.rat.api.Document;
-import org.apache.rat.api.MetaData;
-
-
-public class Matcher extends BaseLicense implements IHeaderMatcher {
-    public Matcher() {
-        super(new MetaData.Datum(MetaData.RAT_URL_LICENSE_FAMILY_CATEGORY, "EXMPL"),
-                new MetaData.Datum(MetaData.RAT_URL_LICENSE_FAMILY_NAME, "Example License"), "");
-    }
-    public void reset() {}
-    
-    public boolean match(Document subject, String line) throws RatHeaderAnalysisException {
-        reportOnLicense(subject);
-        return true;
-    }
-}
diff --git a/0.12-release/apache-rat-tasks/src/test/resources/antunit/build.xml b/0.12-release/apache-rat-tasks/src/test/resources/antunit/build.xml
deleted file mode 100644
index a11ccbc..0000000
--- a/0.12-release/apache-rat-tasks/src/test/resources/antunit/build.xml
+++ /dev/null
@@ -1,45 +0,0 @@
-<?xml version='1.0'?>
-<!--
-  Licensed to the Apache Software Foundation (ASF) under one or more
-  contributor license agreements.  See the NOTICE file distributed with
-  this work for additional information regarding copyright ownership.
-  The ASF licenses this file to You under the Apache License, Version 2.0
-  (the "License"); you may not use this file except in compliance with
-  the License.  You may obtain a copy of the License at
-
-      http://www.apache.org/licenses/LICENSE-2.0
-
-  Unless required by applicable law or agreed to in writing, software
-  distributed under the License is distributed on an "AS IS" BASIS,
-  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-  See the License for the specific language governing permissions and
-  limitations under the License.
--->
-<project name="antunit" default="all"
-     xmlns:au="antlib:org.apache.ant.antunit"
-    xmlns:rat="antlib:org.apache.rat.anttasks">
-  <taskdef uri="antlib:org.apache.ant.antunit"
-      resource="org/apache/ant/antunit/antlib.xml"
-     classpath="${test.classpath}"/>
-
-  <taskdef uri="antlib:org.apache.rat.anttasks"
-      resource="org/apache/rat/anttasks/antlib.xml"
-     classpath="${test.classpath}"/>
-
-  <condition property="tests.running">
-    <not><equals arg1="${tests.skipped}" arg2="true"/></not>
-  </condition>
-
-  <target name="all" if="tests.running">
-    <echo>Invoking antunit on ${antunit.file}</echo>
-    <mkdir dir="${temp.dir}"/>
-    <au:antunit failonerror="true">
-      <file file="${antunit.file}"/>
-      <au:plainlistener sendLogTo="file" toDir="${temp.dir}" logLevel="info"/>
-      <propertyset>
-        <propertyref name="test.classpath"/>
-        <propertyref name="temp.dir"/>
-      </propertyset>
-    </au:antunit>
-  </target>
-</project>
diff --git a/0.12-release/apache-rat-tasks/src/test/resources/antunit/index.apt b/0.12-release/apache-rat-tasks/src/test/resources/antunit/index.apt
deleted file mode 100644
index d4236b7..0000000
--- a/0.12-release/apache-rat-tasks/src/test/resources/antunit/index.apt
+++ /dev/null
@@ -1,8 +0,0 @@
-    --------------
-    Some text file
-    --------------
-
-Some text file
-
-  This is a text file, which intentionally has no Apache License Header.
-  The Rat plugin should detect it.
diff --git a/0.12-release/apache-rat-tasks/src/test/resources/antunit/report-bad-configurations.xml b/0.12-release/apache-rat-tasks/src/test/resources/antunit/report-bad-configurations.xml
deleted file mode 100644
index 73f4e1c..0000000
--- a/0.12-release/apache-rat-tasks/src/test/resources/antunit/report-bad-configurations.xml
+++ /dev/null
@@ -1,162 +0,0 @@
-<?xml version='1.0'?>
-<!--
-
- Licensed to the Apache Software Foundation (ASF) under one   *
- or more contributor license agreements.  See the NOTICE file *
- distributed with this work for additional information        *
- regarding copyright ownership.  The ASF licenses this file   *
- to you under the Apache License, Version 2.0 (the            *
- "License"); you may not use this file except in compliance   *
- with the License.  You may obtain a copy of the License at   *
-                                                              *
-   http://www.apache.org/licenses/LICENSE-2.0                 *
-                                                              *
- Unless required by applicable law or agreed to in writing,   *
- software distributed under the License is distributed on an  *
- "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY       *
- KIND, either express or implied.  See the License for the    *
- specific language governing permissions and limitations      *
- under the License.                                           *
-
--->
-
-<project default="allTests"
-    name='report-bad-configurations'
-    xmlns:au="antlib:org.apache.ant.antunit"
-    xmlns:rat="antlib:org.apache.rat.anttasks">
-    
-  <taskdef uri="antlib:org.apache.ant.antunit"
-      resource="org/apache/ant/antunit/antlib.xml"
-      classpath="${test.classpath}" />
-
-  <taskdef uri="antlib:org.apache.rat.anttasks" resource="org/apache/rat/anttasks/antlib.xml">
-    <classpath>
-      <pathelement location="${jar.name}" />
-      <pathelement path='${test.classpath}' />
-    </classpath>
-  </taskdef>
-
-  <target name="allTests">
-    <au:antunit xmlns:au="antlib:org.apache.ant.antunit"
-                failonerror="false" errorproperty="antunit.failed">
-      <file file="${ant.file}"/>
-      <au:plainlistener />
-    </au:antunit>
-  </target>
-
-  <target name="testNoResources">
-    <au:expectfailure expectedMessage="at least one file">
-      <rat:report/>
-    </au:expectfailure>
-  </target>
-
-  <target name="testNoLicenseMatchers">
-    <au:expectfailure expectedMessage="at least one license">
-      <rat:report addDefaultLicenseMatchers="false">
-        <file file="${ant.file}"/>
-      </rat:report>
-    </au:expectfailure>
-  </target>
-
-  <target name="testNoStylesheet">
-    <au:expectfailure expectedMessage="must specify a stylesheet">
-      <rat:report format="styled">
-        <file file="${ant.file}"/>
-      </rat:report>
-    </au:expectfailure>
-  </target>
-
-  <target name="testUnusedStylesheet">
-    <rat:report>
-      <stylesheet>
-        <file file="${ant.file}"/>
-      </stylesheet>
-      <file file="${ant.file}"/>
-    </rat:report>
-    <au:assertLogContains text="Ignoring stylesheet"/>
-  </target>
-
-  <target name="testSubstringMatcherRequiresFamilyName">
-    <au:expectfailure
-        expectedMessage="The licenseFamilyName attribute is required.">
-      <rat:report>
-        <file file="${ant.file}"/>
-        <rat:substringMatcher
-            licenseFamilyCategory="YASL1"
-            notes="Interesting License">
-          <pattern substring="exmpl"/>
-        </rat:substringMatcher>
-      </rat:report>
-    </au:expectfailure>
-  </target>
-
-  <target name="testSubstringMatcherRequiresFamilyCategory">
-    <au:expectfailure
-        expectedMessage="The licenseFamilyCategory attribute is required.">
-      <rat:report>
-        <file file="${ant.file}"/>
-        <rat:substringMatcher
-            licenseFamilyName="Yet Another Software License (YASL) 1.0"
-            notes="Interesting License">
-          <pattern substring="exmpl"/>
-        </rat:substringMatcher>
-      </rat:report>
-    </au:expectfailure>
-  </target>
-
-  <target name="testSubstringMatcherRequiresPattern">
-    <au:expectfailure
-        expectedMessage="You must specify at least one nested pattern.">
-      <rat:report>
-        <file file="${ant.file}"/>
-        <rat:substringMatcher
-            licenseFamilyCategory="YASL1"
-            licenseFamilyName="Yet Another Software License (YASL) 1.0"
-            notes="Interesting License">
-        </rat:substringMatcher>
-      </rat:report>
-    </au:expectfailure>
-  </target>
-
-  <target name="testFullTextMatcherRequiresFamilyName">
-    <au:expectfailure
-        expectedMessage="The licenseFamilyName attribute is required.">
-      <rat:report>
-        <file file="${ant.file}"/>
-        <rat:fullTextMatcher
-            licenseFamilyCategory="YASL1"
-            notes="Interesting License"
-            fullText="exmpl">
-        </rat:fullTextMatcher>
-      </rat:report>
-    </au:expectfailure>
-  </target>
-
-  <target name="testFullTextMatcherRequiresFamilyCategory">
-    <au:expectfailure
-        expectedMessage="The licenseFamilyCategory attribute is required.">
-      <rat:report>
-        <file file="${ant.file}"/>
-        <rat:fullTextMatcher
-            licenseFamilyName="Yet Another Software License (YASL) 1.0"
-            notes="Interesting License"
-            fullText="exmpl">
-        </rat:fullTextMatcher>
-      </rat:report>
-    </au:expectfailure>
-  </target>
-
-  <target name="testFullTextMatcherRequiresText">
-    <au:expectfailure
-        expectedMessage="You must specify the text to match.">
-      <rat:report>
-        <file file="${ant.file}"/>
-        <rat:fullTextMatcher
-            licenseFamilyCategory="YASL1"
-            licenseFamilyName="Yet Another Software License (YASL) 1.0"
-            notes="Interesting License">
-        </rat:fullTextMatcher>
-      </rat:report>
-    </au:expectfailure>
-  </target>
-</project>
diff --git a/0.12-release/apache-rat-tasks/src/test/resources/antunit/report-junit.xml b/0.12-release/apache-rat-tasks/src/test/resources/antunit/report-junit.xml
deleted file mode 100644
index c43ebd0..0000000
--- a/0.12-release/apache-rat-tasks/src/test/resources/antunit/report-junit.xml
+++ /dev/null
@@ -1,96 +0,0 @@
-<?xml version='1.0'?>
-<!--
-
- Licensed to the Apache Software Foundation (ASF) under one   *
- or more contributor license agreements.  See the NOTICE file *
- distributed with this work for additional information        *
- regarding copyright ownership.  The ASF licenses this file   *
- to you under the Apache License, Version 2.0 (the            *
- "License"); you may not use this file except in compliance   *
- with the License.  You may obtain a copy of the License at   *
-                                                              *
-   http://www.apache.org/licenses/LICENSE-2.0                 *
-                                                              *
- Unless required by applicable law or agreed to in writing,   *
- software distributed under the License is distributed on an  *
- "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY       *
- KIND, either express or implied.  See the License for the    *
- specific language governing permissions and limitations      *
- under the License.                                           *
-
--->
-
-<project default="all"
-    xmlns:au="antlib:org.apache.ant.antunit"
-    xmlns:rat="antlib:org.apache.rat.anttasks">
-  <taskdef uri="antlib:org.apache.ant.antunit"
-      resource="org/apache/ant/antunit/antlib.xml"
-      classpath="${test.classpath}"/>
-
-  <taskdef uri="antlib:org.apache.rat.anttasks"
-      resource="org/apache/rat/anttasks/antlib.xml"
-      classpath="${test.classpath}"/>
-
-  <property name="output.dir" location="target/anttasks"/>
-  <pathconvert dirsep="/" property="file.name">
-    <path>
-      <pathelement location="${ant.file}"/>
-    </path>
-  </pathconvert>
-  <property name="expectedOutput" value="AL    ${file.name}"/>
-
-  <target name="testWithReportSentToAnt">
-    <rat:report>
-      <file file="${ant.file}"/>
-    </rat:report>
-  </target>
-
-  <target name="all"/>
-
-  <target name="testWithReportSentToFile">
-    <property name="report.file" location="${output.dir}/selftest.report"/>
-    <rat:report reportFile="${report.file}">
-      <file file="${ant.file}"/>
-    </rat:report>
-  </target>
-
-  <target name="testWithALUnknown">
-    <rat:report addDefaultLicenseMatchers="false">
-      <file file="${ant.file}"/>
-      <rat:w3c/>
-    </rat:report>
-  </target>
-
-  <target name="testCustomMatcher">
-    <mkdir dir="${output.dir}/dest"/>
-    <mkdir dir="${output.dir}/src/org/example"/>
-    <typedef name="exmpl" classname="org.example.Matcher"
-        classpath="${test.classpath}"/>
-    <typedef name="exmpl-license" classname="org.example.LicenseFamily"
-        classpath="${test.classpath}"/>
-    <rat:report>
-      <file file="${ant.file}"/>
-      <exmpl/>
-      <exmpl-license/>
-    </rat:report>
-  </target>
-
-  <target name="testNoResources">
-    <rat:report/>
-  </target>
-
-  <target name="testNoLicenseMatchers">
-    <rat:report addDefaultLicenseMatchers="false">
-      <file file="${ant.file}"/>
-    </rat:report>
-  </target>
-
-  <target name="testAddLicenseHeaders">
-    <delete dir="${output.dir}/it-sources"/>
-    <mkdir dir="${output.dir}/it-sources"/>
-    <copy file="src/test/resources/antunit/index.apt" tofile="${output.dir}/it-sources/index.apt"/>
-    <rat:report addLicenseHeaders="true">
-       <file file="${output.dir}/it-sources/index.apt"/>
-    </rat:report>
-  </target>
-</project>
diff --git a/0.12-release/apache-rat-tasks/src/test/resources/antunit/report-normal-operation.xml b/0.12-release/apache-rat-tasks/src/test/resources/antunit/report-normal-operation.xml
deleted file mode 100644
index 94751d5..0000000
--- a/0.12-release/apache-rat-tasks/src/test/resources/antunit/report-normal-operation.xml
+++ /dev/null
@@ -1,342 +0,0 @@
-<?xml version='1.0'?>
-<!--
-
- Licensed to the Apache Software Foundation (ASF) under one   *
- or more contributor license agreements.  See the NOTICE file *
- distributed with this work for additional information        *
- regarding copyright ownership.  The ASF licenses this file   *
- to you under the Apache License, Version 2.0 (the            *
- "License"); you may not use this file except in compliance   *
- with the License.  You may obtain a copy of the License at   *
-                                                              *
-   http://www.apache.org/licenses/LICENSE-2.0                 *
-                                                              *
- Unless required by applicable law or agreed to in writing,   *
- software distributed under the License is distributed on an  *
- "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY       *
- KIND, either express or implied.  See the License for the    *
- specific language governing permissions and limitations      *
- under the License.                                           *
-
--->
-
-<project name='report-normal-operation'
-    default="allTests"
-    xmlns:au="antlib:org.apache.ant.antunit"
-    xmlns:rat="antlib:org.apache.rat.anttasks">
-
-  <property name="output.dir" location="../../../../target/testoutput"/>
-  <mkdir dir="${output.dir}/dest"/>
-  <path id="all-classes-needed-for-tests">
-    <pathelement location="${jar.name}" />
-    <pathelement path="${test.classpath}" />
-    <pathelement location="${output.dir}/dest" />
-  </path>
-
-  <taskdef uri="antlib:org.apache.ant.antunit" 
-           resource="org/apache/ant/antunit/antlib.xml" 
-           classpathref="all-classes-needed-for-tests"
-           loaderref="testloader"/>
-
-  <taskdef uri="antlib:org.apache.rat.anttasks"
-           resource="org/apache/rat/anttasks/antlib.xml"
-           classpathref="all-classes-needed-for-tests"
-           loaderref="testloader"/>
-
-  <target name="setUp">
-    <pathconvert dirsep="/" property="file.name">
-      <path>
-        <pathelement location="${ant.file}"/>
-      </path>
-    </pathconvert>
-    <property name="expectedOutput" value=" AL    ${file.name}"/>
-    <property name="expectedOutputXML" value="&lt;resource name='${file.name}'"/>
-    <property name="expectedOutputXML2" value="&lt;header-type name='AL   '"/>
-  </target>
-
-  <target name="allTests">
-    <au:antunit xmlns:au="antlib:org.apache.ant.antunit"
-                failonerror="false" errorproperty="antunit.failed">
-      <file file="${ant.file}"/>
-      <au:plainlistener/>
-      <propertyset>
-        <propertyref name="test.classpath"/>
-        <propertyref name="jar.name"/>
-      </propertyset>
-    </au:antunit>
-  </target>
-
-  <target name="tearDown">
-    <delete dir="${output.dir}" quiet="true"/>
-  </target>
-
-  <target name="xtestWithReportSentToAnt">
-    <rat:report>
-      <file file="${ant.file}"/>
-    </rat:report>
-    <au:assertLogContains text="${expectedOutput}"/>
-  </target>
-
-  <target name="testWithReportSentToFile" depends="fileReportTest">
-    <rat:report reportFile="${report.file}">
-      <file file="${ant.file}"/>
-    </rat:report>
-    <au:assertLogDoesntContain text="${expectedOutput}"/>
-    <au:assertFileExists file="${report.file}"/>
-    <assertReportContains text="${expectedOutput}"/>
-  </target>
-
-  <target name="testXMLReportSentToFile" depends="fileReportTest">
-    <rat:report reportFile="${report.file}.xml" format="xml">
-      <file file="${ant.file}"/>
-    </rat:report>
-    <au:assertLogDoesntContain text="${expectedOutputXML}"/>
-    <au:assertLogDoesntContain text="${expectedOutputXML2}"/>
-    <au:assertFileExists file="${report.file}.xml"/>
-    <assertReportContains text="${expectedOutputXML}"
-                          file="${report.file}.xml"/>
-    <assertReportContains text="${expectedOutputXML2}"
-                          file="${report.file}.xml"/>
-  </target>
-
-  <target name="xtestWithALUnknown">
-    <rat:report addDefaultLicenseMatchers="false">
-      <file file="${ant.file}"/>
-      <rat:w3c/>
-    </rat:report>
-    <au:assertLogDoesntContain text="${expectedOutput}"/>
-    <au:assertLogContains text="!????? ${file.name}"/>
-  </target>
-
-  <target name="testWithALUnknownSentToFile" depends="fileReportTest">
-    <rat:report addDefaultLicenseMatchers="false" reportFile="${report.file}">
-      <file file="${ant.file}"/>
-      <rat:w3c/>
-    </rat:report>
-    <au:assertLogDoesntContain text="${expectedOutput}"/>
-    <au:assertLogDoesntContain text="!????? ${file.name}"/>
-    <assertReportContains text="!????? ${file.name}"/>
-  </target>
-
-  <target name="xtestCustomMatcher" depends="prepareCustomMatcher">
-    <rat:report>
-      <file file="${ant.file}"/>
-      <exmpl/>
-      <exmpl-license/>
-    </rat:report>
-    <au:assertLogDoesntContain text="${expectedOutput}"/>
-    <au:assertLogContains text=" EXMPL ${file.name}"/>
-  </target>
-
-  <target name="testCustomMatcherSentToFile"
-          depends="fileReportTest,prepareCustomMatcher">
-    <rat:report reportFile="${report.file}">
-      <file file="${ant.file}"/>
-      <exmpl/>
-      <exmpl-license/>
-    </rat:report>
-    <au:assertLogDoesntContain text="${expectedOutput}"/>
-    <au:assertLogDoesntContain text=" EXMPL ${file.name}"/>
-    <assertReportContains text=" EXMPL ${file.name}"/>
-  </target>
-
-  <target name="testSubstringMatcherNotApprovedSentToFile"
-          depends="fileReportTest">
-    <rat:report reportFile="${report.file}"
-                addDefaultLicenseMatchers="false">
-      <file file="${ant.file}"/>
-      <rat:substringMatcher
-          licenseFamilyCategory="YASL1"
-          licenseFamilyName="Yet Another Software License (YASL) 1.0"
-          notes="Interesting License">
-        <pattern substring="exmpl"/>
-      </rat:substringMatcher>
-    </rat:report>
-    <assertReportContains text="!YASL1 ${file.name}"/>
-    <assertReportDoesntContain text=" YASL1 ${file.name}"/>
-  </target>
-
-  <target name="testSubstringMatcherApprovedSentToFile"
-          depends="fileReportTest">
-    <rat:report reportFile="${report.file}"
-                addDefaultLicenseMatchers="false">
-      <file file="${ant.file}"/>
-      <rat:substringMatcher
-          licenseFamilyCategory="YASL1"
-          licenseFamilyName="Yet Another Software License (YASL) 1.0"
-          notes="Interesting License">
-        <pattern substring="exmpl"/>
-      </rat:substringMatcher>
-      <rat:approvedLicense
-          familyName="Yet Another Software License (YASL) 1.0"/>
-    </rat:report>
-    <assertReportContains text=" YASL1 ${file.name}"/>
-    <assertReportDoesntContain text="!YASL1 ${file.name}"/>
-  </target>
-
-  <target name="testSubstringMatcherSentToFileNoMatch"
-          depends="fileReportTest">
-    <rat:report reportFile="${report.file}"
-                addDefaultLicenseMatchers="false">
-      <file file="${ant.file}"/>
-      <rat:substringMatcher
-          licenseFamilyCategory="YASL1"
-          licenseFamilyName="Yet Another Software License (YASL) 1.0"
-          notes="Interesting License">
-        <!-- abusing XML attribute whitespace normalization to create
-             a substring that is not contained inside the build file
-             itself -->
-        <pattern substring="exmpl
-"/>
-      </rat:substringMatcher>
-    </rat:report>
-    <assertReportDoesntContain text="!YASL1 ${file.name}"/>
-    <assertReportDoesntContain text=" YASL1 ${file.name}"/>
-  </target>
-
-  <target name="testFullTextMatcherNotApprovedSentToFile"
-          depends="fileReportTest">
-    <rat:report reportFile="${report.file}"
-                addDefaultLicenseMatchers="false">
-      <file file="${ant.file}"/>
-      <rat:fullTextMatcher
-          licenseFamilyCategory="YASL1"
-          licenseFamilyName="Yet Another Software License (YASL) 1.0"
-          notes="Interesting License">
-        License Family Name: Yet Another Software License (YASL) 1.0
-      </rat:fullTextMatcher>
-    </rat:report>
-    <assertReportContains text="!YASL1 ${file.name}"/>
-    <assertReportDoesntContain text=" YASL1 ${file.name}"/>
-  </target>
-
-  <target name="testFullTextMatcherApprovedSentToFile"
-          depends="fileReportTest">
-    <rat:report reportFile="${report.file}"
-                addDefaultLicenseMatchers="false">
-      <file file="${ant.file}"/>
-      <rat:fullTextMatcher
-          licenseFamilyCategory="YASL1"
-          licenseFamilyName="Yet Another Software License (YASL) 1.0"
-          notes="Interesting License">
-        License Family Name: Yet Another Software License (YASL) 1.0
-      </rat:fullTextMatcher>
-      <rat:approvedLicense
-          familyName="Yet Another Software License (YASL) 1.0"/>
-    </rat:report>
-    <assertReportContains text=" YASL1 ${file.name}"/>
-    <assertReportDoesntContain text="!YASL1 ${file.name}"/>
-  </target>
-
-  <target name="testFullTextMatcherSentToFileNoMatch"
-          depends="fileReportTest">
-    <pathconvert dirsep="/" property="alt.file.name">
-      <path>
-        <pathelement location="report-bad-configurations.xml"/>
-      </path>
-    </pathconvert>
-    <rat:report reportFile="${report.file}"
-                addDefaultLicenseMatchers="false">
-      <file file="report-bad-configurations.xml"/>
-      <rat:fullTextMatcher
-          licenseFamilyCategory="YASL1"
-          licenseFamilyName="Yet Another Software License (YASL) 1.0"
-          notes="Interesting License">
-This text shouldn't exist in report-bad-configuration.xml
-      </rat:fullTextMatcher>
-    </rat:report>
-    <assertReportDoesntContain text="!YASL1 ${alt.file.name}"/>
-    <assertReportDoesntContain text=" YASL1 ${alt.file.name}"/>
-  </target>
-
-  <target name="testFullTextMatcherExpandsProperties"
-          depends="fileReportTest">
-    <pathconvert dirsep="/" property="alt.file.name">
-      <path>
-        <pathelement location="report-bad-configurations.xml"/>
-      </path>
-    </pathconvert>
-    <property name="test.version" value="1.0"/>
-    <rat:report reportFile="${report.file}"
-                addDefaultLicenseMatchers="false">
-      <file file="report-bad-configurations.xml"/>
-      <rat:fullTextMatcher
-          licenseFamilyCategory="YASL1"
-          licenseFamilyName="Yet Another Software License (YASL) 1.0"
-          notes="Interesting License">
-        License Family Name: Yet Another Software License (YASL) ${test.version}
-      </rat:fullTextMatcher>
-    </rat:report>
-    <assertReportContains text="!YASL1 ${alt.file.name}"/>
-    <assertReportDoesntContain text=" YASL1 ${alt.file.name}"/>
-  </target>
-
-  <target name="fileReportTest" depends="setUp">
-    <property name="report.file" location="${output.dir}/selftest.report"/>
-    <au:assertFileDoesntExist file="${report.file}"/>
-    <macrodef name="assertReportContains">
-      <attribute name="text"/>
-      <attribute name="file" default="${report.file}"/>
-      <sequential>
-        <loadfile srcFile="@{file}" property="report"/>
-        <au:assertTrue message="expected report to contain '@{text}' but was '${report}'">
-          <contains string="${report}" substring="@{text}"/>
-        </au:assertTrue>
-      </sequential>
-    </macrodef>
-    <macrodef name="assertReportDoesntContain">
-      <attribute name="text"/>
-      <attribute name="file" default="${report.file}"/>
-      <sequential>
-        <loadfile srcFile="@{file}" property="report"/>
-        <au:assertFalse message="expected report to not contain '@{text}' but was '${report}'">
-          <contains string="${report}" substring="@{text}"/>
-        </au:assertFalse>
-      </sequential>
-    </macrodef>
-  </target>
-
-  <target name="prepareCustomMatcher">
-    <mkdir dir="${output.dir}/dest"/>
-    <mkdir dir="${output.dir}/src/org/example"/>
-    <echo file="${output.dir}/src/org/example/Matcher.java"><![CDATA[
-package org.example;
-import org.apache.rat.api.Document;
-import org.apache.rat.api.MetaData;
-import org.apache.rat.analysis.IHeaderMatcher;
-import org.apache.rat.analysis.license.BaseLicense;
-import org.apache.rat.analysis.RatHeaderAnalysisException;
-public class Matcher extends BaseLicense implements IHeaderMatcher {
-    public Matcher() {
-        super(new MetaData.Datum(MetaData.RAT_URL_LICENSE_FAMILY_CATEGORY, "EXMPL"),
-              new MetaData.Datum(MetaData.RAT_URL_LICENSE_FAMILY_NAME, "Example License"),
-              "");
-    }
-    public void reset() {}
-    
-    public boolean match(Document subject, String line) throws RatHeaderAnalysisException {
-        reportOnLicense(subject);
-        return true;
-    }
-}
-]]></echo>
-    <echo file="${output.dir}/src/org/example/LicenseFamily.java"><![CDATA[
-package org.example;
-import org.apache.rat.license.ILicenseFamily;
-public class LicenseFamily implements ILicenseFamily {
-    public String getFamilyName() {
-        return "Example License";
-    }
-}
-]]></echo>
-    <javac srcdir="${output.dir}/src" destdir="${output.dir}/dest"
-           classpath="${test.classpath}"/>
-    <typedef name="exmpl" classname="org.example.Matcher"
-             classpathref="all-classes-needed-for-tests"
-             loaderref="testloader"/>
-    <typedef name="exmpl-license" classname="org.example.LicenseFamily"
-             classpathref="all-classes-needed-for-tests"
-             loaderref="testloader"/>
-  </target>
-
-</project>
diff --git a/0.12-release/apache-rat/README-ANT.txt b/0.12-release/apache-rat/README-ANT.txt
deleted file mode 100644
index f47bd97..0000000
--- a/0.12-release/apache-rat/README-ANT.txt
+++ /dev/null
@@ -1,63 +0,0 @@
-Apache Rat Ant Task Library
-===========================
-
-The Ant Task Library provides a single Ant task and a few supporting Ant types to run Rat,
-the Release Audit Tool from inside Apache Ant.
-
-Using Ant's resource abstraction the task can be used to check files on disk as well as tarballs
-or even URLs directly.
-
-Requirements
-------------
-
-The Rat Ant Task Library requires Apache Ant 1.7.1 or higher (it works well with 1.8.x)
-It also requires at least Java 1.5.
-
-Installation
-------------
-
-There are several ways to use the Antlib:
-
-    The traditional way:
-
-    <taskdef
-        resource="org/apache/rat/anttasks/antlib.xml">
-        <classpath>
-            <pathelement location="YOUR-PATH-TO/apache-rat-${project.version}.jar"/>
-        </classpath>
-    </taskdef>
-
-    With this you can use the report task like plain Ant tasks, they'll live in the default namespace.
-    I.e. if you can run exec without any namespace prefix, you can do so for report as well.
-    Similar, but assigning a namespace URI
-
-    <taskdef
-        uri="antlib:org.apache.rat.anttasks"
-        resource="org/apache/rat/anttasks/antlib.xml">
-        <classpath>
-            <pathelement location="YOUR-PATH-TO/apache-rat-${project.version}.jar"/>
-        </classpath>
-    </taskdef>
-
-    This puts your task into a separate namespace than Ant's namespace. You would use the tasks like
-
-    <project
-        xmlns:rat="antlib:org.apache.rat.anttasks"
-        xmlns="antlib:org.apache.tools.ant">
-        ...
-        <rat:report>
-            <fileset dir="src"/>
-        </rat:report>
-
-    or a variation thereof.
-    Using Ant's autodiscovery. Place apache-rat-tasks.jar and all dependencies into a directory
-    and use ant -lib YOUR-PATH-TO/apache-rat-${project.version}.jar
-    or copy apache-rat-${project.version}.jar into ANT_HOME/lib.
-    
-    Then in your build file, simply declare the namespace on the project tag:
-
-    <project
-        xmlns:rat="antlib:org.apache.rat.anttasks"
-        xmlns="antlib:org.apache.tools.ant">
-
-    All tasks of this library will automatically be available in the rat namespace without any taskdef.
diff --git a/0.12-release/apache-rat/README-CLI.txt b/0.12-release/apache-rat/README-CLI.txt
deleted file mode 100644
index 0e629a8..0000000
--- a/0.12-release/apache-rat/README-CLI.txt
+++ /dev/null
@@ -1,81 +0,0 @@
-About Apache Rat™
-================
-
-Rat audits software distributions, with a special interest in headers. 
-If this isn't quite what you're looking for then take a look at the 
-other products developed by Apache Creadur™, 
-including Apache Whisker™ which audits and generates legal (for example LICENSE)
-documents for complex software distributions.
-
-Running from the Command Line
------------------------------
-
-Run from the command line with:
-
-java -jar apache-rat-${project.version}.jar --help
-
-This will output a help message detailing the command line options available to you.
-
-Adding license headers
-----------------------
-
-Rat can be used to automatically add license headers to files that do not currently have them. 
-Only files that are not excluded by the Rat configurations will be affected.
-
-To add license headers use a command such as:
-
-java -jar apache-rat-${project.version}.jar --addlicense
-  --copyright "Copyright 2008 Foo" --force
-  /path/to/project
-
-This command will add the license header directly to the source files. 
-If you prefer to see which files will be changed and how then remove the "--force" option.
-Using multiple excludes from a file
-
-It is common to use the Rat with the maven or ant plugins and specify a series of files to exclude
-(such as a README or version control files). 
-If you are using the Rat application instead of a plugin you can specify a series of regex excludes
-in a file and specify that with the -E option.
-
-java -jar apache-rat-${project.version}.jar
- -E /path/to/project/.rat-excludes
- -d /path/to/project
-
-Command Line Options
-====================
-
-usage: java rat.report [options] [DIR|TARBALL]
-Options
- -A,--addLicense                Add the default license header to any file
-                                with an unknown license that is not in the
-                                exclusion list. By default new files will
-                                be created with the license header, to
-                                force the modification of existing files
-                                use the --force option.
- -a,--addlicense                Add the default license header to any file
-                                with an unknown license that is not in the
-                                exclusion list. By default new files will
-                                be created with the license header, to
-                                force the modification of existing files
-                                use the --force option.
- -c,--copyright <arg>           The copyright message to use in the
-                                license headers, usually in the form of
-                                "Copyright 2008 Foo"
- -d,--dir                       Used to indicate source when using
-                                --exclude
- -E,--exclude-file <fileName>   Excludes files matching regular expression
-                                in <file> Note that --dir is required when
-                                using this parameter.
- -e,--exclude <expression>      Excludes files matching wildcard
-                                <expression>. Note that --dir is required
-                                when using this parameter. Allows multiple
-                                arguments.
- -f,--force                     Forces any changes in files to be written
-                                directly to the source files (i.e. new
-                                files are not created)
- -h,--help                      Print help for the Rat command line
-                                interface and exit
- -s,--stylesheet <arg>          XSLT stylesheet to use when creating the
-                                report.  Not compatible with -x
- -x,--xml                       Output the report in raw XML format.  Not
-                                compatible with -s
diff --git a/0.12-release/apache-rat/README.txt b/0.12-release/apache-rat/README.txt
deleted file mode 100644
index 66cae99..0000000
--- a/0.12-release/apache-rat/README.txt
+++ /dev/null
@@ -1,26 +0,0 @@
-README file for Apache Creadur RAT
-==================================
-
-The jar in this archive can be used both:
- * stand-alone (CLI)
- * with Ant as an Ant task
-
-Stand-alone (CLI) usage
-=======================
-
-java -jar apache-rat-${project.version}.jar --help
-
-For more details, please see the file README-CLI.txt or the website:
-
-http://creadur.apache.org/rat/apache-rat/index.html
-
-Apache Rat Ant Task Library
-===========================
-
-It can also be used in conjunction with Ant:
-
-ant -lib apache-rat-${project.version}.jar ...
-
-For more details, please see the file README-ANT.txt or the website:
-
-http://creadur.apache.org/rat/apache-rat-tasks/index.html
\ No newline at end of file
diff --git a/0.12-release/apache-rat/pom.xml b/0.12-release/apache-rat/pom.xml
deleted file mode 100644
index beb3b3d..0000000
--- a/0.12-release/apache-rat/pom.xml
+++ /dev/null
@@ -1,191 +0,0 @@
-<?xml version='1.0'?>
-<!--
-  Licensed to the Apache Software Foundation (ASF) under one or more
-  contributor license agreements.  See the NOTICE file distributed with
-  this work for additional information regarding copyright ownership.
-  The ASF licenses this file to You under the Apache License, Version 2.0
-  (the "License"); you may not use this file except in compliance with
-  the License.  You may obtain a copy of the License at
-
-      http://www.apache.org/licenses/LICENSE-2.0
-
-  Unless required by applicable law or agreed to in writing, software
-  distributed under the License is distributed on an "AS IS" BASIS,
-  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-  See the License for the specific language governing permissions and
-  limitations under the License.
--->
-<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
-  <modelVersion>4.0.0</modelVersion>
-  <parent>
-    <groupId>org.apache.rat</groupId>
-    <artifactId>apache-rat-project</artifactId>
-    <version>0.12</version>
-  </parent>
-  <artifactId>apache-rat</artifactId>
-  <packaging>jar</packaging>
-  <name>Apache Creadur Rat::Command Line</name>
-  <description>
-    This library provides upwards compatibility for projects,
-    which are based on Apache Rat versions up to 0.5: Basically, it
-    provides a JAR file, which is the combination of
-    rat-core, rat-tasks, and its dependencies.
-  </description>
-
-  <dependencies>
-    <dependency>
-      <groupId>org.apache.rat</groupId>
-      <artifactId>apache-rat-core</artifactId>
-    </dependency>
-    <dependency>
-      <groupId>org.apache.rat</groupId>
-      <artifactId>apache-rat-tasks</artifactId>
-    </dependency>
-  </dependencies>
-
-  <build>
-    <resources>
-      <resource>
-        <directory>..</directory>
-        <targetPath>META-INF</targetPath>
-        <includes>
-          <include>RELEASE_NOTES.txt</include>
-          <include>LICENSE</include>
-          <include>NOTICE</include>
-        </includes>
-      </resource>
-    </resources>
-    <plugins>
-      <plugin>
-        <groupId>org.apache.maven.plugins</groupId>
-        <artifactId>maven-source-plugin</artifactId>
-        <configuration>
-          <attach>false</attach>
-          <!-- We don't need a source jar of this module -->
-          <skipSource>true</skipSource>
-        </configuration>
-      </plugin>
-      <plugin>
-        <groupId>org.apache.maven.plugins</groupId>
-        <artifactId>maven-dependency-plugin</artifactId>
-        <executions>
-          <execution>
-            <phase>prepare-package</phase>
-            <goals>
-              <goal>unpack-dependencies</goal>
-            </goals>
-            <configuration>
-              <includeScope>runtime</includeScope>
-              <outputDirectory>${project.build.outputDirectory}</outputDirectory>
-              <overWriteIfNewer>false</overWriteIfNewer>
-              <excludes>META-INF/**</excludes>
-            </configuration>
-          </execution>
-        </executions>
-      </plugin>
-      <plugin>
-        <groupId>org.apache.maven.plugins</groupId>
-        <artifactId>maven-jar-plugin</artifactId>
-        <configuration>
-          <excludes>
-            <exclude>META-INF/maven</exclude>
-          </excludes>
-          <archive>
-            <manifestEntries>
-              <Main-Class>org.apache.rat.Report</Main-Class>
-              <Extension-Name>rat</Extension-Name>
-              <Specification-Title>Apache Rat</Specification-Title>
-              <Specification-Vendor>apache.org</Specification-Vendor>
-              <Specification-Version>${project.version}</Specification-Version>
-              <Implementation-Vendor-Id>apache.org</Implementation-Vendor-Id>
-              <Implementation-Title>Apache Rat</Implementation-Title>
-              <Implementation-Vendor>Apache Software Foundation</Implementation-Vendor>
-              <Implementation-Version>${project.version}</Implementation-Version>
-            </manifestEntries>
-          </archive>
-        </configuration>
-      </plugin>
-      <plugin>
-        <groupId>org.codehaus.mojo</groupId>
-        <artifactId>animal-sniffer-maven-plugin</artifactId>
-        <executions>
-          <execution>
-            <!-- This sub project has no source code, so we need to skip animal sniffer -->
-            <id>check-java-1.5-compat</id>
-            <configuration>
-              <skip>true</skip>
-            </configuration>
-          </execution>
-        </executions>
-      </plugin>
-    </plugins>
-
-    <pluginManagement>
-      <plugins>
-        <plugin>
-          <groupId>org.apache.rat</groupId>
-          <artifactId>apache-rat-plugin</artifactId>
-          <configuration>
-            <excludes>
-              <!-- These files only describe how to use the project and they
-                   have no license headers -->
-              <exclude>README-ANT.txt</exclude>
-              <exclude>README-CLI.txt</exclude>
-            </excludes>
-          </configuration>
-        </plugin>
-        <plugin>
-          <groupId>org.eclipse.m2e</groupId>
-          <artifactId>lifecycle-mapping</artifactId>
-          <version>1.0.0</version>
-          <configuration>
-            <lifecycleMappingMetadata>
-              <pluginExecutions>
-                <pluginExecution>
-                  <pluginExecutionFilter>
-                    <groupId>org.apache.maven.plugins</groupId>
-                    <artifactId>maven-dependency-plugin</artifactId>
-                    <versionRange>[2.0,)</versionRange>
-                    <goals>
-                      <goal>unpack-dependencies</goal>
-                    </goals>
-                  </pluginExecutionFilter>
-                  <action>
-                    <ignore />
-                  </action>
-                </pluginExecution>
-              </pluginExecutions>
-            </lifecycleMappingMetadata>
-          </configuration>
-        </plugin>
-      </plugins>
-    </pluginManagement>
-  </build>
-
-  <profiles>
-    <profile>
-      <id>apache-release</id>
-      <build>
-        <plugins>
-          <plugin>
-            <groupId>org.apache.maven.plugins</groupId>
-            <artifactId>maven-assembly-plugin</artifactId>
-            <configuration>
-              <descriptorSourceDirectory>${basedir}/src/main/assembly/</descriptorSourceDirectory>
-              <tarLongFileMode>gnu</tarLongFileMode>
-            </configuration>
-            <executions>
-              <execution>
-                <id>make-assembly</id>
-                  <phase>package</phase> <!-- append to the packaging phase. -->
-                  <goals>
-                    <goal>single</goal>
-                  </goals>
-              </execution>
-            </executions>
-          </plugin>
-        </plugins>
-      </build>
-    </profile>
-  </profiles>
-</project>
diff --git a/0.12-release/apache-rat/src/main/assembly/bin.xml b/0.12-release/apache-rat/src/main/assembly/bin.xml
deleted file mode 100644
index 21c9fa9..0000000
--- a/0.12-release/apache-rat/src/main/assembly/bin.xml
+++ /dev/null
@@ -1,57 +0,0 @@
-<?xml version='1.0'?>
-<!--
-  Licensed to the Apache Software Foundation (ASF) under one or more
-  contributor license agreements.  See the NOTICE file distributed with
-  this work for additional information regarding copyright ownership.
-  The ASF licenses this file to You under the Apache License, Version 2.0
-  (the "License"); you may not use this file except in compliance with
-  the License.  You may obtain a copy of the License at
-
-      http://www.apache.org/licenses/LICENSE-2.0
-
-  Unless required by applicable law or agreed to in writing, software
-  distributed under the License is distributed on an "AS IS" BASIS,
-  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-  See the License for the specific language governing permissions and
-  limitations under the License.
--->
-<assembly xmlns="http://maven.apache.org/plugins/maven-assembly-plugin/assembly/1.1.2"
-          xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
-          xsi:schemaLocation="http://maven.apache.org/plugins/maven-assembly-plugin/assembly/1.1.2 http://maven.apache.org/xsd/assembly-1.1.2.xsd">
-  <id>bin</id>
-  <!-- 
-  Generates archive files including the binary CLI jar (which also supports Ant)
-  including NOTICE and LICENSE in the root.
-  -->
-  <formats>
-    <format>zip</format>
-    <format>tar.gz</format>
-    <format>tar.bz2</format>
-  </formats>
-  <fileSets>
-    <!-- The project documentation files -->
-    <fileSet>
-      <directory>${project.basedir}/..</directory>
-      <outputDirectory>/</outputDirectory>
-      <includes>
-        <include>LICENSE</include>
-        <include>NOTICE</include>
-        <include>RELEASE_NOTES.txt</include>
-      </includes>
-    </fileSet>
-    <fileSet>
-      <filtered>true</filtered>
-      <includes>
-        <include>README*.txt</include>
-      </includes>
-    </fileSet>
-    <!-- The combined CLI jar we built earlier -->
-    <fileSet>
-      <directory>target</directory>
-      <outputDirectory>/</outputDirectory>      
-      <includes>
-        <include>apache-rat-${project.version}.jar</include>
-      </includes>
-    </fileSet>
-  </fileSets>
-</assembly>
diff --git a/0.12-release/apache-rat/src/main/assembly/src.xml b/0.12-release/apache-rat/src/main/assembly/src.xml
deleted file mode 100644
index 98eff10..0000000
--- a/0.12-release/apache-rat/src/main/assembly/src.xml
+++ /dev/null
@@ -1,48 +0,0 @@
-<?xml version='1.0'?>
-<!--
-  Licensed to the Apache Software Foundation (ASF) under one or more
-  contributor license agreements.  See the NOTICE file distributed with
-  this work for additional information regarding copyright ownership.
-  The ASF licenses this file to You under the Apache License, Version 2.0
-  (the "License"); you may not use this file except in compliance with
-  the License.  You may obtain a copy of the License at
-
-      http://www.apache.org/licenses/LICENSE-2.0
-
-  Unless required by applicable law or agreed to in writing, software
-  distributed under the License is distributed on an "AS IS" BASIS,
-  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-  See the License for the specific language governing permissions and
-  limitations under the License.
--->
-<assembly xmlns="http://maven.apache.org/plugins/maven-assembly-plugin/assembly/1.1.2"
-          xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
-          xsi:schemaLocation="http://maven.apache.org/plugins/maven-assembly-plugin/assembly/1.1.2 http://maven.apache.org/xsd/assembly-1.1.2.xsd">
-  <id>src</id>
-  <!-- 
-  Generates a file including all the source tree excluding files/folders
-  starting with "." , *.bak and the target
-  -->
-  <formats>
-    <format>zip</format>
-    <format>tar.gz</format>
-    <format>tar.bz2</format>
-  </formats>
-  <fileSets>
-    <fileSet>
-      <directory>${project.basedir}/..</directory>
-      <outputDirectory></outputDirectory>
-      <excludes>
-        <exclude>**/target/**</exclude>
-        <exclude>**/.settings/**</exclude>
-        <exclude>**/.project</exclude>
-        <exclude>**/.classpath</exclude>
-        <exclude>.*/**</exclude>
-        <exclude>**.bak</exclude>
-        <exclude>*.jar</exclude>
-        <exclude>**/pom.xml.*</exclude>
-      </excludes>
-      <useDefaultExcludes>true</useDefaultExcludes>
-    </fileSet>
-  </fileSets>
-</assembly>
diff --git a/0.12-release/apache-rat/src/site/apt/index.apt.vm b/0.12-release/apache-rat/src/site/apt/index.apt.vm
deleted file mode 100644
index 03226d0..0000000
--- a/0.12-release/apache-rat/src/site/apt/index.apt.vm
+++ /dev/null
@@ -1,113 +0,0 @@
-~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
-~~   Licensed to the Apache Software Foundation (ASF) under one or more
-~~   contributor license agreements.  See the NOTICE file distributed with
-~~   this work for additional information regarding copyright ownership.
-~~   The ASF licenses this file to You under the Apache License, Version 2.0
-~~   (the "License"); you may not use this file except in compliance with
-~~   the License.  You may obtain a copy of the License at
-~~
-~~       http://www.apache.org/licenses/LICENSE-2.0
-~~
-~~   Unless required by applicable law or agreed to in writing, software
-~~   distributed under the License is distributed on an "AS IS" BASIS,
-~~   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-~~   See the License for the specific language governing permissions and
-~~   limitations under the License.
-~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
-
-                   --------------------------
-                   Command Line Support
-                   --------------------------
-
-About Apache Rat&#8482;
-
- Rat audits software distributions, with a special interest in headers.
- If this isn't quite what you're looking for then take a look at the
- other products developed by {{{http://creadur.apache.org}Apache Creadur}}&#8482;,
- including {{{http://creadur.apache.org/whisker}Apache Whisker}}&#8482; which audits
- and generates legal (for example <<<LICENSE>>>) documents for
- complex software distributions.
-
-* Running from the Command Line
-
- Run from the command line with:
-
-+------------------------------------------+
-java -jar apache-rat-${project.version}.jar --help
-+------------------------------------------+
-
- This will output a help message detailing the command line
- options available to you.
-
-* Adding license headers
-
- Rat can be used to automatically add license headers to
- files that do not currently have them. Only files that
- are not excluded by the Rat configurations will be affected.
-
- To add license headers use a command such as:
-
-+------------------------------------------+
-java -jar apache-rat-${project.version}.jar --addlicense
-  --copyright "Copyright 2008 Foo" --force
-  /path/to/project
-+------------------------------------------+
-
- This command will add the license header directly to the
- source files. If you prefer to see which files will be
- changed and how then remove the "--force" option.
-
-* Using multiple excludes from a file
-
-  It is common to use the Rat with the Maven or Ant plugins and specify
-  a series of files to exclude (such as a README or version control
-  files).  If you are using the Rat application instead of a plugin you
-  can specify a series of regex excludes in a file and specify that with
-  the -E option.
-
-+------------------------------------------+
-java -jar apache-rat-${project.version}.jar
- -E /path/to/project/.rat-excludes
- -d /path/to/project
-+------------------------------------------+
-
-* Command Line Options
-
-
-+------------------------------------------+
-usage: java rat.report [options] [DIR|TARBALL]
-Options
- -A,--addLicense                Add the default license header to any file
-                                with an unknown license that is not in the
-                                exclusion list. By default new files will
-                                be created with the license header, to
-                                force the modification of existing files
-                                use the --force option.
- -a,--addlicense                Add the default license header to any file
-                                with an unknown license that is not in the
-                                exclusion list. By default new files will
-                                be created with the license header, to
-                                force the modification of existing files
-                                use the --force option.
- -c,--copyright <arg>           The copyright message to use in the
-                                license headers, usually in the form of
-                                "Copyright 2008 Foo"
- -d,--dir                       Used to indicate source when using
-                                --exclude
- -E,--exclude-file <fileName>   Excludes files matching regular expression
-                                in <file> Note that --dir is required when
-                                using this parameter.
- -e,--exclude <expression>      Excludes files matching wildcard
-                                <expression>. Note that --dir is required
-                                when using this parameter. Allows multiple
-                                arguments.
- -f,--force                     Forces any changes in files to be written
-                                directly to the source files (i.e. new
-                                files are not created)
- -h,--help                      Print help for the Rat command line
-                                interface and exit
- -s,--stylesheet <arg>          XSLT stylesheet to use when creating the
-                                report.  Not compatible with -x
- -x,--xml                       Output the report in raw XML format.  Not
-                                compatible with -s
-+------------------------------------------+
\ No newline at end of file
diff --git a/0.12-release/apache-rat/src/site/resources/css/site.css b/0.12-release/apache-rat/src/site/resources/css/site.css
deleted file mode 100644
index 3683f87..0000000
--- a/0.12-release/apache-rat/src/site/resources/css/site.css
+++ /dev/null
@@ -1,27 +0,0 @@
-/*
-  Licensed to the Apache Software Foundation (ASF) under one
-  or more contributor license agreements.  See the NOTICE file
-  distributed with this work for additional information
-  regarding copyright ownership.  The ASF licenses this file
-  to you under the Apache License, Version 2.0 (the
-  "License"); you may not use this file except in compliance
-  with the License.  You may obtain a copy of the License at
-
-    http://www.apache.org/licenses/LICENSE-2.0
-
-  Unless required by applicable law or agreed to in writing,
-  software distributed under the License is distributed on an
-  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
-  KIND, either express or implied.  See the License for the
-  specific language governing permissions and limitations
-  under the License.    
-*/
-footer {
-    font-family: "Mate SC", "Lucida Console", Monaco, monospace;
-    font-size: 9pt;
-    padding: 5px 10px;
-    text-align: justify;
-    border: thin solid #D0D0D0;
-    background-color: #F8F8F8;
-    color: #404040;
-}
\ No newline at end of file
diff --git a/0.12-release/apache-rat/src/site/site.xml b/0.12-release/apache-rat/src/site/site.xml
deleted file mode 100644
index e1fd449..0000000
--- a/0.12-release/apache-rat/src/site/site.xml
+++ /dev/null
@@ -1,32 +0,0 @@
-<?xml version="1.0" ?>
-<!--
-  Licensed to the Apache Software Foundation (ASF) under one or more
-  contributor license agreements.  See the NOTICE file distributed with
-  this work for additional information regarding copyright ownership.
-  The ASF licenses this file to You under the Apache License, Version 2.0
-  (the "License"); you may not use this file except in compliance with
-  the License.  You may obtain a copy of the License at
-
-      http://www.apache.org/licenses/LICENSE-2.0
-
-  Unless required by applicable law or agreed to in writing, software
-  distributed under the License is distributed on an "AS IS" BASIS,
-  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-  See the License for the specific language governing permissions and
-  limitations under the License.
--->
-<project xmlns="http://maven.apache.org/DECORATION/1.3.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
-         xsi:schemaLocation="http://maven.apache.org/DECORATION/1.3.0 http://maven.apache.org/xsd/decoration-1.3.0.xsd"
-         name="Apache Rat&trade;">
-  <body>    
-    <head>
-        <link 
-            href='http://fonts.googleapis.com/css?family=Mate+SC' 
-            rel='stylesheet' 
-            type='text/css'/>
-    </head>
-  
-    <menu ref="parent"/>
-    <menu ref="reports"/>
-  </body>
-</project>
diff --git a/0.12-release/pom.xml b/0.12-release/pom.xml
deleted file mode 100644
index 64ce188..0000000
--- a/0.12-release/pom.xml
+++ /dev/null
@@ -1,694 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!--
-  Licensed to the Apache Software Foundation (ASF) under one or more
-  contributor license agreements.  See the NOTICE file distributed with
-  this work for additional information regarding copyright ownership.
-  The ASF licenses this file to You under the Apache License, Version 2.0
-  (the "License"); you may not use this file except in compliance with
-  the License.  You may obtain a copy of the License at
-
-      http://www.apache.org/licenses/LICENSE-2.0
-
-  Unless required by applicable law or agreed to in writing, software
-  distributed under the License is distributed on an "AS IS" BASIS,
-  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-  See the License for the specific language governing permissions and
-  limitations under the License.
--->
-<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
-  <modelVersion>4.0.0</modelVersion>
-  <parent>
-    <groupId>org.apache</groupId>
-    <artifactId>apache</artifactId>
-    <version>17</version>
-  </parent>
-  <groupId>org.apache.rat</groupId>
-  <artifactId>apache-rat-project</artifactId>
-  <version>0.12</version>
-  <packaging>pom</packaging>
-  <name>Apache Creadur Rat</name>
-  <url>http://creadur.apache.org/rat/</url>
-  <description>
-Apache Rat is a release audit tool. It improves accuracy and efficiency when checking
-releases. It is heuristic in nature: making guesses about possible problems. It
-will produce false positives and cannot find every possible issue with a release.
-Its reports require interpretation.
-
-In response to demands from project quality tool developers, Rat is available as a
-library suitable for inclusion in tools. This POM describes that library.
-Note that binary compatibility is not guaranteed between 0.x releases.
-
-Apache Rat is developed by the Apache Creadur project, a language and build
-agnostic home for software distribution comprehension and audit tools.
-  </description>
-  <inceptionYear>2006</inceptionYear>
-  <prerequisites>
-    <!-- This is the version of Maven required to build Rat -->
-    <maven>3.0.5</maven>
-  </prerequisites>
-  <properties>
-    <javaVersion>1.5</javaVersion>
-    <maven.compiler.source>${javaVersion}</maven.compiler.source>
-    <maven.compiler.target>${javaVersion}</maven.compiler.target>
-    <!-- This is the version of Maven required to use the Rat Maven Plugin -->
-    <mavenVersion>2.2.1</mavenVersion>
-    <!--
-    Publication to the website is a two phase operation:
-
-     1. Deploy to local stage: mvn site-deploy
-     2. Publish to Apache CMS: mvn scm-publish:publish-scm
-
-    This will only work when the origin for scm-publish:publish-scm
-    is the target for site:deploy.
-
-    SO MAKE SURE THAT THE FOLLOWING PROPERTIES RESOLVE TO THE SAME
-    DIRECTORY:
-
-     * scmpublish.content
-     * rat.site.url
-
-    -->
-    <rat.LocalSiteStaging>stage</rat.LocalSiteStaging>
-    <scmpublish.content>${rat.LocalSiteStaging}</scmpublish.content>
-    <rat.site.url>file:${rat.LocalSiteStaging}</rat.site.url>
-    <rat.site.name>Apache Rat Website</rat.site.name>
-    <rat.site.id>org.apache.rat.site</rat.site.id>
-    <creadur.jira.id>RAT</creadur.jira.id>
-    <!-- maven plugin versions -->
-    <mavenPluginPluginVersion>3.3</mavenPluginPluginVersion>
-    <mavenChangesVersion>2.11</mavenChangesVersion>
-  </properties>
-  <dependencyManagement>
-    <dependencies>
-      <dependency>
-        <groupId>org.apache.rat</groupId>
-        <artifactId>apache-rat-api</artifactId>
-        <version>${project.version}</version>
-      </dependency>
-      <dependency>
-        <groupId>org.apache.rat</groupId>
-        <artifactId>apache-rat-core</artifactId>
-        <version>${project.version}</version>
-      </dependency>
-      <dependency>
-        <groupId>org.apache.rat</groupId>
-        <artifactId>apache-rat-tasks</artifactId>
-        <version>${project.version}</version>
-      </dependency>
-      <dependency>
-        <groupId>commons-cli</groupId>
-        <artifactId>commons-cli</artifactId>
-        <version>1.2</version>
-      </dependency>
-      <dependency>
-        <groupId>commons-collections</groupId>
-        <artifactId>commons-collections</artifactId>
-        <version>3.2.2</version>
-      </dependency>
-      <dependency>
-        <groupId>commons-io</groupId>
-        <artifactId>commons-io</artifactId>
-        <!-- Later versions require Java 1.6+ -->
-        <version>2.2</version>
-      </dependency>
-      <dependency>
-        <groupId>commons-lang</groupId>
-        <artifactId>commons-lang</artifactId>
-        <!--  commons-lang3 versions require Java 1.6+ -->
-        <version>2.6</version>
-      </dependency>
-      <dependency>
-        <groupId>org.apache.commons</groupId>
-        <artifactId>commons-compress</artifactId>
-        <version>1.10</version>
-      </dependency>
-      <dependency>
-        <groupId>junit</groupId>
-        <artifactId>junit</artifactId>
-        <version>4.12</version>
-        <scope>test</scope>
-      </dependency>
-      <dependency>
-        <groupId>org.mockito</groupId>
-        <artifactId>mockito-core</artifactId>
-        <version>1.10.19</version>
-        <scope>test</scope>
-      </dependency>
-      <dependency>
-        <groupId>org.mockito</groupId>
-        <artifactId>mockito-all</artifactId>
-        <version>1.10.19</version>
-        <scope>test</scope>
-      </dependency>
-      <dependency>
-        <groupId>org.hamcrest</groupId>
-        <artifactId>hamcrest-library</artifactId>
-        <version>1.2.1</version>
-        <scope>test</scope>
-      </dependency>
-      <dependency>
-        <groupId>org.apache.ant</groupId>
-        <artifactId>ant</artifactId>
-        <version>1.9.6</version>
-        <scope>provided</scope>
-      </dependency>
-      <dependency>
-        <groupId>org.apache.ant</groupId>
-        <artifactId>ant-antunit</artifactId>
-        <version>1.3</version>
-        <scope>test</scope>
-      </dependency>
-      <dependency>
-        <groupId>org.apache.ant</groupId>
-        <artifactId>ant-testutil</artifactId>
-        <version>1.9.6</version>
-        <scope>test</scope>
-      </dependency>
-    </dependencies>
-  </dependencyManagement>
-  <reporting>
-    <!-- N.B. plugins defined here in the <reporting> section ignore what's defined in <pluginManagement>
-         in the <build> section above, so we have to define the versions here. -->
-    <plugins>
-      <!-- org.apache.maven.plugins, alpha order by artifact id -->
-      <plugin>
-        <groupId>org.apache.maven.plugins</groupId>
-        <artifactId>maven-changes-plugin</artifactId>
-        <version>${mavenChangesVersion}</version>
-        <configuration>
-          <xmlPath>${basedir}/src/changes/changes.xml</xmlPath>
-          <columnNames>Fix Version,Key,Component,Summary,Type,Resolution,Status</columnNames>
-          <!-- Sort cols in natural order when using JQL for JIRA 5.1 -->
-          <sortColumnNames>Fix Version DESC,Type,Key DESC</sortColumnNames>
-          <resolutionIds>Fixed</resolutionIds>
-          <statusIds>Resolved,Closed</statusIds>
-          <!-- Don't include sub-task -->
-          <typeIds>Bug,New Feature,Task,Improvement,Wish,Test</typeIds>
-          <!-- For JIRA >= 5.1 -->
-          <useJql>true</useJql>
-          <onlyCurrentVersion>${commons.changes.onlyCurrentVersion}</onlyCurrentVersion>
-          <maxEntries>${commons.changes.maxEntries}</maxEntries>
-          <runOnlyAtExecutionRoot>${commons.changes.runOnlyAtExecutionRoot}</runOnlyAtExecutionRoot>
-        </configuration>
-        <reportSets>
-          <reportSet>
-            <reports>
-              <report>changes-report</report>
-              <report>jira-report</report>
-            </reports>
-          </reportSet>
-        </reportSets>
-      </plugin>
-      <plugin>
-        <groupId>org.apache.maven.plugins</groupId>
-        <artifactId>maven-javadoc-plugin</artifactId>
-        <version>2.10.3</version>
-        <configuration>
-          <tags>
-            <tag>
-              <name>TODO</name>
-              <placement>X</placement>
-              <head>To do:</head>
-            </tag>
-          </tags>
-          <notimestamp>true</notimestamp>
-        </configuration>
-        <reportSets>
-          <reportSet>
-            <id>non-aggregate</id>
-            <configuration>
-            </configuration>
-            <reports>
-              <report>javadoc</report>
-            </reports>
-          </reportSet>
-          <reportSet>
-            <id>aggregate</id>
-            <configuration>
-            </configuration>
-            <reports>
-              <report>aggregate</report>
-            </reports>
-          </reportSet>
-        </reportSets>
-      </plugin>
-      <plugin>
-        <groupId>org.apache.maven.plugins</groupId>
-        <artifactId>maven-jxr-plugin</artifactId>
-        <version>2.4</version>
-      </plugin>
-      <plugin>
-        <groupId>org.apache.maven.plugins</groupId>
-        <artifactId>maven-pmd-plugin</artifactId>
-        <version>3.1</version>
-      </plugin>
-      <plugin>
-        <groupId>org.apache.maven.plugins</groupId>
-        <artifactId>maven-project-info-reports-plugin</artifactId>
-        <version>2.7</version>
-        <reportSets>
-          <reportSet>
-            <reports>
-              <report>dependencies</report>
-              <report>project-team</report>
-              <report>mailing-list</report>
-              <report>issue-tracking</report>
-              <report>cim</report>
-              <!-- Do not enable the license report;
-                   license links must only point to
-                   http://www.apache.org/licenses/
-              <report>license</report>
-              -->
-              <report>scm</report>
-            </reports>
-          </reportSet>
-        </reportSets>
-      </plugin>
-      <plugin>
-        <groupId>org.apache.rat</groupId>
-        <artifactId>apache-rat-plugin</artifactId>
-        <!-- Must use previous version, to avoid a cyclic reference -->
-        <version>0.11</version>
-      </plugin>
-    </plugins>
-  </reporting>
-  <build>
-    <defaultGoal>clean install</defaultGoal>
-    <pluginManagement>
-      <!--
-        This section is typically used to configure the versions of
-        plugins that we use. Note, that we are inheriting from the
-        parent POM, so we only have to configure version numbers,
-        if ours is different.
-      -->
-      <plugins>
-        <plugin>
-          <groupId>org.apache.maven.plugins</groupId>
-          <artifactId>maven-antrun-plugin</artifactId>
-          <version>1.7</version>
-          <dependencies>
-            <dependency>
-              <groupId>org.apache.ant</groupId>
-              <artifactId>ant</artifactId>
-              <version>1.9.6</version>
-            </dependency>
-          </dependencies>
-        </plugin>
-        <plugin>
-          <groupId>org.apache.maven.plugins</groupId>
-          <artifactId>maven-compiler-plugin</artifactId>
-          <version>3.2</version>
-          <configuration>
-            <source>${javaVersion}</source>
-            <target>${javaVersion}</target>
-          </configuration>
-        </plugin>
-        <plugin>
-          <groupId>org.apache.maven.plugins</groupId>
-          <artifactId>maven-javadoc-plugin</artifactId>
-          <version>2.10.3</version>
-        </plugin>
-        <plugin>
-          <groupId>org.apache.maven.plugins</groupId>
-          <artifactId>maven-dependency-plugin</artifactId>
-          <version>2.8</version>
-        </plugin>
-        <plugin>
-          <groupId>org.apache.maven.plugins</groupId>
-          <artifactId>maven-pmd-plugin</artifactId>
-          <!-- Later versions require Java 1.6+ -->
-          <version>3.1</version>
-          <configuration>
-            <targetJdk>${javaVersion}</targetJdk>
-          </configuration>
-        </plugin>
-        <plugin>
-          <groupId>org.apache.maven.plugins</groupId>
-          <artifactId>maven-site-plugin</artifactId>
-          <version>3.4</version>
-          <configuration>
-            <relativizeDecorationLinks>false</relativizeDecorationLinks>
-          </configuration>
-        </plugin>
-        <plugin>
-          <groupId>org.apache.maven.plugins</groupId>
-          <artifactId>maven-scm-publish-plugin</artifactId>
-          <version>1.0</version>
-          <extensions>true</extensions>
-          <configuration>
-            <!-- svn location for publication -->
-            <pubScmUrl>scm:svn:https://svn.apache.org/repos/asf/creadur/site/trunk/content/rat/</pubScmUrl>
-          </configuration>
-        </plugin>
-        <plugin>
-          <groupId>org.apache.maven.plugins</groupId>
-          <artifactId>maven-release-plugin</artifactId>
-          <version>2.5.1</version>
-          <configuration>
-            <!-- Only prompt once for the release version -->
-            <autoVersionSubmodules>true</autoVersionSubmodules>
-            <mavenExecutorId>forked-path</mavenExecutorId>
-            <tagNameFormat>@{project.artifactId}-@{project.version}-RC1</tagNameFormat>
-          </configuration>
-        </plugin>
-        <plugin>
-          <artifactId>maven-release-plugin</artifactId>
-          <version>2.5.1</version>
-          <configuration>
-            <tagNameFormat>@{project.artifactId}-@{project.version}-RC3</tagNameFormat>
-          </configuration>
-        </plugin>
-        <!--This plugin's configuration is used to store Eclipse m2e settings only. It has no influence on the Maven build itself.-->
-        <plugin>
-        	<groupId>org.eclipse.m2e</groupId>
-        	<artifactId>lifecycle-mapping</artifactId>
-        	<version>1.0.0</version>
-        	<configuration>
-        		<lifecycleMappingMetadata>
-        			<pluginExecutions>
-        				<pluginExecution>
-        					<pluginExecutionFilter>
-        						<groupId>org.apache.rat</groupId>
-        						<artifactId>
-        							apache-rat-plugin
-        						</artifactId>
-        						<versionRange>[0.11,)</versionRange>
-        						<goals>
-        							<goal>check</goal>
-        						</goals>
-        					</pluginExecutionFilter>
-        					<action>
-        						<ignore />
-        					</action>
-        				</pluginExecution>
-        			</pluginExecutions>
-        		</lifecycleMappingMetadata>
-        	</configuration>
-        </plugin>
-      </plugins>
-    </pluginManagement>
-    <plugins>
-      <plugin>
-        <groupId>org.apache.maven.plugins</groupId>
-        <artifactId>maven-antrun-plugin</artifactId>
-        <executions>
-          <execution>
-            <phase>pre-site</phase>
-            <id>copy-site-resources</id>
-            <goals>
-              <goal>run</goal>
-            </goals>
-            <configuration>
-              <target>
-                <copy file="RELEASE_NOTES.txt" todir="${project.build.directory}/site/" failonerror="false" />
-              </target>
-            </configuration>
-          </execution>
-        </executions>
-      </plugin>
-      <plugin>
-        <groupId>org.apache.maven.plugins</groupId>
-        <artifactId>maven-enforcer-plugin</artifactId>
-        <executions>
-          <execution>
-            <!-- This checks the bytecode version of the dependencies transitively -->
-            <id>enforce-bytecode-version</id>
-            <goals>
-              <goal>enforce</goal>
-            </goals>
-            <configuration>
-              <rules>
-                <enforceBytecodeVersion>
-                  <maxJdkVersion>${javaVersion}</maxJdkVersion>
-                </enforceBytecodeVersion>
-              </rules>
-              <fail>true</fail>
-            </configuration>
-          </execution>
-        </executions>
-        <dependencies>
-          <dependency>
-            <groupId>org.codehaus.mojo</groupId>
-            <artifactId>extra-enforcer-rules</artifactId>
-            <version>1.0-beta-2</version>
-          </dependency>
-        </dependencies>
-      </plugin>
-      <plugin>
-        <groupId>org.codehaus.mojo</groupId>
-        <artifactId>animal-sniffer-maven-plugin</artifactId>
-        <version>1.11</version>
-        <dependencies>
-          <!-- Upgrade ASM and support Java 8 bytecode -->
-          <dependency>
-            <groupId>org.ow2.asm</groupId>
-            <artifactId>asm-all</artifactId>
-            <version>5.0.3</version>
-          </dependency>
-        </dependencies>
-        <executions>
-          <execution>
-            <!-- This checks the source code of our project -->
-            <!--
-              Note that this cannot use our ${javaVersion} property, so it must
-              be changed manually when we decide to move to a higher version of
-              Java
-            -->
-            <id>check-java-1.5-compat</id>
-            <phase>process-classes</phase>
-            <goals>
-              <goal>check</goal>
-            </goals>
-            <configuration>
-              <signature>
-                <groupId>org.codehaus.mojo.signature</groupId>
-                <artifactId>java15</artifactId>
-                <version>1.0</version>
-              </signature>
-            </configuration>
-          </execution>
-        </executions>
-      </plugin>
-    </plugins>
-    <extensions>
-      <extension>
-        <groupId>org.apache.maven.wagon</groupId>
-        <artifactId>wagon-ssh</artifactId>
-        <!-- Last version that is compatible with Maven 2 -->
-        <version>1.0-beta-7</version>
-      </extension>
-    </extensions>
-  </build>
-  <issueManagement>
-    <system>JIRA</system>
-    <url>https://issues.apache.org/jira/browse/RAT</url>
-  </issueManagement>
-  <ciManagement>
-    <system>Buildbot</system>
-    <url>http://ci.apache.org/builders/rat_trunk</url>
-    <!--  Jenkins builds are at:
-    https://builds.apache.org/job/Creadur-Rat-ParentPom/ - build the parent pom for all RAT submodules
-    https://builds.apache.org/job/Creadur-Rat/ - check Java5 compliance and run all tests
-    https://builds.apache.org/job/Creadur-Rat-Site/ - generate mvn site
-    https://builds.apache.org/job/Creadur-Rat-Latest-Jdk/ - run with Java8 and mvn3 latest
-    https://builds.apache.org/job/Creadur-Rat-Site-Latest-Jdk/ - ensure that a site can be generated with mvn3 and Java8
-     -->
-  </ciManagement>
-  <mailingLists>
-    <mailingList>
-      <name>Rat Development (Apache Creadur project)</name>
-      <subscribe>dev-subscribe@creadur.apache.org</subscribe>
-      <unsubscribe>dev-unsubscribe@creadur.apache.org</unsubscribe>
-      <post>dev@creadur.apache.org</post>
-      <archive>http://mail-archives.apache.org/mod_mbox/creadur-dev/</archive>
-    </mailingList>
-    <mailingList>
-      <name>Rat Commits (Apache Creadur project)</name>
-      <subscribe>commits-subscribe@creadur.apache.org</subscribe>
-      <unsubscribe>commits-unsubscribe@creadur.apache.org</unsubscribe>
-      <archive>http://mail-archives.apache.org/mod_mbox/creadur-commits/</archive>
-    </mailingList>
-  </mailingLists>
-  <developers>
-    <developer>
-      <id>bodewig</id>
-      <name>Stefan Bodewig</name>
-      <email>bodewig@apache.org</email>
-    </developer>
-    <developer>
-      <id>rdonkin</id>
-      <name>Robert Burrell Donkin</name>
-      <email>rdonkin@apache.org</email>
-    </developer>
-    <developer>
-      <id>jochen</id>
-      <name>Jochen Wiedmann</name>
-      <email>jochen@apache.org</email>
-    </developer>
-    <developer>
-      <id>gmcdonald</id>
-      <name>Gavin</name>
-      <email>gmcdonald@apache.org</email>
-    </developer>
-    <developer>
-      <id>brianf</id>
-      <name>Brian Fox</name>
-      <email>brianf@apache.org</email>
-    </developer>
-    <developer>
-      <id>dennisl</id>
-      <name>Dennis Lundberg</name>
-      <email>dennisl@apache.org</email>
-    </developer>
-    <developer>
-      <id>rgardler</id>
-      <name>Ross Gardler</name>
-      <email>rgardler@apache.org</email>
-    </developer>
-    <developer>
-      <id>crossley</id>
-      <name>David Crossley</name>
-      <email>crossley@apache.org</email>
-    </developer>
-    <developer>
-      <id>dblevins</id>
-      <name>David Blevins</name>
-      <email>dblevins@apache.org</email>
-    </developer>
-    <developer>
-      <id>pottlinger</id>
-      <name>Philipp Ottlinger</name>
-      <email>pottlinger@apache.org</email>
-    </developer>
-  </developers>
-  <contributors>
-    <contributor>
-      <name>Jukka Zitting</name>
-      <email>jukka@apache.org</email>
-    </contributor>
-    <contributor>
-      <name>Todd Volkert</name>
-      <email>tvolkert+apache@gmail.com</email>
-    </contributor>
-    <contributor>
-      <name>Henri Yandell</name>
-      <email>bayard@apache.org</email>
-    </contributor>
-    <contributor>
-      <name>Guillaume Nodet</name>
-      <email>gnodet@apache.org</email>
-    </contributor>
-    <contributor>
-      <name>Karl Pauls</name>
-      <email>pauls@apache.org</email>
-    </contributor>
-    <contributor>
-      <name>Matthieu Riou</name>
-      <email>mriou@apache.org</email>
-    </contributor>
-    <contributor>
-      <name>Garrett Rooney</name>
-      <email>rooneg@apache.org</email>
-    </contributor>
-    <contributor>
-      <name>Paul Merlin</name>
-      <email>paulmerlin@apache.org</email>
-    </contributor>
-  </contributors>
-  <scm>
-    <connection>scm:svn:http://svn.apache.org/repos/asf/creadur/rat/tags/apache-rat-project-0.12-RC3</connection>
-    <developerConnection>scm:svn:https://svn.apache.org/repos/asf/creadur/rat/tags/apache-rat-project-0.12-RC3</developerConnection>
-    <url>http://svn.apache.org/repos/asf/creadur/rat/tags/apache-rat-project-0.12-RC3</url>
-  </scm>
-  <distributionManagement>
-    <site>
-      <id>${rat.site.id}</id>
-      <name>${rat.site.name}</name>
-      <url>${rat.site.url}</url>
-    </site>
-  </distributionManagement>
-  <modules>
-    <module>apache-rat-api</module>
-    <module>apache-rat-core</module>
-    <module>apache-rat-plugin</module>
-    <module>apache-rat-tasks</module>
-    <module>apache-rat</module>
-  </modules>
-  <licenses>
-    <license>
-      <name>Apache License, Version 2</name>
-      <url>http://www.apache.org/licenses/LICENSE-2.0.txt</url>
-      <distribution>repo</distribution>
-      <comments>An OSI approved open source license.</comments>
-    </license>
-  </licenses>
-  <organization>
-    <name>Apache Software Foundation</name>
-    <url>http://www.apache.org</url>
-  </organization>
-  <profiles>
-    <profile>
-      <id>apache-release</id>
-      <build>
-        <plugins>
-          <!-- Skip the source-release artifact here; we create it under the CLI module -->
-          <plugin>
-            <artifactId>maven-assembly-plugin</artifactId>
-            <executions>
-              <execution>
-                <id>source-release-assembly</id>
-                <phase>package</phase>
-                <goals>
-                  <goal>single</goal>
-                </goals>
-                <configuration>
-                  <skipAssembly>true</skipAssembly>
-                </configuration>
-              </execution>
-            </executions>
-          </plugin>
-        </plugins>
-      </build>
-    </profile>
-    <profile>
-      <!--
-          Generate release notes in top-level directory from src/changes/changes.xml
-          Usage:
-          mvn changes:announcement-generate -Prelease-notes [-Dchanges.version=nnn]
-
-          Defining changes.version allows one to create the RN without first removing the SNAPSHOT suffix.
-
-          Requires file src/changes/release-notes.vm.
-       -->
-      <id>release-notes</id>
-      <build>
-        <plugins>
-          <plugin>
-            <groupId>org.apache.maven.plugins</groupId>
-            <artifactId>maven-changes-plugin</artifactId>
-            <version>${mavenChangesVersion}</version>
-            <configuration>
-              <template>release-notes.vm</template>
-              <templateDirectory>src/changes</templateDirectory>
-              <runOnlyAtExecutionRoot>true</runOnlyAtExecutionRoot>
-              <announcementDirectory>.</announcementDirectory>
-              <announcementFile>RELEASE-NOTES.txt</announcementFile>
-              <announceParameters>
-                <releaseVersion>${mavenChangesVersion}</releaseVersion>
-              </announceParameters>
-            </configuration>
-            <executions>
-              <execution>
-                <id>create-release-notes</id>
-                <phase>generate-resources</phase>
-                <goals>
-                  <goal>announcement-generate</goal>
-                </goals>
-              </execution>
-            </executions>
-          </plugin>
-        </plugins>
-      </build>
-    </profile>
-  </profiles>
-</project>
diff --git a/0.12-release/src/changes/changes.xml b/0.12-release/src/changes/changes.xml
deleted file mode 100644
index 27889c1..0000000
--- a/0.12-release/src/changes/changes.xml
+++ /dev/null
@@ -1,340 +0,0 @@
-<?xml version='1.0'?>
-<!--
-  Licensed to the Apache Software Foundation (ASF) under one or more
-  contributor license agreements.  See the NOTICE file distributed with
-  this work for additional information regarding copyright ownership.
-  The ASF licenses this file to You under the Apache License, Version 2.0
-  (the "License"); you may not use this file except in compliance with
-  the License.  You may obtain a copy of the License at
-
-      http://www.apache.org/licenses/LICENSE-2.0
-
-  Unless required by applicable law or agreed to in writing, software
-  distributed under the License is distributed on an "AS IS" BASIS,
-  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-  See the License for the specific language governing permissions and
-  limitations under the License.
--->
-
-<!--
-This file is also used by the maven-changes-plugin to generate the release notes.
-Useful ways of finding items to add to this file are:
-
-1.  Add items when you fix a bug or add a feature (this makes the 
-release process easy :-).
-
-2.  Do a JIRA search for tickets closed since the previous release.
-
-3.  Use the report generated by the maven-changelog-plugin to see all
-SVN commits. TBA how to use this with SVN.
-
-To generate the release notes from this file:
-
-mvn changes:announcement-generate -Prelease-notes [-Dchanges.version=nn]
-then tweak the formatting if necessary 
-and commit
-
-The <action> type attribute can be add,update,fix,remove.
-
-    Please list action attributes in the following order:
-    issue - required
-    type - required
-    the rest are optional; order not important
-    
-    having the issue number first makes it easier to read the XML outline
-
--->
-
-<document xmlns="http://maven.apache.org/changes/1.0.0"
-          xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
-          xsi:schemaLocation="http://maven.apache.org/changes/1.0.0 http://maven.apache.org/xsd/changes-1.0.0.xsd">
-  <properties>
-    <title>Changes in Apache Creadur RAT</title>
-    <author email="dev@creadur.apache.org">Apache Creadur RAT developers</author>
-  </properties>
-
-  <body>
-    <release version="0.12" date="2015-09-30" description=
-" We now require Maven 3.0.5+ to build Rat, but as before we only require
- Maven 2.2.1+ if you want to use Rat in your own Maven projects.
-
-We've integrated Rat into the ASF Jenkins to ensure continuous builds with various JDK versions. 
-">
-      <action issue="RAT-215" type="fix" dev="pottlinger">
-        Add WOFF2, WOFF, TTF and EOT font file extensions to binary file collection to allow faster detection as binary without reading in the files.
-      </action>
-      <action issue="RAT-214" type="fix" dev="pottlinger">
-        Upgrade commons-compress and apache-ant due to possible security problems.
-      </action>
-      <action issue="RAT-213" type="fix" dev="pottlinger">
-        Upgrade to commons-collections 3.2.2.
-      </action>
-      <action issue="RAT-210" type="fix" dev="pottlinger">
-        Adapt layout of Creadur project pages to use the new ASF logo. Change links to SSL.
-      </action>
-      <action issue="RAT-163" type="fix" dev="jochen">
-        Removing the Gradle Plugin from the Rat Core project, so that building
-        with Java 5 works again.
-      </action>
-      <action issue="RAT-158" type="fix" due-to="Hervé Boutemy" dev="pottlinger">
-        Fix SAX-Parser warning by explicitly excluding xerces in Doxia 1.2.
-      </action>
-      <action issue="RAT-173" type="fix" due-to="Chris Burroughs" dev="pottlinger">
-        Allow complete skip of RAT plugin with rat.skip property.
-      </action>
-      <action issue="RAT-174" type="fix" due-to="Chris Burroughs" dev="pottlinger">
-        CDDL1License still very slow, replace Pattern matching with simple String comparison.
-      </action>
-      <action issue="RAT-175" type="fix" dev="sebb">
-        SourceCodeManagementSystems.hasIgnoreFile() should return boolean.
-      </action>
-      <action issue="RAT-177" type="fix" dev="pottlinger">
-        Final arrays should be private.
-      </action>
-      <action issue="RAT-188" type="fix" due-to="Mark Thomas" dev="pottlinger">
-        Fix problems with AnimalSniffer-plugin when running in GUMP with Java 8.
-        Workaround for https://jira.codehaus.org/browse/MANIMALSNIFFER-45
-      </action>
-      <action issue="RAT-160" type="fix" due-to="Christopher Tubbs" dev="pottlinger">
-        Ignore build.log created by maven-invoker-plugin.
-      </action>
-      <action issue="RAT-179" type="fix" dev="pottlinger">
-        Maven plugin and Ant task do not support adding extra approved licenses.
-      </action>
-      <action issue="RAT-180" type="fix" dev="pottlinger">
-        Generify and beautify texts in RAT report. 
-      </action>
-      <action issue="RAT-196" type="add" due-to="Karl Heinz Marbais" dev="pottlinger">
-        Minor refactoring in pom.xml.
-      </action>
-      <action issue="RAT-194" type="fix" due-to="Hervé Boutemy" dev="pottlinger">
-        Upgrade to Doxia 1.6 if called directly, does not affect problems reported in RAT-158. Minor improvements.
-      </action>
-      <action issue="RAT-61" type="add" due-to="Jukka Zitting" dev="dennisl">
-        List files with unapproved licenses in Maven output.
-      </action>
-      <action issue="RAT-170" type="add" due-to="Philipp Ottlinger" dev="dennisl">
-        RAT should use itself during build and site generation.
-      </action>
-      <action issue="RAT-181" type="add" dev="sebb">
-        BinaryGuesser should treat *.truststore as binary.
-      </action>
-      <action issue="RAT-184" type="add" due-to="Karl Heinz Marbaise" dev="pottlinger">
-        Add DEPENDENCIES to the list of ignored files in NoteGuesser.
-      </action>
-      <action issue="RAT-185" type="add" due-to="Karl Heinz Marbaise" dev="dennisl">
-        .repository folder should be ignored.
-      </action>
-      <action issue="RAT-186" type="add" dev="dennisl">
-        BinaryGuesser should recognize PSD files as images.
-      </action>
-      <action issue="RAT-187" type="add" due-to="Karl Heinz Marbaise" dev="dennisl">
-        Add 'SAR', 'HAR', 'WSR' as archives which should be ignored.
-      </action>
-      <action issue="RAT-197" type="add" due-to="Karl Heinz Marbaise" dev="pottlinger">
-        Improve exclusion defaults when working with Maven 3.3.1 (exclude .mvn).
-      </action>
-      <action issue="RAT-198" type="fix" due-to="Karl Heinz Marbaise" dev="pottlinger">
-        Upgrade plexus-utils to 3.0.20.
-      </action>
-      <action issue="RAT-172" type="fix" dev="pottlinger">
-        Exclude technical directories of source code management systems and their ignore files from RAT scans.
-      </action>
-      <action issue="RAT-200" type="fix" dev="pottlinger">
-        Upgrade ASF parent POM to 17.
-      </action>
-      <action issue="RAT-201" type="add" dev="pottlinger">
-        BinaryGuesser should treat *.swf as binary.
-        Furthermore BinaryGuesser falls back to UTF-8 encoding in case the encoding given via system property
-        (-Dfile.encoding) was not found.
-      </action>
-      <action issue="RAT-202" type="add" dev="pottlinger">
-         Report layout differs between successful RAT checks and existence of unapproved files.
-      </action>
-      <action issue="RAT-202" type="add" dev="pottlinger">
-         Report layout differs between successful RAT checks and existence of unapproved files.
-      </action>
-      <action issue="RAT-203" type="add" dev="pottlinger">
-         Using 'license' in README, source code, javadoc, comments and site instead of 'licence';
-         improve terminology to not confuse RAT consumers.
-      </action>
-      <action issue="RAT-204" type="add" dev="pottlinger">
-        Unify resource handling in code and tests, make sure the resources are properly closed. Apply minor refactorings.
-      </action>
-    </release>
-    <release version="0.11" date="2014-08-31" description=
-"* Rat stays at compiler level 1.5 to be more compliant with other Maven plugins,
-  fixed build/CI environment to reflect and ensure that.
-
-  * Fixed Javadoc warnings during build, upgraded Maven Plugin Plugin to avoid
-  warnings in generated code (https://jira.codehaus.org/browse/MPLUGIN-237)
-">
-    <action issue="RAT-135" type="fix">addLicenseHeaders is missing a space on license header.</action>
-    <action issue="RAT-144" type="fix">AbstractRatMojo String constant arrays should be private</action>
-    <action issue="RAT-148" type="fix" due-to="Chris A Mattmann">LicenseAddingReport#report has useless call to metaData.getData</action>
-    <action issue="RAT-151" type="fix">Detect more archive file formats</action>
-    <action issue="RAT-152" type="fix">Recognize the format for .bsh, .fml and .jsp file types</action>
-    <action issue="RAT-153" type="fix">Do not add extra empty lines when appending headers for the Apache License</action>
-    <action issue="RAT-154" type="fix">Indentation of the license header should be decided per family</action>
-    <action issue="RAT-155" type="fix">Do not add empty first and last lines in the license header for certain families</action>
-    <action issue="RAT-156" type="fix">Add some symmetry when applying license headers to files with file type specific headers</action>
-    <action issue="RAT-159" type="fix">Detect OpenOffice documents as being archives</action>
-    <action issue="RAT-129" type="add">Add support for CDDL 1.0</action>
-    <action issue="RAT-162" type="add" due-to="Andrew Gaul">CDDL1License.matches slow with large inputs</action>
-    <action issue="RAT-164" type="add">Allow skipping execution entirely</action>
-    <action issue="RAT-165" type="add">Use a maven defaultGoal for RAT's base pom.xml</action>
-    </release>
-    <release version="0.10" date="2013-09-05" description=
-"The 0.10 version includes several bug fixes, 
-most notably a fix for 0.9 performance issues.
- * Simpler binary archive
- * Updated dependencies and plugins
- * Fixed up generics and annotations">
-      <action issue="RAT-137" type="fix">Website shows incorrect Maven goals in some pages</action>
-      <action issue="RAT-128" type="fix">Use the proper name for the Apache License</action>
-      <action issue="RAT-138" type="fix">RAT runs very slowly on some input</action>
-      <action issue="RAT-140" type="fix">OASISLicense allows invalid Copyright line</action>
-      <action issue="RAT-139" type="fix">FullTextMatchingLicense.prune uses inefficient deleteAtChar</action>
-      <action issue="RAT-145" type="fix">Maven plugin should not run in the "verify" phase, but in the "validate" phase</action>
-      <action issue="RAT-129" type="add">Add support for CDDL 1.0 </action>
-    </release>
-    <release version="0.9"  date="2013-05-02" description=
-" * Improved documentation
-  * Rat now requires Java5 at runtime
-  * The Antlib contains a new matcher type that allows matching on the
-   full text of the license rather than a single line.
- * Support automatic addition of license headers to svg files.">
-      <action issue="RAT-3" type="fix">Incorrect alignment of file contents</action>
-      <action issue="RAT-102" type="fix">typo in pom.xml / field description</action>
-      <action issue="RAT-109" type="fix">Return value of mkdirs() is not checked and no error handling occurs</action>
-      <action issue="RAT-116" type="fix">Docs don't say what the default excludes are</action>
-      <action issue="RAT-120" type="fix">fix some maven warnings and upgrade some dependencies.</action>
-      <action issue="RAT-121" type="fix">use maven java5 annotations for maven plugins</action>
-      <action issue="RAT-122" type="fix">Maven Plugin: field to ignore errors and continue the build</action>
-      <action issue="RAT-124" type="fix">Rat plugin should exclude the configuration directory used by IDEA</action>
-      <action issue="RAT-126" type="fix">Default excludes do not ignore .git/ repository</action>
-      <action issue="RAT-13" type="update">[GOOGLE-14] GNU License support</action>
-      <action issue="RAT-49" type="update">Recognise MIT LIcense</action>
-      <action issue="RAT-104" type="update">
-          Using jUnit4 annotation based tests instead of junit3 - migration from junit 3.8.2 to current junit 4.10
-      </action>
-      <action issue="RAT-106" type="fix">Minor Javadoc errors fixed in 3 files</action>
-      <action issue="RAT-108" type="update">Add native support for thrift generated code to be ignored</action>
-      <action issue="RAT-111" type="update">RAT does not ignore javah generated files</action>
-      <action issue="RAT-125" type="update">Support applied AL20 license headers, including checking for required copyright header line</action>
-      <action issue="RAT-78" type="add">Support doxia 1.1.2</action>
-      <action issue="RAT-59" type="update">Upgrade To Java 1.5</action>
-      <action issue="RAT-119" type="update">Upgrade Maven prerequisite to 2.2.1</action>
-    </release>
-    <release version="0.8-incubating"  date="2011-11-15" description=
-"Version 0.8 improves the command line interface, supports more file
-types when adding license headers and makes it easier to detect custom
-licenses.
-Some website fixes
-The Antlib and Maven plugins now provide simpler ways to detect licenses not directly supported by Rat.">
-      <action issue="RAT-86" type="bug">CLI doesn't allow adding of licenses unless a custom stylesheet has been specified</action>
-      <action issue="RAT-87" type="bug">Tests could leave temporary files around.></action>
-      <action issue="RAT-92" type="bug">When adding licenses Rat used \n instead of the platform dependent line--end character(s)</action>
-      <action issue="RAT-94" type="bug">Streams were not always closed immediately when adding licenses.</action>
-      <action issue="RAT-79" type="update">Support automatic addition of license headers to Velocity templates</action>
-      <action issue="RAT-83" type="update">Support automatic addition of license headers to Scala source files</action>
-      <action issue="RAT-84" type="update">Support automatic addition of license headers to Ruby source files</action>
-      <action issue="RAT-89" type="update">Support automatic addition of license headers to Perl, TCL, C++, C# and PHP source files</action>
-      <action issue="RAT-91" type="update">Support automatic addition of license headers to Groovy source files</action>
-      <action issue="RAT-85" type="update">Allow --addLicense as an alias for --addLicence for people used to the US spelling.</action>
-      <action issue="RAT-34" type="update">--addLicense will add the license to the top of Java files without a package line or XML files without an XML declaration now - it used to not add anything.</action>
-      <action issue="RAT-67" type="update">The XML and standard plain text reports now contain a timestamp with the time the report has been generated.</action>
-      <action issue="RAT-95" type="update"> When adding licenses Rat will now remove any BOM from the file.</action>
-      <action issue="RAT-93" type="update">--addLicense now supports more .NET specific files like MS Visual Studio project and solution files</action>
-      <action issue="RAT-99" type="update">The command line interface has a new option that specifies a file containing regular expressions for files to exclude</action>
-    </release>
-    <release version="0.7-incubating"  date="2013-05-02" description=
-"The following changes have been made in Apache RAT 0.7:
-
-- Add support for Python scripts, C source files, Unix shell scripts (.sh) and Windows batch files (.bat) (RAT-68)
-- Allow Ant task to output report as XML. (RAT-73)
-- Allow users to specify a custom XSLT stylesheet for reports (RAT-74, and RAT-75)
-- Some website fixes
-- Optionally auto-add headers to source files. (RAT-76) ">
-      <action issue="RAT-62" type="fix">Some of Rat's own files missing License Headers</action>
-      <action issue="RAT-63" type="fix">ant-task-examples.xml has an wrong uri in the -typedef ant target</action>
-      <action issue="RAT-70" type="fix">Missing closing html tag in generated report by</action>
-      <action issue="RAT-17" type="update">Support the use of archives as input</action>
-      <action issue="RAT-30" type="update">Support automatic addition of license headers</action>
-      <action issue="RAT-76" type="update">Support automatic addition of license headers</action>
-      <action issue="RAT-52" type="update">Merge In Rat Output Semantics</action>
-      <action issue="RAT-56" type="update">Commons IO Wildcard Excludes</action>
-      <action issue="RAT-65" type="update">Rat Pom cleanup</action>
-      <action issue="RAT-68" type="update">Add support for Python, C, &amp; script files (.bat &amp; .sh)</action>
-      <action issue="RAT-72" type="update">Keep version in plugins sample doc up to date</action>
-      <action issue="RAT-73" type="update">Support for XML output in Ant task and Maven Plugin</action>
-      <action issue="RAT-73" type="update">Support for XML output in Ant task and Maven Plugin</action>
-      <action issue="RAT-74" type="update">Support for custom XSLT stylesheets</action>
-      <action issue="RAT-75" type="update">Support for custom XSLT stylesheets</action>
-    </release>
-    <release version="0.6-incubating" date="2009-04-10" description=
-"This is the first version using the org.apache package
-structure and related names. RAT users are strongly encouraged to
-migrate, as the old Google version will no longer be maintained.
- * Support for TMF header
- * Comprehend PEM, CRL file endings
- * Added reporting capability to recursive rat script
- * Moved to the Incubator@Apache
-">
-      <action issue="RAT-37" type="fix" dev="jochen"
-          due-to="Jukka Zitting" due-to-email="jukka@apache.org">
-        List all resources with unapproved licenses at the beginning of the report.
-      </action>
-      <action issue="RAT-36" type="fix" dev="jochen"
-          due-to="Jukka Zitting" due-to-email="jukka@apache.org">
-        Report header incorrectly refers to an "L" license marker
-      </action>
-      <action issue="RAT-33" type="fix" dev="jochen"
-          due-to="Gavin" due-to-email="gavin@16degrees.com.au">
-        Mailing list subscribe points to unsubscribe
-      </action>
-      <action issue="RAT-3" type="fix">Incorrect alignment of file contents</action>
-      <action issue="RAT-11" type="fix">Incorrect number of unnapproved licences reported</action>
-      <action issue="RAT-12" type="fix">Incorrect SCM info in maven plugin pom</action>
-      <action issue="RAT-29" type="fix">NPE on &quot;mvn install&quot; in rat-anttasks</action>
-      <action issue="RAT-34" type="fix">No license header added for java files that do not contain project line</action>
-      <action issue="RAT-35" type="fix">Incorrect number of unapproved licenses reported by rat:check</action>
-      <action issue="RAT-8" type="update">add JavaCC to GeneratedLicenseNotRequired</action>
-      <action issue="RAT-9" type="update">A more informative website</action>
-      <action issue="RAT-10" type="update">A few Javadoc comments</action>
-      <action issue="RAT-23" type="update">More details in text summary</action>
-      <action issue="RAT-24" type="update">Include checksums on web page</action>
-      <action issue="RAT-26" type="update">Improve web summary</action>
-      <action issue="RAT-27" type="update">Index page</action>
-      <action issue="RAT-6" type="add">RAT Source Import</action>
-      <action issue="RAT-28" type="add">Repackage maven plugin</action>
-      <action issue="RAT-1" type="add">maven-rat-plugin and ant-rat tasks</action>
-    </release>
-    <release version="0.5.1" description=
-"* Fixed file closing bug
- * Fixed XML bad character bug"/>
-    <release version="0.5" description=
-" * Added header matcher for DoJo.
- * Refactoring existing codebase to separate concerns and use
-   resource pipeline.
- * New header matching library."/>
-    <release version="0.4.1" description=
-"Rat 0.4.1 is the first release with distributions. The release was cut
-for this purpose.
- * Created POM for use with Rat library.
- * Ant task switched to use Xml based report."/>
-    <release version="0.4" description=
-" * Ant tasks added. These allow Rat reports to be run against a wide variety
-   of resources from within Ant.
- * Legacy report is now deprecated. It will be removed before the next release.
- * Created stylesheet for xml reports which produce output similar to the legacy
-   plain text report. Application now uses the xml report with that stylesheet.
- * Revised xml output format
- * Improve support for binary recognition by adding code that tastes files"/>
-    <release version="0.3" description=
-" * This is the last release with the original hacked together plain test report.
-   The new XML reporting code is present but is not yet the default.
- * Rat 0.3 is the first release with release notes. All previous releases are
-   now consigned to Ancient History. No record of them will be found here."/>
-  </body>
-</document>
diff --git a/0.12-release/src/changes/release-notes.vm b/0.12-release/src/changes/release-notes.vm
deleted file mode 100644
index 8298b71..0000000
--- a/0.12-release/src/changes/release-notes.vm
+++ /dev/null
@@ -1,122 +0,0 @@
-## Licensed to the Apache Software Foundation (ASF) under one
-## or more contributor license agreements.  See the NOTICE file
-## distributed with this work for additional information
-## regarding copyright ownership.  The ASF licenses this file
-## to you under the Apache License, Version 2.0 (the
-## "License"); you may not use this file except in compliance
-## with the License.  You may obtain a copy of the License at
-##
-##  http://www.apache.org/licenses/LICENSE-2.0
-##
-## Unless required by applicable law or agreed to in writing,
-## software distributed under the License is distributed on an
-## "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
-## KIND, either express or implied.  See the License for the
-## specific language governing permissions and limitations
-## under the License.
-##
-              ${project.name} ${version}
-                  RELEASE NOTES
-
-The ${developmentTeam} is pleased to announce the release of ${project.name} ${version}
-
-$introduction.replaceAll("(?<!\015)\012", "
-").replaceAll("(?m)^ +","")
-
-## N.B. the available variables are described here:
-## http://maven.apache.org/plugins/maven-changes-plugin/examples/using-a-custom-announcement-template.html
-##
-## Hack to improve layout: replace all pairs of spaces with a single new-line
-$release.description.replaceAll("  ", "
-")
-
-## set up indent sizes. Only change indent1
-#set($props=${project.properties})
-#set($jiralen=$props.get("creadur.jira.id").length())
-## e.g. indent1 =   RAT-nnnn:
-#set($blanklen=$jiralen+6)## +6 for "-nnnn:"
-## must be at least as long as the longest JIRA id
-#set($blanks="                                  ")
-#set($indent1=$blanks.substring(0,$blanklen))
-## indent2 allows for issue wrapper
-#set($indent2="$indent1   ")
-##
-#macro ( processaction )
-## Use replaceAll to fix up LF-only line ends on Windows.
-#set($action=$actionItem.getAction().replaceAll("\n","
-"))
-## Replace &lt; with < so can embed tag markup
-#set($action=$action.replaceAll("&lt;","<"))
-## use an empty date to mean don't format the entry
-## TODO how to enable leading spaces without compromising html report
-## unfortunately leading spaces are trimmed even from CDATA sections
-#if ($actionItem.getDate() && $actionItem.getDate().length()==0)
-$action
-#else
-## Fix up indentation for multi-line action descriptions
-#set($action=$action.replaceAll("(?m)^  +",$indent2))
-#if ($actionItem.getIssue())
-#set($issue="$actionItem.getIssue():")
-## Pad shorter issue numbers
-#if ($issue.length() < $indent1.length())#set ($issue="$issue ")#end
-#if ($issue.length() < $indent1.length())#set ($issue="$issue ")#end
-#if ($issue.length() < $indent1.length())#set ($issue="$issue ")#end
-#else
-#set($issue=$indent1)
-#end
-#if ($actionItem.getDueTo())
-#set($dueto=" Thanks to $actionItem.getDueTo().")
-#else
-#set($dueto="")
-#end
-o $issue ${action}$dueto
-#end
-#set($action="")
-#set($issue="")
-#set($dueto="")
-#end
-##
-#if ($release.getActions().size() == 0)
-No changes defined in this version.
-#else
-Changes in this version include:
-
-#if ($release.getActions('add').size() !=0)
-New features:
-#foreach($actionItem in $release.getActions('add'))
-#processaction()
-#end 
-
-#end
-##
-#if ($release.getActions('fix').size() !=0)
-Fixed Bugs:
-#foreach($actionItem in $release.getActions('fix'))
-#processaction()
-#end
-
-#end
-##
-#if ($release.getActions('update').size() !=0)
-Changes:
-#foreach($actionItem in $release.getActions('update'))
-#processaction()
-#end
-
-#end
-##
-#if ($release.getActions('remove').size() !=0)
-Removed:
-#foreach($actionItem in $release.getActions('remove'))
-#processaction()
-#end
-#end
-## End of main loop
-#end
-
-Historical list of changes: ${project.url}changes-report.html
-
-For complete information on ${project.name}, including instructions on how to submit bug reports,
-patches, or suggestions for improvement, see the Apache ${project.name} website:
-
-${project.url}
diff --git a/0.12-release/src/python/recursive-rat.py b/0.12-release/src/python/recursive-rat.py
deleted file mode 100644
index 8a866aa..0000000
--- a/0.12-release/src/python/recursive-rat.py
+++ /dev/null
@@ -1,248 +0,0 @@
-#
-# Licensed to the Apache Software Foundation (ASF) under one   
-# or more contributor license agreements.  See the NOTICE file 
-# distributed with this work for additional information        
-# regarding copyright ownership.  The ASF licenses this file   
-# to you under the Apache License, Version 2.0 (the            
-# "License"); you may not use this file except in compliance   
-# with the License.  You may obtain a copy of the License at   
-#                                                              
-#   http://www.apache.org/licenses/LICENSE-2.0                 
-#                                                              
-# Unless required by applicable law or agreed to in writing,   
-# software distributed under the License is distributed on an  
-# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY       
-# KIND, either express or implied.  See the License for the    
-# specific language governing permissions and limitations      
-# under the License.                                           
-#
-
-from sys import argv
-from os import popen
-from os import popen4
-from os import spawnl
-from os.path import isdir
-from os.path import walk
-from os.path import split
-from os.path import splitext
-from os.path import exists
-from tempfile import mkdtemp
-from os.path import join
-from os import listdir
-from os import rmdir
-from os import makedirs
-from shutil import rmtree
-import md5
-import sha
-
-class UserAbortError(Exception):
-    def __str__(self):
-        return "Aborted by user. Bye."
-
-def matchExtension(file, dir, extension):
-    matches = []
-    extension = '.' + extension.lower()
-    for element in listdir(dir):
-        root, ext = splitext(element)
-        if extension == ext.lower() and root == file:
-            matches.append(element)
-    return matches
-
-def printMatches(file, dir, extension):
-    matches = matchExtension(file, dir, extension)
-    for match in matches:
-        matchFile = open(join(dir,match), 'r')
-        text = matchFile.read(); 
-        matchFile.close()
-        print text
-    
-
-def untgz(file, dir):
-    popen("tar -xzf " + file + " -C " + dir)
-    
-def unzip(file, dir):
-    popen("unzip -d " + dir + " " + file)
-
-def checkSums(filename, dir):
-    file = open(join(dir, filename), 'r')
-    contents = file.read()
-    file.close()
-    md5sum = md5.new()
-    md5sum.update(contents)
-    print "MD5:"
-    print md5sum.hexdigest()
-    printMatches(filename, dir, "MD5")
-    shaSum = sha.new()
-    shaSum.update(contents)
-    print "SHA1:"
-    print shaSum.hexdigest()
-    printMatches(filename, dir, "SHA")
-    printMatches(filename, dir, "SHA1")
-
-def checkSignature(filename, dir, gpgCommand):
-    file = join(dir, filename)
-    signatureFile = file + '.asc'
-    if not(exists(signatureFile)):
-       signatureFile = file + '.sig'
-       if not(exists(signatureFile)):
-           print "SIGNATURE IS MISSING"
-    command = gpgCommand + ' --verify ' + signatureFile + ' ' + file
-    input, output = popen4(command)
-    print output.read()
-
-def rat(file, dir, uncompress, ratCommand, baseReportDirectory):
-    if baseReportDirectory == None:
-        reportdir = mkdtemp()
-    else:
-        reportdir = join(baseReportDirectory, file.replace('.', '_'))
-        if exists(reportdir):
-           rmtree(reportdir) 
-        makedirs(reportdir)
-            
-    uncompress(join(dir, file), reportdir)
-    command = ratCommand + " " + reportdir
-    input, output = popen4(command)
-    out = output.read()
-    if not baseReportDirectory == None:
-        f = open(join(baseReportDirectory, file + '.rat'), 'w')
-        f.write(out)
-        f.close()
-    print out
-
-def checkArchive(file, dir, uncompress, ratCommand, gpgCommand, baseReportDirectory):
-    print "."
-    print "."
-    print "."
-    print "###################################################"
-    print "Checking ", file
-    checkSums(file, dir)
-    checkSignature(file, dir, gpgCommand)
-    rat(file, dir, uncompress, ratCommand, baseReportDirectory)
-    print "###################################################"
-    print "."
-    print "."
-    print "."
-        
-def checkFile(file, dir, ratCommand, gpgCommand, baseReportDirectory):
-    '''Checks the given file'''
-    if file.endswith('.jar'):
-        print "Checking jar ", file
-        checkArchive(file, dir, lambda a,b:unzip(a,b), ratCommand, gpgCommand, baseReportDirectory)
-    elif file.endswith('.zip'):
-        print "Checking zip ", file
-        checkArchive(file, dir, lambda a,b:unzip(a,b), ratCommand, gpgCommand, baseReportDirectory)
-    elif file.endswith('.tar.gz') or file.endswith('.tgz'):
-        print "Checking tgz ", file
-        checkArchive(file, dir, lambda a,b:untgz(a,b), ratCommand, gpgCommand, baseReportDirectory)
-
-def ignoreDirectory(dir):
-    '''Is this directory to be ignored?'''
-    if dir == "":
-        return False
-    else:
-        head, tail = split(dir)
-        if tail.startswith('.') and not(tail.startswith('..')):
-            return True
-        elif tail == "":
-            return False
-        else:
-            return ignoreDirectory(head)
-
-def checkDirectory(ratCommand, gpgCommand, dir, files, baseReportDir, check=lambda a,b,c,d: lambda x: checkFile(x,a,b,c,d)):
-    '''Checks a directory'''
-    if not(ignoreDirectory(dir)):
-       print 'Checking directory ', dir
-       map(check(dir, ratCommand, gpgCommand, baseReportDir), files)
-
-def walkDirectories(base, ratCommand, gpgCommand, baseReportDir = None, f=lambda a,b,c,d,e: checkDirectory(a,b,c,d,e)):
-    '''Traverses directories under base and executes checks'''
-    print 'Starting traversal at ', base 
-    walk(base, lambda dummy, dir, files: f(ratCommand, gpgCommand, dir, files, baseReportDir), None)
-    
-def enterRatCommand(rat = None):
-    '''If necessary, prompts user for an acceptable Rat command'''
-    if rat == None:
-        try:
-            rat = raw_input("Please enter Rat command (including path): ")
-        except EOFError:
-            raise UserAbortError()
-        
-        if rat == "":
-            print "Rat command is required"
-            rat = enterRatCommand()       
-             
-    ratResult = popen(rat).close()
-    if not(ratResult == None):
-        print "Cannot execute " + rat
-        rat = enterRatCommand()
-    return rat
-    
-def enterBaseDirectory(base = None):
-    '''If necessary prompts user for an acceptable base directory'''
-    if base == None:
-        try:
-            base = raw_input("Please enter base directory for recursive traversal: ")
-        except EOFError:
-            raise UserAbortError()
-    if not(isdir(base)):
-        print "'" + base + "' is not a directory."
-        base = enterBaseDirectory()
-    return base
-
-def enterGPGCommand(gpgCommand = None):
-    '''If necessary prompts user for the command used to test signatures'''
-    if gpgCommand == None:
-        try:
-            gpgCommand = raw_input("GnuPG is required. Please enter GPG command: ")
-        except EOFError:
-            raise UserAbortError()
-    result = popen(gpgCommand + " --version").close()
-    if not(result == None):
-        print "Cannot execute " + gpgCommand
-        rat = enterGPGCommand()
-    return gpgCommand
-
-def getRatCommand():
-    '''Gets an acceptable value for the Rat command'''
-    if len(argv) == 1:
-        ratCommand = enterRatCommand() 
-    else:
-        ratCommand = enterRatCommand(argv[1])
-    return ratCommand
-
-def getBaseDirectory():
-    '''Gets an acceptable value for the base directory'''
-    if len(argv) < 3:
-        base = enterBaseDirectory()
-    else:
-        base = enterBaseDirectory(argv[2])    
-    return base
-    
-def getGPGCommand():
-    '''Gets an acceptable value for the command used to test signatures'''
-    if len(argv) < 5:
-        gpgCommand = enterGPGCommand('gpg')
-    else:
-        gpgCommand = enterGPGCommand(argv[4])
-    return gpgCommand
-
-def getBaseReportDirectory():
-    if len(argv) < 4:
-        return None
-    else:
-        return argv[3]
-
-def checkArgs(f=lambda a,b,c,d: walkDirectories(a, b, c, d)):
-    '''Prompts user for arguments missing from the command line. Check argument values.'''
-    try:
-        ratCommand = getRatCommand()
-        base = getBaseDirectory()
-        gpgCommand = getGPGCommand()
-        baseReportDirectory = getBaseReportDirectory()
-        
-        f(base, ratCommand, gpgCommand, baseReportDirectory)
-    except UserAbortError, e:
-        print '\n'
-        print e
-    
-checkArgs()
diff --git a/0.12-release/src/site/apt/index.apt.vm b/0.12-release/src/site/apt/index.apt.vm
deleted file mode 100644
index a2b8cf9..0000000
--- a/0.12-release/src/site/apt/index.apt.vm
+++ /dev/null
@@ -1,138 +0,0 @@
-~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
-~~   Licensed to the Apache Software Foundation (ASF) under one or more
-~~   contributor license agreements.  See the NOTICE file distributed with
-~~   this work for additional information regarding copyright ownership.
-~~   The ASF licenses this file to You under the Apache License, Version 2.0
-~~   (the "License"); you may not use this file except in compliance with
-~~   the License.  You may obtain a copy of the License at
-~~
-~~       http://www.apache.org/licenses/LICENSE-2.0
-~~
-~~   Unless required by applicable law or agreed to in writing, software
-~~   distributed under the License is distributed on an "AS IS" BASIS,
-~~   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-~~   See the License for the specific language governing permissions and
-~~   limitations under the License.
-~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
-
-                   --------------------------
-                   A Release Audit Tool
-                   --------------------------
-
-Apache Rat
-
- In a hurry? Jump to {{{Quick_Start:_Running_Rat}quick start}}
-
-%{toc|fromDepth=2|toDepth=3}
-
-* About Rat
-
-** What Is Rat?
-
- Apache Rat is a release audit tool, focused on licenses.
-
-** Rat Is Used To...?
-
- Use Rat to improve accuracy and efficiency
- when checking releases for licenses.
-
-** Why Develop Rat?
-
- Reviewing releases in the {{{http://incubator.apache.org/}Apache Incubator}}
- by hand was error-prone and time-consuming.
-
- Rat arises from the Apache style, but is used more widely.
- If your release style isn't supported,
- {{{./mail-lists.html}talk to us}}.
-
-** How Do I Use Rat?
-
- Apache Rat ${project.version} ships with tooling for
-
-   * {{{https://ant.apache.org/} Apache Ant}},
-
-   * {{{https://maven.apache.org}Apache Maven}},
-
-   * {{{https://gradle.org}Gradle}} and
-
-   * the command line.
-
- Rat is extensible. If your build tool isn't supported, please contribute a
- {{{./issue-tracking.html}patch}} or
- {{{./mail-lists.html}talk to us}}.
-
- Rat aspires to be self documenting. Please contribute a
- {{{./issue-tracking.html}patch}} or
- {{{./mail-lists.html}talk to us}}
- whenever Rat falls short.
-
-** Who Develops Rat?
-
-  Apache Rat is part of the {{{https://creadur.apache.org}Apache Creadur}}
-  language- and build-agnostic suite of tools for auditing and comprehending
-  software distributions. Our community develops
-  {{{http://www.opensource.org/} open source software}} the
-  {{{https://www.apache.org/foundation/how-it-works.html} Apache way}}.
-
-  Please feel free to contribute a
-  {{{./issue-tracking.html}patch}},
-  {{{http://c2.com/cgi/wiki?TestDrivenDevelopment}demonstrate}} a
-  {{{./issue-tracking.html}bug}}, or
-  just
-  {{{./mail-lists.html}talk to us}}.
-  All welcome :-)
-
-* Quick Start: Running Rat
-
-** Command Line
-
- Quick start by
-
-+------------------------------------------+
-java -jar apache-rat-${project.version}.jar --help
-+------------------------------------------+
-
- Read more {{{./apache-rat/index.html}here}}.
-
-** Apache Ant
-
- Use the task library for {{{https://ant.apache.org/} Apache Ant 1.7}} or later
-
- Read more {{{./apache-rat-tasks/index.html} here}}.
-
-** Apache Maven
-
- Use the plugin for {{{https://maven.apache.org}Apache Maven ${mavenVersion}}} or later.
-
-+------------------------------------------+
-  <plugin>
-    <groupId>org.apache.rat</groupId>
-    <artifactId>apache-rat-plugin</artifactId>
-    <version>${project.version}</version>
-  </plugin>
-+------------------------------------------+
-
- Read more {{{./apache-rat-plugin/index.html} here}}.
-
-* Checking Out Rat
-
-  Quick start
-
-+------------------------------------------+
-svn co http://svn.apache.org/repos/asf/creadur/rat/trunk/
-+------------------------------------------+
-
- Read more {{{./source-repository.html}here}}.
-
-* Building Rat
-
- Build Rat with {{{https://maven.apache.org/} Apache Maven}}
-
- Quick start
-
- If you want to build RAT just launch 'mvn' inside the root folder. It will automatically perform a 
-
-+------------------------------------------+
-mvn clean install
-+------------------------------------------+
-
diff --git a/0.12-release/src/site/apt/site-publish.apt b/0.12-release/src/site/apt/site-publish.apt
deleted file mode 100644
index 44c50bd..0000000
--- a/0.12-release/src/site/apt/site-publish.apt
+++ /dev/null
@@ -1,128 +0,0 @@
-~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
-~~   Licensed to the Apache Software Foundation (ASF) under one or more
-~~   contributor license agreements.  See the NOTICE file distributed with
-~~   this work for additional information regarding copyright ownership.
-~~   The ASF licenses this file to You under the Apache License, Version 2.0
-~~   (the "License"); you may not use this file except in compliance with
-~~   the License.  You may obtain a copy of the License at
-~~
-~~       http://www.apache.org/licenses/LICENSE-2.0
-~~
-~~   Unless required by applicable law or agreed to in writing, software
-~~   distributed under the License is distributed on an "AS IS" BASIS,
-~~   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-~~   See the License for the specific language governing permissions and
-~~   limitations under the License.
-~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
-   --------------------
-   Publishing this site
-   --------------------
-
-How to publish the Rat website
-
- The {{{https://creadur.apache.org}Apache Creadur}} project, the community
- that develops {{{https://creadur.apache.org/rat}Apache Rat}},
- hosts its website on the
- {{{https://www.apache.org/dev/cms.html}ASF Content Management System}}.
- {{{https://maven.apache.org}Apache Maven}} builds Rat, and generates this
- subsite. Here's (one way) to work with these systems.
-
-* Developing Content
-
- Build and generate the site using Maven the usual way
-
-+------------------------------------------+
-mvn clean site
-+------------------------------------------+
-
- Make your changes to the <<<site.xml>>> and/or <<<.apt>>> files then launch
- a server on <<<localhost:8080>>> using
-
-+------------------------------------------+
- mvn site:run
-+------------------------------------------+
-
- Review {{{http://localhost:8080}<<<localhost:8080>>>}} using a browser, and do more edits.
- You'll see your changes as soon as you refresh the page.
-
-* Committing and Reviewing Content
-
- As soon as your changes look okay locally on <<<localhost:8080>>>, commit them.
- {{{https://ci.apache.org/buildbot.html}Buildbot}} will automatically
- notice the commit and create a staging site to look at
- {{{https://builds.apache.org/view/A-D/view/Creadur/} https://builds.apache.org/view/A-D/view/Creadur/}}
- which is always up to date (within a couple of minutes of any commit).
-
- Need to make changes? No problem - go back and repeat the cycle as often as you like.
-
- Happy with changes and ready to go live? Then read on...
-
-* Publishing the Site
-
- The publishing process updates the main site with any changes committed since the last
- time the site was published.
-
- Publishing is a multi-stage process with a mixture of automated
- and manual processing. End to end, the process is slow - perhaps
- taking 30 minutes but close supervision is not required.
-
-** Deploy the Site Locally
-
- Rat declares a local directory (<<<stage>>>) for Maven
- site deployments. To avoid excessive numbers of commits, the
- local directory needs to remain ignored by <<<subversion>>>.
- As well as being the target for <<<mvn site-deploy>>>, this is also
- the origin for publication.
-
- Triggering the automated publication pipeline is a two phase process:
- Maven needs to deploy the latest site locally and then
- <<<scm-publish>>> pushes this content into version control.
-
- If you prefer to be prompted to type your subversion passphrase, edit
- <<<~/.scm/svn-settings.xml>>> to include
-
-+------------------------------------------+
-<svn-settings>
-  ...
-  <useNonInteractive>false</useNonInteractive>
-  <useAuthCache>false</useAuthCache>
-  ...
-</svn-settings>
-+------------------------------------------+
-
- Run both steps together using
-
-+------------------------------------------+
-
-mvn site-deploy scm-publish:publish-scm
-
-+------------------------------------------+
-
- Publication is slow, and the plugin may wait silently for up to
- 30 minutes - so please allow the build enough time to complete.
-
-** Automated Staging of the Site
-
- The content committed by the Maven <<<scm-publish>>> plugin
- triggers a staging build on
- {{{https://ci.apache.org/}<<<https://ci.apache.org/>>>}}. To
- follow its progress, open the
- {{{https://ci.apache.org/builders/creadur-site-staging}creadur
- site builder}}.
-
- When this builds has completed successfully, review the content
- staged on
- {{{https://creadur.staging.apache.org/rat/index.html}
- <<<https://creadur.staging.apache.org/rat/index.html>>>}}. If
- this looks fine then publish the staged content using the
- {{{https://www.apache.org/dev/cms.html}ASF Content Management System}}.
-
- Propagating the content to {{{https://creadur.apache.org/rat}production}} may take a brief while (maybe
- 30 seconds) so please be patient a little longer.
-
-* Troubleshooting
-
-  * If you have issues with 'mvn site' failing try running 'mvn clean' then 'mvn install' before going back and running 'mvn site' again.
-
-  * If you experience an Out of Memory error <<java.lang.OutOfMemoryError: Java heap space>> when running 'mvn site' try setting 'export MAVEN_OPTS=-Xmx512m'
-     or for Windows 'set MAVEN_OPTS=-Xmx512m' first on the command line (or in your profile) and then try 'mvn site' again.
diff --git a/0.12-release/src/site/resources/css/site.css b/0.12-release/src/site/resources/css/site.css
deleted file mode 100644
index 3683f87..0000000
--- a/0.12-release/src/site/resources/css/site.css
+++ /dev/null
@@ -1,27 +0,0 @@
-/*
-  Licensed to the Apache Software Foundation (ASF) under one
-  or more contributor license agreements.  See the NOTICE file
-  distributed with this work for additional information
-  regarding copyright ownership.  The ASF licenses this file
-  to you under the Apache License, Version 2.0 (the
-  "License"); you may not use this file except in compliance
-  with the License.  You may obtain a copy of the License at
-
-    http://www.apache.org/licenses/LICENSE-2.0
-
-  Unless required by applicable law or agreed to in writing,
-  software distributed under the License is distributed on an
-  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
-  KIND, either express or implied.  See the License for the
-  specific language governing permissions and limitations
-  under the License.    
-*/
-footer {
-    font-family: "Mate SC", "Lucida Console", Monaco, monospace;
-    font-size: 9pt;
-    padding: 5px 10px;
-    text-align: justify;
-    border: thin solid #D0D0D0;
-    background-color: #F8F8F8;
-    color: #404040;
-}
\ No newline at end of file
diff --git a/0.12-release/src/site/resources/download_rat.cgi b/0.12-release/src/site/resources/download_rat.cgi
deleted file mode 100755
index 4324f76..0000000
--- a/0.12-release/src/site/resources/download_rat.cgi
+++ /dev/null
@@ -1,22 +0,0 @@
-#!/bin/sh
-
-# Licensed to the Apache Software Foundation (ASF) under one or more
-# contributor license agreements.  See the NOTICE file distributed with
-# this work for additional information regarding copyright ownership.
-# The ASF licenses this file to You under the Apache License, Version 2.0
-# (the "License"); you may not use this file except in compliance with
-# the License.  You may obtain a copy of the License at
-#
-#     http://www.apache.org/licenses/LICENSE-2.0
-#
-# Unless required by applicable law or agreed to in writing, software
-# distributed under the License is distributed on an "AS IS" BASIS,
-# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-# See the License for the specific language governing permissions and
-# limitations under the License.
-
-# Wrapper script around mirrors.cgi script
-# (we must change to that directory in order for python to pick up the
-#  python includes correctly)
-cd /www/www.apache.org/dyn/mirrors
-/www/www.apache.org/dyn/mirrors/mirrors.cgi $*
diff --git a/0.12-release/src/site/site.xml b/0.12-release/src/site/site.xml
deleted file mode 100644
index 0222f67..0000000
--- a/0.12-release/src/site/site.xml
+++ /dev/null
@@ -1,110 +0,0 @@
-<?xml version="1.0" ?>
-<!--
-  Licensed to the Apache Software Foundation (ASF) under one or more
-  contributor license agreements.  See the NOTICE file distributed with
-  this work for additional information regarding copyright ownership.
-  The ASF licenses this file to You under the Apache License, Version 2.0
-  (the "License"); you may not use this file except in compliance with
-  the License.  You may obtain a copy of the License at
-
-      http://www.apache.org/licenses/LICENSE-2.0
-
-  Unless required by applicable law or agreed to in writing, software
-  distributed under the License is distributed on an "AS IS" BASIS,
-  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-  See the License for the specific language governing permissions and
-  limitations under the License.
--->
-<project xmlns="http://maven.apache.org/DECORATION/1.3.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
-         xsi:schemaLocation="http://maven.apache.org/DECORATION/1.3.0 http://maven.apache.org/xsd/decoration-1.3.0.xsd"
-         name="Apache Rat&trade;">
-  <bannerLeft>
-    <title>The Apache Software Foundation</title>
-    <name>The Apache Software Foundation</name>
-    <src>https://www.apache.org/img/asf_logo.png</src>
-    <href>https://www.apache.org/</href>
-  </bannerLeft>
-  <poweredBy>
-      <logo name="Maven"
-            href="https://maven.apache.org/"
-            img="https://maven.apache.org/images/logos/maven-feather.png"/>
-
-  </poweredBy>
-
-  <body>
-    <head>
-      <link
-            href='https://fonts.googleapis.com/css?family=Mate+SC'
-            rel='stylesheet'
-            type='text/css'/>
-    </head>
-
-    <breadcrumbs>
-      <item name="Apache" href="https://www.apache.org/"/>
-      <item name="Creadur" href="https://creadur.apache.org/"/>
-      <item name="Rat" href="https://creadur.apache.org/rat/"/>
-    </breadcrumbs>
-
-    <menu name="Apache Rat&#8482;" inherit="bottom">
-      <item name="Introducing Rat" href="/index.html"/>
-      <item name="Javadocs" href="/apidocs/index.html"/>
-      <item name="Downloads" href="/download_rat.cgi"/>
-      <item name="Changes" href="/RELEASE_NOTES.txt"/>
-    </menu>
-
-    <menu name="Running Rat" inherit="bottom">
-      <item name="From The Command Line" href="apache-rat/index.html"/>
-      <item name="With Ant" href="apache-rat-tasks/index.html"/>
-      <item name="With Maven" href="apache-rat-plugin/index.html"/>
-    </menu>
-
-    <menu name="Apache Creadur&#8482;" inherit="bottom">
-      <item name='Creadur Project Home' href="https://creadur.apache.org"/>
-      <item name='Apache Tentacles' href="https://creadur.apache.org/tentacles"/>
-      <item name='Apache Whisker' href="https://creadur.apache.org/whisker"/>
-      <item name='Security' href='https://www.apache.org/security/'/>
-      <item name='License' href='https://www.apache.org/licenses/'/>
-      <item name='Sponsorship' href='https://www.apache.org/foundation/sponsorship.html'/>
-      <item name='Thanks' href='https://www.apache.org/foundation/thanks.html'/>
-    </menu>
-
-    <menu name="The Apache Software Foundation" inherit="bottom">
-        <item name='About the Foundation'
-            href="https://www.apache.org/foundation"/>
-        <item name='The projects'
-            href="https://projects.apache.org"/>
-        <item name='The people'
-            href="https://people.apache.org"/>
-        <item name='How we work'
-            href='https://www.apache.org/foundation/how-it-works.html'/>
-        <item name='Our history'
-            href='https://www.apache.org/foundation/how-it-works.html#history'/>
-        <item name='News'
-            href='https://blogs.apache.org/foundation/'/>
-    </menu>
-
-    <menu name="Contribute" inherit="bottom">
-      <item name="Get Involved" href='https://www.apache.org/foundation/getinvolved.html'/>
-    </menu>
-
-    <menu name="Committer Info" inherit="bottom">
-      <item name="ASF Committers' FAQ" href='https://www.apache.org/dev/committers.html'/>
-      <item name='New Committers Guide' href='https://www.apache.org/dev/new-committers-guide.html'/>
-      <item name="Howto publish this site" href="site-publish.html"/>
-      <item name='Plant Apache' href='https://planet.apache.org/committers/'/>
-      <item name='Community' href='https://community.apache.org/'/>
-      <item name='Legal' href='https://www.apache.org/legal/'/>
-      <item name='Branding' href='https://www.apache.org/foundation/marks/'/>
-      <item name='Media Relations' href='https://www.apache.org/press/'/>
-    </menu>
-
-    <menu ref="modules"/>
-    <menu ref="reports"/>
-
-    <footer>Copyright &copy; 2016 The Apache Software Foundation, Licensed under the Apache License, Version 2.0.
-      Apache Creadur, Creadur, Apache Rat, Apache Tentacles, Apache Whisker, Apache and the Apache feather logo are trademarks
-      of The Apache Software Foundation.
-      Oracle and Java are registered trademarks of Oracle and/or its affiliates.
-      All other marks mentioned may be trademarks or registered trademarks of their respective owners.</footer>
-  </body>
-</project>
diff --git a/0.12-release/src/site/xdoc/download_rat.xml.vm b/0.12-release/src/site/xdoc/download_rat.xml.vm
deleted file mode 100644
index 8d80585..0000000
--- a/0.12-release/src/site/xdoc/download_rat.xml.vm
+++ /dev/null
@@ -1,129 +0,0 @@
-<?xml version="1.0"?>
-<!--
-Licensed to the Apache Software Foundation (ASF) under one or more
-contributor license agreements.  See the NOTICE file distributed with
-this work for additional information regarding copyright ownership.
-The ASF licenses this file to You under the Apache License, Version 2.0
-(the "License"); you may not use this file except in compliance with
-the License.  You may obtain a copy of the License at
-
-     http://www.apache.org/licenses/LICENSE-2.0
-
-Unless required by applicable law or agreed to in writing, software
-distributed under the License is distributed on an "AS IS" BASIS,
-WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-See the License for the specific language governing permissions and
-limitations under the License.
--->
-<document>
-  <properties>
-    <title>Downloads</title>
-  </properties>
-  <body>
-    <section name="Download ${project.name}">
-      <subsection name="Using a Mirror">
-        <p>
-          We recommend you use a mirror to download our release
-          builds, but you <strong>must</strong> <a href="https://www.apache.org/info/verification.html">verify the integrity</a> of
-          the downloaded files using signatures downloaded from our main
-          distribution directories. Recent releases (48 hours) may not yet
-          be available from the mirrors.
-        </p>
-
-        <p>
-          You are currently using <b>[preferred]</b>.  If you
-          encounter a problem with this mirror, please select another
-          mirror.  If all mirrors are failing, there are <i>backup</i>
-          mirrors (at the end of the mirrors list) that should be
-          available.
-          <br></br>
-          [if-any logo]<a href="[link]"><img align="right" src="[logo]" border="0"></img></a>[end]
-        </p>
-
-        <form action="[location]" method="get" id="SelectMirror">
-          <p>
-            Other mirrors:
-            <select name="Preferred">
-              [if-any http]
-              [for http]<option value="[http]">[http]</option>[end]
-              [end]
-              [if-any ftp]
-              [for ftp]<option value="[ftp]">[ftp]</option>[end]
-              [end]
-              [if-any backup]
-              [for backup]<option value="[backup]">[backup] (backup)</option>[end]
-              [end]
-            </select>
-            <input type="submit" value="Change"></input>
-          </p>
-        </form>
-
-        <p>
-          The <a
-          href="https://www.apache.org/dist/creadur/KEYS">KEYS</a>
-          link links to the code signing keys used to sign the
-          product.  The <code>PGP</code> link downloads the OpenPGP
-          compatible signature from our main site.  The
-          <code>SHA1</code> and <code>MD5</code> links download the
-          checksum from the main site.
-        </p>
-      </subsection>
-    </section>
-    <section name="${project.name} ${project.version}">
-      <subsection name="Binaries">
-        <table>
-          <tr>
-              <td><a href="[preferred]/creadur/apache-rat-${project.version}/apache-rat-${project.version}-bin.tar.bz2">apache-rat-${project.version}-bin.tar.bz2</a></td>
-              <td><a href="https://www.apache.org/dist/creadur/apache-rat-${project.version}/apache-rat-${project.version}-bin.tar.bz2.md5">md5</a></td>
-              <td><a href="https://www.apache.org/dist/creadur/apache-rat-${project.version}/apache-rat-${project.version}-bin.tar.bz2.sha1">sha1</a></td>
-              <td><a href="https://www.apache.org/dist/creadur/apache-rat-${project.version}/apache-rat-${project.version}-bin.tar.bz2.asc">pgp</a></td>
-          </tr>
-          <tr>
-              <td><a href="[preferred]/creadur/apache-rat-${project.version}/apache-rat-${project.version}-bin.tar.gz">apache-rat-${project.version}-bin.tar.gz</a></td>
-              <td><a href="https://www.apache.org/dist/creadur/apache-rat-${project.version}/apache-rat-${project.version}-bin.tar.gz.md5">md5</a></td>
-              <td><a href="https://www.apache.org/dist/creadur/apache-rat-${project.version}/apache-rat-${project.version}-bin.tar.gz.sha1">sha1</a></td>
-              <td><a href="https://www.apache.org/dist/creadur/apache-rat-${project.version}/apache-rat-${project.version}-bin.tar.gz.asc">pgp</a></td>
-          </tr>
-          <tr>
-              <td><a href="[preferred]/creadur/apache-rat-${project.version}/apache-rat-${project.version}-bin.zip">apache-rat-${project.version}-bin.zip</a></td>
-              <td><a href="https://www.apache.org/dist/creadur/apache-rat-${project.version}/apache-rat-${project.version}-bin.zip.md5">md5</a></td>
-              <td><a href="https://www.apache.org/dist/creadur/apache-rat-${project.version}/apache-rat-${project.version}-bin.zip.sha1">sha1</a></td>
-              <td><a href="http://www.apache.org/dist/creadur/apache-rat-${project.version}/apache-rat-${project.version}-bin.zip.asc">pgp</a></td>
-          </tr>
-        </table>
-      </subsection>
-      <subsection name="Source">
-        <table>
-          <tr>
-              <td><a href="[preferred]/creadur/apache-rat-${project.version}/apache-rat-${project.version}-src.tar.bz2">apache-rat-${project.version}-src.tar.bz2</a></td>
-              <td><a href="https://www.apache.org/dist/creadur/apache-rat-${project.version}/apache-rat-${project.version}-src.tar.bz2.md5">md5</a></td>
-              <td><a href="https://www.apache.org/dist/creadur/apache-rat-${project.version}/apache-rat-${project.version}-src.tar.bz2.sha1">sha1</a></td>
-              <td><a href="https://www.apache.org/dist/creadur/apache-rat-${project.version}/apache-rat-${project.version}-src.tar.bz2.asc">pgp</a></td>
-          </tr>
-          <tr>
-              <td><a href="[preferred]/creadur/apache-rat-${project.version}/apache-rat-${project.version}-src.tar.gz">apache-rat-${project.version}-src.tar.gz</a></td>
-              <td><a href="https://www.apache.org/dist/creadur/apache-rat-${project.version}/apache-rat-${project.version}-src.tar.gz.md5">md5</a></td>
-              <td><a href="https://www.apache.org/dist/creadur/apache-rat-${project.version}/apache-rat-${project.version}-src.tar.gz.sha1">sha1</a></td>
-              <td><a href="https://www.apache.org/dist/creadur/apache-rat-${project.version}/apache-rat-${project.version}-src.tar.gz.asc">pgp</a></td>
-          </tr>
-          <tr>
-              <td><a href="[preferred]/creadur/apache-rat-${project.version}/apache-rat-${project.version}-src.zip">apache-rat-${project.version}-src.zip</a></td>
-              <td><a href="https://www.apache.org/dist/creadur/apache-rat-${project.version}/apache-rat-${project.version}-src.zip.md5">md5</a></td>
-              <td><a href="https://www.apache.org/dist/creadur/apache-rat-${project.version}/apache-rat-${project.version}-src.zip.sha1">sha1</a></td>
-              <td><a href="https://www.apache.org/dist/creadur/apache-rat-${project.version}/apache-rat-${project.version}-src.zip.asc">pgp</a></td>
-          </tr>
-        </table>
-      </subsection>
-    </section>
-    <section name="Archives">
-        <p>
-          Older releases can be obtained from the archives.
-        </p>
-        <ul>
-          <li class="download"><a href="[preferred]/creadur/">browse download area</a></li>
-          <li><a href="https://archive.apache.org/dist/creadur/">archives...</a></li>
-          <li><a href="https://archive.apache.org/dist/incubator/rat/">Incubator archives...</a></li>
-        </ul>
-    </section>
-  </body>
-</document>
diff --git a/apache-rat/src/main/assembly/src.xml b/apache-rat/src/main/assembly/src.xml
index d5f1955..98eff10 100644
--- a/apache-rat/src/main/assembly/src.xml
+++ b/apache-rat/src/main/assembly/src.xml
@@ -34,12 +34,13 @@
       <outputDirectory></outputDirectory>
       <excludes>
         <exclude>**/target/**</exclude>
-        <exclude>**/.settings/**/*</exclude>
+        <exclude>**/.settings/**</exclude>
         <exclude>**/.project</exclude>
         <exclude>**/.classpath</exclude>
         <exclude>.*/**</exclude>
         <exclude>**.bak</exclude>
         <exclude>*.jar</exclude>
+        <exclude>**/pom.xml.*</exclude>
       </excludes>
       <useDefaultExcludes>true</useDefaultExcludes>
     </fileSet>
diff --git a/pom.xml b/pom.xml
index 64ce188..c78a4a6 100644
--- a/pom.xml
+++ b/pom.xml
@@ -351,13 +351,6 @@
             <tagNameFormat>@{project.artifactId}-@{project.version}-RC1</tagNameFormat>
           </configuration>
         </plugin>
-        <plugin>
-          <artifactId>maven-release-plugin</artifactId>
-          <version>2.5.1</version>
-          <configuration>
-            <tagNameFormat>@{project.artifactId}-@{project.version}-RC3</tagNameFormat>
-          </configuration>
-        </plugin>
         <!--This plugin's configuration is used to store Eclipse m2e settings only. It has no influence on the Maven build itself.-->
         <plugin>
         	<groupId>org.eclipse.m2e</groupId>
