diff --git a/trunk/.gitignore b/trunk/.gitignore
new file mode 100644
index 0000000..1f487e0
--- /dev/null
+++ b/trunk/.gitignore
@@ -0,0 +1,18 @@
+*.ipr
+*.iws
+/target/*
+**/target/*
+.svn
+**/.svn
+.project
+*/.project
+.classpath
+*/.classpath
+.settings
+*/.settings
+*.iml
+*/*.iml
+*/*.ipr
+*/*.iws
+.idea/*
+*/.idea
diff --git a/trunk/BUILD.txt b/trunk/BUILD.txt
new file mode 100644
index 0000000..562bb7a
--- /dev/null
+++ b/trunk/BUILD.txt
@@ -0,0 +1,18 @@
+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/trunk/LICENSE b/trunk/LICENSE
new file mode 100644
index 0000000..d645695
--- /dev/null
+++ b/trunk/LICENSE
@@ -0,0 +1,202 @@
+
+                                 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/trunk/NOTICE b/trunk/NOTICE
new file mode 100644
index 0000000..5f12ecc
--- /dev/null
+++ b/trunk/NOTICE
@@ -0,0 +1,5 @@
+Apache Rat
+Copyright 2006-2014 The Apache Software Foundation
+
+This product includes software developed at
+The Apache Software Foundation (http://www.apache.org/).
diff --git a/trunk/README.txt b/trunk/README.txt
new file mode 100644
index 0000000..9a32668
--- /dev/null
+++ b/trunk/README.txt
@@ -0,0 +1,53 @@
+
+  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/trunk/RELEASE-NOTES.txt b/trunk/RELEASE-NOTES.txt
new file mode 100644
index 0000000..953b801
--- /dev/null
+++ b/trunk/RELEASE-NOTES.txt
@@ -0,0 +1,67 @@
+              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/trunk/RELEASE_NOTES.txt b/trunk/RELEASE_NOTES.txt
new file mode 100644
index 0000000..422396e
--- /dev/null
+++ b/trunk/RELEASE_NOTES.txt
@@ -0,0 +1,269 @@
+Rat 0.12 (SNAPSHOT)
+===================
+
+ * 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. 
+ * Issues resolved (see http://issues.apache.org/jira):
+   Bug
+    * [RAT-158] - Fix SAX-Parser warning by explicitly excluding xerces in Doxia 1.2.
+                  (thanks to Hervé Boutemy)
+    * [RAT-173] - Allow complete skip of RAT plugin with rat.skip property
+                  (thanks to Chris Burroughs)
+    * [RAT-174] - CDDL1License still very slow, replace Pattern matching with simple String comparison
+                  (thanks to Chris Burroughs)
+    * [RAT-175] - SourceCodeManagementSystems.hasIgnoreFile() should return boolean
+    * [RAT-177] - final arrays should be private
+    * [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)
+    * [RAT-160] - Ignore build.log that is created by maven-invoker-plugin runs. Temporary fix until invoker plugin improves
+                  configurability of that file. 
+                  (thanks to Christopher Tubbs)
+    * [RAT-179] - Maven plugin and Ant task do not support adding extra approved licenses.
+    * [RAT-180] - Generify and beautify texts in RAT report. 
+
+   New features
+    * [RAT-171] - Maven plugin allows scanning of source code management ignore files. Their contents is added as exclusion to be ignored during RAT runs.
+                  Supported source code management systems are: SVN, Git, Bazaar, Mercurial and CVS. 
+                  An ignore-file's contents is taken as it is without parsing or validating.
+
+   Improvement
+    * [RAT-196] - Minor refactoring in pom.xml.
+                  (thanks to Karl Heinz Marbaise) 
+    * [RAT-194] - Upgrade to Doxia 1.6 if called directly, does not affect problems reported in RAT-158. Minor improvements.
+                  (thanks to Hervé Boutemy)
+    * [RAT-61]  - List files with unapproved licenses in Maven output
+    * [RAT-170] - RAT should use itself during build and site generation
+    * [RAT-181] - BinaryGuesser should treat *.truststore as binary
+    * [RAT-184] - Add DEPENDENCIES to the list of ignored files in NoteGuesser.
+                  (thanks to Karl Heinz Marbaise)
+    * [RAT-185] - .repository folder should be ignored
+    * [RAT-186] - BinaryGuesser should recognize PSD files as images
+    * [RAT-187] - Add 'SAR', 'HAR', 'WSR' as archives which should be ignored.
+                  (thanks to Karl Heinz Marbaise)
+    * [RAT-197] - Improve exclusion defaults when working with Maven 3.3.1 (exclude .mvn).
+                  (thanks to Karl Heinz Marbaise)
+    * [RAT-198] - Upgrade to plexus-utils 3.0.20.
+                  (thanks to Karl Heinz Marbaise)
+    * [RAT-172] - Exclude technical directories of source code management systems and their ignore files from RAT scans. 
+                  Enabled for SVN,Git,Mercurial,Bazar and CVS.
+    * [RAT-200] - Update to latest ASF parent pom v17.
+    * [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.
+    * [RAT-202] - Report layout differs between successful RAT checks and existence of unapproved files.
+    * [RAT-203] - Using 'license' in README, source code, javadoc, comments and site instead of 'licence'; improve terminology to not confuse RAT consumers.
+    * [RAT-204] - Unify resource handling in code and tests, make sure the resources are properly closed. Apply minor refactorings.
+
+Rat 0.11
+========
+
+ * 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)
+ * Issues resolved (see http://issues.apache.org/jira):
+   Bug
+    * [RAT-135] - addLicenseHeaders is missing a space on license header.
+    * [RAT-144] - AbstractRatMojo String constant arrays should be private
+    * [RAT-148] - LicenseAddingReport#report has useless call to metaData.getData
+                  (thanks to Chris A. Mattmann)
+    * [RAT-151] - Detect more archive file formats
+    * [RAT-152] - Recognize the format for .bsh, .fml and .jsp file types
+    * [RAT-153] - Do not add extra empty lines when appending headers for the Apache License
+    * [RAT-154] - Indentation of the license header should be decided per family
+    * [RAT-155] - Do not add empty first and last lines in the license header for certain families
+    * [RAT-156] - Add some symmetry when applying license headers to files with file type specific headers
+    * [RAT-159] - Detect OpenOffice documents as being archives
+  Improvement
+    * [RAT-129] - Add support for CDDL 1.0
+    * [RAT-162] - CDDL1License.matches slow with large inputs
+                  (thanks to Andrew Gaul)
+    * [RAT-164] - Allow skipping execution entirely
+    * [RAT-165] - Use a maven defaultGoal for RAT's base pom.xml
+
+Rat 0.10
+========
+The main change is RAT-138 - Rat 0.9 could run much slower than 0.8 on some input.
+
+ * Simpler binary archive
+ * Issues resolved (see http://issues.apache.org/jira):
+   * Bugs fixed:
+     * [RAT-137] Website shows incorrect Maven goals in some pages
+     * [RAT-128] Use the proper name for the Apache License
+     * [RAT-138] RAT runs very slowly on some input
+     * [RAT-140] OASISLicense allows invalid Copyright line
+     * [RAT-139] FullTextMatchingLicense.prune uses inefficient deleteAtChar
+     * [RAT-145] Maven plugin should not run in the "verify" phase, but in the "validate" phase
+   * Improvements:
+     * [RAT-129] Add support for CDDL 1.0 
+ * Updated dependencies and plugins
+ * Fixed up generics and annotations
+
+Rat 0.9
+=======
+ * 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.
+ * Issues Resolved (see http://issues.apache.org/jira):
+   * Bugs Fixed:
+     * [RAT-3]   - Incorrect alignment of file contents
+     * [RAT-102] - typo in pom.xml / field description
+     * [RAT-109] - Return value of mkdirs() is not checked
+                   and no error handling occurs
+     * [RAT-116] - Docs don't say what the default excludes are
+     * [RAT-120] - fix some maven warning and upgrade some
+                   dependencies.
+     * [RAT-121] - use maven java5 annotations for maven plugins
+     * [RAT-122] - Maven Plugin: field to ignore errors and continue
+                   the build
+     * [RAT-124] - Rat plugin should exclude the configuration directory
+                   used by IDEA
+     * [RAT-126] - Default excludes do not ignore .git/ repository
+   * Improvements:
+     * [RAT-13]  - [GOOGLE-14] GNU License support
+     * [RAT-49]  - Recognise MIT LIcense
+     * [RAT-104] - Using jUnit4 annotation based tests instead of
+                   junit3 - migration from junit 3.8.2 to current
+                   junit 4.10
+     * [RAT-106] - Minor Javadoc errors fixed in 3 files
+     * [RAT-108] - Add native support for thrift generated code to be
+                   ignored
+     * [RAT-111] - RAT does not ignore javah generated files
+     * [RAT-125] - Support applied AL20 license headers, including
+                   checking for required copyright header line
+   * New Features
+     * [RAT-78]  - Support doxia 1.1.2
+   * Tasks
+     * [RAT-59]  - Upgrade To Java 1.5
+     * [RAT-119] - Upgrade Maven prerequisite to 2.2.1
+
+Rat 0.8
+=======
+ * Some website fixes
+ * The Antlib and Maven plugins now provide simpler ways to detect
+   licenses not directly supported by Rat.
+ * Issues Resolved (see http://issues.apache.org/jira):
+  * Bug:
+    * RAT-86 CLI doesn't allow adding of licenses unless a custom
+      stylesheet has been specified
+    * RAT-87 Tests could leave temporary files around.
+    * RAT-92 When adding licenses Rat used \n instead of the platform
+      dependent line--end character(s)
+    * RAT-94 Streams were not always closed immediately when adding
+      licenses.
+  * Improvement:
+    * RAT-79 Support automatic addition of license headers to Velocity
+      templates
+    * RAT-83 Support automatic addition of license headers to Scala
+      source files
+    * RAT-84 Support automatic addition of license headers to Ruby
+      source files
+    * RAT-89 Support automatic addition of license headers to Perl,
+      TCL, C++, C# and PHP source files
+    * RAT-91 Support automatic addition of license headers to Groovy
+      source files
+    * RAT-85 Allow --addLicense as an alias for --addLicence for
+      people used to the US spelling.
+    * RAT-34 --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.
+    * RAT-67 The XML and standard plain text reports now contain a
+      timestamp with the time the report has been generated.
+    * RAT-95 When adding licenses Rat will now remove any BOM from the file.
+    * RAT-93 --addLicense now supports more .NET specific files like
+      MS Visual Studio project and solution files
+    * RAT-99 The command line interface has a new option that
+      specifies a file containing regular expressions for files to exclude
+
+Rat 0.7
+=======
+ * Some website fixes
+ * Issues Resolved (see http://issues.apache.org/jira):
+  * Bug:
+    * RAT-62 Some of Rat's own files missing License Headers
+    * RAT-63 ant-task-examples.xml has an wrong uri in the -typedef ant target
+    * RAT-70 Missing closing html tag in generated report by
+  * Improvement:
+    * RAT-17 Support the use of archives as input
+    * RAT-30 / RAT-76 Support automatic addition of license headers
+    * RAT-52 Merge In Rat Output Semantics
+    * RAT-56 Commons IO Wildcard Excludes
+    * RAT-65 Rat Pom cleanup
+    * RAT-68 Add support for Python, C, & script files (.bat & .sh)
+    * RAT-72 Keep version in plugins sample doc up to date
+    * RAT-73 / RAT-74 Support for XML output in Ant task and Maven Plugin
+    * RAT-74 / RAT-75 Support for custom XSLT stylesheets
+
+Rat 0.6
+===========
+ * Support for TMF header
+ * Comprehend PEM, CRL file endings
+ * Added reporting capability to recursive rat script
+ * Moved to the Incubator@Apache
+ * Issues Resolved (see http://issues.apache.org/jira):
+  * Bug:
+    * RAT-3 Incorrect alignment of file contents
+    * RAT-11 Incorrect number of unnapproved licences reported
+    * RAT-12 Incorrect SCM info in maven plugin pom
+    * RAT-29 NPE on &quot;mvn install&quot; in rat-anttasks
+    * RAT-33 Mailing list subscribe points to unsubscribe
+    * RAT-34 No license header added for java files that do not contain project line
+    * RAT-35 Incorrect number of unapproved licenses reported by rat:check
+    * RAT-36 Report header incorrectly refers to an &quot;L&quot; license marker
+  * Improvement:
+    * RAT-8 [PATCH] add JavaCC to GeneratedLicenseNotRequired
+    * RAT-9 A more informative website
+    * RAT-10 A few Javadoc comments
+    * RAT-23  More details in text summary
+    * RAT-24 Include checksums on web page
+    * RAT-26 Improve web summary
+    * RAT-27 Index page
+    * RAT-37 List all resources with unapproved licenses at the beginning of the report
+  * New Feature
+    * RAT-6 RAT Source Import
+  * Task
+    * RAT-28 Repackage maven plugin
+  * Wish
+    * RAT-1 maven-rat-plugin and ant-rat tasks
+
+Rat 0.5.1
+=========
+ * Fixed file closing bug
+ * Fixed XML bad character bug
+
+Rat 0.5
+=======
+ * Added header matcher for DoJo.
+ * Refactoring existing codebase to separate concerns and use
+   resource pipeline.
+ * New header matching library.
+
+Rat 0.4.1
+=========
+Rat 0.4.1 is the first release with distributions. The release was cut
+for this purpose.
+
+Rat 0.4.1 Notes
+===============
+ * Created POM for use with Rat library.
+ * Ant task switched to use Xml based report.
+
+Rat 0.4 Notes
+=============
+ * 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
+
+Rat 0.3 Notes
+=============
+ * 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.
diff --git a/trunk/ant-task-examples.xml b/trunk/ant-task-examples.xml
new file mode 100644
index 0000000..ea365e9
--- /dev/null
+++ b/trunk/ant-task-examples.xml
@@ -0,0 +1,128 @@
+<?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/trunk/apache-rat-api/.gitignore b/trunk/apache-rat-api/.gitignore
new file mode 100644
index 0000000..22e1131
--- /dev/null
+++ b/trunk/apache-rat-api/.gitignore
@@ -0,0 +1,19 @@
+*.ipr
+*.iws
+/target/*
+**/target/*
+.svn
+**/.svn
+.project
+*/.project
+.classpath
+*/.classpath
+.settings
+*/.settings
+*.iml
+*/*.iml
+*/*.ipr
+*/*.iws
+.idea/*
+*/.idea
+/target/
diff --git a/trunk/apache-rat-api/pom.xml b/trunk/apache-rat-api/pom.xml
new file mode 100644
index 0000000..7ecfc3c
--- /dev/null
+++ b/trunk/apache-rat-api/pom.xml
@@ -0,0 +1,51 @@
+<?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 xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd" xmlns="http://maven.apache.org/POM/4.0.0"
+    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
+  <modelVersion>4.0.0</modelVersion>
+  <parent>
+    <groupId>org.apache.rat</groupId>
+    <artifactId>apache-rat-project</artifactId>
+    <version>0.12-SNAPSHOT</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/trunk/apache-rat-api/src/main/java/org/apache/rat/api/domain/LicenseFamily.java b/trunk/apache-rat-api/src/main/java/org/apache/rat/api/domain/LicenseFamily.java
new file mode 100644
index 0000000..94592bc
--- /dev/null
+++ b/trunk/apache-rat-api/src/main/java/org/apache/rat/api/domain/LicenseFamily.java
@@ -0,0 +1,99 @@
+/*
+ * 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/trunk/apache-rat-api/src/main/java/org/apache/rat/api/domain/LicenseFamilyBuilder.java b/trunk/apache-rat-api/src/main/java/org/apache/rat/api/domain/LicenseFamilyBuilder.java
new file mode 100644
index 0000000..9d58a96
--- /dev/null
+++ b/trunk/apache-rat-api/src/main/java/org/apache/rat/api/domain/LicenseFamilyBuilder.java
@@ -0,0 +1,96 @@
+/*
+ * 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/trunk/apache-rat-api/src/main/java/org/apache/rat/api/domain/RatLicenseFamily.java b/trunk/apache-rat-api/src/main/java/org/apache/rat/api/domain/RatLicenseFamily.java
new file mode 100644
index 0000000..1a186bc
--- /dev/null
+++ b/trunk/apache-rat-api/src/main/java/org/apache/rat/api/domain/RatLicenseFamily.java
@@ -0,0 +1,137 @@
+/*
+ * 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/trunk/apache-rat-api/src/test/java/org/apache/rat/api/domain/LicenseFamilyBuilderTest.java b/trunk/apache-rat-api/src/test/java/org/apache/rat/api/domain/LicenseFamilyBuilderTest.java
new file mode 100644
index 0000000..739806c
--- /dev/null
+++ b/trunk/apache-rat-api/src/test/java/org/apache/rat/api/domain/LicenseFamilyBuilderTest.java
@@ -0,0 +1,63 @@
+/*
+ * 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/trunk/apache-rat-api/src/test/java/org/apache/rat/api/domain/RatLicenseFamilyTest.java b/trunk/apache-rat-api/src/test/java/org/apache/rat/api/domain/RatLicenseFamilyTest.java
new file mode 100644
index 0000000..bf7c7bd
--- /dev/null
+++ b/trunk/apache-rat-api/src/test/java/org/apache/rat/api/domain/RatLicenseFamilyTest.java
@@ -0,0 +1,226 @@
+/*
+ * 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/trunk/apache-rat-core/pom.xml b/trunk/apache-rat-core/pom.xml
new file mode 100644
index 0000000..b7eb2ac
--- /dev/null
+++ b/trunk/apache-rat-core/pom.xml
@@ -0,0 +1,115 @@
+<?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-SNAPSHOT</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/trunk/apache-rat-core/src/main/java/org/apache/rat/Defaults.java b/trunk/apache-rat-core/src/main/java/org/apache/rat/Defaults.java
new file mode 100644
index 0000000..68fb5ec
--- /dev/null
+++ b/trunk/apache-rat-core/src/main/java/org/apache/rat/Defaults.java
@@ -0,0 +1,108 @@
+/*
+ * 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/trunk/apache-rat-core/src/main/java/org/apache/rat/Report.java b/trunk/apache-rat-core/src/main/java/org/apache/rat/Report.java
new file mode 100644
index 0000000..0cc09f1
--- /dev/null
+++ b/trunk/apache-rat-core/src/main/java/org/apache/rat/Report.java
@@ -0,0 +1,428 @@
+/*
+ * 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/trunk/apache-rat-core/src/main/java/org/apache/rat/ReportConfiguration.java b/trunk/apache-rat-core/src/main/java/org/apache/rat/ReportConfiguration.java
new file mode 100644
index 0000000..f4043c8
--- /dev/null
+++ b/trunk/apache-rat-core/src/main/java/org/apache/rat/ReportConfiguration.java
@@ -0,0 +1,162 @@
+/*
+ * 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/trunk/apache-rat-core/src/main/java/org/apache/rat/ReportFailedRuntimeException.java b/trunk/apache-rat-core/src/main/java/org/apache/rat/ReportFailedRuntimeException.java
new file mode 100644
index 0000000..e778664
--- /dev/null
+++ b/trunk/apache-rat-core/src/main/java/org/apache/rat/ReportFailedRuntimeException.java
@@ -0,0 +1,43 @@
+/*
+ * 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/trunk/apache-rat-core/src/main/java/org/apache/rat/ReportTransformer.java b/trunk/apache-rat-core/src/main/java/org/apache/rat/ReportTransformer.java
new file mode 100644
index 0000000..399226a
--- /dev/null
+++ b/trunk/apache-rat-core/src/main/java/org/apache/rat/ReportTransformer.java
@@ -0,0 +1,67 @@
+/*
+ * 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/trunk/apache-rat-core/src/main/java/org/apache/rat/analysis/DefaultAnalyserFactory.java b/trunk/apache-rat-core/src/main/java/org/apache/rat/analysis/DefaultAnalyserFactory.java
new file mode 100644
index 0000000..c8d39ff
--- /dev/null
+++ b/trunk/apache-rat-core/src/main/java/org/apache/rat/analysis/DefaultAnalyserFactory.java
@@ -0,0 +1,65 @@
+/*
+ * 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/trunk/apache-rat-core/src/main/java/org/apache/rat/analysis/DocumentHeaderAnalyser.java b/trunk/apache-rat-core/src/main/java/org/apache/rat/analysis/DocumentHeaderAnalyser.java
new file mode 100644
index 0000000..e9f658c
--- /dev/null
+++ b/trunk/apache-rat-core/src/main/java/org/apache/rat/analysis/DocumentHeaderAnalyser.java
@@ -0,0 +1,54 @@
+/*
+ * 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/trunk/apache-rat-core/src/main/java/org/apache/rat/analysis/HeaderCheckWorker.java b/trunk/apache-rat-core/src/main/java/org/apache/rat/analysis/HeaderCheckWorker.java
new file mode 100644
index 0000000..2ae9edc
--- /dev/null
+++ b/trunk/apache-rat-core/src/main/java/org/apache/rat/analysis/HeaderCheckWorker.java
@@ -0,0 +1,117 @@
+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/trunk/apache-rat-core/src/main/java/org/apache/rat/analysis/IHeaderMatcher.java b/trunk/apache-rat-core/src/main/java/org/apache/rat/analysis/IHeaderMatcher.java
new file mode 100644
index 0000000..3ec499d
--- /dev/null
+++ b/trunk/apache-rat-core/src/main/java/org/apache/rat/analysis/IHeaderMatcher.java
@@ -0,0 +1,45 @@
+/*
+ * 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/trunk/apache-rat-core/src/main/java/org/apache/rat/analysis/RatHeaderAnalysisException.java b/trunk/apache-rat-core/src/main/java/org/apache/rat/analysis/RatHeaderAnalysisException.java
new file mode 100644
index 0000000..0e71391
--- /dev/null
+++ b/trunk/apache-rat-core/src/main/java/org/apache/rat/analysis/RatHeaderAnalysisException.java
@@ -0,0 +1,44 @@
+/*
+ * 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/trunk/apache-rat-core/src/main/java/org/apache/rat/analysis/RatReportAnalysisResultException.java b/trunk/apache-rat-core/src/main/java/org/apache/rat/analysis/RatReportAnalysisResultException.java
new file mode 100644
index 0000000..8ee9274
--- /dev/null
+++ b/trunk/apache-rat-core/src/main/java/org/apache/rat/analysis/RatReportAnalysisResultException.java
@@ -0,0 +1,40 @@
+/*
+ * 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/trunk/apache-rat-core/src/main/java/org/apache/rat/analysis/generation/GeneratedLicenseNotRequired.java b/trunk/apache-rat-core/src/main/java/org/apache/rat/analysis/generation/GeneratedLicenseNotRequired.java
new file mode 100644
index 0000000..9003fbd
--- /dev/null
+++ b/trunk/apache-rat-core/src/main/java/org/apache/rat/analysis/generation/GeneratedLicenseNotRequired.java
@@ -0,0 +1,106 @@
+/*
+ * 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/trunk/apache-rat-core/src/main/java/org/apache/rat/analysis/generation/JavaDocLicenseNotRequired.java b/trunk/apache-rat-core/src/main/java/org/apache/rat/analysis/generation/JavaDocLicenseNotRequired.java
new file mode 100644
index 0000000..d165b8e
--- /dev/null
+++ b/trunk/apache-rat-core/src/main/java/org/apache/rat/analysis/generation/JavaDocLicenseNotRequired.java
@@ -0,0 +1,49 @@
+/*
+ * 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/trunk/apache-rat-core/src/main/java/org/apache/rat/analysis/license/ApacheSoftwareLicense20.java b/trunk/apache-rat-core/src/main/java/org/apache/rat/analysis/license/ApacheSoftwareLicense20.java
new file mode 100644
index 0000000..9897a52
--- /dev/null
+++ b/trunk/apache-rat-core/src/main/java/org/apache/rat/analysis/license/ApacheSoftwareLicense20.java
@@ -0,0 +1,35 @@
+/*
+ * 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/trunk/apache-rat-core/src/main/java/org/apache/rat/analysis/license/AppliedApacheSoftwareLicense20.java b/trunk/apache-rat-core/src/main/java/org/apache/rat/analysis/license/AppliedApacheSoftwareLicense20.java
new file mode 100644
index 0000000..c2250d1
--- /dev/null
+++ b/trunk/apache-rat-core/src/main/java/org/apache/rat/analysis/license/AppliedApacheSoftwareLicense20.java
@@ -0,0 +1,74 @@
+/*
+ * 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/trunk/apache-rat-core/src/main/java/org/apache/rat/analysis/license/BaseLicense.java b/trunk/apache-rat-core/src/main/java/org/apache/rat/analysis/license/BaseLicense.java
new file mode 100644
index 0000000..fe55b96
--- /dev/null
+++ b/trunk/apache-rat-core/src/main/java/org/apache/rat/analysis/license/BaseLicense.java
@@ -0,0 +1,92 @@
+/*
+ * 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/trunk/apache-rat-core/src/main/java/org/apache/rat/analysis/license/CDDL1License.java b/trunk/apache-rat-core/src/main/java/org/apache/rat/analysis/license/CDDL1License.java
new file mode 100644
index 0000000..d731ef5
--- /dev/null
+++ b/trunk/apache-rat-core/src/main/java/org/apache/rat/analysis/license/CDDL1License.java
@@ -0,0 +1,67 @@
+/*
+ * 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/trunk/apache-rat-core/src/main/java/org/apache/rat/analysis/license/CopyrightHeader.java b/trunk/apache-rat-core/src/main/java/org/apache/rat/analysis/license/CopyrightHeader.java
new file mode 100644
index 0000000..38ae7ee
--- /dev/null
+++ b/trunk/apache-rat-core/src/main/java/org/apache/rat/analysis/license/CopyrightHeader.java
@@ -0,0 +1,102 @@
+/*
+ * 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/trunk/apache-rat-core/src/main/java/org/apache/rat/analysis/license/DojoLicenseHeader.java b/trunk/apache-rat-core/src/main/java/org/apache/rat/analysis/license/DojoLicenseHeader.java
new file mode 100644
index 0000000..a5c00d5
--- /dev/null
+++ b/trunk/apache-rat-core/src/main/java/org/apache/rat/analysis/license/DojoLicenseHeader.java
@@ -0,0 +1,41 @@
+/*
+ * 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/trunk/apache-rat-core/src/main/java/org/apache/rat/analysis/license/FullTextMatchingLicense.java b/trunk/apache-rat-core/src/main/java/org/apache/rat/analysis/license/FullTextMatchingLicense.java
new file mode 100644
index 0000000..2bc595d
--- /dev/null
+++ b/trunk/apache-rat-core/src/main/java/org/apache/rat/analysis/license/FullTextMatchingLicense.java
@@ -0,0 +1,120 @@
+/*
+ * 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/trunk/apache-rat-core/src/main/java/org/apache/rat/analysis/license/GPL1License.java b/trunk/apache-rat-core/src/main/java/org/apache/rat/analysis/license/GPL1License.java
new file mode 100644
index 0000000..5c94092
--- /dev/null
+++ b/trunk/apache-rat-core/src/main/java/org/apache/rat/analysis/license/GPL1License.java
@@ -0,0 +1,37 @@
+/*
+ * 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/trunk/apache-rat-core/src/main/java/org/apache/rat/analysis/license/GPL2License.java b/trunk/apache-rat-core/src/main/java/org/apache/rat/analysis/license/GPL2License.java
new file mode 100644
index 0000000..ed92592
--- /dev/null
+++ b/trunk/apache-rat-core/src/main/java/org/apache/rat/analysis/license/GPL2License.java
@@ -0,0 +1,37 @@
+/*
+ * 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/trunk/apache-rat-core/src/main/java/org/apache/rat/analysis/license/GPL3License.java b/trunk/apache-rat-core/src/main/java/org/apache/rat/analysis/license/GPL3License.java
new file mode 100644
index 0000000..c9a84fd
--- /dev/null
+++ b/trunk/apache-rat-core/src/main/java/org/apache/rat/analysis/license/GPL3License.java
@@ -0,0 +1,37 @@
+/*
+ * 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/trunk/apache-rat-core/src/main/java/org/apache/rat/analysis/license/MITLicense.java b/trunk/apache-rat-core/src/main/java/org/apache/rat/analysis/license/MITLicense.java
new file mode 100644
index 0000000..d622470
--- /dev/null
+++ b/trunk/apache-rat-core/src/main/java/org/apache/rat/analysis/license/MITLicense.java
@@ -0,0 +1,36 @@
+/*
+ * 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/trunk/apache-rat-core/src/main/java/org/apache/rat/analysis/license/OASISLicense.java b/trunk/apache-rat-core/src/main/java/org/apache/rat/analysis/license/OASISLicense.java
new file mode 100644
index 0000000..234dfef
--- /dev/null
+++ b/trunk/apache-rat-core/src/main/java/org/apache/rat/analysis/license/OASISLicense.java
@@ -0,0 +1,66 @@
+/*
+ * 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/trunk/apache-rat-core/src/main/java/org/apache/rat/analysis/license/SimplePatternBasedLicense.java b/trunk/apache-rat-core/src/main/java/org/apache/rat/analysis/license/SimplePatternBasedLicense.java
new file mode 100644
index 0000000..c750eb0
--- /dev/null
+++ b/trunk/apache-rat-core/src/main/java/org/apache/rat/analysis/license/SimplePatternBasedLicense.java
@@ -0,0 +1,75 @@
+/*
+ * 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/trunk/apache-rat-core/src/main/java/org/apache/rat/analysis/license/TMF854LicenseHeader.java b/trunk/apache-rat-core/src/main/java/org/apache/rat/analysis/license/TMF854LicenseHeader.java
new file mode 100644
index 0000000..3b49595
--- /dev/null
+++ b/trunk/apache-rat-core/src/main/java/org/apache/rat/analysis/license/TMF854LicenseHeader.java
@@ -0,0 +1,35 @@
+/*
+ * 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/trunk/apache-rat-core/src/main/java/org/apache/rat/analysis/license/W3CDocLicense.java b/trunk/apache-rat-core/src/main/java/org/apache/rat/analysis/license/W3CDocLicense.java
new file mode 100644
index 0000000..af51a03
--- /dev/null
+++ b/trunk/apache-rat-core/src/main/java/org/apache/rat/analysis/license/W3CDocLicense.java
@@ -0,0 +1,35 @@
+/*
+ * 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/trunk/apache-rat-core/src/main/java/org/apache/rat/analysis/license/W3CLicense.java b/trunk/apache-rat-core/src/main/java/org/apache/rat/analysis/license/W3CLicense.java
new file mode 100644
index 0000000..4325397
--- /dev/null
+++ b/trunk/apache-rat-core/src/main/java/org/apache/rat/analysis/license/W3CLicense.java
@@ -0,0 +1,36 @@
+/*
+ * 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/trunk/apache-rat-core/src/main/java/org/apache/rat/analysis/util/HeaderMatcherMultiplexer.java b/trunk/apache-rat-core/src/main/java/org/apache/rat/analysis/util/HeaderMatcherMultiplexer.java
new file mode 100644
index 0000000..ed3eb73
--- /dev/null
+++ b/trunk/apache-rat-core/src/main/java/org/apache/rat/analysis/util/HeaderMatcherMultiplexer.java
@@ -0,0 +1,56 @@
+/*
+ * 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/trunk/apache-rat-core/src/main/java/org/apache/rat/annotation/AbstractLicenseAppender.java b/trunk/apache-rat-core/src/main/java/org/apache/rat/annotation/AbstractLicenseAppender.java
new file mode 100644
index 0000000..65c9042
--- /dev/null
+++ b/trunk/apache-rat-core/src/main/java/org/apache/rat/annotation/AbstractLicenseAppender.java
@@ -0,0 +1,620 @@
+/*
+ * 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/trunk/apache-rat-core/src/main/java/org/apache/rat/annotation/ApacheV2LicenseAppender.java b/trunk/apache-rat-core/src/main/java/org/apache/rat/annotation/ApacheV2LicenseAppender.java
new file mode 100644
index 0000000..64509cc
--- /dev/null
+++ b/trunk/apache-rat-core/src/main/java/org/apache/rat/annotation/ApacheV2LicenseAppender.java
@@ -0,0 +1,98 @@
+/*
+ * 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/trunk/apache-rat-core/src/main/java/org/apache/rat/api/ContentType.java b/trunk/apache-rat-core/src/main/java/org/apache/rat/api/ContentType.java
new file mode 100644
index 0000000..f179af0
--- /dev/null
+++ b/trunk/apache-rat-core/src/main/java/org/apache/rat/api/ContentType.java
@@ -0,0 +1,77 @@
+/*
+ * 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/trunk/apache-rat-core/src/main/java/org/apache/rat/api/Document.java b/trunk/apache-rat-core/src/main/java/org/apache/rat/api/Document.java
new file mode 100644
index 0000000..b0818d0
--- /dev/null
+++ b/trunk/apache-rat-core/src/main/java/org/apache/rat/api/Document.java
@@ -0,0 +1,58 @@
+/*
+ * 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/trunk/apache-rat-core/src/main/java/org/apache/rat/api/MetaData.java b/trunk/apache-rat-core/src/main/java/org/apache/rat/api/MetaData.java
new file mode 100644
index 0000000..d2bf87c
--- /dev/null
+++ b/trunk/apache-rat-core/src/main/java/org/apache/rat/api/MetaData.java
@@ -0,0 +1,310 @@
+/*
+ * 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/trunk/apache-rat-core/src/main/java/org/apache/rat/api/MimeTyper.java b/trunk/apache-rat-core/src/main/java/org/apache/rat/api/MimeTyper.java
new file mode 100644
index 0000000..9e85f1d
--- /dev/null
+++ b/trunk/apache-rat-core/src/main/java/org/apache/rat/api/MimeTyper.java
@@ -0,0 +1,37 @@
+/*
+ * 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/trunk/apache-rat-core/src/main/java/org/apache/rat/api/RatException.java b/trunk/apache-rat-core/src/main/java/org/apache/rat/api/RatException.java
new file mode 100644
index 0000000..9d5c2c3
--- /dev/null
+++ b/trunk/apache-rat-core/src/main/java/org/apache/rat/api/RatException.java
@@ -0,0 +1,40 @@
+/*
+ * 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/trunk/apache-rat-core/src/main/java/org/apache/rat/api/package.html b/trunk/apache-rat-core/src/main/java/org/apache/rat/api/package.html
new file mode 100644
index 0000000..5ffbf43
--- /dev/null
+++ b/trunk/apache-rat-core/src/main/java/org/apache/rat/api/package.html
@@ -0,0 +1,17 @@
+<!--
+  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/trunk/apache-rat-core/src/main/java/org/apache/rat/config/AddLicenseHeaders.java b/trunk/apache-rat-core/src/main/java/org/apache/rat/config/AddLicenseHeaders.java
new file mode 100644
index 0000000..523aa6e
--- /dev/null
+++ b/trunk/apache-rat-core/src/main/java/org/apache/rat/config/AddLicenseHeaders.java
@@ -0,0 +1,44 @@
+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/trunk/apache-rat-core/src/main/java/org/apache/rat/config/ConfigurationUtil.java b/trunk/apache-rat-core/src/main/java/org/apache/rat/config/ConfigurationUtil.java
new file mode 100644
index 0000000..482345e
--- /dev/null
+++ b/trunk/apache-rat-core/src/main/java/org/apache/rat/config/ConfigurationUtil.java
@@ -0,0 +1,44 @@
+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/trunk/apache-rat-core/src/main/java/org/apache/rat/config/ReportFormat.java b/trunk/apache-rat-core/src/main/java/org/apache/rat/config/ReportFormat.java
new file mode 100644
index 0000000..a0635b4
--- /dev/null
+++ b/trunk/apache-rat-core/src/main/java/org/apache/rat/config/ReportFormat.java
@@ -0,0 +1,33 @@
+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/trunk/apache-rat-core/src/main/java/org/apache/rat/config/SourceCodeManagementSystems.java b/trunk/apache-rat-core/src/main/java/org/apache/rat/config/SourceCodeManagementSystems.java
new file mode 100644
index 0000000..195dbef
--- /dev/null
+++ b/trunk/apache-rat-core/src/main/java/org/apache/rat/config/SourceCodeManagementSystems.java
@@ -0,0 +1,105 @@
+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/trunk/apache-rat-core/src/main/java/org/apache/rat/config/package.html b/trunk/apache-rat-core/src/main/java/org/apache/rat/config/package.html
new file mode 100644
index 0000000..3c8d8d4
--- /dev/null
+++ b/trunk/apache-rat-core/src/main/java/org/apache/rat/config/package.html
@@ -0,0 +1,17 @@
+<!--
+  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/trunk/apache-rat-core/src/main/java/org/apache/rat/document/CompositeDocumentException.java b/trunk/apache-rat-core/src/main/java/org/apache/rat/document/CompositeDocumentException.java
new file mode 100644
index 0000000..a3d1d53
--- /dev/null
+++ b/trunk/apache-rat-core/src/main/java/org/apache/rat/document/CompositeDocumentException.java
@@ -0,0 +1,39 @@
+/*
+ * 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/trunk/apache-rat-core/src/main/java/org/apache/rat/document/IDocumentAnalyser.java b/trunk/apache-rat-core/src/main/java/org/apache/rat/document/IDocumentAnalyser.java
new file mode 100644
index 0000000..ec02ce0
--- /dev/null
+++ b/trunk/apache-rat-core/src/main/java/org/apache/rat/document/IDocumentAnalyser.java
@@ -0,0 +1,27 @@
+/*
+ * 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/trunk/apache-rat-core/src/main/java/org/apache/rat/document/RatDocumentAnalysisException.java b/trunk/apache-rat-core/src/main/java/org/apache/rat/document/RatDocumentAnalysisException.java
new file mode 100644
index 0000000..5ffa5a1
--- /dev/null
+++ b/trunk/apache-rat-core/src/main/java/org/apache/rat/document/RatDocumentAnalysisException.java
@@ -0,0 +1,40 @@
+/*
+ * 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/trunk/apache-rat-core/src/main/java/org/apache/rat/document/ToNameTransformer.java b/trunk/apache-rat-core/src/main/java/org/apache/rat/document/ToNameTransformer.java
new file mode 100644
index 0000000..b2322d4
--- /dev/null
+++ b/trunk/apache-rat-core/src/main/java/org/apache/rat/document/ToNameTransformer.java
@@ -0,0 +1,40 @@
+/*
+ * 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/trunk/apache-rat-core/src/main/java/org/apache/rat/document/UnsuitableDocumentException.java b/trunk/apache-rat-core/src/main/java/org/apache/rat/document/UnsuitableDocumentException.java
new file mode 100644
index 0000000..e112706
--- /dev/null
+++ b/trunk/apache-rat-core/src/main/java/org/apache/rat/document/UnsuitableDocumentException.java
@@ -0,0 +1,46 @@
+/*
+ * 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/trunk/apache-rat-core/src/main/java/org/apache/rat/document/impl/AbstractMonolithicDocument.java b/trunk/apache-rat-core/src/main/java/org/apache/rat/document/impl/AbstractMonolithicDocument.java
new file mode 100644
index 0000000..302e372
--- /dev/null
+++ b/trunk/apache-rat-core/src/main/java/org/apache/rat/document/impl/AbstractMonolithicDocument.java
@@ -0,0 +1,48 @@
+/*
+ * 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/trunk/apache-rat-core/src/main/java/org/apache/rat/document/impl/ArchiveEntryDocument.java b/trunk/apache-rat-core/src/main/java/org/apache/rat/document/impl/ArchiveEntryDocument.java
new file mode 100644
index 0000000..f7c1064
--- /dev/null
+++ b/trunk/apache-rat-core/src/main/java/org/apache/rat/document/impl/ArchiveEntryDocument.java
@@ -0,0 +1,80 @@
+/*
+ * 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/trunk/apache-rat-core/src/main/java/org/apache/rat/document/impl/DocumentImplUtils.java b/trunk/apache-rat-core/src/main/java/org/apache/rat/document/impl/DocumentImplUtils.java
new file mode 100644
index 0000000..6351398
--- /dev/null
+++ b/trunk/apache-rat-core/src/main/java/org/apache/rat/document/impl/DocumentImplUtils.java
@@ -0,0 +1,60 @@
+/*
+ * 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/trunk/apache-rat-core/src/main/java/org/apache/rat/document/impl/FileDocument.java b/trunk/apache-rat-core/src/main/java/org/apache/rat/document/impl/FileDocument.java
new file mode 100644
index 0000000..d8d3232
--- /dev/null
+++ b/trunk/apache-rat-core/src/main/java/org/apache/rat/document/impl/FileDocument.java
@@ -0,0 +1,83 @@
+/*
+ * 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/trunk/apache-rat-core/src/main/java/org/apache/rat/document/impl/MonolithicFileDocument.java b/trunk/apache-rat-core/src/main/java/org/apache/rat/document/impl/MonolithicFileDocument.java
new file mode 100644
index 0000000..16e9e4e
--- /dev/null
+++ b/trunk/apache-rat-core/src/main/java/org/apache/rat/document/impl/MonolithicFileDocument.java
@@ -0,0 +1,73 @@
+/*
+ * 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/trunk/apache-rat-core/src/main/java/org/apache/rat/document/impl/guesser/ArchiveGuesser.java b/trunk/apache-rat-core/src/main/java/org/apache/rat/document/impl/guesser/ArchiveGuesser.java
new file mode 100644
index 0000000..d3d44e6
--- /dev/null
+++ b/trunk/apache-rat-core/src/main/java/org/apache/rat/document/impl/guesser/ArchiveGuesser.java
@@ -0,0 +1,66 @@
+/*
+ * 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/trunk/apache-rat-core/src/main/java/org/apache/rat/document/impl/guesser/BinaryGuesser.java b/trunk/apache-rat-core/src/main/java/org/apache/rat/document/impl/guesser/BinaryGuesser.java
new file mode 100644
index 0000000..44f7b1d
--- /dev/null
+++ b/trunk/apache-rat-core/src/main/java/org/apache/rat/document/impl/guesser/BinaryGuesser.java
@@ -0,0 +1,363 @@
+/*
+ * 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"
+    };
+
+    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/trunk/apache-rat-core/src/main/java/org/apache/rat/document/impl/guesser/GuessUtils.java b/trunk/apache-rat-core/src/main/java/org/apache/rat/document/impl/guesser/GuessUtils.java
new file mode 100644
index 0000000..d56a672
--- /dev/null
+++ b/trunk/apache-rat-core/src/main/java/org/apache/rat/document/impl/guesser/GuessUtils.java
@@ -0,0 +1,43 @@
+/*
+ * 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/trunk/apache-rat-core/src/main/java/org/apache/rat/document/impl/guesser/NoteGuesser.java b/trunk/apache-rat-core/src/main/java/org/apache/rat/document/impl/guesser/NoteGuesser.java
new file mode 100644
index 0000000..d0b9901
--- /dev/null
+++ b/trunk/apache-rat-core/src/main/java/org/apache/rat/document/impl/guesser/NoteGuesser.java
@@ -0,0 +1,84 @@
+/*
+ * 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/trunk/apache-rat-core/src/main/java/org/apache/rat/document/impl/util/DocumentAnalyserMultiplexer.java b/trunk/apache-rat-core/src/main/java/org/apache/rat/document/impl/util/DocumentAnalyserMultiplexer.java
new file mode 100644
index 0000000..da2126e
--- /dev/null
+++ b/trunk/apache-rat-core/src/main/java/org/apache/rat/document/impl/util/DocumentAnalyserMultiplexer.java
@@ -0,0 +1,40 @@
+/*
+ * 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/trunk/apache-rat-core/src/main/java/org/apache/rat/header/ArrayCharFilter.java b/trunk/apache-rat-core/src/main/java/org/apache/rat/header/ArrayCharFilter.java
new file mode 100644
index 0000000..762f825
--- /dev/null
+++ b/trunk/apache-rat-core/src/main/java/org/apache/rat/header/ArrayCharFilter.java
@@ -0,0 +1,43 @@
+/*
+ * 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/trunk/apache-rat-core/src/main/java/org/apache/rat/header/CharFilter.java b/trunk/apache-rat-core/src/main/java/org/apache/rat/header/CharFilter.java
new file mode 100644
index 0000000..76011e3
--- /dev/null
+++ b/trunk/apache-rat-core/src/main/java/org/apache/rat/header/CharFilter.java
@@ -0,0 +1,30 @@
+/*
+ * 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/trunk/apache-rat-core/src/main/java/org/apache/rat/header/FilteringSequenceFactory.java b/trunk/apache-rat-core/src/main/java/org/apache/rat/header/FilteringSequenceFactory.java
new file mode 100644
index 0000000..f01dc0f
--- /dev/null
+++ b/trunk/apache-rat-core/src/main/java/org/apache/rat/header/FilteringSequenceFactory.java
@@ -0,0 +1,59 @@
+/*
+ * 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/trunk/apache-rat-core/src/main/java/org/apache/rat/header/HeaderBean.java b/trunk/apache-rat-core/src/main/java/org/apache/rat/header/HeaderBean.java
new file mode 100644
index 0000000..f55fa83
--- /dev/null
+++ b/trunk/apache-rat-core/src/main/java/org/apache/rat/header/HeaderBean.java
@@ -0,0 +1,62 @@
+/*
+ * 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/trunk/apache-rat-core/src/main/java/org/apache/rat/header/HeaderMatcher.java b/trunk/apache-rat-core/src/main/java/org/apache/rat/header/HeaderMatcher.java
new file mode 100644
index 0000000..134152c
--- /dev/null
+++ b/trunk/apache-rat-core/src/main/java/org/apache/rat/header/HeaderMatcher.java
@@ -0,0 +1,104 @@
+/*
+ * 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/trunk/apache-rat-core/src/main/java/org/apache/rat/license/AcademicFree21LicenseFamily.java b/trunk/apache-rat-core/src/main/java/org/apache/rat/license/AcademicFree21LicenseFamily.java
new file mode 100644
index 0000000..bc870c3
--- /dev/null
+++ b/trunk/apache-rat-core/src/main/java/org/apache/rat/license/AcademicFree21LicenseFamily.java
@@ -0,0 +1,27 @@
+/*
+ * 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/trunk/apache-rat-core/src/main/java/org/apache/rat/license/Apache20LicenseFamily.java b/trunk/apache-rat-core/src/main/java/org/apache/rat/license/Apache20LicenseFamily.java
new file mode 100644
index 0000000..17abbcd
--- /dev/null
+++ b/trunk/apache-rat-core/src/main/java/org/apache/rat/license/Apache20LicenseFamily.java
@@ -0,0 +1,27 @@
+/*
+ * 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/trunk/apache-rat-core/src/main/java/org/apache/rat/license/CDDL1LicenseFamily.java b/trunk/apache-rat-core/src/main/java/org/apache/rat/license/CDDL1LicenseFamily.java
new file mode 100644
index 0000000..6bf01c0
--- /dev/null
+++ b/trunk/apache-rat-core/src/main/java/org/apache/rat/license/CDDL1LicenseFamily.java
@@ -0,0 +1,31 @@
+/*
+ * 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/trunk/apache-rat-core/src/main/java/org/apache/rat/license/GPL1LicenseFamily.java b/trunk/apache-rat-core/src/main/java/org/apache/rat/license/GPL1LicenseFamily.java
new file mode 100644
index 0000000..bdfd86e
--- /dev/null
+++ b/trunk/apache-rat-core/src/main/java/org/apache/rat/license/GPL1LicenseFamily.java
@@ -0,0 +1,31 @@
+/*
+ * 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/trunk/apache-rat-core/src/main/java/org/apache/rat/license/GPL2LicenseFamily.java b/trunk/apache-rat-core/src/main/java/org/apache/rat/license/GPL2LicenseFamily.java
new file mode 100644
index 0000000..e2d2522
--- /dev/null
+++ b/trunk/apache-rat-core/src/main/java/org/apache/rat/license/GPL2LicenseFamily.java
@@ -0,0 +1,31 @@
+/*
+ * 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/trunk/apache-rat-core/src/main/java/org/apache/rat/license/GPL3LicenseFamily.java b/trunk/apache-rat-core/src/main/java/org/apache/rat/license/GPL3LicenseFamily.java
new file mode 100644
index 0000000..9d91466
--- /dev/null
+++ b/trunk/apache-rat-core/src/main/java/org/apache/rat/license/GPL3LicenseFamily.java
@@ -0,0 +1,31 @@
+/*
+ * 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/trunk/apache-rat-core/src/main/java/org/apache/rat/license/ILicenseFamily.java b/trunk/apache-rat-core/src/main/java/org/apache/rat/license/ILicenseFamily.java
new file mode 100644
index 0000000..97ef9a9
--- /dev/null
+++ b/trunk/apache-rat-core/src/main/java/org/apache/rat/license/ILicenseFamily.java
@@ -0,0 +1,24 @@
+/*
+ * 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/trunk/apache-rat-core/src/main/java/org/apache/rat/license/MITLicenseFamily.java b/trunk/apache-rat-core/src/main/java/org/apache/rat/license/MITLicenseFamily.java
new file mode 100644
index 0000000..c6453d0
--- /dev/null
+++ b/trunk/apache-rat-core/src/main/java/org/apache/rat/license/MITLicenseFamily.java
@@ -0,0 +1,31 @@
+/*
+ * 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/trunk/apache-rat-core/src/main/java/org/apache/rat/license/ModifiedBSDLicenseFamily.java b/trunk/apache-rat-core/src/main/java/org/apache/rat/license/ModifiedBSDLicenseFamily.java
new file mode 100644
index 0000000..d94de97
--- /dev/null
+++ b/trunk/apache-rat-core/src/main/java/org/apache/rat/license/ModifiedBSDLicenseFamily.java
@@ -0,0 +1,27 @@
+/*
+ * 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/trunk/apache-rat-core/src/main/java/org/apache/rat/license/OASISLicenseFamily.java b/trunk/apache-rat-core/src/main/java/org/apache/rat/license/OASISLicenseFamily.java
new file mode 100644
index 0000000..17c2709
--- /dev/null
+++ b/trunk/apache-rat-core/src/main/java/org/apache/rat/license/OASISLicenseFamily.java
@@ -0,0 +1,27 @@
+/*
+ * 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/trunk/apache-rat-core/src/main/java/org/apache/rat/license/SimpleLicenseFamily.java b/trunk/apache-rat-core/src/main/java/org/apache/rat/license/SimpleLicenseFamily.java
new file mode 100644
index 0000000..24231dd
--- /dev/null
+++ b/trunk/apache-rat-core/src/main/java/org/apache/rat/license/SimpleLicenseFamily.java
@@ -0,0 +1,43 @@
+/*
+ * 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/trunk/apache-rat-core/src/main/java/org/apache/rat/license/W3CDocumentLicenseFamily.java b/trunk/apache-rat-core/src/main/java/org/apache/rat/license/W3CDocumentLicenseFamily.java
new file mode 100644
index 0000000..c3d2101
--- /dev/null
+++ b/trunk/apache-rat-core/src/main/java/org/apache/rat/license/W3CDocumentLicenseFamily.java
@@ -0,0 +1,27 @@
+/*
+ * 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/trunk/apache-rat-core/src/main/java/org/apache/rat/license/W3CSoftwareLicenseFamily.java b/trunk/apache-rat-core/src/main/java/org/apache/rat/license/W3CSoftwareLicenseFamily.java
new file mode 100644
index 0000000..42a6dc9
--- /dev/null
+++ b/trunk/apache-rat-core/src/main/java/org/apache/rat/license/W3CSoftwareLicenseFamily.java
@@ -0,0 +1,27 @@
+/*
+ * 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/trunk/apache-rat-core/src/main/java/org/apache/rat/policy/DefaultPolicy.java b/trunk/apache-rat-core/src/main/java/org/apache/rat/policy/DefaultPolicy.java
new file mode 100644
index 0000000..71bf11f
--- /dev/null
+++ b/trunk/apache-rat-core/src/main/java/org/apache/rat/policy/DefaultPolicy.java
@@ -0,0 +1,87 @@
+/*
+ * 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/trunk/apache-rat-core/src/main/java/org/apache/rat/report/AbstractReport.java b/trunk/apache-rat-core/src/main/java/org/apache/rat/report/AbstractReport.java
new file mode 100644
index 0000000..18bfd1f
--- /dev/null
+++ b/trunk/apache-rat-core/src/main/java/org/apache/rat/report/AbstractReport.java
@@ -0,0 +1,40 @@
+/*
+ * 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/trunk/apache-rat-core/src/main/java/org/apache/rat/report/IReportable.java b/trunk/apache-rat-core/src/main/java/org/apache/rat/report/IReportable.java
new file mode 100644
index 0000000..d7fd7af
--- /dev/null
+++ b/trunk/apache-rat-core/src/main/java/org/apache/rat/report/IReportable.java
@@ -0,0 +1,26 @@
+/*
+ * 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/trunk/apache-rat-core/src/main/java/org/apache/rat/report/RatReport.java b/trunk/apache-rat-core/src/main/java/org/apache/rat/report/RatReport.java
new file mode 100644
index 0000000..d178acf
--- /dev/null
+++ b/trunk/apache-rat-core/src/main/java/org/apache/rat/report/RatReport.java
@@ -0,0 +1,31 @@
+/*
+ * 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/trunk/apache-rat-core/src/main/java/org/apache/rat/report/claim/ClaimStatistic.java b/trunk/apache-rat-core/src/main/java/org/apache/rat/report/claim/ClaimStatistic.java
new file mode 100644
index 0000000..578e8f6
--- /dev/null
+++ b/trunk/apache-rat-core/src/main/java/org/apache/rat/report/claim/ClaimStatistic.java
@@ -0,0 +1,160 @@
+/*
+* 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/trunk/apache-rat-core/src/main/java/org/apache/rat/report/claim/impl/AbstractClaimReporter.java b/trunk/apache-rat-core/src/main/java/org/apache/rat/report/claim/impl/AbstractClaimReporter.java
new file mode 100644
index 0000000..8904cfb
--- /dev/null
+++ b/trunk/apache-rat-core/src/main/java/org/apache/rat/report/claim/impl/AbstractClaimReporter.java
@@ -0,0 +1,102 @@
+/*
+* 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/trunk/apache-rat-core/src/main/java/org/apache/rat/report/claim/impl/ClaimAggregator.java b/trunk/apache-rat-core/src/main/java/org/apache/rat/report/claim/impl/ClaimAggregator.java
new file mode 100644
index 0000000..a4f915d
--- /dev/null
+++ b/trunk/apache-rat-core/src/main/java/org/apache/rat/report/claim/impl/ClaimAggregator.java
@@ -0,0 +1,102 @@
+/*
+* 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/trunk/apache-rat-core/src/main/java/org/apache/rat/report/claim/impl/xml/SimpleXmlClaimReporter.java b/trunk/apache-rat-core/src/main/java/org/apache/rat/report/claim/impl/xml/SimpleXmlClaimReporter.java
new file mode 100644
index 0000000..02e21d6
--- /dev/null
+++ b/trunk/apache-rat-core/src/main/java/org/apache/rat/report/claim/impl/xml/SimpleXmlClaimReporter.java
@@ -0,0 +1,150 @@
+/*
+ * 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/trunk/apache-rat-core/src/main/java/org/apache/rat/report/claim/util/ClaimReporterMultiplexer.java b/trunk/apache-rat-core/src/main/java/org/apache/rat/report/claim/util/ClaimReporterMultiplexer.java
new file mode 100644
index 0000000..572d7b9
--- /dev/null
+++ b/trunk/apache-rat-core/src/main/java/org/apache/rat/report/claim/util/ClaimReporterMultiplexer.java
@@ -0,0 +1,63 @@
+/*
+ * 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/trunk/apache-rat-core/src/main/java/org/apache/rat/report/claim/util/LicenseAddingReport.java b/trunk/apache-rat-core/src/main/java/org/apache/rat/report/claim/util/LicenseAddingReport.java
new file mode 100644
index 0000000..8570c69
--- /dev/null
+++ b/trunk/apache-rat-core/src/main/java/org/apache/rat/report/claim/util/LicenseAddingReport.java
@@ -0,0 +1,55 @@
+/*
+ * 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/trunk/apache-rat-core/src/main/java/org/apache/rat/report/xml/XmlReportFactory.java b/trunk/apache-rat-core/src/main/java/org/apache/rat/report/xml/XmlReportFactory.java
new file mode 100644
index 0000000..939b608
--- /dev/null
+++ b/trunk/apache-rat-core/src/main/java/org/apache/rat/report/xml/XmlReportFactory.java
@@ -0,0 +1,61 @@
+/*
+ * 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/trunk/apache-rat-core/src/main/java/org/apache/rat/report/xml/writer/IXmlWriter.java b/trunk/apache-rat-core/src/main/java/org/apache/rat/report/xml/writer/IXmlWriter.java
new file mode 100644
index 0000000..9f7268f
--- /dev/null
+++ b/trunk/apache-rat-core/src/main/java/org/apache/rat/report/xml/writer/IXmlWriter.java
@@ -0,0 +1,101 @@
+/*
+ * 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/trunk/apache-rat-core/src/main/java/org/apache/rat/report/xml/writer/InvalidXmlException.java b/trunk/apache-rat-core/src/main/java/org/apache/rat/report/xml/writer/InvalidXmlException.java
new file mode 100644
index 0000000..e01226f
--- /dev/null
+++ b/trunk/apache-rat-core/src/main/java/org/apache/rat/report/xml/writer/InvalidXmlException.java
@@ -0,0 +1,35 @@
+/*
+ * 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/trunk/apache-rat-core/src/main/java/org/apache/rat/report/xml/writer/OperationNotAllowedException.java b/trunk/apache-rat-core/src/main/java/org/apache/rat/report/xml/writer/OperationNotAllowedException.java
new file mode 100644
index 0000000..2009069
--- /dev/null
+++ b/trunk/apache-rat-core/src/main/java/org/apache/rat/report/xml/writer/OperationNotAllowedException.java
@@ -0,0 +1,36 @@
+/*
+ * 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/trunk/apache-rat-core/src/main/java/org/apache/rat/report/xml/writer/XmlWriterUtils.java b/trunk/apache-rat-core/src/main/java/org/apache/rat/report/xml/writer/XmlWriterUtils.java
new file mode 100644
index 0000000..26f540c
--- /dev/null
+++ b/trunk/apache-rat-core/src/main/java/org/apache/rat/report/xml/writer/XmlWriterUtils.java
@@ -0,0 +1,29 @@
+/*
+ * 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/trunk/apache-rat-core/src/main/java/org/apache/rat/report/xml/writer/impl/base/XmlWriter.java b/trunk/apache-rat-core/src/main/java/org/apache/rat/report/xml/writer/impl/base/XmlWriter.java
new file mode 100644
index 0000000..71ab3b9
--- /dev/null
+++ b/trunk/apache-rat-core/src/main/java/org/apache/rat/report/xml/writer/impl/base/XmlWriter.java
@@ -0,0 +1,650 @@
+/*
+ * 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/trunk/apache-rat-core/src/main/java/org/apache/rat/walker/ArchiveWalker.java b/trunk/apache-rat-core/src/main/java/org/apache/rat/walker/ArchiveWalker.java
new file mode 100644
index 0000000..57caccb
--- /dev/null
+++ b/trunk/apache-rat-core/src/main/java/org/apache/rat/walker/ArchiveWalker.java
@@ -0,0 +1,119 @@
+/*
+ * 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/trunk/apache-rat-core/src/main/java/org/apache/rat/walker/DirectoryWalker.java b/trunk/apache-rat-core/src/main/java/org/apache/rat/walker/DirectoryWalker.java
new file mode 100644
index 0000000..49dfcb4
--- /dev/null
+++ b/trunk/apache-rat-core/src/main/java/org/apache/rat/walker/DirectoryWalker.java
@@ -0,0 +1,147 @@
+/*
+ * 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/trunk/apache-rat-core/src/main/java/org/apache/rat/walker/FileNameComparator.java b/trunk/apache-rat-core/src/main/java/org/apache/rat/walker/FileNameComparator.java
new file mode 100644
index 0000000..c3ed803
--- /dev/null
+++ b/trunk/apache-rat-core/src/main/java/org/apache/rat/walker/FileNameComparator.java
@@ -0,0 +1,44 @@
+/*
+ * 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/trunk/apache-rat-core/src/main/java/org/apache/rat/walker/Walker.java b/trunk/apache-rat-core/src/main/java/org/apache/rat/walker/Walker.java
new file mode 100644
index 0000000..06f8bd7
--- /dev/null
+++ b/trunk/apache-rat-core/src/main/java/org/apache/rat/walker/Walker.java
@@ -0,0 +1,76 @@
+/*
+ * 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/trunk/apache-rat-core/src/main/resources/org/apache/rat/plain-rat.xsl b/trunk/apache-rat-core/src/main/resources/org/apache/rat/plain-rat.xsl
new file mode 100644
index 0000000..2ea353f
--- /dev/null
+++ b/trunk/apache-rat-core/src/main/resources/org/apache/rat/plain-rat.xsl
@@ -0,0 +1,95 @@
+<?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/trunk/apache-rat-core/src/main/resources/org/apache/rat/unapproved-licenses.xsl b/trunk/apache-rat-core/src/main/resources/org/apache/rat/unapproved-licenses.xsl
new file mode 100644
index 0000000..040909b
--- /dev/null
+++ b/trunk/apache-rat-core/src/main/resources/org/apache/rat/unapproved-licenses.xsl
@@ -0,0 +1,31 @@
+<?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/trunk/apache-rat-core/src/site/apt/index.apt.vm b/trunk/apache-rat-core/src/site/apt/index.apt.vm
new file mode 100644
index 0000000..770b109
--- /dev/null
+++ b/trunk/apache-rat-core/src/site/apt/index.apt.vm
@@ -0,0 +1,72 @@
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+~~   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/trunk/apache-rat-core/src/site/resources/css/site.css b/trunk/apache-rat-core/src/site/resources/css/site.css
new file mode 100644
index 0000000..3683f87
--- /dev/null
+++ b/trunk/apache-rat-core/src/site/resources/css/site.css
@@ -0,0 +1,27 @@
+/*
+  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/trunk/apache-rat-core/src/site/site.xml b/trunk/apache-rat-core/src/site/site.xml
new file mode 100644
index 0000000..56b93ce
--- /dev/null
+++ b/trunk/apache-rat-core/src/site/site.xml
@@ -0,0 +1,32 @@
+<?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/trunk/apache-rat-core/src/test/java/org/apache/rat/ReportTest.java b/trunk/apache-rat-core/src/test/java/org/apache/rat/ReportTest.java
new file mode 100644
index 0000000..bccab10
--- /dev/null
+++ b/trunk/apache-rat-core/src/test/java/org/apache/rat/ReportTest.java
@@ -0,0 +1,133 @@
+/*
+ * 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/trunk/apache-rat-core/src/test/java/org/apache/rat/ReportTransformerTest.java b/trunk/apache-rat-core/src/test/java/org/apache/rat/ReportTransformerTest.java
new file mode 100644
index 0000000..e9f6338
--- /dev/null
+++ b/trunk/apache-rat-core/src/test/java/org/apache/rat/ReportTransformerTest.java
@@ -0,0 +1,53 @@
+/*
+ * 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/trunk/apache-rat-core/src/test/java/org/apache/rat/analysis/AnalyserFactoryTest.java b/trunk/apache-rat-core/src/test/java/org/apache/rat/analysis/AnalyserFactoryTest.java
new file mode 100644
index 0000000..30d3365
--- /dev/null
+++ b/trunk/apache-rat-core/src/test/java/org/apache/rat/analysis/AnalyserFactoryTest.java
@@ -0,0 +1,117 @@
+/*
+ * 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/trunk/apache-rat-core/src/test/java/org/apache/rat/analysis/HeaderCheckWorkerTest.java b/trunk/apache-rat-core/src/test/java/org/apache/rat/analysis/HeaderCheckWorkerTest.java
new file mode 100644
index 0000000..e7ad809
--- /dev/null
+++ b/trunk/apache-rat-core/src/test/java/org/apache/rat/analysis/HeaderCheckWorkerTest.java
@@ -0,0 +1,42 @@
+/*
+ * 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/trunk/apache-rat-core/src/test/java/org/apache/rat/analysis/MockLicenseMatcher.java b/trunk/apache-rat-core/src/test/java/org/apache/rat/analysis/MockLicenseMatcher.java
new file mode 100644
index 0000000..3c7ff13
--- /dev/null
+++ b/trunk/apache-rat-core/src/test/java/org/apache/rat/analysis/MockLicenseMatcher.java
@@ -0,0 +1,41 @@
+/*
+ * 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/trunk/apache-rat-core/src/test/java/org/apache/rat/analysis/generation/GeneratedLicenseNotRequiredTest.java b/trunk/apache-rat-core/src/test/java/org/apache/rat/analysis/generation/GeneratedLicenseNotRequiredTest.java
new file mode 100644
index 0000000..d9fc72f
--- /dev/null
+++ b/trunk/apache-rat-core/src/test/java/org/apache/rat/analysis/generation/GeneratedLicenseNotRequiredTest.java
@@ -0,0 +1,50 @@
+/*
+ * 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/trunk/apache-rat-core/src/test/java/org/apache/rat/analysis/generation/JavaDocLicenseNotRequiredTest.java b/trunk/apache-rat-core/src/test/java/org/apache/rat/analysis/generation/JavaDocLicenseNotRequiredTest.java
new file mode 100644
index 0000000..2f22cdc
--- /dev/null
+++ b/trunk/apache-rat-core/src/test/java/org/apache/rat/analysis/generation/JavaDocLicenseNotRequiredTest.java
@@ -0,0 +1,82 @@
+/*
+ * 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/trunk/apache-rat-core/src/test/java/org/apache/rat/analysis/license/ApacheSoftwareLicense20Test.java b/trunk/apache-rat-core/src/test/java/org/apache/rat/analysis/license/ApacheSoftwareLicense20Test.java
new file mode 100644
index 0000000..838ae0b
--- /dev/null
+++ b/trunk/apache-rat-core/src/test/java/org/apache/rat/analysis/license/ApacheSoftwareLicense20Test.java
@@ -0,0 +1,70 @@
+/*
+ * 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/trunk/apache-rat-core/src/test/java/org/apache/rat/analysis/license/AppliedApacheSoftwareLicense20Test.java b/trunk/apache-rat-core/src/test/java/org/apache/rat/analysis/license/AppliedApacheSoftwareLicense20Test.java
new file mode 100644
index 0000000..94c0917
--- /dev/null
+++ b/trunk/apache-rat-core/src/test/java/org/apache/rat/analysis/license/AppliedApacheSoftwareLicense20Test.java
@@ -0,0 +1,109 @@
+/*
+ * 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/trunk/apache-rat-core/src/test/java/org/apache/rat/analysis/license/CDDL1LicenseTest.java b/trunk/apache-rat-core/src/test/java/org/apache/rat/analysis/license/CDDL1LicenseTest.java
new file mode 100644
index 0000000..813e5e5
--- /dev/null
+++ b/trunk/apache-rat-core/src/test/java/org/apache/rat/analysis/license/CDDL1LicenseTest.java
@@ -0,0 +1,88 @@
+/*
+ * 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/trunk/apache-rat-core/src/test/java/org/apache/rat/analysis/license/CopyrightHeaderTest.java b/trunk/apache-rat-core/src/test/java/org/apache/rat/analysis/license/CopyrightHeaderTest.java
new file mode 100644
index 0000000..5699cf5
--- /dev/null
+++ b/trunk/apache-rat-core/src/test/java/org/apache/rat/analysis/license/CopyrightHeaderTest.java
@@ -0,0 +1,76 @@
+/*
+ * 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/trunk/apache-rat-core/src/test/java/org/apache/rat/analysis/license/DirectoryScanner.java b/trunk/apache-rat-core/src/test/java/org/apache/rat/analysis/license/DirectoryScanner.java
new file mode 100644
index 0000000..8d9a67b
--- /dev/null
+++ b/trunk/apache-rat-core/src/test/java/org/apache/rat/analysis/license/DirectoryScanner.java
@@ -0,0 +1,66 @@
+/*
+ * 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/trunk/apache-rat-core/src/test/java/org/apache/rat/analysis/license/GPL123LicenseTest.java b/trunk/apache-rat-core/src/test/java/org/apache/rat/analysis/license/GPL123LicenseTest.java
new file mode 100644
index 0000000..127d75a
--- /dev/null
+++ b/trunk/apache-rat-core/src/test/java/org/apache/rat/analysis/license/GPL123LicenseTest.java
@@ -0,0 +1,87 @@
+/*
+ * 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/trunk/apache-rat-core/src/test/java/org/apache/rat/analysis/license/MITLicenseTest.java b/trunk/apache-rat-core/src/test/java/org/apache/rat/analysis/license/MITLicenseTest.java
new file mode 100644
index 0000000..8cb1f84
--- /dev/null
+++ b/trunk/apache-rat-core/src/test/java/org/apache/rat/analysis/license/MITLicenseTest.java
@@ -0,0 +1,84 @@
+/*
+ * 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/trunk/apache-rat-core/src/test/java/org/apache/rat/analysis/license/MockStandardLicense.java b/trunk/apache-rat-core/src/test/java/org/apache/rat/analysis/license/MockStandardLicense.java
new file mode 100644
index 0000000..537f69e
--- /dev/null
+++ b/trunk/apache-rat-core/src/test/java/org/apache/rat/analysis/license/MockStandardLicense.java
@@ -0,0 +1,32 @@
+/*
+ * 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/trunk/apache-rat-core/src/test/java/org/apache/rat/analysis/license/OASISLicenseTest.java b/trunk/apache-rat-core/src/test/java/org/apache/rat/analysis/license/OASISLicenseTest.java
new file mode 100644
index 0000000..7e46921
--- /dev/null
+++ b/trunk/apache-rat-core/src/test/java/org/apache/rat/analysis/license/OASISLicenseTest.java
@@ -0,0 +1,117 @@
+/*
+ * 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/trunk/apache-rat-core/src/test/java/org/apache/rat/analysis/license/W3CLicenseTest.java b/trunk/apache-rat-core/src/test/java/org/apache/rat/analysis/license/W3CLicenseTest.java
new file mode 100644
index 0000000..6397bbd
--- /dev/null
+++ b/trunk/apache-rat-core/src/test/java/org/apache/rat/analysis/license/W3CLicenseTest.java
@@ -0,0 +1,59 @@
+/*
+ * 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/trunk/apache-rat-core/src/test/java/org/apache/rat/analysis/util/MatcherMultiplexerTest.java b/trunk/apache-rat-core/src/test/java/org/apache/rat/analysis/util/MatcherMultiplexerTest.java
new file mode 100644
index 0000000..1ed6e69
--- /dev/null
+++ b/trunk/apache-rat-core/src/test/java/org/apache/rat/analysis/util/MatcherMultiplexerTest.java
@@ -0,0 +1,80 @@
+/*
+ * 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/trunk/apache-rat-core/src/test/java/org/apache/rat/annotation/TestLicenseAppender.java b/trunk/apache-rat-core/src/test/java/org/apache/rat/annotation/TestLicenseAppender.java
new file mode 100644
index 0000000..0c58154
--- /dev/null
+++ b/trunk/apache-rat-core/src/test/java/org/apache/rat/annotation/TestLicenseAppender.java
@@ -0,0 +1,700 @@
+/*
+ * 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/trunk/apache-rat-core/src/test/java/org/apache/rat/config/AddLicenseHeadersTest.java b/trunk/apache-rat-core/src/test/java/org/apache/rat/config/AddLicenseHeadersTest.java
new file mode 100644
index 0000000..7b90c18
--- /dev/null
+++ b/trunk/apache-rat-core/src/test/java/org/apache/rat/config/AddLicenseHeadersTest.java
@@ -0,0 +1,31 @@
+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/trunk/apache-rat-core/src/test/java/org/apache/rat/config/ConfigurationUtilTest.java b/trunk/apache-rat-core/src/test/java/org/apache/rat/config/ConfigurationUtilTest.java
new file mode 100644
index 0000000..e628910
--- /dev/null
+++ b/trunk/apache-rat-core/src/test/java/org/apache/rat/config/ConfigurationUtilTest.java
@@ -0,0 +1,44 @@
+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/trunk/apache-rat-core/src/test/java/org/apache/rat/config/ReportFormatTest.java b/trunk/apache-rat-core/src/test/java/org/apache/rat/config/ReportFormatTest.java
new file mode 100644
index 0000000..ccb5612
--- /dev/null
+++ b/trunk/apache-rat-core/src/test/java/org/apache/rat/config/ReportFormatTest.java
@@ -0,0 +1,43 @@
+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/trunk/apache-rat-core/src/test/java/org/apache/rat/config/SourceCodeManagementSystemsTest.java b/trunk/apache-rat-core/src/test/java/org/apache/rat/config/SourceCodeManagementSystemsTest.java
new file mode 100644
index 0000000..1b1edd2
--- /dev/null
+++ b/trunk/apache-rat-core/src/test/java/org/apache/rat/config/SourceCodeManagementSystemsTest.java
@@ -0,0 +1,56 @@
+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/trunk/apache-rat-core/src/test/java/org/apache/rat/document/MockDocument.java b/trunk/apache-rat-core/src/test/java/org/apache/rat/document/MockDocument.java
new file mode 100644
index 0000000..d52ae6b
--- /dev/null
+++ b/trunk/apache-rat-core/src/test/java/org/apache/rat/document/MockDocument.java
@@ -0,0 +1,68 @@
+/*
+ * 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/trunk/apache-rat-core/src/test/java/org/apache/rat/document/MockDocumentAnalyser.java b/trunk/apache-rat-core/src/test/java/org/apache/rat/document/MockDocumentAnalyser.java
new file mode 100644
index 0000000..3d93e82
--- /dev/null
+++ b/trunk/apache-rat-core/src/test/java/org/apache/rat/document/MockDocumentAnalyser.java
@@ -0,0 +1,34 @@
+/*
+ * 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/trunk/apache-rat-core/src/test/java/org/apache/rat/document/MockLocation.java b/trunk/apache-rat-core/src/test/java/org/apache/rat/document/MockLocation.java
new file mode 100644
index 0000000..d639223
--- /dev/null
+++ b/trunk/apache-rat-core/src/test/java/org/apache/rat/document/MockLocation.java
@@ -0,0 +1,72 @@
+/*
+ * 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/trunk/apache-rat-core/src/test/java/org/apache/rat/document/ToNameTransformerTest.java b/trunk/apache-rat-core/src/test/java/org/apache/rat/document/ToNameTransformerTest.java
new file mode 100644
index 0000000..a5aadb4
--- /dev/null
+++ b/trunk/apache-rat-core/src/test/java/org/apache/rat/document/ToNameTransformerTest.java
@@ -0,0 +1,44 @@
+/*
+ * 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/trunk/apache-rat-core/src/test/java/org/apache/rat/document/impl/SingularFileDocumentTest.java b/trunk/apache-rat-core/src/test/java/org/apache/rat/document/impl/SingularFileDocumentTest.java
new file mode 100644
index 0000000..b7ef80c
--- /dev/null
+++ b/trunk/apache-rat-core/src/test/java/org/apache/rat/document/impl/SingularFileDocumentTest.java
@@ -0,0 +1,57 @@
+/*
+ * 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/trunk/apache-rat-core/src/test/java/org/apache/rat/document/impl/guesser/ArchiveGuesserTest.java b/trunk/apache-rat-core/src/test/java/org/apache/rat/document/impl/guesser/ArchiveGuesserTest.java
new file mode 100644
index 0000000..d54e7ed
--- /dev/null
+++ b/trunk/apache-rat-core/src/test/java/org/apache/rat/document/impl/guesser/ArchiveGuesserTest.java
@@ -0,0 +1,66 @@
+/*
+ * 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/trunk/apache-rat-core/src/test/java/org/apache/rat/document/impl/guesser/BinaryGuesserTest.java b/trunk/apache-rat-core/src/test/java/org/apache/rat/document/impl/guesser/BinaryGuesserTest.java
new file mode 100644
index 0000000..a80c3fb
--- /dev/null
+++ b/trunk/apache-rat-core/src/test/java/org/apache/rat/document/impl/guesser/BinaryGuesserTest.java
@@ -0,0 +1,143 @@
+/*
+ * 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/trunk/apache-rat-core/src/test/java/org/apache/rat/document/impl/guesser/GuessUtilsTest.java b/trunk/apache-rat-core/src/test/java/org/apache/rat/document/impl/guesser/GuessUtilsTest.java
new file mode 100644
index 0000000..faf4a39
--- /dev/null
+++ b/trunk/apache-rat-core/src/test/java/org/apache/rat/document/impl/guesser/GuessUtilsTest.java
@@ -0,0 +1,36 @@
+/*
+ * 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/trunk/apache-rat-core/src/test/java/org/apache/rat/document/impl/guesser/NoteGuesserTest.java b/trunk/apache-rat-core/src/test/java/org/apache/rat/document/impl/guesser/NoteGuesserTest.java
new file mode 100644
index 0000000..509782a
--- /dev/null
+++ b/trunk/apache-rat-core/src/test/java/org/apache/rat/document/impl/guesser/NoteGuesserTest.java
@@ -0,0 +1,67 @@
+/*
+ * 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/trunk/apache-rat-core/src/test/java/org/apache/rat/document/impl/util/DocumentAnalyserMultiplexerTest.java b/trunk/apache-rat-core/src/test/java/org/apache/rat/document/impl/util/DocumentAnalyserMultiplexerTest.java
new file mode 100644
index 0000000..c03df15
--- /dev/null
+++ b/trunk/apache-rat-core/src/test/java/org/apache/rat/document/impl/util/DocumentAnalyserMultiplexerTest.java
@@ -0,0 +1,63 @@
+/*
+ * 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/trunk/apache-rat-core/src/test/java/org/apache/rat/header/ArrayCharFilterTest.java b/trunk/apache-rat-core/src/test/java/org/apache/rat/header/ArrayCharFilterTest.java
new file mode 100644
index 0000000..adddf1a
--- /dev/null
+++ b/trunk/apache-rat-core/src/test/java/org/apache/rat/header/ArrayCharFilterTest.java
@@ -0,0 +1,47 @@
+/*
+ * 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/trunk/apache-rat-core/src/test/java/org/apache/rat/header/FilteringSequenceFactoryTest.java b/trunk/apache-rat-core/src/test/java/org/apache/rat/header/FilteringSequenceFactoryTest.java
new file mode 100644
index 0000000..c98db84
--- /dev/null
+++ b/trunk/apache-rat-core/src/test/java/org/apache/rat/header/FilteringSequenceFactoryTest.java
@@ -0,0 +1,81 @@
+/*
+ * 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/trunk/apache-rat-core/src/test/java/org/apache/rat/header/HeaderMatcherTest.java b/trunk/apache-rat-core/src/test/java/org/apache/rat/header/HeaderMatcherTest.java
new file mode 100644
index 0000000..7bfd068
--- /dev/null
+++ b/trunk/apache-rat-core/src/test/java/org/apache/rat/header/HeaderMatcherTest.java
@@ -0,0 +1,99 @@
+/*
+ * 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/trunk/apache-rat-core/src/test/java/org/apache/rat/header/HeaderMatcherWithBeansTest.java b/trunk/apache-rat-core/src/test/java/org/apache/rat/header/HeaderMatcherWithBeansTest.java
new file mode 100644
index 0000000..ce5e9db
--- /dev/null
+++ b/trunk/apache-rat-core/src/test/java/org/apache/rat/header/HeaderMatcherWithBeansTest.java
@@ -0,0 +1,80 @@
+
+/*
+ * 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/trunk/apache-rat-core/src/test/java/org/apache/rat/header/SimpleCharFilter.java b/trunk/apache-rat-core/src/test/java/org/apache/rat/header/SimpleCharFilter.java
new file mode 100644
index 0000000..cf44004
--- /dev/null
+++ b/trunk/apache-rat-core/src/test/java/org/apache/rat/header/SimpleCharFilter.java
@@ -0,0 +1,31 @@
+/*
+ * 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/trunk/apache-rat-core/src/test/java/org/apache/rat/policy/DefaultPolicyTest.java b/trunk/apache-rat-core/src/test/java/org/apache/rat/policy/DefaultPolicyTest.java
new file mode 100644
index 0000000..ae59f66
--- /dev/null
+++ b/trunk/apache-rat-core/src/test/java/org/apache/rat/policy/DefaultPolicyTest.java
@@ -0,0 +1,152 @@
+/*
+ * 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/trunk/apache-rat-core/src/test/java/org/apache/rat/report/claim/impl/xml/MockClaimReporter.java b/trunk/apache-rat-core/src/test/java/org/apache/rat/report/claim/impl/xml/MockClaimReporter.java
new file mode 100644
index 0000000..009e727
--- /dev/null
+++ b/trunk/apache-rat-core/src/test/java/org/apache/rat/report/claim/impl/xml/MockClaimReporter.java
@@ -0,0 +1,24 @@
+/*
+ * 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/trunk/apache-rat-core/src/test/java/org/apache/rat/report/xml/MockXmlWriter.java b/trunk/apache-rat-core/src/test/java/org/apache/rat/report/xml/MockXmlWriter.java
new file mode 100644
index 0000000..ec08988
--- /dev/null
+++ b/trunk/apache-rat-core/src/test/java/org/apache/rat/report/xml/MockXmlWriter.java
@@ -0,0 +1,122 @@
+/*
+ * 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/trunk/apache-rat-core/src/test/java/org/apache/rat/report/xml/XmlReportFactoryTest.java b/trunk/apache-rat-core/src/test/java/org/apache/rat/report/xml/XmlReportFactoryTest.java
new file mode 100644
index 0000000..b02d047
--- /dev/null
+++ b/trunk/apache-rat-core/src/test/java/org/apache/rat/report/xml/XmlReportFactoryTest.java
@@ -0,0 +1,97 @@
+/*
+ * 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/trunk/apache-rat-core/src/test/java/org/apache/rat/report/xml/XmlReportTest.java b/trunk/apache-rat-core/src/test/java/org/apache/rat/report/xml/XmlReportTest.java
new file mode 100644
index 0000000..6debecc
--- /dev/null
+++ b/trunk/apache-rat-core/src/test/java/org/apache/rat/report/xml/XmlReportTest.java
@@ -0,0 +1,196 @@
+/*
+ * 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/trunk/apache-rat-core/src/test/java/org/apache/rat/report/xml/XmlUtils.java b/trunk/apache-rat-core/src/test/java/org/apache/rat/report/xml/XmlUtils.java
new file mode 100644
index 0000000..3137464
--- /dev/null
+++ b/trunk/apache-rat-core/src/test/java/org/apache/rat/report/xml/XmlUtils.java
@@ -0,0 +1,80 @@
+/*
+ * 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/trunk/apache-rat-core/src/test/java/org/apache/rat/report/xml/writer/XmlWriterUtilsTest.java b/trunk/apache-rat-core/src/test/java/org/apache/rat/report/xml/writer/XmlWriterUtilsTest.java
new file mode 100644
index 0000000..69ef2c4
--- /dev/null
+++ b/trunk/apache-rat-core/src/test/java/org/apache/rat/report/xml/writer/XmlWriterUtilsTest.java
@@ -0,0 +1,52 @@
+/*
+ * 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/trunk/apache-rat-core/src/test/java/org/apache/rat/report/xml/writer/impl/base/XmlWriterTest.java b/trunk/apache-rat-core/src/test/java/org/apache/rat/report/xml/writer/impl/base/XmlWriterTest.java
new file mode 100644
index 0000000..6c86118
--- /dev/null
+++ b/trunk/apache-rat-core/src/test/java/org/apache/rat/report/xml/writer/impl/base/XmlWriterTest.java
@@ -0,0 +1,483 @@
+/*
+ * 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/trunk/apache-rat-core/src/test/java/org/apache/rat/test/utils/Resources.java b/trunk/apache-rat-core/src/test/java/org/apache/rat/test/utils/Resources.java
new file mode 100644
index 0000000..52968a5
--- /dev/null
+++ b/trunk/apache-rat-core/src/test/java/org/apache/rat/test/utils/Resources.java
@@ -0,0 +1,130 @@
+/*
+ * 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/trunk/apache-rat-core/src/test/java/org/apache/rat/walker/FileNameComparatorTest.java b/trunk/apache-rat-core/src/test/java/org/apache/rat/walker/FileNameComparatorTest.java
new file mode 100644
index 0000000..5ac932d
--- /dev/null
+++ b/trunk/apache-rat-core/src/test/java/org/apache/rat/walker/FileNameComparatorTest.java
@@ -0,0 +1,38 @@
+/*
+ * 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/trunk/apache-rat-core/src/test/resources/appliedAL20/bad/aal20bad1.txt b/trunk/apache-rat-core/src/test/resources/appliedAL20/bad/aal20bad1.txt
new file mode 100644
index 0000000..0a1af5e
--- /dev/null
+++ b/trunk/apache-rat-core/src/test/resources/appliedAL20/bad/aal20bad1.txt
@@ -0,0 +1,17 @@
+/*
+ * 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/trunk/apache-rat-core/src/test/resources/appliedAL20/bad/aal20bad2.txt b/trunk/apache-rat-core/src/test/resources/appliedAL20/bad/aal20bad2.txt
new file mode 100644
index 0000000..fcc61d2
--- /dev/null
+++ b/trunk/apache-rat-core/src/test/resources/appliedAL20/bad/aal20bad2.txt
@@ -0,0 +1,5553 @@
+<!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/trunk/apache-rat-core/src/test/resources/appliedAL20/good/aal20good1.txt b/trunk/apache-rat-core/src/test/resources/appliedAL20/good/aal20good1.txt
new file mode 100644
index 0000000..0e0f322
--- /dev/null
+++ b/trunk/apache-rat-core/src/test/resources/appliedAL20/good/aal20good1.txt
@@ -0,0 +1,15 @@
+/*
+ * 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/trunk/apache-rat-core/src/test/resources/artifacts/dummy.tar.gz b/trunk/apache-rat-core/src/test/resources/artifacts/dummy.tar.gz
new file mode 100644
index 0000000..3354fb7
--- /dev/null
+++ b/trunk/apache-rat-core/src/test/resources/artifacts/dummy.tar.gz
Binary files differ
diff --git a/trunk/apache-rat-core/src/test/resources/binaries/Image-png.not b/trunk/apache-rat-core/src/test/resources/binaries/Image-png.not
new file mode 100644
index 0000000..10577d4
--- /dev/null
+++ b/trunk/apache-rat-core/src/test/resources/binaries/Image-png.not
Binary files differ
diff --git a/trunk/apache-rat-core/src/test/resources/binaries/UTF16_with_signature.xml b/trunk/apache-rat-core/src/test/resources/binaries/UTF16_with_signature.xml
new file mode 100644
index 0000000..9e9104e
--- /dev/null
+++ b/trunk/apache-rat-core/src/test/resources/binaries/UTF16_with_signature.xml
Binary files differ
diff --git a/trunk/apache-rat-core/src/test/resources/binaries/UTF8_with_signature.xml b/trunk/apache-rat-core/src/test/resources/binaries/UTF8_with_signature.xml
new file mode 100644
index 0000000..b82c0ee
--- /dev/null
+++ b/trunk/apache-rat-core/src/test/resources/binaries/UTF8_with_signature.xml
@@ -0,0 +1,29 @@
+﻿<?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/trunk/apache-rat-core/src/test/resources/elements/ILoggerFactory.java b/trunk/apache-rat-core/src/test/resources/elements/ILoggerFactory.java
new file mode 100644
index 0000000..9b259f9
--- /dev/null
+++ b/trunk/apache-rat-core/src/test/resources/elements/ILoggerFactory.java
@@ -0,0 +1,57 @@
+/**
+ * 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/trunk/apache-rat-core/src/test/resources/elements/Image.png b/trunk/apache-rat-core/src/test/resources/elements/Image.png
new file mode 100644
index 0000000..ed8f507
--- /dev/null
+++ b/trunk/apache-rat-core/src/test/resources/elements/Image.png
Binary files differ
diff --git a/trunk/apache-rat-core/src/test/resources/elements/LICENSE b/trunk/apache-rat-core/src/test/resources/elements/LICENSE
new file mode 100644
index 0000000..7a4a3ea
--- /dev/null
+++ b/trunk/apache-rat-core/src/test/resources/elements/LICENSE
@@ -0,0 +1,202 @@
+
+                                 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/trunk/apache-rat-core/src/test/resources/elements/NOTICE b/trunk/apache-rat-core/src/test/resources/elements/NOTICE
new file mode 100644
index 0000000..967464b
--- /dev/null
+++ b/trunk/apache-rat-core/src/test/resources/elements/NOTICE
@@ -0,0 +1,7 @@
+=========================================================================
+==  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/trunk/apache-rat-core/src/test/resources/elements/Source.java b/trunk/apache-rat-core/src/test/resources/elements/Source.java
new file mode 100644
index 0000000..b14d93e
--- /dev/null
+++ b/trunk/apache-rat-core/src/test/resources/elements/Source.java
@@ -0,0 +1,9 @@
+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/trunk/apache-rat-core/src/test/resources/elements/Text.txt b/trunk/apache-rat-core/src/test/resources/elements/Text.txt
new file mode 100644
index 0000000..2eef8cb
--- /dev/null
+++ b/trunk/apache-rat-core/src/test/resources/elements/Text.txt
@@ -0,0 +1,20 @@
+/*
+ * 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/trunk/apache-rat-core/src/test/resources/elements/Xml.xml b/trunk/apache-rat-core/src/test/resources/elements/Xml.xml
new file mode 100644
index 0000000..76138fc
--- /dev/null
+++ b/trunk/apache-rat-core/src/test/resources/elements/Xml.xml
@@ -0,0 +1,20 @@
+<?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/trunk/apache-rat-core/src/test/resources/elements/buildr.rb b/trunk/apache-rat-core/src/test/resources/elements/buildr.rb
new file mode 100644
index 0000000..00e4e8e
--- /dev/null
+++ b/trunk/apache-rat-core/src/test/resources/elements/buildr.rb
@@ -0,0 +1,44 @@
+# 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/trunk/apache-rat-core/src/test/resources/elements/dummy.jar b/trunk/apache-rat-core/src/test/resources/elements/dummy.jar
new file mode 100644
index 0000000..ccbf9f3
--- /dev/null
+++ b/trunk/apache-rat-core/src/test/resources/elements/dummy.jar
Binary files differ
diff --git a/trunk/apache-rat-core/src/test/resources/elements/sub/Empty.txt b/trunk/apache-rat-core/src/test/resources/elements/sub/Empty.txt
new file mode 100644
index 0000000..8b13789
--- /dev/null
+++ b/trunk/apache-rat-core/src/test/resources/elements/sub/Empty.txt
@@ -0,0 +1 @@
+
diff --git a/trunk/apache-rat-core/src/test/resources/javadocs/ArchiveElement.html b/trunk/apache-rat-core/src/test/resources/javadocs/ArchiveElement.html
new file mode 100644
index 0000000..d86f968
--- /dev/null
+++ b/trunk/apache-rat-core/src/test/resources/javadocs/ArchiveElement.html
@@ -0,0 +1,417 @@
+<!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/trunk/apache-rat-core/src/test/resources/javadocs/index.html b/trunk/apache-rat-core/src/test/resources/javadocs/index.html
new file mode 100644
index 0000000..3cd09f3
--- /dev/null
+++ b/trunk/apache-rat-core/src/test/resources/javadocs/index.html
@@ -0,0 +1,37 @@
+<!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/trunk/apache-rat-core/src/test/resources/javadocs/notjavadoc.html b/trunk/apache-rat-core/src/test/resources/javadocs/notjavadoc.html
new file mode 100644
index 0000000..b67939c
--- /dev/null
+++ b/trunk/apache-rat-core/src/test/resources/javadocs/notjavadoc.html
@@ -0,0 +1,26 @@
+<!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/trunk/apache-rat-core/src/test/resources/oasis/bad/oasisbad1.txt b/trunk/apache-rat-core/src/test/resources/oasis/bad/oasisbad1.txt
new file mode 100644
index 0000000..720dcc3
--- /dev/null
+++ b/trunk/apache-rat-core/src/test/resources/oasis/bad/oasisbad1.txt
@@ -0,0 +1,6 @@
+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/trunk/apache-rat-core/src/test/resources/oasis/bad/oasisbad2.txt b/trunk/apache-rat-core/src/test/resources/oasis/bad/oasisbad2.txt
new file mode 100644
index 0000000..6a4a036
--- /dev/null
+++ b/trunk/apache-rat-core/src/test/resources/oasis/bad/oasisbad2.txt
@@ -0,0 +1,5553 @@
+<!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/trunk/apache-rat-core/src/test/resources/oasis/good/oasisgood1.txt b/trunk/apache-rat-core/src/test/resources/oasis/good/oasisgood1.txt
new file mode 100644
index 0000000..6deff76
--- /dev/null
+++ b/trunk/apache-rat-core/src/test/resources/oasis/good/oasisgood1.txt
@@ -0,0 +1,10 @@
+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/trunk/apache-rat-core/src/test/resources/violations/FilterTest.cs b/trunk/apache-rat-core/src/test/resources/violations/FilterTest.cs
new file mode 100644
index 0000000..6d9e1d5
--- /dev/null
+++ b/trunk/apache-rat-core/src/test/resources/violations/FilterTest.cs
@@ -0,0 +1,90 @@
+﻿#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/trunk/apache-rat-core/src/test/resources/violations/bad.txt b/trunk/apache-rat-core/src/test/resources/violations/bad.txt
new file mode 100644
index 0000000..92c55d5
--- /dev/null
+++ b/trunk/apache-rat-core/src/test/resources/violations/bad.txt
@@ -0,0 +1 @@
+This file has no license.
diff --git a/trunk/apache-rat-plugin/pom.xml b/trunk/apache-rat-plugin/pom.xml
new file mode 100644
index 0000000..2d84b02
--- /dev/null
+++ b/trunk/apache-rat-plugin/pom.xml
@@ -0,0 +1,304 @@
+<?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-SNAPSHOT</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></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/trunk/apache-rat-plugin/src/changes/changes.xml b/trunk/apache-rat-plugin/src/changes/changes.xml
new file mode 100644
index 0000000..b0d266b
--- /dev/null
+++ b/trunk/apache-rat-plugin/src/changes/changes.xml
@@ -0,0 +1,73 @@
+<?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/trunk/apache-rat-plugin/src/it/it1/invoker.properties b/trunk/apache-rat-plugin/src/it/it1/invoker.properties
new file mode 100644
index 0000000..6e8c347
--- /dev/null
+++ b/trunk/apache-rat-plugin/src/it/it1/invoker.properties
@@ -0,0 +1,16 @@
+# 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/trunk/apache-rat-plugin/src/it/it1/pom.xml b/trunk/apache-rat-plugin/src/it/it1/pom.xml
new file mode 100644
index 0000000..58eea9b
--- /dev/null
+++ b/trunk/apache-rat-plugin/src/it/it1/pom.xml
@@ -0,0 +1,55 @@
+<?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/trunk/apache-rat-plugin/src/it/it1/src.apt b/trunk/apache-rat-plugin/src/it/it1/src.apt
new file mode 100644
index 0000000..01ab206
--- /dev/null
+++ b/trunk/apache-rat-plugin/src/it/it1/src.apt
@@ -0,0 +1,12 @@
+~~   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/trunk/apache-rat-plugin/src/it/it1/verify.groovy b/trunk/apache-rat-plugin/src/it/it1/verify.groovy
new file mode 100644
index 0000000..1309c96
--- /dev/null
+++ b/trunk/apache-rat-plugin/src/it/it1/verify.groovy
@@ -0,0 +1,19 @@
+/*
+ * 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/trunk/apache-rat-plugin/src/it/it4_RAT-168/invoker.properties b/trunk/apache-rat-plugin/src/it/it4_RAT-168/invoker.properties
new file mode 100644
index 0000000..6486eb1
--- /dev/null
+++ b/trunk/apache-rat-plugin/src/it/it4_RAT-168/invoker.properties
@@ -0,0 +1,16 @@
+# 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/trunk/apache-rat-plugin/src/it/it4_RAT-168/pom.xml b/trunk/apache-rat-plugin/src/it/it4_RAT-168/pom.xml
new file mode 100644
index 0000000..0a419e3
--- /dev/null
+++ b/trunk/apache-rat-plugin/src/it/it4_RAT-168/pom.xml
@@ -0,0 +1,40 @@
+<?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/trunk/apache-rat-plugin/src/it/it4_RAT-168/verify.groovy b/trunk/apache-rat-plugin/src/it/it4_RAT-168/verify.groovy
new file mode 100644
index 0000000..3786118
--- /dev/null
+++ b/trunk/apache-rat-plugin/src/it/it4_RAT-168/verify.groovy
@@ -0,0 +1,28 @@
+/*
+ * 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/trunk/apache-rat-plugin/src/it/settings.xml b/trunk/apache-rat-plugin/src/it/settings.xml
new file mode 100644
index 0000000..c8f77f0
--- /dev/null
+++ b/trunk/apache-rat-plugin/src/it/settings.xml
@@ -0,0 +1,55 @@
+<?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/trunk/apache-rat-plugin/src/main/filtered-resources/org/apache/rat/mp/rat-report.properties b/trunk/apache-rat-plugin/src/main/filtered-resources/org/apache/rat/mp/rat-report.properties
new file mode 100644
index 0000000..48a3828
--- /dev/null
+++ b/trunk/apache-rat-plugin/src/main/filtered-resources/org/apache/rat/mp/rat-report.properties
@@ -0,0 +1,23 @@
+#
+# 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/trunk/apache-rat-plugin/src/main/java/org/apache/rat/mp/AbstractRatMojo.java b/trunk/apache-rat-plugin/src/main/java/org/apache/rat/mp/AbstractRatMojo.java
new file mode 100644
index 0000000..1a8eef2
--- /dev/null
+++ b/trunk/apache-rat-plugin/src/main/java/org/apache/rat/mp/AbstractRatMojo.java
@@ -0,0 +1,551 @@
+/*
+ * 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/trunk/apache-rat-plugin/src/main/java/org/apache/rat/mp/FilesReportable.java b/trunk/apache-rat-plugin/src/main/java/org/apache/rat/mp/FilesReportable.java
new file mode 100644
index 0000000..ae339ed
--- /dev/null
+++ b/trunk/apache-rat-plugin/src/main/java/org/apache/rat/mp/FilesReportable.java
@@ -0,0 +1,110 @@
+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/trunk/apache-rat-plugin/src/main/java/org/apache/rat/mp/HeaderMatcherSpecification.java b/trunk/apache-rat-plugin/src/main/java/org/apache/rat/mp/HeaderMatcherSpecification.java
new file mode 100644
index 0000000..0c0c306
--- /dev/null
+++ b/trunk/apache-rat-plugin/src/main/java/org/apache/rat/mp/HeaderMatcherSpecification.java
@@ -0,0 +1,53 @@
+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/trunk/apache-rat-plugin/src/main/java/org/apache/rat/mp/LicenseFamilySpecification.java b/trunk/apache-rat-plugin/src/main/java/org/apache/rat/mp/LicenseFamilySpecification.java
new file mode 100644
index 0000000..5bd4941
--- /dev/null
+++ b/trunk/apache-rat-plugin/src/main/java/org/apache/rat/mp/LicenseFamilySpecification.java
@@ -0,0 +1,53 @@
+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/trunk/apache-rat-plugin/src/main/java/org/apache/rat/mp/RatCheckException.java b/trunk/apache-rat-plugin/src/main/java/org/apache/rat/mp/RatCheckException.java
new file mode 100644
index 0000000..0016953
--- /dev/null
+++ b/trunk/apache-rat-plugin/src/main/java/org/apache/rat/mp/RatCheckException.java
@@ -0,0 +1,32 @@
+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/trunk/apache-rat-plugin/src/main/java/org/apache/rat/mp/RatCheckMojo.java b/trunk/apache-rat-plugin/src/main/java/org/apache/rat/mp/RatCheckMojo.java
new file mode 100644
index 0000000..fef94fa
--- /dev/null
+++ b/trunk/apache-rat-plugin/src/main/java/org/apache/rat/mp/RatCheckMojo.java
@@ -0,0 +1,210 @@
+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/trunk/apache-rat-plugin/src/main/java/org/apache/rat/mp/RatReportMojo.java b/trunk/apache-rat-plugin/src/main/java/org/apache/rat/mp/RatReportMojo.java
new file mode 100644
index 0000000..8d1eae6
--- /dev/null
+++ b/trunk/apache-rat-plugin/src/main/java/org/apache/rat/mp/RatReportMojo.java
@@ -0,0 +1,313 @@
+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/trunk/apache-rat-plugin/src/main/java/org/apache/rat/mp/util/ConfigurationHelper.java b/trunk/apache-rat-plugin/src/main/java/org/apache/rat/mp/util/ConfigurationHelper.java
new file mode 100644
index 0000000..b1bb664
--- /dev/null
+++ b/trunk/apache-rat-plugin/src/main/java/org/apache/rat/mp/util/ConfigurationHelper.java
@@ -0,0 +1,61 @@
+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/trunk/apache-rat-plugin/src/main/java/org/apache/rat/mp/util/ExclusionHelper.java b/trunk/apache-rat-plugin/src/main/java/org/apache/rat/mp/util/ExclusionHelper.java
new file mode 100644
index 0000000..a1f7b6b
--- /dev/null
+++ b/trunk/apache-rat-plugin/src/main/java/org/apache/rat/mp/util/ExclusionHelper.java
@@ -0,0 +1,118 @@
+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/trunk/apache-rat-plugin/src/main/java/org/apache/rat/mp/util/ScmIgnoreParser.java b/trunk/apache-rat-plugin/src/main/java/org/apache/rat/mp/util/ScmIgnoreParser.java
new file mode 100644
index 0000000..27627a1
--- /dev/null
+++ b/trunk/apache-rat-plugin/src/main/java/org/apache/rat/mp/util/ScmIgnoreParser.java
@@ -0,0 +1,118 @@
+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/trunk/apache-rat-plugin/src/main/resources/org/apache/rat/mp/package.html b/trunk/apache-rat-plugin/src/main/resources/org/apache/rat/mp/package.html
new file mode 100644
index 0000000..f80d317
--- /dev/null
+++ b/trunk/apache-rat-plugin/src/main/resources/org/apache/rat/mp/package.html
@@ -0,0 +1,29 @@
+<!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/trunk/apache-rat-plugin/src/site/apt/examples/basic.apt.vm b/trunk/apache-rat-plugin/src/site/apt/examples/basic.apt.vm
new file mode 100644
index 0000000..8a48288
--- /dev/null
+++ b/trunk/apache-rat-plugin/src/site/apt/examples/basic.apt.vm
@@ -0,0 +1,44 @@
+~~   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/trunk/apache-rat-plugin/src/site/apt/examples/custom-license.apt.vm b/trunk/apache-rat-plugin/src/site/apt/examples/custom-license.apt.vm
new file mode 100644
index 0000000..351d13f
--- /dev/null
+++ b/trunk/apache-rat-plugin/src/site/apt/examples/custom-license.apt.vm
@@ -0,0 +1,133 @@
+~~   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/trunk/apache-rat-plugin/src/site/apt/examples/site.apt.vm b/trunk/apache-rat-plugin/src/site/apt/examples/site.apt.vm
new file mode 100644
index 0000000..57f8fdd
--- /dev/null
+++ b/trunk/apache-rat-plugin/src/site/apt/examples/site.apt.vm
@@ -0,0 +1,44 @@
+~~   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/trunk/apache-rat-plugin/src/site/apt/examples/verify.apt.vm b/trunk/apache-rat-plugin/src/site/apt/examples/verify.apt.vm
new file mode 100644
index 0000000..8938cad
--- /dev/null
+++ b/trunk/apache-rat-plugin/src/site/apt/examples/verify.apt.vm
@@ -0,0 +1,86 @@
+~~   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/trunk/apache-rat-plugin/src/site/apt/index.apt b/trunk/apache-rat-plugin/src/site/apt/index.apt
new file mode 100644
index 0000000..d2f9058
--- /dev/null
+++ b/trunk/apache-rat-plugin/src/site/apt/index.apt
@@ -0,0 +1,55 @@
+~~   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/trunk/apache-rat-plugin/src/site/apt/usage.apt.vm b/trunk/apache-rat-plugin/src/site/apt/usage.apt.vm
new file mode 100644
index 0000000..710f9bb
--- /dev/null
+++ b/trunk/apache-rat-plugin/src/site/apt/usage.apt.vm
@@ -0,0 +1,81 @@
+~~   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/trunk/apache-rat-plugin/src/site/fml/faq.fml b/trunk/apache-rat-plugin/src/site/fml/faq.fml
new file mode 100644
index 0000000..f46cdfb
--- /dev/null
+++ b/trunk/apache-rat-plugin/src/site/fml/faq.fml
@@ -0,0 +1,77 @@
+<?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/trunk/apache-rat-plugin/src/site/resources/css/site.css b/trunk/apache-rat-plugin/src/site/resources/css/site.css
new file mode 100644
index 0000000..3683f87
--- /dev/null
+++ b/trunk/apache-rat-plugin/src/site/resources/css/site.css
@@ -0,0 +1,27 @@
+/*
+  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/trunk/apache-rat-plugin/src/site/site.xml b/trunk/apache-rat-plugin/src/site/site.xml
new file mode 100644
index 0000000..68a881f
--- /dev/null
+++ b/trunk/apache-rat-plugin/src/site/site.xml
@@ -0,0 +1,46 @@
+<?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/trunk/apache-rat-plugin/src/test/java/org/apache/rat/mp/RatCheckMojoTest.java b/trunk/apache-rat-plugin/src/test/java/org/apache/rat/mp/RatCheckMojoTest.java
new file mode 100644
index 0000000..1ed062e
--- /dev/null
+++ b/trunk/apache-rat-plugin/src/test/java/org/apache/rat/mp/RatCheckMojoTest.java
@@ -0,0 +1,205 @@
+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/trunk/apache-rat-plugin/src/test/java/org/apache/rat/mp/RatTestHelpers.java b/trunk/apache-rat-plugin/src/test/java/org/apache/rat/mp/RatTestHelpers.java
new file mode 100644
index 0000000..8e9e846
--- /dev/null
+++ b/trunk/apache-rat-plugin/src/test/java/org/apache/rat/mp/RatTestHelpers.java
@@ -0,0 +1,275 @@
+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/trunk/apache-rat-plugin/src/test/java/org/apache/rat/mp/util/ExclusionHelperTest.java b/trunk/apache-rat-plugin/src/test/java/org/apache/rat/mp/util/ExclusionHelperTest.java
new file mode 100644
index 0000000..696ea62
--- /dev/null
+++ b/trunk/apache-rat-plugin/src/test/java/org/apache/rat/mp/util/ExclusionHelperTest.java
@@ -0,0 +1,108 @@
+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/trunk/apache-rat-plugin/src/test/java/org/apache/rat/mp/util/ScmIgnoreParserTest.java b/trunk/apache-rat-plugin/src/test/java/org/apache/rat/mp/util/ScmIgnoreParserTest.java
new file mode 100644
index 0000000..5b24c47
--- /dev/null
+++ b/trunk/apache-rat-plugin/src/test/java/org/apache/rat/mp/util/ScmIgnoreParserTest.java
@@ -0,0 +1,108 @@
+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/trunk/apache-rat-plugin/src/test/resources/unit/it1/.bzrignore b/trunk/apache-rat-plugin/src/test/resources/unit/it1/.bzrignore
new file mode 100644
index 0000000..f59acc0
--- /dev/null
+++ b/trunk/apache-rat-plugin/src/test/resources/unit/it1/.bzrignore
@@ -0,0 +1,5 @@
+## RAT-171: Add rubbish and ensure that the plugin behaves properly
+DoesNotExistAtALL/**
+*\IllegalStuffNotExisting
+Lets-See*+?!OrWhat
+\\nDoesThatWorkAsWell\/
diff --git a/trunk/apache-rat-plugin/src/test/resources/unit/it1/pom.xml b/trunk/apache-rat-plugin/src/test/resources/unit/it1/pom.xml
new file mode 100644
index 0000000..81e7955
--- /dev/null
+++ b/trunk/apache-rat-plugin/src/test/resources/unit/it1/pom.xml
@@ -0,0 +1,36 @@
+<?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/trunk/apache-rat-plugin/src/test/resources/unit/it2/pom.xml b/trunk/apache-rat-plugin/src/test/resources/unit/it2/pom.xml
new file mode 100644
index 0000000..82eac23
--- /dev/null
+++ b/trunk/apache-rat-plugin/src/test/resources/unit/it2/pom.xml
@@ -0,0 +1,36 @@
+<?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/trunk/apache-rat-plugin/src/test/resources/unit/it2/src.txt b/trunk/apache-rat-plugin/src/test/resources/unit/it2/src.txt
new file mode 100644
index 0000000..72d9dff
--- /dev/null
+++ b/trunk/apache-rat-plugin/src/test/resources/unit/it2/src.txt
@@ -0,0 +1,2 @@
+This is a text file, which intentionally has no Apache License Header.
+The Rat plugin should detect it.
diff --git a/trunk/apache-rat-plugin/src/test/resources/unit/it3/pom.xml b/trunk/apache-rat-plugin/src/test/resources/unit/it3/pom.xml
new file mode 100644
index 0000000..fff9f7c
--- /dev/null
+++ b/trunk/apache-rat-plugin/src/test/resources/unit/it3/pom.xml
@@ -0,0 +1,36 @@
+<?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/trunk/apache-rat-plugin/src/test/resources/unit/it3/src.apt b/trunk/apache-rat-plugin/src/test/resources/unit/it3/src.apt
new file mode 100644
index 0000000..d4236b7
--- /dev/null
+++ b/trunk/apache-rat-plugin/src/test/resources/unit/it3/src.apt
@@ -0,0 +1,8 @@
+    --------------
+    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/trunk/apache-rat-tasks/pom.xml b/trunk/apache-rat-tasks/pom.xml
new file mode 100644
index 0000000..23af7b7
--- /dev/null
+++ b/trunk/apache-rat-tasks/pom.xml
@@ -0,0 +1,172 @@
+<?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-SNAPSHOT</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/trunk/apache-rat-tasks/run-antunit.xml b/trunk/apache-rat-tasks/run-antunit.xml
new file mode 100644
index 0000000..6115bea
--- /dev/null
+++ b/trunk/apache-rat-tasks/run-antunit.xml
@@ -0,0 +1,65 @@
+<?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/trunk/apache-rat-tasks/src/main/java/org/apache/rat/anttasks/FullTextLicenseMatcher.java b/trunk/apache-rat-tasks/src/main/java/org/apache/rat/anttasks/FullTextLicenseMatcher.java
new file mode 100644
index 0000000..03c9d74
--- /dev/null
+++ b/trunk/apache-rat-tasks/src/main/java/org/apache/rat/anttasks/FullTextLicenseMatcher.java
@@ -0,0 +1,71 @@
+ /*
+ * 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/trunk/apache-rat-tasks/src/main/java/org/apache/rat/anttasks/Report.java b/trunk/apache-rat-tasks/src/main/java/org/apache/rat/anttasks/Report.java
new file mode 100644
index 0000000..dc9f5b0
--- /dev/null
+++ b/trunk/apache-rat-tasks/src/main/java/org/apache/rat/anttasks/Report.java
@@ -0,0 +1,359 @@
+ /*
+ * 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/trunk/apache-rat-tasks/src/main/java/org/apache/rat/anttasks/ResourceCollectionContainer.java b/trunk/apache-rat-tasks/src/main/java/org/apache/rat/anttasks/ResourceCollectionContainer.java
new file mode 100644
index 0000000..ff882c1
--- /dev/null
+++ b/trunk/apache-rat-tasks/src/main/java/org/apache/rat/anttasks/ResourceCollectionContainer.java
@@ -0,0 +1,105 @@
+/*
+ * 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/trunk/apache-rat-tasks/src/main/java/org/apache/rat/anttasks/SubstringLicenseMatcher.java b/trunk/apache-rat-tasks/src/main/java/org/apache/rat/anttasks/SubstringLicenseMatcher.java
new file mode 100644
index 0000000..f2469eb
--- /dev/null
+++ b/trunk/apache-rat-tasks/src/main/java/org/apache/rat/anttasks/SubstringLicenseMatcher.java
@@ -0,0 +1,72 @@
+ /*
+ * 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/trunk/apache-rat-tasks/src/main/resources/org/apache/rat/anttasks/antlib.xml b/trunk/apache-rat-tasks/src/main/resources/org/apache/rat/anttasks/antlib.xml
new file mode 100644
index 0000000..80d65b0
--- /dev/null
+++ b/trunk/apache-rat-tasks/src/main/resources/org/apache/rat/anttasks/antlib.xml
@@ -0,0 +1,79 @@
+<?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/trunk/apache-rat-tasks/src/site/apt/examples/basic.apt.vm b/trunk/apache-rat-tasks/src/site/apt/examples/basic.apt.vm
new file mode 100644
index 0000000..c9a8546
--- /dev/null
+++ b/trunk/apache-rat-tasks/src/site/apt/examples/basic.apt.vm
@@ -0,0 +1,134 @@
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+~~   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/trunk/apache-rat-tasks/src/site/apt/examples/custom.apt b/trunk/apache-rat-tasks/src/site/apt/examples/custom.apt
new file mode 100644
index 0000000..acf5e11
--- /dev/null
+++ b/trunk/apache-rat-tasks/src/site/apt/examples/custom.apt
@@ -0,0 +1,156 @@
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+~~   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/trunk/apache-rat-tasks/src/site/apt/index.apt b/trunk/apache-rat-tasks/src/site/apt/index.apt
new file mode 100644
index 0000000..0d1ce30
--- /dev/null
+++ b/trunk/apache-rat-tasks/src/site/apt/index.apt
@@ -0,0 +1,100 @@
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+~~   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/trunk/apache-rat-tasks/src/site/apt/report.apt b/trunk/apache-rat-tasks/src/site/apt/report.apt
new file mode 100644
index 0000000..0086a4b
--- /dev/null
+++ b/trunk/apache-rat-tasks/src/site/apt/report.apt
@@ -0,0 +1,136 @@
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+~~   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/trunk/apache-rat-tasks/src/site/apt/types.apt b/trunk/apache-rat-tasks/src/site/apt/types.apt
new file mode 100644
index 0000000..54d0bfe
--- /dev/null
+++ b/trunk/apache-rat-tasks/src/site/apt/types.apt
@@ -0,0 +1,269 @@
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+~~   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/trunk/apache-rat-tasks/src/site/resources/css/site.css b/trunk/apache-rat-tasks/src/site/resources/css/site.css
new file mode 100644
index 0000000..3683f87
--- /dev/null
+++ b/trunk/apache-rat-tasks/src/site/resources/css/site.css
@@ -0,0 +1,27 @@
+/*
+  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/trunk/apache-rat-tasks/src/site/site.xml b/trunk/apache-rat-tasks/src/site/site.xml
new file mode 100644
index 0000000..1d90f0b
--- /dev/null
+++ b/trunk/apache-rat-tasks/src/site/site.xml
@@ -0,0 +1,41 @@
+<?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/trunk/apache-rat-tasks/src/test/java/org/apache/rat/anttasks/AbstractRatAntTaskTest.java b/trunk/apache-rat-tasks/src/test/java/org/apache/rat/anttasks/AbstractRatAntTaskTest.java
new file mode 100644
index 0000000..d40b271
--- /dev/null
+++ b/trunk/apache-rat-tasks/src/test/java/org/apache/rat/anttasks/AbstractRatAntTaskTest.java
@@ -0,0 +1,87 @@
+/*
+ * 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/trunk/apache-rat-tasks/src/test/java/org/apache/rat/anttasks/ReportTest.java b/trunk/apache-rat-tasks/src/test/java/org/apache/rat/anttasks/ReportTest.java
new file mode 100644
index 0000000..fb9518b
--- /dev/null
+++ b/trunk/apache-rat-tasks/src/test/java/org/apache/rat/anttasks/ReportTest.java
@@ -0,0 +1,125 @@
+/*
+ * 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/trunk/apache-rat-tasks/src/test/java/org/example/LicenseFamily.java b/trunk/apache-rat-tasks/src/test/java/org/example/LicenseFamily.java
new file mode 100644
index 0000000..ef8527d
--- /dev/null
+++ b/trunk/apache-rat-tasks/src/test/java/org/example/LicenseFamily.java
@@ -0,0 +1,26 @@
+/*
+ * 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/trunk/apache-rat-tasks/src/test/java/org/example/Matcher.java b/trunk/apache-rat-tasks/src/test/java/org/example/Matcher.java
new file mode 100644
index 0000000..bead7a7
--- /dev/null
+++ b/trunk/apache-rat-tasks/src/test/java/org/example/Matcher.java
@@ -0,0 +1,37 @@
+/*
+ * 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/trunk/apache-rat-tasks/src/test/resources/antunit/build.xml b/trunk/apache-rat-tasks/src/test/resources/antunit/build.xml
new file mode 100644
index 0000000..a11ccbc
--- /dev/null
+++ b/trunk/apache-rat-tasks/src/test/resources/antunit/build.xml
@@ -0,0 +1,45 @@
+<?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/trunk/apache-rat-tasks/src/test/resources/antunit/index.apt b/trunk/apache-rat-tasks/src/test/resources/antunit/index.apt
new file mode 100644
index 0000000..d4236b7
--- /dev/null
+++ b/trunk/apache-rat-tasks/src/test/resources/antunit/index.apt
@@ -0,0 +1,8 @@
+    --------------
+    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/trunk/apache-rat-tasks/src/test/resources/antunit/report-bad-configurations.xml b/trunk/apache-rat-tasks/src/test/resources/antunit/report-bad-configurations.xml
new file mode 100644
index 0000000..73f4e1c
--- /dev/null
+++ b/trunk/apache-rat-tasks/src/test/resources/antunit/report-bad-configurations.xml
@@ -0,0 +1,162 @@
+<?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/trunk/apache-rat-tasks/src/test/resources/antunit/report-junit.xml b/trunk/apache-rat-tasks/src/test/resources/antunit/report-junit.xml
new file mode 100644
index 0000000..c43ebd0
--- /dev/null
+++ b/trunk/apache-rat-tasks/src/test/resources/antunit/report-junit.xml
@@ -0,0 +1,96 @@
+<?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/trunk/apache-rat-tasks/src/test/resources/antunit/report-normal-operation.xml b/trunk/apache-rat-tasks/src/test/resources/antunit/report-normal-operation.xml
new file mode 100644
index 0000000..94751d5
--- /dev/null
+++ b/trunk/apache-rat-tasks/src/test/resources/antunit/report-normal-operation.xml
@@ -0,0 +1,342 @@
+<?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/trunk/apache-rat/README-ANT.txt b/trunk/apache-rat/README-ANT.txt
new file mode 100644
index 0000000..f47bd97
--- /dev/null
+++ b/trunk/apache-rat/README-ANT.txt
@@ -0,0 +1,63 @@
+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/trunk/apache-rat/README-CLI.txt b/trunk/apache-rat/README-CLI.txt
new file mode 100644
index 0000000..0e629a8
--- /dev/null
+++ b/trunk/apache-rat/README-CLI.txt
@@ -0,0 +1,81 @@
+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/trunk/apache-rat/README.txt b/trunk/apache-rat/README.txt
new file mode 100644
index 0000000..66cae99
--- /dev/null
+++ b/trunk/apache-rat/README.txt
@@ -0,0 +1,26 @@
+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/trunk/apache-rat/pom.xml b/trunk/apache-rat/pom.xml
new file mode 100644
index 0000000..50fe808
--- /dev/null
+++ b/trunk/apache-rat/pom.xml
@@ -0,0 +1,191 @@
+<?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-SNAPSHOT</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/trunk/apache-rat/src/main/assembly/bin.xml b/trunk/apache-rat/src/main/assembly/bin.xml
new file mode 100644
index 0000000..21c9fa9
--- /dev/null
+++ b/trunk/apache-rat/src/main/assembly/bin.xml
@@ -0,0 +1,57 @@
+<?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/trunk/apache-rat/src/main/assembly/src.xml b/trunk/apache-rat/src/main/assembly/src.xml
new file mode 100644
index 0000000..2b9d83f
--- /dev/null
+++ b/trunk/apache-rat/src/main/assembly/src.xml
@@ -0,0 +1,45 @@
+<?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>.*/**</exclude>
+        <exclude>**.bak</exclude>
+        <exclude>*.jar</exclude>
+        <exclude>**/.*</exclude>
+      </excludes>
+      <useDefaultExcludes>true</useDefaultExcludes>
+    </fileSet>
+  </fileSets>
+</assembly>
diff --git a/trunk/apache-rat/src/site/apt/index.apt.vm b/trunk/apache-rat/src/site/apt/index.apt.vm
new file mode 100644
index 0000000..03226d0
--- /dev/null
+++ b/trunk/apache-rat/src/site/apt/index.apt.vm
@@ -0,0 +1,113 @@
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+~~   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/trunk/apache-rat/src/site/resources/css/site.css b/trunk/apache-rat/src/site/resources/css/site.css
new file mode 100644
index 0000000..3683f87
--- /dev/null
+++ b/trunk/apache-rat/src/site/resources/css/site.css
@@ -0,0 +1,27 @@
+/*
+  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/trunk/apache-rat/src/site/site.xml b/trunk/apache-rat/src/site/site.xml
new file mode 100644
index 0000000..e1fd449
--- /dev/null
+++ b/trunk/apache-rat/src/site/site.xml
@@ -0,0 +1,32 @@
+<?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/trunk/pom.xml b/trunk/pom.xml
new file mode 100644
index 0000000..03c7402
--- /dev/null
+++ b/trunk/pom.xml
@@ -0,0 +1,723 @@
+<?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-SNAPSHOT</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>
+    <previousRatVersion>0.11</previousRatVersion>
+    <!--
+    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.1</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.5</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.7.1</version>
+        <scope>provided</scope>
+      </dependency>
+      <dependency>
+        <groupId>org.apache.ant</groupId>
+        <artifactId>ant-antunit</artifactId>
+        <version>1.1</version>
+        <scope>test</scope>
+      </dependency>
+      <dependency>
+        <groupId>org.apache.ant</groupId>
+        <artifactId>ant-testutil</artifactId>
+        <version>1.7.1</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>
+        <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>
+      </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>${previousRatVersion}</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.7.1</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-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.rat</groupId>
+          <artifactId>apache-rat-plugin</artifactId>
+          <!-- Must use previous version, to avoid a cyclic reference -->
+          <version>${previousRatVersion}</version>
+          <dependencies><!-- TODO remove exclusion when upgrading to new ASF parent or doxia release (RAT-158) -->
+            <dependency>
+              <groupId>org.apache.maven.doxia</groupId>
+              <artifactId>doxia-core</artifactId>
+              <version>1.2</version>
+              <exclusions>
+                <exclusion>
+                  <groupId>xerces</groupId>
+                  <artifactId>xercesImpl</artifactId>
+                </exclusion>
+              </exclusions>
+            </dependency>
+          </dependencies>
+          <configuration>
+            <excludes>
+              <!-- This file only describes how to build the project and it has no license header -->
+              <exclude>BUILD.txt</exclude>
+              <!-- rat:check does not seem to use exclusions from modules -->
+              <exclude>apache-rat/README*.txt</exclude>
+              <exclude>apache-rat-core/src/test/resources/**</exclude>
+              <exclude>apache-rat*/target/**</exclude>
+              <exclude>apache-rat-plugin/src/test/resources/**</exclude>
+              <exclude>apache-rat-plugin/src/it/**</exclude>
+              <exclude>apache-rat-tasks/src/test/resources/**</exclude>
+            </excludes>
+          </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>
+          </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></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.apache.rat</groupId>
+        <artifactId>apache-rat-plugin</artifactId>
+        <executions>
+          <execution>
+            <goals>
+              <goal>check</goal>
+            </goals>
+          </execution>
+        </executions>
+      </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/trunk</connection>
+    <developerConnection>scm:svn:https://svn.apache.org/repos/asf/creadur/rat/trunk</developerConnection>
+    <url>http://svn.apache.org/repos/asf/creadur/rat/trunk</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/trunk/src/changes/changes.xml b/trunk/src/changes/changes.xml
new file mode 100644
index 0000000..e83084f
--- /dev/null
+++ b/trunk/src/changes/changes.xml
@@ -0,0 +1,328 @@
+<?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-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/trunk/src/changes/release-notes.vm b/trunk/src/changes/release-notes.vm
new file mode 100644
index 0000000..8298b71
--- /dev/null
+++ b/trunk/src/changes/release-notes.vm
@@ -0,0 +1,122 @@
+## 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/trunk/src/python/recursive-rat.py b/trunk/src/python/recursive-rat.py
new file mode 100644
index 0000000..8a866aa
--- /dev/null
+++ b/trunk/src/python/recursive-rat.py
@@ -0,0 +1,248 @@
+#
+# 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/trunk/src/site/apt/index.apt.vm b/trunk/src/site/apt/index.apt.vm
new file mode 100644
index 0000000..3342ae7
--- /dev/null
+++ b/trunk/src/site/apt/index.apt.vm
@@ -0,0 +1,150 @@
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+~~   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
+
+   * {{{http://ant.apache.org/} Apache Ant}},
+
+   * {{{http://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 {{{http://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
+  {{{http://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 {{{http://ant.apache.org/} Apache Ant 1.7}} or later
+
+ Read more {{{./apache-rat-tasks/index.html} here}}.
+
+** Apache Maven
+
+ Use the plugin for {{{http://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}}.
+
+** Gradle
+
+ Use the plugin for {{{https://gradle.org}Gradle}}.
+
++------------------------------------------+
+plugins {
+  id "org.apache.rat" version "${version}"
+}
++------------------------------------------+
+
+ Read more {{{./apache-rat-gradle/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 {{{http://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/trunk/src/site/apt/site-publish.apt b/trunk/src/site/apt/site-publish.apt
new file mode 100644
index 0000000..244888a
--- /dev/null
+++ b/trunk/src/site/apt/site-publish.apt
@@ -0,0 +1,128 @@
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+~~   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 {{{http://creadur.apache.org}Apache Creadur}} project, the community
+ that develops {{{http://creadur.apache.org/rat}Apache Rat}},
+ hosts its website on the
+ {{{http://www.apache.org/dev/cms.html}ASF Content Management System}}.
+ {{{http://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.
+ {{{http://ci.apache.org/buildbot.html}Buildbot}} will automatically
+ notice the commit and create a staging site to look at
+ {{{http://ci.apache.org/projects/rat} http://ci.apache.org/projects/rat/}}
+ 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
+ {{{http://ci.apache.org/}<<<http://ci.apache.org/>>>}}. To
+ follow its progress, open the
+ {{{http://ci.apache.org/builders/creadur-site-staging}creadur
+ site builder}}.
+
+ When this builds has completed successfully, review the content
+ staged on
+ {{{http://creadur.staging.apache.org/rat/index.html}
+ <<<http://creadur.staging.apache.org/rat/index.html>>>}}. If
+ this looks fine then publish the staged content using the
+ {{{http://www.apache.org/dev/cms.html}ASF Content Management System}}.
+
+ Propagating the content to {{{http://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/trunk/src/site/resources/css/site.css b/trunk/src/site/resources/css/site.css
new file mode 100644
index 0000000..3683f87
--- /dev/null
+++ b/trunk/src/site/resources/css/site.css
@@ -0,0 +1,27 @@
+/*
+  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/trunk/src/site/resources/download_rat.cgi b/trunk/src/site/resources/download_rat.cgi
new file mode 100755
index 0000000..4324f76
--- /dev/null
+++ b/trunk/src/site/resources/download_rat.cgi
@@ -0,0 +1,22 @@
+#!/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/trunk/src/site/site.xml b/trunk/src/site/site.xml
new file mode 100644
index 0000000..6a6f689
--- /dev/null
+++ b/trunk/src/site/site.xml
@@ -0,0 +1,112 @@
+<?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;">
+  <bannerRight>
+    <title>The Apache Software Foundation</title>
+    <name>The Apache Software Foundation</name>
+    <src>http://www.apache.org/images/asf_logo_wide.jpg</src>
+    <href>http://www.apache.org/</href>
+  </bannerRight>
+  <poweredBy>
+      <logo name="Maven"
+            href="http://maven.apache.org/"
+            img="http://maven.apache.org/images/logos/maven-feather.png"/>
+
+  </poweredBy>
+
+  <body>
+    <head>
+      <link
+            href='http://fonts.googleapis.com/css?family=Mate+SC'
+            rel='stylesheet'
+            type='text/css'/>
+    </head>
+
+    <breadcrumbs>
+      <item name="Apache" href="http://www.apache.org/"/>
+      <item name="Creadur" href="http://creadur.apache.org/"/>
+      <item name="Rat" href="http://creadur.apache.org/rat/"/>
+    </breadcrumbs>
+
+    <menu name="Apache Rat&trade;" 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"/>
+      <item name="With Gradle" href="apache-rat-gradle/index.html"/>
+    </menu>
+
+    <menu name="Apache Creadur&trade;" inherit="bottom">
+      <item name='Creadur Project Home' href="http://creadur.apache.org"/>
+      <item name='Apache Tentacles' href="http://creadur.apache.org/tentacles"/>
+      <item name='Apache Whisker' href="http://creadur.apache.org/whisker"/>
+      <item name='Security' href='http://www.apache.org/security/'/>
+      <item name='License' href='http://www.apache.org/licenses/'/>
+      <item name='Sponsorship' href='http://www.apache.org/foundation/sponsorship.html'/>
+      <item name='Thanks' href='http://www.apache.org/foundation/thanks.html'/>
+    </menu>
+
+    <menu name="The Apache Software Foundation" inherit="bottom">
+        <item name='About the Foundation'
+            href="http://www.apache.org/foundation"/>
+        <item name='The projects'
+            href="http://projects.apache.org"/>
+        <item name='The people'
+            href="http://people.apache.org"/>
+        <item name='How we work'
+            href='http://www.apache.org/foundation/how-it-works.html'/>
+        <item name='Our history'
+            href='http://www.apache.org/foundation/how-it-works.html#history'/>
+        <item name='News'
+            href='http://blogs.apache.org/foundation/'/>
+    </menu>
+
+    <menu name="Contribute" inherit="bottom">
+      <item name="Get Involved" href='http://www.apache.org/foundation/getinvolved.html'/>
+    </menu>
+
+    <menu name="Committer Info" inherit="bottom">
+      <item name="Publish this site" href="site-publish.html"/>
+      <item name="Committers' FAQ" href='http://www.apache.org/dev/committers.html'/>
+      <item name='New Committers Guide' href='http://www.apache.org/dev/new-committers-guide.html'/>
+      <item name='Plant Apache' href='http://planet.apache.org/committers/'/>
+      <item name='Community' href='http://community.apache.org/'/>
+      <item name='Legal' href='http://www.apache.org/legal/'/>
+      <item name='Branding' href='http://www.apache.org/foundation/marks/'/>
+      <item name='Media Relations' href='http://www.apache.org/press/'/>
+    </menu>
+
+    <menu ref="modules"/>
+    <menu ref="reports"/>
+
+    <footer>Copyright &#169; 2014 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/trunk/src/site/xdoc/download_rat.xml.vm b/trunk/src/site/xdoc/download_rat.xml.vm
new file mode 100644
index 0000000..4b2903a
--- /dev/null
+++ b/trunk/src/site/xdoc/download_rat.xml.vm
@@ -0,0 +1,129 @@
+<?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="http://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="http://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="http://www.apache.org/dist/creadur/apache-rat-${project.version}/apache-rat-${project.version}-bin.tar.bz2.md5">md5</a></td>
+              <td><a href="http://www.apache.org/dist/creadur/apache-rat-${project.version}/apache-rat-${project.version}-bin.tar.bz2.sha1">sha1</a></td>
+              <td><a href="http://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="http://www.apache.org/dist/creadur/apache-rat-${project.version}/apache-rat-${project.version}-bin.tar.gz.md5">md5</a></td>
+              <td><a href="http://www.apache.org/dist/creadur/apache-rat-${project.version}/apache-rat-${project.version}-bin.tar.gz.sha1">sha1</a></td>
+              <td><a href="http://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="http://www.apache.org/dist/creadur/apache-rat-${project.version}/apache-rat-${project.version}-bin.zip.md5">md5</a></td>
+              <td><a href="http://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="http://www.apache.org/dist/creadur/apache-rat-${project.version}/apache-rat-${project.version}-src.tar.bz2.md5">md5</a></td>
+              <td><a href="http://www.apache.org/dist/creadur/apache-rat-${project.version}/apache-rat-${project.version}-src.tar.bz2.sha1">sha1</a></td>
+              <td><a href="http://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="http://www.apache.org/dist/creadur/apache-rat-${project.version}/apache-rat-${project.version}-src.tar.gz.md5">md5</a></td>
+              <td><a href="http://www.apache.org/dist/creadur/apache-rat-${project.version}/apache-rat-${project.version}-src.tar.gz.sha1">sha1</a></td>
+              <td><a href="http://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="http://www.apache.org/dist/creadur/apache-rat-${project.version}/apache-rat-${project.version}-src.zip.md5">md5</a></td>
+              <td><a href="http://www.apache.org/dist/creadur/apache-rat-${project.version}/apache-rat-${project.version}-src.zip.sha1">sha1</a></td>
+              <td><a href="http://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="http://archive.apache.org/dist/creadur/">archives...</a></li>
+          <li><a href="http://archive.apache.org/dist/incubator/rat/">Incubator archives...</a></li>
+        </ul>
+    </section>
+  </body>
+</document>
