Orbit Commons Collections per https://dev.eclipse.org/ipzilla/show_bug.cgi?id=3305.
diff --git a/dependencies/plugins/org.apache.commons.collections/.classpath b/dependencies/plugins/org.apache.commons.collections/.classpath
new file mode 100755
index 0000000..3216c85
--- /dev/null
+++ b/dependencies/plugins/org.apache.commons.collections/.classpath
@@ -0,0 +1,7 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<classpath>
+ <classpathentry exported="true" kind="lib" path="" sourcepath="source-bundle"/>
+ <classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER/org.eclipse.jdt.internal.debug.ui.launcher.StandardVMType/J2SE-1.3"/>
+ <classpathentry kind="con" path="org.eclipse.pde.core.requiredPlugins"/>
+ <classpathentry kind="output" path="javaBin"/>
+</classpath>
diff --git a/dependencies/plugins/org.apache.commons.collections/.cvsignore b/dependencies/plugins/org.apache.commons.collections/.cvsignore
new file mode 100755
index 0000000..43568b0
--- /dev/null
+++ b/dependencies/plugins/org.apache.commons.collections/.cvsignore
@@ -0,0 +1,3 @@
+bin
+javaBin
+build.xml
diff --git a/dependencies/plugins/org.apache.commons.collections/.project b/dependencies/plugins/org.apache.commons.collections/.project
new file mode 100755
index 0000000..6e82942
--- /dev/null
+++ b/dependencies/plugins/org.apache.commons.collections/.project
@@ -0,0 +1,17 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<projectDescription>
+ <name>org.apache.commons.collections</name>
+ <comment></comment>
+ <projects>
+ </projects>
+ <buildSpec>
+ <buildCommand>
+ <name>org.eclipse.jdt.core.javabuilder</name>
+ <arguments>
+ </arguments>
+ </buildCommand>
+ </buildSpec>
+ <natures>
+ <nature>org.eclipse.jdt.core.javanature</nature>
+ </natures>
+</projectDescription>
diff --git a/dependencies/plugins/org.apache.commons.collections/META-INF/MANIFEST.MF b/dependencies/plugins/org.apache.commons.collections/META-INF/MANIFEST.MF
new file mode 100755
index 0000000..71558cc
--- /dev/null
+++ b/dependencies/plugins/org.apache.commons.collections/META-INF/MANIFEST.MF
@@ -0,0 +1,20 @@
+Manifest-Version: 1.0
+Bundle-ManifestVersion: 2
+Bundle-Name: %pluginName
+Bundle-SymbolicName: org.apache.commons.collections
+Bundle-Version: 3.2.0.qualifier
+Bundle-Vendor: %providerName
+Bundle-Localization: plugin
+Bundle-RequiredExecutionEnvironment: J2SE-1.3
+Export-Package: org.apache.commons.collections;version="3.2.0",
+ org.apache.commons.collections.bag;version="3.2.0",
+ org.apache.commons.collections.bidimap;version="3.2.0",
+ org.apache.commons.collections.buffer;version="3.2.0",
+ org.apache.commons.collections.collection;version="3.2.0",
+ org.apache.commons.collections.comparators;version="3.2.0",
+ org.apache.commons.collections.functors;version="3.2.0",
+ org.apache.commons.collections.iterators;version="3.2.0",
+ org.apache.commons.collections.keyvalue;version="3.2.0",
+ org.apache.commons.collections.list;version="3.2.0",
+ org.apache.commons.collections.map;version="3.2.0",
+ org.apache.commons.collections.set;version="3.2.0"
diff --git a/dependencies/plugins/org.apache.commons.collections/about.html b/dependencies/plugins/org.apache.commons.collections/about.html
new file mode 100755
index 0000000..be61750
--- /dev/null
+++ b/dependencies/plugins/org.apache.commons.collections/about.html
@@ -0,0 +1,55 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
+ "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1"/>
+<title>About</title>
+</head>
+<body lang="EN-US">
+<h2>About This Content</h2>
+
+<p>June 8, 2007</p>
+<h3>License</h3>
+
+<p>The Eclipse Foundation makes available all content in this plug-in ("Content"). Unless otherwise
+indicated below, the Content is provided to you under the terms and conditions of the
+Eclipse Public License Version 1.0 ("EPL"). A copy of the EPL is available
+at <a href="http://www.eclipse.org/legal/epl-v10.html">http://www.eclipse.org/legal/epl-v10.html</a>.
+For purposes of the EPL, "Program" will mean the Content.</p>
+
+<p>If you did not receive this Content directly from the Eclipse Foundation, the Content is
+being redistributed by another party ("Redistributor") and different terms and conditions may
+apply to your use of any object code in the Content. Check the Redistributor's license that was
+provided with the Content. If no such license exists, contact the Redistributor. Unless otherwise
+indicated below, the terms and conditions of the EPL still apply to any source code in the Content
+and such source code may be obtained at <a href="http://www.eclipse.org">http://www.eclipse.org</a>.</p>
+
+<h3>Third Party Content</h3>
+<p>The Content includes items that have been sourced from third parties as set out below. If you
+did not receive this Content directly from the Eclipse Foundation, the following is provided
+for informational purposes only, and you should look to the Redistributor’s license for
+terms and conditions of use.</p>
+
+<h4>Commons Collections 3.2</h4>
+<p>The plug-in includes Commons Collections 3.2 ("Commons Collections") developed by the Apache Software Foundation as part of the Apache Commons project. Therefore:</p>
+
+<blockquote>
+This product includes software developed by the Apache Software Foundation (<a href="http://www.apache.org/">http://www.apache.org/</a>).
+</blockquote>
+
+<p>The Commons Collections binary code is included with no modifications except postprocessing
+(pack200 conditioning and signing). The corresponding Commons Collections source code is located in src.zip.</p>
+
+<p>Commons Net is:</p>
+
+<blockquote>Copyright (c) 1997-2005 The Apache Software Foundation. All rights reserved.</blockquote>
+
+<p>Your use of the Commons Collections code is subject to the terms and conditions of the Apache Software License 2.0. A copy of the license is contained
+in the file <a href="about_files/LICENSE.txt">LICENSE.txt</a> and is also available at <a href="http://www.apache.org/licenses/LICENSE-2.0.html">http://www.apache.org/licenses/LICENSE-2.0.html</a>.
+
+<p>The Apache attribution <a href="about_files/NOTICE.txt">NOTICE.txt</a> file is included with the Content in accordance with 4d of the Apache License, Version 2.0.</p>
+
+<p>Examples and documentation as well as updated source code for Commons Collections is available at <a href="http://commons.apache.org/collections/">http://commons.apache.org/collections/</a>.</p>
+
+</body>
+</html>
diff --git a/dependencies/plugins/org.apache.commons.collections/about_files/LICENSE.txt b/dependencies/plugins/org.apache.commons.collections/about_files/LICENSE.txt
new file mode 100755
index 0000000..d645695
--- /dev/null
+++ b/dependencies/plugins/org.apache.commons.collections/about_files/LICENSE.txt
@@ -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/dependencies/plugins/org.apache.commons.collections/about_files/NOTICE.txt b/dependencies/plugins/org.apache.commons.collections/about_files/NOTICE.txt
new file mode 100755
index 0000000..3f59805
--- /dev/null
+++ b/dependencies/plugins/org.apache.commons.collections/about_files/NOTICE.txt
@@ -0,0 +1,2 @@
+This product includes software developed by
+The Apache Software Foundation (http://www.apache.org/).
diff --git a/dependencies/plugins/org.apache.commons.collections/about_files/README.txt b/dependencies/plugins/org.apache.commons.collections/about_files/README.txt
new file mode 100755
index 0000000..7d7c453
--- /dev/null
+++ b/dependencies/plugins/org.apache.commons.collections/about_files/README.txt
@@ -0,0 +1,51 @@
+Jakarta Commons Collections
+===========================
+
+Welcome to the Collections component of the Jakarta Commons project.
+This component contains many new collections and collection utilities.
+
+Two jar files are produced by this component.
+The first, commons-collections.jar is the main jar used by applications.
+The second, commons-collections-testframework.jar is an extension to junit
+for testing new collection implementations and is not normally used by applications.
+
+
+Building from source
+--------------------
+This component requires the excellent Ant utility.
+It can be found here :
+
+ http://ant.apache.org/
+
+For testing the project, you will also need JUnit :
+
+ http://www.junit.org/
+
+To let the test process find JUnit, you may make a
+copy of the build.properties.sample file, rename to
+build.properties, and modify to reflect
+the location of the junit.jar on your computer.
+
+
+Once you have Ant properly installed, and the
+build.properties file correctly reflects the location
+of your junit.jar, you are ready to build and test.
+The major targets are:
+
+ant compile - compile the code
+ant test - test using junit
+ant jar - create a jar file
+ant javadoc - build the javadoc
+ant dist - create folders as per a distribution
+ant tf.jar - create the testframework jar file
+ant tf.javadoc - build the testframework javadoc
+
+
+Maven
+-----
+The component can also be built using Maven. (Ant is the primary build tool.)
+It can be found here :
+
+ http://maven.apache.org/
+
+Once installed, the jars may be built with 'maven jar'.
diff --git a/dependencies/plugins/org.apache.commons.collections/build.properties b/dependencies/plugins/org.apache.commons.collections/build.properties
new file mode 100755
index 0000000..a381b3c
--- /dev/null
+++ b/dependencies/plugins/org.apache.commons.collections/build.properties
@@ -0,0 +1,7 @@
+bin.includes = META-INF/,\
+ about.html,\
+ plugin.properties,\
+ about_files/,\
+ org/
+output..=.
+
\ No newline at end of file
diff --git a/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/ArrayStack.class b/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/ArrayStack.class
new file mode 100755
index 0000000..9f33ef8
--- /dev/null
+++ b/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/ArrayStack.class
Binary files differ
diff --git a/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/Bag.class b/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/Bag.class
new file mode 100755
index 0000000..0f79cf7
--- /dev/null
+++ b/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/Bag.class
Binary files differ
diff --git a/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/BagUtils.class b/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/BagUtils.class
new file mode 100755
index 0000000..14ca3d6
--- /dev/null
+++ b/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/BagUtils.class
Binary files differ
diff --git a/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/BeanMap$1.class b/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/BeanMap$1.class
new file mode 100755
index 0000000..724bd73
--- /dev/null
+++ b/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/BeanMap$1.class
Binary files differ
diff --git a/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/BeanMap$10.class b/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/BeanMap$10.class
new file mode 100755
index 0000000..8bf5b7d
--- /dev/null
+++ b/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/BeanMap$10.class
Binary files differ
diff --git a/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/BeanMap$11.class b/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/BeanMap$11.class
new file mode 100755
index 0000000..f5d8bf3
--- /dev/null
+++ b/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/BeanMap$11.class
Binary files differ
diff --git a/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/BeanMap$2.class b/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/BeanMap$2.class
new file mode 100755
index 0000000..0678f1e
--- /dev/null
+++ b/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/BeanMap$2.class
Binary files differ
diff --git a/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/BeanMap$3.class b/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/BeanMap$3.class
new file mode 100755
index 0000000..87dd94e
--- /dev/null
+++ b/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/BeanMap$3.class
Binary files differ
diff --git a/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/BeanMap$4.class b/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/BeanMap$4.class
new file mode 100755
index 0000000..34711d8
--- /dev/null
+++ b/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/BeanMap$4.class
Binary files differ
diff --git a/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/BeanMap$5.class b/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/BeanMap$5.class
new file mode 100755
index 0000000..8156716
--- /dev/null
+++ b/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/BeanMap$5.class
Binary files differ
diff --git a/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/BeanMap$6.class b/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/BeanMap$6.class
new file mode 100755
index 0000000..5fb5090
--- /dev/null
+++ b/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/BeanMap$6.class
Binary files differ
diff --git a/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/BeanMap$7.class b/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/BeanMap$7.class
new file mode 100755
index 0000000..3e2028d
--- /dev/null
+++ b/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/BeanMap$7.class
Binary files differ
diff --git a/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/BeanMap$8.class b/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/BeanMap$8.class
new file mode 100755
index 0000000..dfeb816
--- /dev/null
+++ b/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/BeanMap$8.class
Binary files differ
diff --git a/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/BeanMap$9.class b/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/BeanMap$9.class
new file mode 100755
index 0000000..4778772
--- /dev/null
+++ b/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/BeanMap$9.class
Binary files differ
diff --git a/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/BeanMap$MyMapEntry.class b/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/BeanMap$MyMapEntry.class
new file mode 100755
index 0000000..e40d19e
--- /dev/null
+++ b/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/BeanMap$MyMapEntry.class
Binary files differ
diff --git a/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/BeanMap.class b/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/BeanMap.class
new file mode 100755
index 0000000..1675883
--- /dev/null
+++ b/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/BeanMap.class
Binary files differ
diff --git a/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/BidiMap.class b/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/BidiMap.class
new file mode 100755
index 0000000..676eef1
--- /dev/null
+++ b/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/BidiMap.class
Binary files differ
diff --git a/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/BinaryHeap$1.class b/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/BinaryHeap$1.class
new file mode 100755
index 0000000..16531ed
--- /dev/null
+++ b/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/BinaryHeap$1.class
Binary files differ
diff --git a/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/BinaryHeap.class b/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/BinaryHeap.class
new file mode 100755
index 0000000..c8c1eb2
--- /dev/null
+++ b/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/BinaryHeap.class
Binary files differ
diff --git a/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/BoundedCollection.class b/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/BoundedCollection.class
new file mode 100755
index 0000000..439a6db
--- /dev/null
+++ b/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/BoundedCollection.class
Binary files differ
diff --git a/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/BoundedFifoBuffer$1.class b/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/BoundedFifoBuffer$1.class
new file mode 100755
index 0000000..2276cd7
--- /dev/null
+++ b/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/BoundedFifoBuffer$1.class
Binary files differ
diff --git a/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/BoundedFifoBuffer.class b/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/BoundedFifoBuffer.class
new file mode 100755
index 0000000..11a40b4
--- /dev/null
+++ b/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/BoundedFifoBuffer.class
Binary files differ
diff --git a/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/BoundedMap.class b/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/BoundedMap.class
new file mode 100755
index 0000000..cfaa0da
--- /dev/null
+++ b/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/BoundedMap.class
Binary files differ
diff --git a/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/Buffer.class b/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/Buffer.class
new file mode 100755
index 0000000..74d4be5
--- /dev/null
+++ b/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/Buffer.class
Binary files differ
diff --git a/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/BufferOverflowException.class b/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/BufferOverflowException.class
new file mode 100755
index 0000000..1825cb9
--- /dev/null
+++ b/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/BufferOverflowException.class
Binary files differ
diff --git a/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/BufferUnderflowException.class b/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/BufferUnderflowException.class
new file mode 100755
index 0000000..0a7a33b
--- /dev/null
+++ b/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/BufferUnderflowException.class
Binary files differ
diff --git a/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/BufferUtils.class b/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/BufferUtils.class
new file mode 100755
index 0000000..f476fa1
--- /dev/null
+++ b/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/BufferUtils.class
Binary files differ
diff --git a/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/Closure.class b/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/Closure.class
new file mode 100755
index 0000000..04f9211
--- /dev/null
+++ b/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/Closure.class
Binary files differ
diff --git a/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/ClosureUtils.class b/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/ClosureUtils.class
new file mode 100755
index 0000000..532a97e
--- /dev/null
+++ b/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/ClosureUtils.class
Binary files differ
diff --git a/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/CollectionUtils.class b/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/CollectionUtils.class
new file mode 100755
index 0000000..e0d4ac2
--- /dev/null
+++ b/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/CollectionUtils.class
Binary files differ
diff --git a/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/ComparatorUtils.class b/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/ComparatorUtils.class
new file mode 100755
index 0000000..cc41b6c
--- /dev/null
+++ b/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/ComparatorUtils.class
Binary files differ
diff --git a/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/CursorableLinkedList$Cursor.class b/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/CursorableLinkedList$Cursor.class
new file mode 100755
index 0000000..5c4ceab
--- /dev/null
+++ b/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/CursorableLinkedList$Cursor.class
Binary files differ
diff --git a/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/CursorableLinkedList$ListIter.class b/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/CursorableLinkedList$ListIter.class
new file mode 100755
index 0000000..ad80fbe
--- /dev/null
+++ b/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/CursorableLinkedList$ListIter.class
Binary files differ
diff --git a/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/CursorableLinkedList$Listable.class b/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/CursorableLinkedList$Listable.class
new file mode 100755
index 0000000..e77db68
--- /dev/null
+++ b/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/CursorableLinkedList$Listable.class
Binary files differ
diff --git a/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/CursorableLinkedList.class b/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/CursorableLinkedList.class
new file mode 100755
index 0000000..e53869a
--- /dev/null
+++ b/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/CursorableLinkedList.class
Binary files differ
diff --git a/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/CursorableSubList.class b/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/CursorableSubList.class
new file mode 100755
index 0000000..55e5313
--- /dev/null
+++ b/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/CursorableSubList.class
Binary files differ
diff --git a/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/DefaultMapBag$BagIterator.class b/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/DefaultMapBag$BagIterator.class
new file mode 100755
index 0000000..b517100
--- /dev/null
+++ b/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/DefaultMapBag$BagIterator.class
Binary files differ
diff --git a/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/DefaultMapBag.class b/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/DefaultMapBag.class
new file mode 100755
index 0000000..7ea04bf
--- /dev/null
+++ b/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/DefaultMapBag.class
Binary files differ
diff --git a/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/DefaultMapEntry.class b/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/DefaultMapEntry.class
new file mode 100755
index 0000000..5c04363
--- /dev/null
+++ b/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/DefaultMapEntry.class
Binary files differ
diff --git a/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/DoubleOrderedMap$1.class b/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/DoubleOrderedMap$1.class
new file mode 100755
index 0000000..ff2fab2
--- /dev/null
+++ b/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/DoubleOrderedMap$1.class
Binary files differ
diff --git a/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/DoubleOrderedMap$10.class b/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/DoubleOrderedMap$10.class
new file mode 100755
index 0000000..0d9f275
--- /dev/null
+++ b/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/DoubleOrderedMap$10.class
Binary files differ
diff --git a/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/DoubleOrderedMap$11.class b/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/DoubleOrderedMap$11.class
new file mode 100755
index 0000000..27d57bf
--- /dev/null
+++ b/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/DoubleOrderedMap$11.class
Binary files differ
diff --git a/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/DoubleOrderedMap$12.class b/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/DoubleOrderedMap$12.class
new file mode 100755
index 0000000..2caaee3
--- /dev/null
+++ b/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/DoubleOrderedMap$12.class
Binary files differ
diff --git a/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/DoubleOrderedMap$2.class b/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/DoubleOrderedMap$2.class
new file mode 100755
index 0000000..1846767
--- /dev/null
+++ b/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/DoubleOrderedMap$2.class
Binary files differ
diff --git a/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/DoubleOrderedMap$3.class b/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/DoubleOrderedMap$3.class
new file mode 100755
index 0000000..a0450fd
--- /dev/null
+++ b/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/DoubleOrderedMap$3.class
Binary files differ
diff --git a/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/DoubleOrderedMap$4.class b/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/DoubleOrderedMap$4.class
new file mode 100755
index 0000000..fbdeb6b
--- /dev/null
+++ b/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/DoubleOrderedMap$4.class
Binary files differ
diff --git a/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/DoubleOrderedMap$5.class b/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/DoubleOrderedMap$5.class
new file mode 100755
index 0000000..fc26dad
--- /dev/null
+++ b/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/DoubleOrderedMap$5.class
Binary files differ
diff --git a/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/DoubleOrderedMap$6.class b/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/DoubleOrderedMap$6.class
new file mode 100755
index 0000000..b37ccd9
--- /dev/null
+++ b/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/DoubleOrderedMap$6.class
Binary files differ
diff --git a/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/DoubleOrderedMap$7.class b/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/DoubleOrderedMap$7.class
new file mode 100755
index 0000000..bd9d696
--- /dev/null
+++ b/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/DoubleOrderedMap$7.class
Binary files differ
diff --git a/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/DoubleOrderedMap$8.class b/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/DoubleOrderedMap$8.class
new file mode 100755
index 0000000..7797ead
--- /dev/null
+++ b/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/DoubleOrderedMap$8.class
Binary files differ
diff --git a/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/DoubleOrderedMap$9.class b/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/DoubleOrderedMap$9.class
new file mode 100755
index 0000000..13aa03f
--- /dev/null
+++ b/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/DoubleOrderedMap$9.class
Binary files differ
diff --git a/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/DoubleOrderedMap$DoubleOrderedMapIterator.class b/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/DoubleOrderedMap$DoubleOrderedMapIterator.class
new file mode 100755
index 0000000..749acfc
--- /dev/null
+++ b/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/DoubleOrderedMap$DoubleOrderedMapIterator.class
Binary files differ
diff --git a/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/DoubleOrderedMap$Node.class b/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/DoubleOrderedMap$Node.class
new file mode 100755
index 0000000..bfc1c4d
--- /dev/null
+++ b/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/DoubleOrderedMap$Node.class
Binary files differ
diff --git a/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/DoubleOrderedMap.class b/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/DoubleOrderedMap.class
new file mode 100755
index 0000000..9d83c8f
--- /dev/null
+++ b/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/DoubleOrderedMap.class
Binary files differ
diff --git a/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/EnumerationUtils.class b/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/EnumerationUtils.class
new file mode 100755
index 0000000..3c0a69c
--- /dev/null
+++ b/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/EnumerationUtils.class
Binary files differ
diff --git a/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/ExtendedProperties$PropertiesReader.class b/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/ExtendedProperties$PropertiesReader.class
new file mode 100755
index 0000000..1dd3d9e
--- /dev/null
+++ b/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/ExtendedProperties$PropertiesReader.class
Binary files differ
diff --git a/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/ExtendedProperties$PropertiesTokenizer.class b/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/ExtendedProperties$PropertiesTokenizer.class
new file mode 100755
index 0000000..0f7f6f1
--- /dev/null
+++ b/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/ExtendedProperties$PropertiesTokenizer.class
Binary files differ
diff --git a/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/ExtendedProperties.class b/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/ExtendedProperties.class
new file mode 100755
index 0000000..5e86984
--- /dev/null
+++ b/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/ExtendedProperties.class
Binary files differ
diff --git a/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/Factory.class b/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/Factory.class
new file mode 100755
index 0000000..f463fbc
--- /dev/null
+++ b/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/Factory.class
Binary files differ
diff --git a/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/FactoryUtils.class b/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/FactoryUtils.class
new file mode 100755
index 0000000..8dc1f92
--- /dev/null
+++ b/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/FactoryUtils.class
Binary files differ
diff --git a/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/FastArrayList$ListIter.class b/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/FastArrayList$ListIter.class
new file mode 100755
index 0000000..4d568c0
--- /dev/null
+++ b/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/FastArrayList$ListIter.class
Binary files differ
diff --git a/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/FastArrayList$SubList$SubListIter.class b/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/FastArrayList$SubList$SubListIter.class
new file mode 100755
index 0000000..ce469d1
--- /dev/null
+++ b/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/FastArrayList$SubList$SubListIter.class
Binary files differ
diff --git a/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/FastArrayList$SubList.class b/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/FastArrayList$SubList.class
new file mode 100755
index 0000000..c7162aa
--- /dev/null
+++ b/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/FastArrayList$SubList.class
Binary files differ
diff --git a/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/FastArrayList.class b/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/FastArrayList.class
new file mode 100755
index 0000000..abbe31d
--- /dev/null
+++ b/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/FastArrayList.class
Binary files differ
diff --git a/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/FastHashMap$1.class b/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/FastHashMap$1.class
new file mode 100755
index 0000000..03bec57
--- /dev/null
+++ b/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/FastHashMap$1.class
Binary files differ
diff --git a/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/FastHashMap$CollectionView$CollectionViewIterator.class b/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/FastHashMap$CollectionView$CollectionViewIterator.class
new file mode 100755
index 0000000..aa5a3af
--- /dev/null
+++ b/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/FastHashMap$CollectionView$CollectionViewIterator.class
Binary files differ
diff --git a/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/FastHashMap$CollectionView.class b/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/FastHashMap$CollectionView.class
new file mode 100755
index 0000000..fce0ffc
--- /dev/null
+++ b/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/FastHashMap$CollectionView.class
Binary files differ
diff --git a/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/FastHashMap$EntrySet.class b/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/FastHashMap$EntrySet.class
new file mode 100755
index 0000000..a0f0d97
--- /dev/null
+++ b/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/FastHashMap$EntrySet.class
Binary files differ
diff --git a/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/FastHashMap$KeySet.class b/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/FastHashMap$KeySet.class
new file mode 100755
index 0000000..10805de
--- /dev/null
+++ b/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/FastHashMap$KeySet.class
Binary files differ
diff --git a/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/FastHashMap$Values.class b/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/FastHashMap$Values.class
new file mode 100755
index 0000000..ec36432
--- /dev/null
+++ b/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/FastHashMap$Values.class
Binary files differ
diff --git a/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/FastHashMap.class b/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/FastHashMap.class
new file mode 100755
index 0000000..4c4253e
--- /dev/null
+++ b/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/FastHashMap.class
Binary files differ
diff --git a/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/FastTreeMap$1.class b/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/FastTreeMap$1.class
new file mode 100755
index 0000000..d5b6d3e
--- /dev/null
+++ b/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/FastTreeMap$1.class
Binary files differ
diff --git a/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/FastTreeMap$CollectionView$CollectionViewIterator.class b/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/FastTreeMap$CollectionView$CollectionViewIterator.class
new file mode 100755
index 0000000..28990ed
--- /dev/null
+++ b/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/FastTreeMap$CollectionView$CollectionViewIterator.class
Binary files differ
diff --git a/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/FastTreeMap$CollectionView.class b/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/FastTreeMap$CollectionView.class
new file mode 100755
index 0000000..cb8816f
--- /dev/null
+++ b/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/FastTreeMap$CollectionView.class
Binary files differ
diff --git a/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/FastTreeMap$EntrySet.class b/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/FastTreeMap$EntrySet.class
new file mode 100755
index 0000000..70f4eba
--- /dev/null
+++ b/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/FastTreeMap$EntrySet.class
Binary files differ
diff --git a/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/FastTreeMap$KeySet.class b/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/FastTreeMap$KeySet.class
new file mode 100755
index 0000000..46e064e
--- /dev/null
+++ b/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/FastTreeMap$KeySet.class
Binary files differ
diff --git a/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/FastTreeMap$Values.class b/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/FastTreeMap$Values.class
new file mode 100755
index 0000000..74b33f6
--- /dev/null
+++ b/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/FastTreeMap$Values.class
Binary files differ
diff --git a/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/FastTreeMap.class b/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/FastTreeMap.class
new file mode 100755
index 0000000..061c66c
--- /dev/null
+++ b/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/FastTreeMap.class
Binary files differ
diff --git a/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/FunctorException.class b/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/FunctorException.class
new file mode 100755
index 0000000..a9c13bc
--- /dev/null
+++ b/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/FunctorException.class
Binary files differ
diff --git a/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/HashBag.class b/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/HashBag.class
new file mode 100755
index 0000000..95c81bb
--- /dev/null
+++ b/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/HashBag.class
Binary files differ
diff --git a/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/IterableMap.class b/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/IterableMap.class
new file mode 100755
index 0000000..ca07f19
--- /dev/null
+++ b/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/IterableMap.class
Binary files differ
diff --git a/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/IteratorUtils.class b/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/IteratorUtils.class
new file mode 100755
index 0000000..b2f1d09
--- /dev/null
+++ b/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/IteratorUtils.class
Binary files differ
diff --git a/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/KeyValue.class b/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/KeyValue.class
new file mode 100755
index 0000000..315d9fa
--- /dev/null
+++ b/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/KeyValue.class
Binary files differ
diff --git a/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/LRUMap.class b/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/LRUMap.class
new file mode 100755
index 0000000..c9986ba
--- /dev/null
+++ b/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/LRUMap.class
Binary files differ
diff --git a/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/ListUtils.class b/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/ListUtils.class
new file mode 100755
index 0000000..ecb0e86
--- /dev/null
+++ b/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/ListUtils.class
Binary files differ
diff --git a/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/MapIterator.class b/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/MapIterator.class
new file mode 100755
index 0000000..8a9ff99
--- /dev/null
+++ b/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/MapIterator.class
Binary files differ
diff --git a/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/MapUtils.class b/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/MapUtils.class
new file mode 100755
index 0000000..47191bd
--- /dev/null
+++ b/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/MapUtils.class
Binary files differ
diff --git a/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/MultiHashMap$1.class b/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/MultiHashMap$1.class
new file mode 100755
index 0000000..86da6c7
--- /dev/null
+++ b/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/MultiHashMap$1.class
Binary files differ
diff --git a/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/MultiHashMap$ValueIterator.class b/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/MultiHashMap$ValueIterator.class
new file mode 100755
index 0000000..c9f2bc7
--- /dev/null
+++ b/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/MultiHashMap$ValueIterator.class
Binary files differ
diff --git a/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/MultiHashMap$Values.class b/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/MultiHashMap$Values.class
new file mode 100755
index 0000000..2408712
--- /dev/null
+++ b/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/MultiHashMap$Values.class
Binary files differ
diff --git a/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/MultiHashMap.class b/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/MultiHashMap.class
new file mode 100755
index 0000000..bd006fc
--- /dev/null
+++ b/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/MultiHashMap.class
Binary files differ
diff --git a/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/MultiMap.class b/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/MultiMap.class
new file mode 100755
index 0000000..c4cba95
--- /dev/null
+++ b/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/MultiMap.class
Binary files differ
diff --git a/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/OrderedBidiMap.class b/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/OrderedBidiMap.class
new file mode 100755
index 0000000..09f02cd
--- /dev/null
+++ b/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/OrderedBidiMap.class
Binary files differ
diff --git a/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/OrderedIterator.class b/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/OrderedIterator.class
new file mode 100755
index 0000000..ada9830
--- /dev/null
+++ b/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/OrderedIterator.class
Binary files differ
diff --git a/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/OrderedMap.class b/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/OrderedMap.class
new file mode 100755
index 0000000..400b14f
--- /dev/null
+++ b/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/OrderedMap.class
Binary files differ
diff --git a/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/OrderedMapIterator.class b/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/OrderedMapIterator.class
new file mode 100755
index 0000000..8b3e42b
--- /dev/null
+++ b/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/OrderedMapIterator.class
Binary files differ
diff --git a/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/Predicate.class b/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/Predicate.class
new file mode 100755
index 0000000..f5a345b
--- /dev/null
+++ b/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/Predicate.class
Binary files differ
diff --git a/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/PredicateUtils.class b/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/PredicateUtils.class
new file mode 100755
index 0000000..c1a4aec
--- /dev/null
+++ b/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/PredicateUtils.class
Binary files differ
diff --git a/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/PriorityQueue.class b/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/PriorityQueue.class
new file mode 100755
index 0000000..02c159c
--- /dev/null
+++ b/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/PriorityQueue.class
Binary files differ
diff --git a/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/ProxyMap.class b/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/ProxyMap.class
new file mode 100755
index 0000000..dccf92e
--- /dev/null
+++ b/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/ProxyMap.class
Binary files differ
diff --git a/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/ReferenceMap$1.class b/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/ReferenceMap$1.class
new file mode 100755
index 0000000..28bf788
--- /dev/null
+++ b/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/ReferenceMap$1.class
Binary files differ
diff --git a/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/ReferenceMap$2.class b/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/ReferenceMap$2.class
new file mode 100755
index 0000000..a0b1f0b
--- /dev/null
+++ b/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/ReferenceMap$2.class
Binary files differ
diff --git a/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/ReferenceMap$3.class b/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/ReferenceMap$3.class
new file mode 100755
index 0000000..ac9cf16
--- /dev/null
+++ b/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/ReferenceMap$3.class
Binary files differ
diff --git a/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/ReferenceMap$Entry.class b/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/ReferenceMap$Entry.class
new file mode 100755
index 0000000..c35f48d
--- /dev/null
+++ b/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/ReferenceMap$Entry.class
Binary files differ
diff --git a/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/ReferenceMap$EntryIterator.class b/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/ReferenceMap$EntryIterator.class
new file mode 100755
index 0000000..c421fb3
--- /dev/null
+++ b/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/ReferenceMap$EntryIterator.class
Binary files differ
diff --git a/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/ReferenceMap$KeyIterator.class b/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/ReferenceMap$KeyIterator.class
new file mode 100755
index 0000000..a6510c3
--- /dev/null
+++ b/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/ReferenceMap$KeyIterator.class
Binary files differ
diff --git a/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/ReferenceMap$SoftRef.class b/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/ReferenceMap$SoftRef.class
new file mode 100755
index 0000000..fd51394
--- /dev/null
+++ b/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/ReferenceMap$SoftRef.class
Binary files differ
diff --git a/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/ReferenceMap$ValueIterator.class b/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/ReferenceMap$ValueIterator.class
new file mode 100755
index 0000000..09588a2
--- /dev/null
+++ b/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/ReferenceMap$ValueIterator.class
Binary files differ
diff --git a/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/ReferenceMap$WeakRef.class b/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/ReferenceMap$WeakRef.class
new file mode 100755
index 0000000..7596f66
--- /dev/null
+++ b/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/ReferenceMap$WeakRef.class
Binary files differ
diff --git a/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/ReferenceMap.class b/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/ReferenceMap.class
new file mode 100755
index 0000000..d24a9bc
--- /dev/null
+++ b/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/ReferenceMap.class
Binary files differ
diff --git a/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/ResettableIterator.class b/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/ResettableIterator.class
new file mode 100755
index 0000000..9a740bf
--- /dev/null
+++ b/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/ResettableIterator.class
Binary files differ
diff --git a/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/ResettableListIterator.class b/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/ResettableListIterator.class
new file mode 100755
index 0000000..35175ea
--- /dev/null
+++ b/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/ResettableListIterator.class
Binary files differ
diff --git a/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/SequencedHashMap$1.class b/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/SequencedHashMap$1.class
new file mode 100755
index 0000000..febaeee
--- /dev/null
+++ b/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/SequencedHashMap$1.class
Binary files differ
diff --git a/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/SequencedHashMap$2.class b/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/SequencedHashMap$2.class
new file mode 100755
index 0000000..50e7b34
--- /dev/null
+++ b/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/SequencedHashMap$2.class
Binary files differ
diff --git a/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/SequencedHashMap$3.class b/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/SequencedHashMap$3.class
new file mode 100755
index 0000000..07309c9
--- /dev/null
+++ b/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/SequencedHashMap$3.class
Binary files differ
diff --git a/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/SequencedHashMap$Entry.class b/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/SequencedHashMap$Entry.class
new file mode 100755
index 0000000..f58077b
--- /dev/null
+++ b/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/SequencedHashMap$Entry.class
Binary files differ
diff --git a/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/SequencedHashMap$OrderedIterator.class b/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/SequencedHashMap$OrderedIterator.class
new file mode 100755
index 0000000..6a3ce1c
--- /dev/null
+++ b/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/SequencedHashMap$OrderedIterator.class
Binary files differ
diff --git a/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/SequencedHashMap.class b/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/SequencedHashMap.class
new file mode 100755
index 0000000..d805039
--- /dev/null
+++ b/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/SequencedHashMap.class
Binary files differ
diff --git a/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/SetUtils.class b/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/SetUtils.class
new file mode 100755
index 0000000..e72f231
--- /dev/null
+++ b/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/SetUtils.class
Binary files differ
diff --git a/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/SortedBag.class b/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/SortedBag.class
new file mode 100755
index 0000000..071ec43
--- /dev/null
+++ b/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/SortedBag.class
Binary files differ
diff --git a/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/SortedBidiMap.class b/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/SortedBidiMap.class
new file mode 100755
index 0000000..b92bb98
--- /dev/null
+++ b/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/SortedBidiMap.class
Binary files differ
diff --git a/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/StaticBucketMap$1.class b/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/StaticBucketMap$1.class
new file mode 100755
index 0000000..75e2bd0
--- /dev/null
+++ b/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/StaticBucketMap$1.class
Binary files differ
diff --git a/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/StaticBucketMap$EntryIterator.class b/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/StaticBucketMap$EntryIterator.class
new file mode 100755
index 0000000..59957bb
--- /dev/null
+++ b/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/StaticBucketMap$EntryIterator.class
Binary files differ
diff --git a/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/StaticBucketMap$EntrySet.class b/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/StaticBucketMap$EntrySet.class
new file mode 100755
index 0000000..ca3c38e
--- /dev/null
+++ b/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/StaticBucketMap$EntrySet.class
Binary files differ
diff --git a/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/StaticBucketMap$KeyIterator.class b/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/StaticBucketMap$KeyIterator.class
new file mode 100755
index 0000000..d399ed8
--- /dev/null
+++ b/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/StaticBucketMap$KeyIterator.class
Binary files differ
diff --git a/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/StaticBucketMap$KeySet.class b/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/StaticBucketMap$KeySet.class
new file mode 100755
index 0000000..68b8f90
--- /dev/null
+++ b/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/StaticBucketMap$KeySet.class
Binary files differ
diff --git a/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/StaticBucketMap$Lock.class b/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/StaticBucketMap$Lock.class
new file mode 100755
index 0000000..50c3e98
--- /dev/null
+++ b/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/StaticBucketMap$Lock.class
Binary files differ
diff --git a/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/StaticBucketMap$Node.class b/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/StaticBucketMap$Node.class
new file mode 100755
index 0000000..03db1eb
--- /dev/null
+++ b/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/StaticBucketMap$Node.class
Binary files differ
diff --git a/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/StaticBucketMap$ValueIterator.class b/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/StaticBucketMap$ValueIterator.class
new file mode 100755
index 0000000..3cc58e4
--- /dev/null
+++ b/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/StaticBucketMap$ValueIterator.class
Binary files differ
diff --git a/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/StaticBucketMap$Values.class b/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/StaticBucketMap$Values.class
new file mode 100755
index 0000000..43b614f
--- /dev/null
+++ b/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/StaticBucketMap$Values.class
Binary files differ
diff --git a/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/StaticBucketMap.class b/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/StaticBucketMap.class
new file mode 100755
index 0000000..85bf22d
--- /dev/null
+++ b/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/StaticBucketMap.class
Binary files differ
diff --git a/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/SynchronizedPriorityQueue.class b/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/SynchronizedPriorityQueue.class
new file mode 100755
index 0000000..19230bd
--- /dev/null
+++ b/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/SynchronizedPriorityQueue.class
Binary files differ
diff --git a/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/Transformer.class b/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/Transformer.class
new file mode 100755
index 0000000..af7ba2f
--- /dev/null
+++ b/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/Transformer.class
Binary files differ
diff --git a/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/TransformerUtils.class b/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/TransformerUtils.class
new file mode 100755
index 0000000..dbcaf6f
--- /dev/null
+++ b/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/TransformerUtils.class
Binary files differ
diff --git a/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/TreeBag.class b/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/TreeBag.class
new file mode 100755
index 0000000..de21099
--- /dev/null
+++ b/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/TreeBag.class
Binary files differ
diff --git a/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/UnboundedFifoBuffer$1.class b/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/UnboundedFifoBuffer$1.class
new file mode 100755
index 0000000..7be9829
--- /dev/null
+++ b/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/UnboundedFifoBuffer$1.class
Binary files differ
diff --git a/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/UnboundedFifoBuffer.class b/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/UnboundedFifoBuffer.class
new file mode 100755
index 0000000..376a57c
--- /dev/null
+++ b/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/UnboundedFifoBuffer.class
Binary files differ
diff --git a/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/Unmodifiable.class b/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/Unmodifiable.class
new file mode 100755
index 0000000..502988a
--- /dev/null
+++ b/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/Unmodifiable.class
Binary files differ
diff --git a/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/bag/AbstractBagDecorator.class b/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/bag/AbstractBagDecorator.class
new file mode 100755
index 0000000..91a027d
--- /dev/null
+++ b/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/bag/AbstractBagDecorator.class
Binary files differ
diff --git a/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/bag/AbstractMapBag$BagIterator.class b/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/bag/AbstractMapBag$BagIterator.class
new file mode 100755
index 0000000..d2ed049
--- /dev/null
+++ b/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/bag/AbstractMapBag$BagIterator.class
Binary files differ
diff --git a/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/bag/AbstractMapBag$MutableInteger.class b/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/bag/AbstractMapBag$MutableInteger.class
new file mode 100755
index 0000000..8dcb44f
--- /dev/null
+++ b/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/bag/AbstractMapBag$MutableInteger.class
Binary files differ
diff --git a/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/bag/AbstractMapBag.class b/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/bag/AbstractMapBag.class
new file mode 100755
index 0000000..9195fcd
--- /dev/null
+++ b/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/bag/AbstractMapBag.class
Binary files differ
diff --git a/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/bag/AbstractSortedBagDecorator.class b/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/bag/AbstractSortedBagDecorator.class
new file mode 100755
index 0000000..7fae8b0
--- /dev/null
+++ b/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/bag/AbstractSortedBagDecorator.class
Binary files differ
diff --git a/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/bag/HashBag.class b/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/bag/HashBag.class
new file mode 100755
index 0000000..990b939
--- /dev/null
+++ b/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/bag/HashBag.class
Binary files differ
diff --git a/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/bag/PredicatedBag.class b/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/bag/PredicatedBag.class
new file mode 100755
index 0000000..d494003
--- /dev/null
+++ b/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/bag/PredicatedBag.class
Binary files differ
diff --git a/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/bag/PredicatedSortedBag.class b/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/bag/PredicatedSortedBag.class
new file mode 100755
index 0000000..87b0711
--- /dev/null
+++ b/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/bag/PredicatedSortedBag.class
Binary files differ
diff --git a/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/bag/SynchronizedBag$SynchronizedBagSet.class b/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/bag/SynchronizedBag$SynchronizedBagSet.class
new file mode 100755
index 0000000..222ea05
--- /dev/null
+++ b/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/bag/SynchronizedBag$SynchronizedBagSet.class
Binary files differ
diff --git a/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/bag/SynchronizedBag.class b/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/bag/SynchronizedBag.class
new file mode 100755
index 0000000..b95e751
--- /dev/null
+++ b/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/bag/SynchronizedBag.class
Binary files differ
diff --git a/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/bag/SynchronizedSortedBag.class b/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/bag/SynchronizedSortedBag.class
new file mode 100755
index 0000000..7556912
--- /dev/null
+++ b/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/bag/SynchronizedSortedBag.class
Binary files differ
diff --git a/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/bag/TransformedBag.class b/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/bag/TransformedBag.class
new file mode 100755
index 0000000..45f199d
--- /dev/null
+++ b/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/bag/TransformedBag.class
Binary files differ
diff --git a/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/bag/TransformedSortedBag.class b/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/bag/TransformedSortedBag.class
new file mode 100755
index 0000000..3bb9a27
--- /dev/null
+++ b/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/bag/TransformedSortedBag.class
Binary files differ
diff --git a/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/bag/TreeBag.class b/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/bag/TreeBag.class
new file mode 100755
index 0000000..dd296e2
--- /dev/null
+++ b/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/bag/TreeBag.class
Binary files differ
diff --git a/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/bag/TypedBag.class b/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/bag/TypedBag.class
new file mode 100755
index 0000000..4003066
--- /dev/null
+++ b/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/bag/TypedBag.class
Binary files differ
diff --git a/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/bag/TypedSortedBag.class b/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/bag/TypedSortedBag.class
new file mode 100755
index 0000000..e5f2d7a
--- /dev/null
+++ b/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/bag/TypedSortedBag.class
Binary files differ
diff --git a/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/bag/UnmodifiableBag.class b/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/bag/UnmodifiableBag.class
new file mode 100755
index 0000000..bb5330f
--- /dev/null
+++ b/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/bag/UnmodifiableBag.class
Binary files differ
diff --git a/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/bag/UnmodifiableSortedBag.class b/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/bag/UnmodifiableSortedBag.class
new file mode 100755
index 0000000..6f33f32
--- /dev/null
+++ b/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/bag/UnmodifiableSortedBag.class
Binary files differ
diff --git a/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/bidimap/AbstractBidiMapDecorator.class b/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/bidimap/AbstractBidiMapDecorator.class
new file mode 100755
index 0000000..f7e47dc
--- /dev/null
+++ b/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/bidimap/AbstractBidiMapDecorator.class
Binary files differ
diff --git a/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/bidimap/AbstractDualBidiMap$BidiMapIterator.class b/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/bidimap/AbstractDualBidiMap$BidiMapIterator.class
new file mode 100755
index 0000000..9c68e87
--- /dev/null
+++ b/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/bidimap/AbstractDualBidiMap$BidiMapIterator.class
Binary files differ
diff --git a/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/bidimap/AbstractDualBidiMap$EntrySet.class b/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/bidimap/AbstractDualBidiMap$EntrySet.class
new file mode 100755
index 0000000..ddd046f
--- /dev/null
+++ b/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/bidimap/AbstractDualBidiMap$EntrySet.class
Binary files differ
diff --git a/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/bidimap/AbstractDualBidiMap$EntrySetIterator.class b/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/bidimap/AbstractDualBidiMap$EntrySetIterator.class
new file mode 100755
index 0000000..9a341ff
--- /dev/null
+++ b/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/bidimap/AbstractDualBidiMap$EntrySetIterator.class
Binary files differ
diff --git a/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/bidimap/AbstractDualBidiMap$KeySet.class b/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/bidimap/AbstractDualBidiMap$KeySet.class
new file mode 100755
index 0000000..fa9ce99
--- /dev/null
+++ b/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/bidimap/AbstractDualBidiMap$KeySet.class
Binary files differ
diff --git a/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/bidimap/AbstractDualBidiMap$KeySetIterator.class b/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/bidimap/AbstractDualBidiMap$KeySetIterator.class
new file mode 100755
index 0000000..9b911a0
--- /dev/null
+++ b/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/bidimap/AbstractDualBidiMap$KeySetIterator.class
Binary files differ
diff --git a/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/bidimap/AbstractDualBidiMap$MapEntry.class b/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/bidimap/AbstractDualBidiMap$MapEntry.class
new file mode 100755
index 0000000..670a901
--- /dev/null
+++ b/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/bidimap/AbstractDualBidiMap$MapEntry.class
Binary files differ
diff --git a/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/bidimap/AbstractDualBidiMap$Values.class b/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/bidimap/AbstractDualBidiMap$Values.class
new file mode 100755
index 0000000..00e47eb
--- /dev/null
+++ b/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/bidimap/AbstractDualBidiMap$Values.class
Binary files differ
diff --git a/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/bidimap/AbstractDualBidiMap$ValuesIterator.class b/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/bidimap/AbstractDualBidiMap$ValuesIterator.class
new file mode 100755
index 0000000..0244ae9
--- /dev/null
+++ b/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/bidimap/AbstractDualBidiMap$ValuesIterator.class
Binary files differ
diff --git a/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/bidimap/AbstractDualBidiMap$View.class b/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/bidimap/AbstractDualBidiMap$View.class
new file mode 100755
index 0000000..d62d9e5
--- /dev/null
+++ b/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/bidimap/AbstractDualBidiMap$View.class
Binary files differ
diff --git a/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/bidimap/AbstractDualBidiMap.class b/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/bidimap/AbstractDualBidiMap.class
new file mode 100755
index 0000000..3972441
--- /dev/null
+++ b/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/bidimap/AbstractDualBidiMap.class
Binary files differ
diff --git a/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/bidimap/AbstractOrderedBidiMapDecorator.class b/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/bidimap/AbstractOrderedBidiMapDecorator.class
new file mode 100755
index 0000000..741e435
--- /dev/null
+++ b/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/bidimap/AbstractOrderedBidiMapDecorator.class
Binary files differ
diff --git a/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/bidimap/AbstractSortedBidiMapDecorator.class b/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/bidimap/AbstractSortedBidiMapDecorator.class
new file mode 100755
index 0000000..a7d4981
--- /dev/null
+++ b/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/bidimap/AbstractSortedBidiMapDecorator.class
Binary files differ
diff --git a/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/bidimap/DualHashBidiMap.class b/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/bidimap/DualHashBidiMap.class
new file mode 100755
index 0000000..0f2a9c6
--- /dev/null
+++ b/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/bidimap/DualHashBidiMap.class
Binary files differ
diff --git a/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/bidimap/DualTreeBidiMap$BidiOrderedMapIterator.class b/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/bidimap/DualTreeBidiMap$BidiOrderedMapIterator.class
new file mode 100755
index 0000000..1917aa0
--- /dev/null
+++ b/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/bidimap/DualTreeBidiMap$BidiOrderedMapIterator.class
Binary files differ
diff --git a/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/bidimap/DualTreeBidiMap$ViewMap.class b/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/bidimap/DualTreeBidiMap$ViewMap.class
new file mode 100755
index 0000000..8effe7a
--- /dev/null
+++ b/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/bidimap/DualTreeBidiMap$ViewMap.class
Binary files differ
diff --git a/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/bidimap/DualTreeBidiMap.class b/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/bidimap/DualTreeBidiMap.class
new file mode 100755
index 0000000..d647a5f
--- /dev/null
+++ b/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/bidimap/DualTreeBidiMap.class
Binary files differ
diff --git a/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/bidimap/TreeBidiMap$EntryView.class b/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/bidimap/TreeBidiMap$EntryView.class
new file mode 100755
index 0000000..5394857
--- /dev/null
+++ b/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/bidimap/TreeBidiMap$EntryView.class
Binary files differ
diff --git a/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/bidimap/TreeBidiMap$Inverse.class b/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/bidimap/TreeBidiMap$Inverse.class
new file mode 100755
index 0000000..320fc43
--- /dev/null
+++ b/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/bidimap/TreeBidiMap$Inverse.class
Binary files differ
diff --git a/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/bidimap/TreeBidiMap$Node.class b/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/bidimap/TreeBidiMap$Node.class
new file mode 100755
index 0000000..806d45f
--- /dev/null
+++ b/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/bidimap/TreeBidiMap$Node.class
Binary files differ
diff --git a/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/bidimap/TreeBidiMap$View.class b/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/bidimap/TreeBidiMap$View.class
new file mode 100755
index 0000000..2fa1df4
--- /dev/null
+++ b/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/bidimap/TreeBidiMap$View.class
Binary files differ
diff --git a/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/bidimap/TreeBidiMap$ViewIterator.class b/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/bidimap/TreeBidiMap$ViewIterator.class
new file mode 100755
index 0000000..86e40c1
--- /dev/null
+++ b/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/bidimap/TreeBidiMap$ViewIterator.class
Binary files differ
diff --git a/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/bidimap/TreeBidiMap$ViewMapIterator.class b/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/bidimap/TreeBidiMap$ViewMapIterator.class
new file mode 100755
index 0000000..ddb4e2e
--- /dev/null
+++ b/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/bidimap/TreeBidiMap$ViewMapIterator.class
Binary files differ
diff --git a/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/bidimap/TreeBidiMap.class b/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/bidimap/TreeBidiMap.class
new file mode 100755
index 0000000..f37c9ba
--- /dev/null
+++ b/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/bidimap/TreeBidiMap.class
Binary files differ
diff --git a/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/bidimap/UnmodifiableBidiMap.class b/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/bidimap/UnmodifiableBidiMap.class
new file mode 100755
index 0000000..8906e47
--- /dev/null
+++ b/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/bidimap/UnmodifiableBidiMap.class
Binary files differ
diff --git a/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/bidimap/UnmodifiableOrderedBidiMap.class b/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/bidimap/UnmodifiableOrderedBidiMap.class
new file mode 100755
index 0000000..93e38d8
--- /dev/null
+++ b/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/bidimap/UnmodifiableOrderedBidiMap.class
Binary files differ
diff --git a/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/bidimap/UnmodifiableSortedBidiMap.class b/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/bidimap/UnmodifiableSortedBidiMap.class
new file mode 100755
index 0000000..d325f91
--- /dev/null
+++ b/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/bidimap/UnmodifiableSortedBidiMap.class
Binary files differ
diff --git a/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/buffer/AbstractBufferDecorator.class b/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/buffer/AbstractBufferDecorator.class
new file mode 100755
index 0000000..09deebf
--- /dev/null
+++ b/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/buffer/AbstractBufferDecorator.class
Binary files differ
diff --git a/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/buffer/BlockingBuffer.class b/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/buffer/BlockingBuffer.class
new file mode 100755
index 0000000..06129f2
--- /dev/null
+++ b/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/buffer/BlockingBuffer.class
Binary files differ
diff --git a/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/buffer/BoundedBuffer$NotifyingIterator.class b/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/buffer/BoundedBuffer$NotifyingIterator.class
new file mode 100755
index 0000000..fcec171
--- /dev/null
+++ b/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/buffer/BoundedBuffer$NotifyingIterator.class
Binary files differ
diff --git a/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/buffer/BoundedBuffer.class b/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/buffer/BoundedBuffer.class
new file mode 100755
index 0000000..b6d873c
--- /dev/null
+++ b/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/buffer/BoundedBuffer.class
Binary files differ
diff --git a/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/buffer/BoundedFifoBuffer$1.class b/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/buffer/BoundedFifoBuffer$1.class
new file mode 100755
index 0000000..cc955ad
--- /dev/null
+++ b/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/buffer/BoundedFifoBuffer$1.class
Binary files differ
diff --git a/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/buffer/BoundedFifoBuffer.class b/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/buffer/BoundedFifoBuffer.class
new file mode 100755
index 0000000..043f6f0
--- /dev/null
+++ b/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/buffer/BoundedFifoBuffer.class
Binary files differ
diff --git a/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/buffer/CircularFifoBuffer.class b/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/buffer/CircularFifoBuffer.class
new file mode 100755
index 0000000..56bdaa3
--- /dev/null
+++ b/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/buffer/CircularFifoBuffer.class
Binary files differ
diff --git a/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/buffer/PredicatedBuffer.class b/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/buffer/PredicatedBuffer.class
new file mode 100755
index 0000000..c1f624a
--- /dev/null
+++ b/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/buffer/PredicatedBuffer.class
Binary files differ
diff --git a/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/buffer/PriorityBuffer$1.class b/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/buffer/PriorityBuffer$1.class
new file mode 100755
index 0000000..149ce8f
--- /dev/null
+++ b/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/buffer/PriorityBuffer$1.class
Binary files differ
diff --git a/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/buffer/PriorityBuffer.class b/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/buffer/PriorityBuffer.class
new file mode 100755
index 0000000..8dcc425
--- /dev/null
+++ b/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/buffer/PriorityBuffer.class
Binary files differ
diff --git a/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/buffer/SynchronizedBuffer.class b/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/buffer/SynchronizedBuffer.class
new file mode 100755
index 0000000..1e11264
--- /dev/null
+++ b/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/buffer/SynchronizedBuffer.class
Binary files differ
diff --git a/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/buffer/TransformedBuffer.class b/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/buffer/TransformedBuffer.class
new file mode 100755
index 0000000..14f4591
--- /dev/null
+++ b/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/buffer/TransformedBuffer.class
Binary files differ
diff --git a/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/buffer/TypedBuffer.class b/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/buffer/TypedBuffer.class
new file mode 100755
index 0000000..85ccdeb
--- /dev/null
+++ b/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/buffer/TypedBuffer.class
Binary files differ
diff --git a/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/buffer/UnboundedFifoBuffer$1.class b/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/buffer/UnboundedFifoBuffer$1.class
new file mode 100755
index 0000000..c7b950a
--- /dev/null
+++ b/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/buffer/UnboundedFifoBuffer$1.class
Binary files differ
diff --git a/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/buffer/UnboundedFifoBuffer.class b/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/buffer/UnboundedFifoBuffer.class
new file mode 100755
index 0000000..a013d5b
--- /dev/null
+++ b/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/buffer/UnboundedFifoBuffer.class
Binary files differ
diff --git a/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/buffer/UnmodifiableBuffer.class b/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/buffer/UnmodifiableBuffer.class
new file mode 100755
index 0000000..231d091
--- /dev/null
+++ b/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/buffer/UnmodifiableBuffer.class
Binary files differ
diff --git a/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/collection/AbstractCollectionDecorator.class b/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/collection/AbstractCollectionDecorator.class
new file mode 100755
index 0000000..f32d651
--- /dev/null
+++ b/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/collection/AbstractCollectionDecorator.class
Binary files differ
diff --git a/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/collection/AbstractSerializableCollectionDecorator.class b/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/collection/AbstractSerializableCollectionDecorator.class
new file mode 100755
index 0000000..73e52d0
--- /dev/null
+++ b/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/collection/AbstractSerializableCollectionDecorator.class
Binary files differ
diff --git a/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/collection/CompositeCollection$CollectionMutator.class b/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/collection/CompositeCollection$CollectionMutator.class
new file mode 100755
index 0000000..245ef68
--- /dev/null
+++ b/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/collection/CompositeCollection$CollectionMutator.class
Binary files differ
diff --git a/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/collection/CompositeCollection.class b/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/collection/CompositeCollection.class
new file mode 100755
index 0000000..272e9d4
--- /dev/null
+++ b/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/collection/CompositeCollection.class
Binary files differ
diff --git a/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/collection/PredicatedCollection.class b/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/collection/PredicatedCollection.class
new file mode 100755
index 0000000..5309264
--- /dev/null
+++ b/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/collection/PredicatedCollection.class
Binary files differ
diff --git a/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/collection/SynchronizedCollection.class b/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/collection/SynchronizedCollection.class
new file mode 100755
index 0000000..43bc8fb
--- /dev/null
+++ b/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/collection/SynchronizedCollection.class
Binary files differ
diff --git a/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/collection/TransformedCollection.class b/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/collection/TransformedCollection.class
new file mode 100755
index 0000000..f9b3edf
--- /dev/null
+++ b/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/collection/TransformedCollection.class
Binary files differ
diff --git a/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/collection/TypedCollection.class b/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/collection/TypedCollection.class
new file mode 100755
index 0000000..f715906
--- /dev/null
+++ b/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/collection/TypedCollection.class
Binary files differ
diff --git a/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/collection/UnmodifiableBoundedCollection.class b/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/collection/UnmodifiableBoundedCollection.class
new file mode 100755
index 0000000..7accb4f
--- /dev/null
+++ b/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/collection/UnmodifiableBoundedCollection.class
Binary files differ
diff --git a/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/collection/UnmodifiableCollection.class b/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/collection/UnmodifiableCollection.class
new file mode 100755
index 0000000..b542fb0
--- /dev/null
+++ b/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/collection/UnmodifiableCollection.class
Binary files differ
diff --git a/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/comparators/BooleanComparator.class b/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/comparators/BooleanComparator.class
new file mode 100755
index 0000000..34a4e09
--- /dev/null
+++ b/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/comparators/BooleanComparator.class
Binary files differ
diff --git a/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/comparators/ComparableComparator.class b/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/comparators/ComparableComparator.class
new file mode 100755
index 0000000..f71300b
--- /dev/null
+++ b/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/comparators/ComparableComparator.class
Binary files differ
diff --git a/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/comparators/ComparatorChain.class b/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/comparators/ComparatorChain.class
new file mode 100755
index 0000000..7278551
--- /dev/null
+++ b/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/comparators/ComparatorChain.class
Binary files differ
diff --git a/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/comparators/FixedOrderComparator.class b/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/comparators/FixedOrderComparator.class
new file mode 100755
index 0000000..d43994b
--- /dev/null
+++ b/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/comparators/FixedOrderComparator.class
Binary files differ
diff --git a/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/comparators/NullComparator.class b/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/comparators/NullComparator.class
new file mode 100755
index 0000000..bfe37a8
--- /dev/null
+++ b/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/comparators/NullComparator.class
Binary files differ
diff --git a/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/comparators/ReverseComparator.class b/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/comparators/ReverseComparator.class
new file mode 100755
index 0000000..b88c2e1
--- /dev/null
+++ b/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/comparators/ReverseComparator.class
Binary files differ
diff --git a/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/comparators/TransformingComparator.class b/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/comparators/TransformingComparator.class
new file mode 100755
index 0000000..e6e29ef
--- /dev/null
+++ b/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/comparators/TransformingComparator.class
Binary files differ
diff --git a/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/functors/AllPredicate.class b/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/functors/AllPredicate.class
new file mode 100755
index 0000000..6ebd75e
--- /dev/null
+++ b/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/functors/AllPredicate.class
Binary files differ
diff --git a/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/functors/AndPredicate.class b/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/functors/AndPredicate.class
new file mode 100755
index 0000000..62cb11c
--- /dev/null
+++ b/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/functors/AndPredicate.class
Binary files differ
diff --git a/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/functors/AnyPredicate.class b/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/functors/AnyPredicate.class
new file mode 100755
index 0000000..0e5448d
--- /dev/null
+++ b/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/functors/AnyPredicate.class
Binary files differ
diff --git a/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/functors/ChainedClosure.class b/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/functors/ChainedClosure.class
new file mode 100755
index 0000000..352306e
--- /dev/null
+++ b/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/functors/ChainedClosure.class
Binary files differ
diff --git a/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/functors/ChainedTransformer.class b/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/functors/ChainedTransformer.class
new file mode 100755
index 0000000..cc7f540
--- /dev/null
+++ b/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/functors/ChainedTransformer.class
Binary files differ
diff --git a/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/functors/CloneTransformer.class b/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/functors/CloneTransformer.class
new file mode 100755
index 0000000..5f14009
--- /dev/null
+++ b/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/functors/CloneTransformer.class
Binary files differ
diff --git a/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/functors/ClosureTransformer.class b/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/functors/ClosureTransformer.class
new file mode 100755
index 0000000..1557710
--- /dev/null
+++ b/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/functors/ClosureTransformer.class
Binary files differ
diff --git a/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/functors/ConstantFactory.class b/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/functors/ConstantFactory.class
new file mode 100755
index 0000000..638a1ed
--- /dev/null
+++ b/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/functors/ConstantFactory.class
Binary files differ
diff --git a/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/functors/ConstantTransformer.class b/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/functors/ConstantTransformer.class
new file mode 100755
index 0000000..149206d
--- /dev/null
+++ b/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/functors/ConstantTransformer.class
Binary files differ
diff --git a/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/functors/EqualPredicate.class b/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/functors/EqualPredicate.class
new file mode 100755
index 0000000..0fb59e4
--- /dev/null
+++ b/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/functors/EqualPredicate.class
Binary files differ
diff --git a/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/functors/ExceptionClosure.class b/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/functors/ExceptionClosure.class
new file mode 100755
index 0000000..3602b04
--- /dev/null
+++ b/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/functors/ExceptionClosure.class
Binary files differ
diff --git a/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/functors/ExceptionFactory.class b/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/functors/ExceptionFactory.class
new file mode 100755
index 0000000..28ed6e5
--- /dev/null
+++ b/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/functors/ExceptionFactory.class
Binary files differ
diff --git a/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/functors/ExceptionPredicate.class b/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/functors/ExceptionPredicate.class
new file mode 100755
index 0000000..7fa692c
--- /dev/null
+++ b/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/functors/ExceptionPredicate.class
Binary files differ
diff --git a/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/functors/ExceptionTransformer.class b/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/functors/ExceptionTransformer.class
new file mode 100755
index 0000000..92bfafc
--- /dev/null
+++ b/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/functors/ExceptionTransformer.class
Binary files differ
diff --git a/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/functors/FactoryTransformer.class b/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/functors/FactoryTransformer.class
new file mode 100755
index 0000000..de80139
--- /dev/null
+++ b/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/functors/FactoryTransformer.class
Binary files differ
diff --git a/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/functors/FalsePredicate.class b/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/functors/FalsePredicate.class
new file mode 100755
index 0000000..675a159
--- /dev/null
+++ b/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/functors/FalsePredicate.class
Binary files differ
diff --git a/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/functors/ForClosure.class b/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/functors/ForClosure.class
new file mode 100755
index 0000000..a89fd71
--- /dev/null
+++ b/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/functors/ForClosure.class
Binary files differ
diff --git a/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/functors/FunctorUtils.class b/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/functors/FunctorUtils.class
new file mode 100755
index 0000000..47eda5e
--- /dev/null
+++ b/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/functors/FunctorUtils.class
Binary files differ
diff --git a/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/functors/IdentityPredicate.class b/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/functors/IdentityPredicate.class
new file mode 100755
index 0000000..f7f09c4
--- /dev/null
+++ b/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/functors/IdentityPredicate.class
Binary files differ
diff --git a/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/functors/IfClosure.class b/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/functors/IfClosure.class
new file mode 100755
index 0000000..f75c256
--- /dev/null
+++ b/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/functors/IfClosure.class
Binary files differ
diff --git a/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/functors/InstanceofPredicate.class b/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/functors/InstanceofPredicate.class
new file mode 100755
index 0000000..13abab5
--- /dev/null
+++ b/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/functors/InstanceofPredicate.class
Binary files differ
diff --git a/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/functors/InstantiateFactory.class b/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/functors/InstantiateFactory.class
new file mode 100755
index 0000000..510d708
--- /dev/null
+++ b/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/functors/InstantiateFactory.class
Binary files differ
diff --git a/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/functors/InstantiateTransformer.class b/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/functors/InstantiateTransformer.class
new file mode 100755
index 0000000..ec94a9c
--- /dev/null
+++ b/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/functors/InstantiateTransformer.class
Binary files differ
diff --git a/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/functors/InvokerTransformer.class b/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/functors/InvokerTransformer.class
new file mode 100755
index 0000000..2d971d4
--- /dev/null
+++ b/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/functors/InvokerTransformer.class
Binary files differ
diff --git a/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/functors/MapTransformer.class b/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/functors/MapTransformer.class
new file mode 100755
index 0000000..5dd8b13
--- /dev/null
+++ b/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/functors/MapTransformer.class
Binary files differ
diff --git a/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/functors/NOPClosure.class b/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/functors/NOPClosure.class
new file mode 100755
index 0000000..b27f904
--- /dev/null
+++ b/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/functors/NOPClosure.class
Binary files differ
diff --git a/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/functors/NOPTransformer.class b/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/functors/NOPTransformer.class
new file mode 100755
index 0000000..d92c10c
--- /dev/null
+++ b/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/functors/NOPTransformer.class
Binary files differ
diff --git a/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/functors/NonePredicate.class b/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/functors/NonePredicate.class
new file mode 100755
index 0000000..25fd9d2
--- /dev/null
+++ b/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/functors/NonePredicate.class
Binary files differ
diff --git a/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/functors/NotNullPredicate.class b/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/functors/NotNullPredicate.class
new file mode 100755
index 0000000..e22bc94
--- /dev/null
+++ b/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/functors/NotNullPredicate.class
Binary files differ
diff --git a/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/functors/NotPredicate.class b/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/functors/NotPredicate.class
new file mode 100755
index 0000000..96aeb15
--- /dev/null
+++ b/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/functors/NotPredicate.class
Binary files differ
diff --git a/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/functors/NullIsExceptionPredicate.class b/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/functors/NullIsExceptionPredicate.class
new file mode 100755
index 0000000..ea8ceea
--- /dev/null
+++ b/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/functors/NullIsExceptionPredicate.class
Binary files differ
diff --git a/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/functors/NullIsFalsePredicate.class b/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/functors/NullIsFalsePredicate.class
new file mode 100755
index 0000000..67caec2
--- /dev/null
+++ b/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/functors/NullIsFalsePredicate.class
Binary files differ
diff --git a/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/functors/NullIsTruePredicate.class b/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/functors/NullIsTruePredicate.class
new file mode 100755
index 0000000..84abaac
--- /dev/null
+++ b/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/functors/NullIsTruePredicate.class
Binary files differ
diff --git a/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/functors/NullPredicate.class b/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/functors/NullPredicate.class
new file mode 100755
index 0000000..8d384b6
--- /dev/null
+++ b/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/functors/NullPredicate.class
Binary files differ
diff --git a/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/functors/OnePredicate.class b/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/functors/OnePredicate.class
new file mode 100755
index 0000000..fdb27d3
--- /dev/null
+++ b/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/functors/OnePredicate.class
Binary files differ
diff --git a/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/functors/OrPredicate.class b/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/functors/OrPredicate.class
new file mode 100755
index 0000000..157eeae
--- /dev/null
+++ b/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/functors/OrPredicate.class
Binary files differ
diff --git a/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/functors/PredicateDecorator.class b/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/functors/PredicateDecorator.class
new file mode 100755
index 0000000..98795d9
--- /dev/null
+++ b/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/functors/PredicateDecorator.class
Binary files differ
diff --git a/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/functors/PredicateTransformer.class b/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/functors/PredicateTransformer.class
new file mode 100755
index 0000000..703e832
--- /dev/null
+++ b/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/functors/PredicateTransformer.class
Binary files differ
diff --git a/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/functors/PrototypeFactory$1.class b/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/functors/PrototypeFactory$1.class
new file mode 100755
index 0000000..f89da83
--- /dev/null
+++ b/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/functors/PrototypeFactory$1.class
Binary files differ
diff --git a/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/functors/PrototypeFactory$PrototypeCloneFactory.class b/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/functors/PrototypeFactory$PrototypeCloneFactory.class
new file mode 100755
index 0000000..ee41589
--- /dev/null
+++ b/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/functors/PrototypeFactory$PrototypeCloneFactory.class
Binary files differ
diff --git a/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/functors/PrototypeFactory$PrototypeSerializationFactory.class b/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/functors/PrototypeFactory$PrototypeSerializationFactory.class
new file mode 100755
index 0000000..383ba77
--- /dev/null
+++ b/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/functors/PrototypeFactory$PrototypeSerializationFactory.class
Binary files differ
diff --git a/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/functors/PrototypeFactory.class b/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/functors/PrototypeFactory.class
new file mode 100755
index 0000000..ab3f534
--- /dev/null
+++ b/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/functors/PrototypeFactory.class
Binary files differ
diff --git a/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/functors/StringValueTransformer.class b/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/functors/StringValueTransformer.class
new file mode 100755
index 0000000..337887d
--- /dev/null
+++ b/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/functors/StringValueTransformer.class
Binary files differ
diff --git a/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/functors/SwitchClosure.class b/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/functors/SwitchClosure.class
new file mode 100755
index 0000000..fa5d97c
--- /dev/null
+++ b/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/functors/SwitchClosure.class
Binary files differ
diff --git a/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/functors/SwitchTransformer.class b/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/functors/SwitchTransformer.class
new file mode 100755
index 0000000..dba350e
--- /dev/null
+++ b/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/functors/SwitchTransformer.class
Binary files differ
diff --git a/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/functors/TransformedPredicate.class b/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/functors/TransformedPredicate.class
new file mode 100755
index 0000000..0c2770c
--- /dev/null
+++ b/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/functors/TransformedPredicate.class
Binary files differ
diff --git a/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/functors/TransformerClosure.class b/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/functors/TransformerClosure.class
new file mode 100755
index 0000000..761b280
--- /dev/null
+++ b/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/functors/TransformerClosure.class
Binary files differ
diff --git a/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/functors/TransformerPredicate.class b/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/functors/TransformerPredicate.class
new file mode 100755
index 0000000..7b5cb51
--- /dev/null
+++ b/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/functors/TransformerPredicate.class
Binary files differ
diff --git a/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/functors/TruePredicate.class b/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/functors/TruePredicate.class
new file mode 100755
index 0000000..d22088d
--- /dev/null
+++ b/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/functors/TruePredicate.class
Binary files differ
diff --git a/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/functors/UniquePredicate.class b/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/functors/UniquePredicate.class
new file mode 100755
index 0000000..090a6ab
--- /dev/null
+++ b/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/functors/UniquePredicate.class
Binary files differ
diff --git a/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/functors/WhileClosure.class b/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/functors/WhileClosure.class
new file mode 100755
index 0000000..9852dc1
--- /dev/null
+++ b/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/functors/WhileClosure.class
Binary files differ
diff --git a/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/iterators/AbstractEmptyIterator.class b/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/iterators/AbstractEmptyIterator.class
new file mode 100755
index 0000000..6013229
--- /dev/null
+++ b/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/iterators/AbstractEmptyIterator.class
Binary files differ
diff --git a/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/iterators/AbstractIteratorDecorator.class b/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/iterators/AbstractIteratorDecorator.class
new file mode 100755
index 0000000..9d1bdfb
--- /dev/null
+++ b/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/iterators/AbstractIteratorDecorator.class
Binary files differ
diff --git a/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/iterators/AbstractListIteratorDecorator.class b/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/iterators/AbstractListIteratorDecorator.class
new file mode 100755
index 0000000..f0d5079
--- /dev/null
+++ b/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/iterators/AbstractListIteratorDecorator.class
Binary files differ
diff --git a/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/iterators/AbstractMapIteratorDecorator.class b/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/iterators/AbstractMapIteratorDecorator.class
new file mode 100755
index 0000000..9aaf492
--- /dev/null
+++ b/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/iterators/AbstractMapIteratorDecorator.class
Binary files differ
diff --git a/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/iterators/AbstractOrderedMapIteratorDecorator.class b/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/iterators/AbstractOrderedMapIteratorDecorator.class
new file mode 100755
index 0000000..92ca372
--- /dev/null
+++ b/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/iterators/AbstractOrderedMapIteratorDecorator.class
Binary files differ
diff --git a/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/iterators/ArrayIterator.class b/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/iterators/ArrayIterator.class
new file mode 100755
index 0000000..ceab4fc
--- /dev/null
+++ b/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/iterators/ArrayIterator.class
Binary files differ
diff --git a/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/iterators/ArrayListIterator.class b/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/iterators/ArrayListIterator.class
new file mode 100755
index 0000000..dbe76c2
--- /dev/null
+++ b/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/iterators/ArrayListIterator.class
Binary files differ
diff --git a/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/iterators/CollatingIterator.class b/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/iterators/CollatingIterator.class
new file mode 100755
index 0000000..96c4792
--- /dev/null
+++ b/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/iterators/CollatingIterator.class
Binary files differ
diff --git a/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/iterators/EmptyIterator.class b/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/iterators/EmptyIterator.class
new file mode 100755
index 0000000..eb5ca3a
--- /dev/null
+++ b/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/iterators/EmptyIterator.class
Binary files differ
diff --git a/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/iterators/EmptyListIterator.class b/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/iterators/EmptyListIterator.class
new file mode 100755
index 0000000..31f4430
--- /dev/null
+++ b/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/iterators/EmptyListIterator.class
Binary files differ
diff --git a/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/iterators/EmptyMapIterator.class b/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/iterators/EmptyMapIterator.class
new file mode 100755
index 0000000..f8535a5
--- /dev/null
+++ b/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/iterators/EmptyMapIterator.class
Binary files differ
diff --git a/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/iterators/EmptyOrderedIterator.class b/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/iterators/EmptyOrderedIterator.class
new file mode 100755
index 0000000..4a92dcf
--- /dev/null
+++ b/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/iterators/EmptyOrderedIterator.class
Binary files differ
diff --git a/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/iterators/EmptyOrderedMapIterator.class b/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/iterators/EmptyOrderedMapIterator.class
new file mode 100755
index 0000000..ab0a06a
--- /dev/null
+++ b/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/iterators/EmptyOrderedMapIterator.class
Binary files differ
diff --git a/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/iterators/EntrySetMapIterator.class b/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/iterators/EntrySetMapIterator.class
new file mode 100755
index 0000000..fa4112b
--- /dev/null
+++ b/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/iterators/EntrySetMapIterator.class
Binary files differ
diff --git a/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/iterators/EnumerationIterator.class b/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/iterators/EnumerationIterator.class
new file mode 100755
index 0000000..934f7c4
--- /dev/null
+++ b/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/iterators/EnumerationIterator.class
Binary files differ
diff --git a/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/iterators/FilterIterator.class b/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/iterators/FilterIterator.class
new file mode 100755
index 0000000..7ea25f9
--- /dev/null
+++ b/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/iterators/FilterIterator.class
Binary files differ
diff --git a/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/iterators/FilterListIterator.class b/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/iterators/FilterListIterator.class
new file mode 100755
index 0000000..6a4d7a4
--- /dev/null
+++ b/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/iterators/FilterListIterator.class
Binary files differ
diff --git a/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/iterators/IteratorChain.class b/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/iterators/IteratorChain.class
new file mode 100755
index 0000000..2d6e553
--- /dev/null
+++ b/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/iterators/IteratorChain.class
Binary files differ
diff --git a/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/iterators/IteratorEnumeration.class b/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/iterators/IteratorEnumeration.class
new file mode 100755
index 0000000..70af33e
--- /dev/null
+++ b/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/iterators/IteratorEnumeration.class
Binary files differ
diff --git a/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/iterators/ListIteratorWrapper.class b/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/iterators/ListIteratorWrapper.class
new file mode 100755
index 0000000..62c5aee
--- /dev/null
+++ b/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/iterators/ListIteratorWrapper.class
Binary files differ
diff --git a/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/iterators/LoopingIterator.class b/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/iterators/LoopingIterator.class
new file mode 100755
index 0000000..683c423
--- /dev/null
+++ b/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/iterators/LoopingIterator.class
Binary files differ
diff --git a/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/iterators/LoopingListIterator.class b/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/iterators/LoopingListIterator.class
new file mode 100755
index 0000000..6a7ad75
--- /dev/null
+++ b/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/iterators/LoopingListIterator.class
Binary files differ
diff --git a/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/iterators/ObjectArrayIterator.class b/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/iterators/ObjectArrayIterator.class
new file mode 100755
index 0000000..d46e329
--- /dev/null
+++ b/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/iterators/ObjectArrayIterator.class
Binary files differ
diff --git a/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/iterators/ObjectArrayListIterator.class b/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/iterators/ObjectArrayListIterator.class
new file mode 100755
index 0000000..af22fbf
--- /dev/null
+++ b/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/iterators/ObjectArrayListIterator.class
Binary files differ
diff --git a/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/iterators/ObjectGraphIterator.class b/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/iterators/ObjectGraphIterator.class
new file mode 100755
index 0000000..0f5d4b6
--- /dev/null
+++ b/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/iterators/ObjectGraphIterator.class
Binary files differ
diff --git a/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/iterators/ProxyIterator.class b/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/iterators/ProxyIterator.class
new file mode 100755
index 0000000..ff6627d
--- /dev/null
+++ b/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/iterators/ProxyIterator.class
Binary files differ
diff --git a/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/iterators/ProxyListIterator.class b/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/iterators/ProxyListIterator.class
new file mode 100755
index 0000000..22c7852
--- /dev/null
+++ b/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/iterators/ProxyListIterator.class
Binary files differ
diff --git a/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/iterators/ReverseListIterator.class b/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/iterators/ReverseListIterator.class
new file mode 100755
index 0000000..e850eb2
--- /dev/null
+++ b/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/iterators/ReverseListIterator.class
Binary files differ
diff --git a/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/iterators/SingletonIterator.class b/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/iterators/SingletonIterator.class
new file mode 100755
index 0000000..de5bde6
--- /dev/null
+++ b/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/iterators/SingletonIterator.class
Binary files differ
diff --git a/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/iterators/SingletonListIterator.class b/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/iterators/SingletonListIterator.class
new file mode 100755
index 0000000..51f9356
--- /dev/null
+++ b/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/iterators/SingletonListIterator.class
Binary files differ
diff --git a/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/iterators/TransformIterator.class b/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/iterators/TransformIterator.class
new file mode 100755
index 0000000..42193df
--- /dev/null
+++ b/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/iterators/TransformIterator.class
Binary files differ
diff --git a/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/iterators/UniqueFilterIterator.class b/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/iterators/UniqueFilterIterator.class
new file mode 100755
index 0000000..0d44002
--- /dev/null
+++ b/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/iterators/UniqueFilterIterator.class
Binary files differ
diff --git a/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/iterators/UnmodifiableIterator.class b/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/iterators/UnmodifiableIterator.class
new file mode 100755
index 0000000..d376ce1
--- /dev/null
+++ b/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/iterators/UnmodifiableIterator.class
Binary files differ
diff --git a/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/iterators/UnmodifiableListIterator.class b/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/iterators/UnmodifiableListIterator.class
new file mode 100755
index 0000000..34767b0
--- /dev/null
+++ b/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/iterators/UnmodifiableListIterator.class
Binary files differ
diff --git a/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/iterators/UnmodifiableMapIterator.class b/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/iterators/UnmodifiableMapIterator.class
new file mode 100755
index 0000000..3f64fb4
--- /dev/null
+++ b/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/iterators/UnmodifiableMapIterator.class
Binary files differ
diff --git a/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/iterators/UnmodifiableOrderedMapIterator.class b/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/iterators/UnmodifiableOrderedMapIterator.class
new file mode 100755
index 0000000..31873a6
--- /dev/null
+++ b/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/iterators/UnmodifiableOrderedMapIterator.class
Binary files differ
diff --git a/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/keyvalue/AbstractKeyValue.class b/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/keyvalue/AbstractKeyValue.class
new file mode 100755
index 0000000..3c60816
--- /dev/null
+++ b/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/keyvalue/AbstractKeyValue.class
Binary files differ
diff --git a/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/keyvalue/AbstractMapEntry.class b/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/keyvalue/AbstractMapEntry.class
new file mode 100755
index 0000000..4c34718
--- /dev/null
+++ b/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/keyvalue/AbstractMapEntry.class
Binary files differ
diff --git a/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/keyvalue/AbstractMapEntryDecorator.class b/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/keyvalue/AbstractMapEntryDecorator.class
new file mode 100755
index 0000000..d583176
--- /dev/null
+++ b/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/keyvalue/AbstractMapEntryDecorator.class
Binary files differ
diff --git a/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/keyvalue/DefaultKeyValue.class b/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/keyvalue/DefaultKeyValue.class
new file mode 100755
index 0000000..2c617e8
--- /dev/null
+++ b/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/keyvalue/DefaultKeyValue.class
Binary files differ
diff --git a/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/keyvalue/DefaultMapEntry.class b/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/keyvalue/DefaultMapEntry.class
new file mode 100755
index 0000000..31234be
--- /dev/null
+++ b/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/keyvalue/DefaultMapEntry.class
Binary files differ
diff --git a/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/keyvalue/MultiKey.class b/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/keyvalue/MultiKey.class
new file mode 100755
index 0000000..4f4c65a
--- /dev/null
+++ b/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/keyvalue/MultiKey.class
Binary files differ
diff --git a/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/keyvalue/TiedMapEntry.class b/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/keyvalue/TiedMapEntry.class
new file mode 100755
index 0000000..d9d72b5
--- /dev/null
+++ b/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/keyvalue/TiedMapEntry.class
Binary files differ
diff --git a/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/keyvalue/UnmodifiableMapEntry.class b/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/keyvalue/UnmodifiableMapEntry.class
new file mode 100755
index 0000000..3513b5a
--- /dev/null
+++ b/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/keyvalue/UnmodifiableMapEntry.class
Binary files differ
diff --git a/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/list/AbstractLinkedList$LinkedListIterator.class b/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/list/AbstractLinkedList$LinkedListIterator.class
new file mode 100755
index 0000000..e3d1329
--- /dev/null
+++ b/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/list/AbstractLinkedList$LinkedListIterator.class
Binary files differ
diff --git a/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/list/AbstractLinkedList$LinkedSubList.class b/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/list/AbstractLinkedList$LinkedSubList.class
new file mode 100755
index 0000000..e7b9ae8
--- /dev/null
+++ b/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/list/AbstractLinkedList$LinkedSubList.class
Binary files differ
diff --git a/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/list/AbstractLinkedList$LinkedSubListIterator.class b/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/list/AbstractLinkedList$LinkedSubListIterator.class
new file mode 100755
index 0000000..40a72be
--- /dev/null
+++ b/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/list/AbstractLinkedList$LinkedSubListIterator.class
Binary files differ
diff --git a/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/list/AbstractLinkedList$Node.class b/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/list/AbstractLinkedList$Node.class
new file mode 100755
index 0000000..954a2d8
--- /dev/null
+++ b/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/list/AbstractLinkedList$Node.class
Binary files differ
diff --git a/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/list/AbstractLinkedList.class b/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/list/AbstractLinkedList.class
new file mode 100755
index 0000000..502d734
--- /dev/null
+++ b/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/list/AbstractLinkedList.class
Binary files differ
diff --git a/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/list/AbstractListDecorator.class b/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/list/AbstractListDecorator.class
new file mode 100755
index 0000000..3df31cd
--- /dev/null
+++ b/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/list/AbstractListDecorator.class
Binary files differ
diff --git a/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/list/AbstractSerializableListDecorator.class b/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/list/AbstractSerializableListDecorator.class
new file mode 100755
index 0000000..f908d4c
--- /dev/null
+++ b/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/list/AbstractSerializableListDecorator.class
Binary files differ
diff --git a/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/list/CursorableLinkedList$Cursor.class b/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/list/CursorableLinkedList$Cursor.class
new file mode 100755
index 0000000..9e60bd5
--- /dev/null
+++ b/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/list/CursorableLinkedList$Cursor.class
Binary files differ
diff --git a/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/list/CursorableLinkedList$SubCursor.class b/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/list/CursorableLinkedList$SubCursor.class
new file mode 100755
index 0000000..fbaa101
--- /dev/null
+++ b/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/list/CursorableLinkedList$SubCursor.class
Binary files differ
diff --git a/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/list/CursorableLinkedList.class b/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/list/CursorableLinkedList.class
new file mode 100755
index 0000000..369fac3
--- /dev/null
+++ b/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/list/CursorableLinkedList.class
Binary files differ
diff --git a/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/list/FixedSizeList$FixedSizeListIterator.class b/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/list/FixedSizeList$FixedSizeListIterator.class
new file mode 100755
index 0000000..da2afb0
--- /dev/null
+++ b/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/list/FixedSizeList$FixedSizeListIterator.class
Binary files differ
diff --git a/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/list/FixedSizeList.class b/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/list/FixedSizeList.class
new file mode 100755
index 0000000..e1e2d55
--- /dev/null
+++ b/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/list/FixedSizeList.class
Binary files differ
diff --git a/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/list/GrowthList.class b/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/list/GrowthList.class
new file mode 100755
index 0000000..babdf5e
--- /dev/null
+++ b/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/list/GrowthList.class
Binary files differ
diff --git a/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/list/LazyList.class b/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/list/LazyList.class
new file mode 100755
index 0000000..791ae90
--- /dev/null
+++ b/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/list/LazyList.class
Binary files differ
diff --git a/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/list/NodeCachingLinkedList.class b/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/list/NodeCachingLinkedList.class
new file mode 100755
index 0000000..c65ae58
--- /dev/null
+++ b/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/list/NodeCachingLinkedList.class
Binary files differ
diff --git a/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/list/PredicatedList$PredicatedListIterator.class b/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/list/PredicatedList$PredicatedListIterator.class
new file mode 100755
index 0000000..555b2b0
--- /dev/null
+++ b/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/list/PredicatedList$PredicatedListIterator.class
Binary files differ
diff --git a/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/list/PredicatedList.class b/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/list/PredicatedList.class
new file mode 100755
index 0000000..230192e
--- /dev/null
+++ b/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/list/PredicatedList.class
Binary files differ
diff --git a/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/list/SetUniqueList$SetListIterator.class b/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/list/SetUniqueList$SetListIterator.class
new file mode 100755
index 0000000..8fb5f6f
--- /dev/null
+++ b/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/list/SetUniqueList$SetListIterator.class
Binary files differ
diff --git a/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/list/SetUniqueList$SetListListIterator.class b/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/list/SetUniqueList$SetListListIterator.class
new file mode 100755
index 0000000..63196e6
--- /dev/null
+++ b/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/list/SetUniqueList$SetListListIterator.class
Binary files differ
diff --git a/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/list/SetUniqueList.class b/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/list/SetUniqueList.class
new file mode 100755
index 0000000..7303afb
--- /dev/null
+++ b/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/list/SetUniqueList.class
Binary files differ
diff --git a/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/list/SynchronizedList.class b/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/list/SynchronizedList.class
new file mode 100755
index 0000000..15bc320
--- /dev/null
+++ b/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/list/SynchronizedList.class
Binary files differ
diff --git a/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/list/TransformedList$TransformedListIterator.class b/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/list/TransformedList$TransformedListIterator.class
new file mode 100755
index 0000000..956d0b6
--- /dev/null
+++ b/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/list/TransformedList$TransformedListIterator.class
Binary files differ
diff --git a/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/list/TransformedList.class b/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/list/TransformedList.class
new file mode 100755
index 0000000..5a11492
--- /dev/null
+++ b/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/list/TransformedList.class
Binary files differ
diff --git a/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/list/TreeList$1.class b/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/list/TreeList$1.class
new file mode 100755
index 0000000..de453bf
--- /dev/null
+++ b/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/list/TreeList$1.class
Binary files differ
diff --git a/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/list/TreeList$AVLNode.class b/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/list/TreeList$AVLNode.class
new file mode 100755
index 0000000..5edcc67
--- /dev/null
+++ b/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/list/TreeList$AVLNode.class
Binary files differ
diff --git a/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/list/TreeList$TreeListIterator.class b/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/list/TreeList$TreeListIterator.class
new file mode 100755
index 0000000..50cf078
--- /dev/null
+++ b/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/list/TreeList$TreeListIterator.class
Binary files differ
diff --git a/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/list/TreeList.class b/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/list/TreeList.class
new file mode 100755
index 0000000..1456136
--- /dev/null
+++ b/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/list/TreeList.class
Binary files differ
diff --git a/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/list/TypedList.class b/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/list/TypedList.class
new file mode 100755
index 0000000..7050040
--- /dev/null
+++ b/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/list/TypedList.class
Binary files differ
diff --git a/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/list/UnmodifiableList.class b/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/list/UnmodifiableList.class
new file mode 100755
index 0000000..bfb8004
--- /dev/null
+++ b/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/list/UnmodifiableList.class
Binary files differ
diff --git a/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/map/AbstractHashedMap$EntrySet.class b/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/map/AbstractHashedMap$EntrySet.class
new file mode 100755
index 0000000..dc2aa22
--- /dev/null
+++ b/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/map/AbstractHashedMap$EntrySet.class
Binary files differ
diff --git a/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/map/AbstractHashedMap$EntrySetIterator.class b/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/map/AbstractHashedMap$EntrySetIterator.class
new file mode 100755
index 0000000..e62e009
--- /dev/null
+++ b/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/map/AbstractHashedMap$EntrySetIterator.class
Binary files differ
diff --git a/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/map/AbstractHashedMap$HashEntry.class b/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/map/AbstractHashedMap$HashEntry.class
new file mode 100755
index 0000000..4673af3
--- /dev/null
+++ b/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/map/AbstractHashedMap$HashEntry.class
Binary files differ
diff --git a/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/map/AbstractHashedMap$HashIterator.class b/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/map/AbstractHashedMap$HashIterator.class
new file mode 100755
index 0000000..319bc81
--- /dev/null
+++ b/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/map/AbstractHashedMap$HashIterator.class
Binary files differ
diff --git a/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/map/AbstractHashedMap$HashMapIterator.class b/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/map/AbstractHashedMap$HashMapIterator.class
new file mode 100755
index 0000000..deb5d23
--- /dev/null
+++ b/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/map/AbstractHashedMap$HashMapIterator.class
Binary files differ
diff --git a/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/map/AbstractHashedMap$KeySet.class b/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/map/AbstractHashedMap$KeySet.class
new file mode 100755
index 0000000..ad76d31
--- /dev/null
+++ b/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/map/AbstractHashedMap$KeySet.class
Binary files differ
diff --git a/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/map/AbstractHashedMap$KeySetIterator.class b/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/map/AbstractHashedMap$KeySetIterator.class
new file mode 100755
index 0000000..531dbb9
--- /dev/null
+++ b/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/map/AbstractHashedMap$KeySetIterator.class
Binary files differ
diff --git a/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/map/AbstractHashedMap$Values.class b/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/map/AbstractHashedMap$Values.class
new file mode 100755
index 0000000..8653cf2
--- /dev/null
+++ b/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/map/AbstractHashedMap$Values.class
Binary files differ
diff --git a/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/map/AbstractHashedMap$ValuesIterator.class b/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/map/AbstractHashedMap$ValuesIterator.class
new file mode 100755
index 0000000..68c6da9
--- /dev/null
+++ b/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/map/AbstractHashedMap$ValuesIterator.class
Binary files differ
diff --git a/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/map/AbstractHashedMap.class b/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/map/AbstractHashedMap.class
new file mode 100755
index 0000000..b2140f1
--- /dev/null
+++ b/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/map/AbstractHashedMap.class
Binary files differ
diff --git a/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/map/AbstractInputCheckedMapDecorator$EntrySet.class b/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/map/AbstractInputCheckedMapDecorator$EntrySet.class
new file mode 100755
index 0000000..0a1de16
--- /dev/null
+++ b/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/map/AbstractInputCheckedMapDecorator$EntrySet.class
Binary files differ
diff --git a/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/map/AbstractInputCheckedMapDecorator$EntrySetIterator.class b/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/map/AbstractInputCheckedMapDecorator$EntrySetIterator.class
new file mode 100755
index 0000000..ccd4a63
--- /dev/null
+++ b/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/map/AbstractInputCheckedMapDecorator$EntrySetIterator.class
Binary files differ
diff --git a/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/map/AbstractInputCheckedMapDecorator$MapEntry.class b/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/map/AbstractInputCheckedMapDecorator$MapEntry.class
new file mode 100755
index 0000000..0c57d0c
--- /dev/null
+++ b/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/map/AbstractInputCheckedMapDecorator$MapEntry.class
Binary files differ
diff --git a/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/map/AbstractInputCheckedMapDecorator.class b/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/map/AbstractInputCheckedMapDecorator.class
new file mode 100755
index 0000000..fadf385
--- /dev/null
+++ b/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/map/AbstractInputCheckedMapDecorator.class
Binary files differ
diff --git a/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/map/AbstractLinkedMap$EntrySetIterator.class b/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/map/AbstractLinkedMap$EntrySetIterator.class
new file mode 100755
index 0000000..19cbd55
--- /dev/null
+++ b/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/map/AbstractLinkedMap$EntrySetIterator.class
Binary files differ
diff --git a/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/map/AbstractLinkedMap$KeySetIterator.class b/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/map/AbstractLinkedMap$KeySetIterator.class
new file mode 100755
index 0000000..b50d53e
--- /dev/null
+++ b/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/map/AbstractLinkedMap$KeySetIterator.class
Binary files differ
diff --git a/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/map/AbstractLinkedMap$LinkEntry.class b/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/map/AbstractLinkedMap$LinkEntry.class
new file mode 100755
index 0000000..fc91fd0
--- /dev/null
+++ b/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/map/AbstractLinkedMap$LinkEntry.class
Binary files differ
diff --git a/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/map/AbstractLinkedMap$LinkIterator.class b/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/map/AbstractLinkedMap$LinkIterator.class
new file mode 100755
index 0000000..fbc9244
--- /dev/null
+++ b/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/map/AbstractLinkedMap$LinkIterator.class
Binary files differ
diff --git a/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/map/AbstractLinkedMap$LinkMapIterator.class b/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/map/AbstractLinkedMap$LinkMapIterator.class
new file mode 100755
index 0000000..ecfed48
--- /dev/null
+++ b/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/map/AbstractLinkedMap$LinkMapIterator.class
Binary files differ
diff --git a/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/map/AbstractLinkedMap$ValuesIterator.class b/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/map/AbstractLinkedMap$ValuesIterator.class
new file mode 100755
index 0000000..6cb0466
--- /dev/null
+++ b/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/map/AbstractLinkedMap$ValuesIterator.class
Binary files differ
diff --git a/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/map/AbstractLinkedMap.class b/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/map/AbstractLinkedMap.class
new file mode 100755
index 0000000..f468bad
--- /dev/null
+++ b/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/map/AbstractLinkedMap.class
Binary files differ
diff --git a/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/map/AbstractMapDecorator.class b/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/map/AbstractMapDecorator.class
new file mode 100755
index 0000000..174f938
--- /dev/null
+++ b/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/map/AbstractMapDecorator.class
Binary files differ
diff --git a/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/map/AbstractOrderedMapDecorator.class b/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/map/AbstractOrderedMapDecorator.class
new file mode 100755
index 0000000..35c1907
--- /dev/null
+++ b/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/map/AbstractOrderedMapDecorator.class
Binary files differ
diff --git a/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/map/AbstractReferenceMap$ReferenceEntry.class b/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/map/AbstractReferenceMap$ReferenceEntry.class
new file mode 100755
index 0000000..bb911ab
--- /dev/null
+++ b/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/map/AbstractReferenceMap$ReferenceEntry.class
Binary files differ
diff --git a/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/map/AbstractReferenceMap$ReferenceEntrySet.class b/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/map/AbstractReferenceMap$ReferenceEntrySet.class
new file mode 100755
index 0000000..76e0b19
--- /dev/null
+++ b/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/map/AbstractReferenceMap$ReferenceEntrySet.class
Binary files differ
diff --git a/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/map/AbstractReferenceMap$ReferenceEntrySetIterator.class b/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/map/AbstractReferenceMap$ReferenceEntrySetIterator.class
new file mode 100755
index 0000000..aeb4ac8
--- /dev/null
+++ b/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/map/AbstractReferenceMap$ReferenceEntrySetIterator.class
Binary files differ
diff --git a/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/map/AbstractReferenceMap$ReferenceKeySet.class b/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/map/AbstractReferenceMap$ReferenceKeySet.class
new file mode 100755
index 0000000..85712fd
--- /dev/null
+++ b/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/map/AbstractReferenceMap$ReferenceKeySet.class
Binary files differ
diff --git a/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/map/AbstractReferenceMap$ReferenceKeySetIterator.class b/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/map/AbstractReferenceMap$ReferenceKeySetIterator.class
new file mode 100755
index 0000000..d38112b
--- /dev/null
+++ b/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/map/AbstractReferenceMap$ReferenceKeySetIterator.class
Binary files differ
diff --git a/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/map/AbstractReferenceMap$ReferenceMapIterator.class b/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/map/AbstractReferenceMap$ReferenceMapIterator.class
new file mode 100755
index 0000000..71b8f5a
--- /dev/null
+++ b/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/map/AbstractReferenceMap$ReferenceMapIterator.class
Binary files differ
diff --git a/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/map/AbstractReferenceMap$ReferenceValues.class b/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/map/AbstractReferenceMap$ReferenceValues.class
new file mode 100755
index 0000000..f0a215e
--- /dev/null
+++ b/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/map/AbstractReferenceMap$ReferenceValues.class
Binary files differ
diff --git a/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/map/AbstractReferenceMap$ReferenceValuesIterator.class b/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/map/AbstractReferenceMap$ReferenceValuesIterator.class
new file mode 100755
index 0000000..64c07bc
--- /dev/null
+++ b/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/map/AbstractReferenceMap$ReferenceValuesIterator.class
Binary files differ
diff --git a/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/map/AbstractReferenceMap$SoftRef.class b/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/map/AbstractReferenceMap$SoftRef.class
new file mode 100755
index 0000000..17ad0a0
--- /dev/null
+++ b/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/map/AbstractReferenceMap$SoftRef.class
Binary files differ
diff --git a/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/map/AbstractReferenceMap$WeakRef.class b/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/map/AbstractReferenceMap$WeakRef.class
new file mode 100755
index 0000000..3f2c65f
--- /dev/null
+++ b/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/map/AbstractReferenceMap$WeakRef.class
Binary files differ
diff --git a/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/map/AbstractReferenceMap.class b/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/map/AbstractReferenceMap.class
new file mode 100755
index 0000000..cc0fb78
--- /dev/null
+++ b/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/map/AbstractReferenceMap.class
Binary files differ
diff --git a/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/map/AbstractSortedMapDecorator.class b/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/map/AbstractSortedMapDecorator.class
new file mode 100755
index 0000000..ee99feb
--- /dev/null
+++ b/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/map/AbstractSortedMapDecorator.class
Binary files differ
diff --git a/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/map/CaseInsensitiveMap.class b/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/map/CaseInsensitiveMap.class
new file mode 100755
index 0000000..882f3d5
--- /dev/null
+++ b/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/map/CaseInsensitiveMap.class
Binary files differ
diff --git a/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/map/CompositeMap$MapMutator.class b/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/map/CompositeMap$MapMutator.class
new file mode 100755
index 0000000..ca7eb51
--- /dev/null
+++ b/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/map/CompositeMap$MapMutator.class
Binary files differ
diff --git a/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/map/CompositeMap.class b/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/map/CompositeMap.class
new file mode 100755
index 0000000..5938a16
--- /dev/null
+++ b/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/map/CompositeMap.class
Binary files differ
diff --git a/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/map/DefaultedMap.class b/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/map/DefaultedMap.class
new file mode 100755
index 0000000..52ca171
--- /dev/null
+++ b/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/map/DefaultedMap.class
Binary files differ
diff --git a/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/map/FixedSizeMap.class b/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/map/FixedSizeMap.class
new file mode 100755
index 0000000..b49480d
--- /dev/null
+++ b/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/map/FixedSizeMap.class
Binary files differ
diff --git a/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/map/FixedSizeSortedMap.class b/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/map/FixedSizeSortedMap.class
new file mode 100755
index 0000000..6e24761
--- /dev/null
+++ b/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/map/FixedSizeSortedMap.class
Binary files differ
diff --git a/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/map/Flat3Map$EntrySet.class b/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/map/Flat3Map$EntrySet.class
new file mode 100755
index 0000000..4305b82
--- /dev/null
+++ b/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/map/Flat3Map$EntrySet.class
Binary files differ
diff --git a/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/map/Flat3Map$EntrySetIterator.class b/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/map/Flat3Map$EntrySetIterator.class
new file mode 100755
index 0000000..90466d6
--- /dev/null
+++ b/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/map/Flat3Map$EntrySetIterator.class
Binary files differ
diff --git a/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/map/Flat3Map$FlatMapIterator.class b/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/map/Flat3Map$FlatMapIterator.class
new file mode 100755
index 0000000..5581918
--- /dev/null
+++ b/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/map/Flat3Map$FlatMapIterator.class
Binary files differ
diff --git a/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/map/Flat3Map$KeySet.class b/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/map/Flat3Map$KeySet.class
new file mode 100755
index 0000000..80c30b6
--- /dev/null
+++ b/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/map/Flat3Map$KeySet.class
Binary files differ
diff --git a/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/map/Flat3Map$KeySetIterator.class b/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/map/Flat3Map$KeySetIterator.class
new file mode 100755
index 0000000..c615564
--- /dev/null
+++ b/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/map/Flat3Map$KeySetIterator.class
Binary files differ
diff --git a/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/map/Flat3Map$Values.class b/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/map/Flat3Map$Values.class
new file mode 100755
index 0000000..45a20b0
--- /dev/null
+++ b/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/map/Flat3Map$Values.class
Binary files differ
diff --git a/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/map/Flat3Map$ValuesIterator.class b/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/map/Flat3Map$ValuesIterator.class
new file mode 100755
index 0000000..e2d71e3
--- /dev/null
+++ b/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/map/Flat3Map$ValuesIterator.class
Binary files differ
diff --git a/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/map/Flat3Map.class b/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/map/Flat3Map.class
new file mode 100755
index 0000000..c1546d5
--- /dev/null
+++ b/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/map/Flat3Map.class
Binary files differ
diff --git a/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/map/HashedMap.class b/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/map/HashedMap.class
new file mode 100755
index 0000000..d2cd236
--- /dev/null
+++ b/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/map/HashedMap.class
Binary files differ
diff --git a/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/map/IdentityMap$IdentityEntry.class b/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/map/IdentityMap$IdentityEntry.class
new file mode 100755
index 0000000..a5c849b
--- /dev/null
+++ b/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/map/IdentityMap$IdentityEntry.class
Binary files differ
diff --git a/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/map/IdentityMap.class b/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/map/IdentityMap.class
new file mode 100755
index 0000000..430261d
--- /dev/null
+++ b/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/map/IdentityMap.class
Binary files differ
diff --git a/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/map/LRUMap.class b/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/map/LRUMap.class
new file mode 100755
index 0000000..34a126e
--- /dev/null
+++ b/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/map/LRUMap.class
Binary files differ
diff --git a/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/map/LazyMap.class b/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/map/LazyMap.class
new file mode 100755
index 0000000..1a4c132
--- /dev/null
+++ b/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/map/LazyMap.class
Binary files differ
diff --git a/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/map/LazySortedMap.class b/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/map/LazySortedMap.class
new file mode 100755
index 0000000..9fbf35a
--- /dev/null
+++ b/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/map/LazySortedMap.class
Binary files differ
diff --git a/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/map/LinkedMap$LinkedMapList.class b/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/map/LinkedMap$LinkedMapList.class
new file mode 100755
index 0000000..86385e2
--- /dev/null
+++ b/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/map/LinkedMap$LinkedMapList.class
Binary files differ
diff --git a/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/map/LinkedMap.class b/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/map/LinkedMap.class
new file mode 100755
index 0000000..26a2aab
--- /dev/null
+++ b/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/map/LinkedMap.class
Binary files differ
diff --git a/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/map/ListOrderedMap$1.class b/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/map/ListOrderedMap$1.class
new file mode 100755
index 0000000..671ce9a
--- /dev/null
+++ b/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/map/ListOrderedMap$1.class
Binary files differ
diff --git a/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/map/ListOrderedMap$2.class b/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/map/ListOrderedMap$2.class
new file mode 100755
index 0000000..b006cad
--- /dev/null
+++ b/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/map/ListOrderedMap$2.class
Binary files differ
diff --git a/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/map/ListOrderedMap$EntrySetView.class b/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/map/ListOrderedMap$EntrySetView.class
new file mode 100755
index 0000000..3d1f70e
--- /dev/null
+++ b/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/map/ListOrderedMap$EntrySetView.class
Binary files differ
diff --git a/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/map/ListOrderedMap$KeySetView.class b/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/map/ListOrderedMap$KeySetView.class
new file mode 100755
index 0000000..1ad6fa4
--- /dev/null
+++ b/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/map/ListOrderedMap$KeySetView.class
Binary files differ
diff --git a/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/map/ListOrderedMap$ListOrderedIterator.class b/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/map/ListOrderedMap$ListOrderedIterator.class
new file mode 100755
index 0000000..2ea3d43
--- /dev/null
+++ b/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/map/ListOrderedMap$ListOrderedIterator.class
Binary files differ
diff --git a/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/map/ListOrderedMap$ListOrderedMapEntry.class b/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/map/ListOrderedMap$ListOrderedMapEntry.class
new file mode 100755
index 0000000..b71c0bb
--- /dev/null
+++ b/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/map/ListOrderedMap$ListOrderedMapEntry.class
Binary files differ
diff --git a/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/map/ListOrderedMap$ListOrderedMapIterator.class b/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/map/ListOrderedMap$ListOrderedMapIterator.class
new file mode 100755
index 0000000..9abb322
--- /dev/null
+++ b/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/map/ListOrderedMap$ListOrderedMapIterator.class
Binary files differ
diff --git a/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/map/ListOrderedMap$ValuesView.class b/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/map/ListOrderedMap$ValuesView.class
new file mode 100755
index 0000000..6691864
--- /dev/null
+++ b/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/map/ListOrderedMap$ValuesView.class
Binary files differ
diff --git a/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/map/ListOrderedMap.class b/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/map/ListOrderedMap.class
new file mode 100755
index 0000000..4360664
--- /dev/null
+++ b/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/map/ListOrderedMap.class
Binary files differ
diff --git a/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/map/MultiKeyMap.class b/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/map/MultiKeyMap.class
new file mode 100755
index 0000000..2ceb40b
--- /dev/null
+++ b/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/map/MultiKeyMap.class
Binary files differ
diff --git a/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/map/MultiValueMap$1.class b/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/map/MultiValueMap$1.class
new file mode 100755
index 0000000..2bbc0d5
--- /dev/null
+++ b/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/map/MultiValueMap$1.class
Binary files differ
diff --git a/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/map/MultiValueMap$ReflectionFactory.class b/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/map/MultiValueMap$ReflectionFactory.class
new file mode 100755
index 0000000..33478e2
--- /dev/null
+++ b/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/map/MultiValueMap$ReflectionFactory.class
Binary files differ
diff --git a/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/map/MultiValueMap$Values.class b/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/map/MultiValueMap$Values.class
new file mode 100755
index 0000000..284089d
--- /dev/null
+++ b/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/map/MultiValueMap$Values.class
Binary files differ
diff --git a/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/map/MultiValueMap$ValuesIterator.class b/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/map/MultiValueMap$ValuesIterator.class
new file mode 100755
index 0000000..711fa9a
--- /dev/null
+++ b/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/map/MultiValueMap$ValuesIterator.class
Binary files differ
diff --git a/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/map/MultiValueMap.class b/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/map/MultiValueMap.class
new file mode 100755
index 0000000..6c08e36
--- /dev/null
+++ b/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/map/MultiValueMap.class
Binary files differ
diff --git a/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/map/PredicatedMap.class b/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/map/PredicatedMap.class
new file mode 100755
index 0000000..c0c0c5a
--- /dev/null
+++ b/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/map/PredicatedMap.class
Binary files differ
diff --git a/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/map/PredicatedSortedMap.class b/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/map/PredicatedSortedMap.class
new file mode 100755
index 0000000..9c3ec12
--- /dev/null
+++ b/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/map/PredicatedSortedMap.class
Binary files differ
diff --git a/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/map/ReferenceIdentityMap.class b/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/map/ReferenceIdentityMap.class
new file mode 100755
index 0000000..35434c0
--- /dev/null
+++ b/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/map/ReferenceIdentityMap.class
Binary files differ
diff --git a/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/map/ReferenceMap.class b/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/map/ReferenceMap.class
new file mode 100755
index 0000000..9e33b78
--- /dev/null
+++ b/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/map/ReferenceMap.class
Binary files differ
diff --git a/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/map/SingletonMap$SingletonMapIterator.class b/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/map/SingletonMap$SingletonMapIterator.class
new file mode 100755
index 0000000..c33881f
--- /dev/null
+++ b/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/map/SingletonMap$SingletonMapIterator.class
Binary files differ
diff --git a/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/map/SingletonMap$SingletonValues.class b/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/map/SingletonMap$SingletonValues.class
new file mode 100755
index 0000000..703aaca
--- /dev/null
+++ b/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/map/SingletonMap$SingletonValues.class
Binary files differ
diff --git a/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/map/SingletonMap.class b/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/map/SingletonMap.class
new file mode 100755
index 0000000..51fd6a2
--- /dev/null
+++ b/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/map/SingletonMap.class
Binary files differ
diff --git a/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/map/StaticBucketMap$1.class b/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/map/StaticBucketMap$1.class
new file mode 100755
index 0000000..547345d
--- /dev/null
+++ b/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/map/StaticBucketMap$1.class
Binary files differ
diff --git a/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/map/StaticBucketMap$EntryIterator.class b/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/map/StaticBucketMap$EntryIterator.class
new file mode 100755
index 0000000..ee6e53a
--- /dev/null
+++ b/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/map/StaticBucketMap$EntryIterator.class
Binary files differ
diff --git a/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/map/StaticBucketMap$EntrySet.class b/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/map/StaticBucketMap$EntrySet.class
new file mode 100755
index 0000000..155f3b4
--- /dev/null
+++ b/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/map/StaticBucketMap$EntrySet.class
Binary files differ
diff --git a/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/map/StaticBucketMap$KeyIterator.class b/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/map/StaticBucketMap$KeyIterator.class
new file mode 100755
index 0000000..68dc972
--- /dev/null
+++ b/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/map/StaticBucketMap$KeyIterator.class
Binary files differ
diff --git a/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/map/StaticBucketMap$KeySet.class b/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/map/StaticBucketMap$KeySet.class
new file mode 100755
index 0000000..f8ec4f2
--- /dev/null
+++ b/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/map/StaticBucketMap$KeySet.class
Binary files differ
diff --git a/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/map/StaticBucketMap$Lock.class b/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/map/StaticBucketMap$Lock.class
new file mode 100755
index 0000000..86d4fc1
--- /dev/null
+++ b/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/map/StaticBucketMap$Lock.class
Binary files differ
diff --git a/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/map/StaticBucketMap$Node.class b/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/map/StaticBucketMap$Node.class
new file mode 100755
index 0000000..5d5390d
--- /dev/null
+++ b/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/map/StaticBucketMap$Node.class
Binary files differ
diff --git a/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/map/StaticBucketMap$ValueIterator.class b/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/map/StaticBucketMap$ValueIterator.class
new file mode 100755
index 0000000..3d3f20e
--- /dev/null
+++ b/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/map/StaticBucketMap$ValueIterator.class
Binary files differ
diff --git a/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/map/StaticBucketMap$Values.class b/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/map/StaticBucketMap$Values.class
new file mode 100755
index 0000000..766f2cf
--- /dev/null
+++ b/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/map/StaticBucketMap$Values.class
Binary files differ
diff --git a/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/map/StaticBucketMap.class b/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/map/StaticBucketMap.class
new file mode 100755
index 0000000..50b4b17
--- /dev/null
+++ b/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/map/StaticBucketMap.class
Binary files differ
diff --git a/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/map/TransformedMap.class b/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/map/TransformedMap.class
new file mode 100755
index 0000000..a8f21f2
--- /dev/null
+++ b/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/map/TransformedMap.class
Binary files differ
diff --git a/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/map/TransformedSortedMap.class b/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/map/TransformedSortedMap.class
new file mode 100755
index 0000000..4b005ec
--- /dev/null
+++ b/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/map/TransformedSortedMap.class
Binary files differ
diff --git a/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/map/TypedMap.class b/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/map/TypedMap.class
new file mode 100755
index 0000000..97306b9
--- /dev/null
+++ b/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/map/TypedMap.class
Binary files differ
diff --git a/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/map/TypedSortedMap.class b/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/map/TypedSortedMap.class
new file mode 100755
index 0000000..3d7c825
--- /dev/null
+++ b/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/map/TypedSortedMap.class
Binary files differ
diff --git a/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/map/UnmodifiableEntrySet$UnmodifiableEntry.class b/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/map/UnmodifiableEntrySet$UnmodifiableEntry.class
new file mode 100755
index 0000000..729415d
--- /dev/null
+++ b/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/map/UnmodifiableEntrySet$UnmodifiableEntry.class
Binary files differ
diff --git a/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/map/UnmodifiableEntrySet$UnmodifiableEntrySetIterator.class b/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/map/UnmodifiableEntrySet$UnmodifiableEntrySetIterator.class
new file mode 100755
index 0000000..d0b1fb9
--- /dev/null
+++ b/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/map/UnmodifiableEntrySet$UnmodifiableEntrySetIterator.class
Binary files differ
diff --git a/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/map/UnmodifiableEntrySet.class b/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/map/UnmodifiableEntrySet.class
new file mode 100755
index 0000000..902220f
--- /dev/null
+++ b/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/map/UnmodifiableEntrySet.class
Binary files differ
diff --git a/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/map/UnmodifiableMap.class b/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/map/UnmodifiableMap.class
new file mode 100755
index 0000000..3e979fb
--- /dev/null
+++ b/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/map/UnmodifiableMap.class
Binary files differ
diff --git a/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/map/UnmodifiableOrderedMap.class b/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/map/UnmodifiableOrderedMap.class
new file mode 100755
index 0000000..2b91bed
--- /dev/null
+++ b/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/map/UnmodifiableOrderedMap.class
Binary files differ
diff --git a/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/map/UnmodifiableSortedMap.class b/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/map/UnmodifiableSortedMap.class
new file mode 100755
index 0000000..6f4957c
--- /dev/null
+++ b/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/map/UnmodifiableSortedMap.class
Binary files differ
diff --git a/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/set/AbstractSerializableSetDecorator.class b/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/set/AbstractSerializableSetDecorator.class
new file mode 100755
index 0000000..12daf45
--- /dev/null
+++ b/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/set/AbstractSerializableSetDecorator.class
Binary files differ
diff --git a/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/set/AbstractSetDecorator.class b/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/set/AbstractSetDecorator.class
new file mode 100755
index 0000000..e95de01
--- /dev/null
+++ b/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/set/AbstractSetDecorator.class
Binary files differ
diff --git a/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/set/AbstractSortedSetDecorator.class b/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/set/AbstractSortedSetDecorator.class
new file mode 100755
index 0000000..0e2547a
--- /dev/null
+++ b/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/set/AbstractSortedSetDecorator.class
Binary files differ
diff --git a/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/set/CompositeSet$SetMutator.class b/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/set/CompositeSet$SetMutator.class
new file mode 100755
index 0000000..32c3ea0
--- /dev/null
+++ b/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/set/CompositeSet$SetMutator.class
Binary files differ
diff --git a/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/set/CompositeSet.class b/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/set/CompositeSet.class
new file mode 100755
index 0000000..9bd8014
--- /dev/null
+++ b/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/set/CompositeSet.class
Binary files differ
diff --git a/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/set/ListOrderedSet$1.class b/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/set/ListOrderedSet$1.class
new file mode 100755
index 0000000..7a44be1
--- /dev/null
+++ b/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/set/ListOrderedSet$1.class
Binary files differ
diff --git a/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/set/ListOrderedSet$OrderedSetIterator.class b/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/set/ListOrderedSet$OrderedSetIterator.class
new file mode 100755
index 0000000..a42713d
--- /dev/null
+++ b/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/set/ListOrderedSet$OrderedSetIterator.class
Binary files differ
diff --git a/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/set/ListOrderedSet.class b/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/set/ListOrderedSet.class
new file mode 100755
index 0000000..f72bc81
--- /dev/null
+++ b/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/set/ListOrderedSet.class
Binary files differ
diff --git a/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/set/MapBackedSet.class b/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/set/MapBackedSet.class
new file mode 100755
index 0000000..754b614
--- /dev/null
+++ b/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/set/MapBackedSet.class
Binary files differ
diff --git a/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/set/PredicatedSet.class b/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/set/PredicatedSet.class
new file mode 100755
index 0000000..8b90218
--- /dev/null
+++ b/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/set/PredicatedSet.class
Binary files differ
diff --git a/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/set/PredicatedSortedSet.class b/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/set/PredicatedSortedSet.class
new file mode 100755
index 0000000..2e852c6
--- /dev/null
+++ b/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/set/PredicatedSortedSet.class
Binary files differ
diff --git a/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/set/SynchronizedSet.class b/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/set/SynchronizedSet.class
new file mode 100755
index 0000000..0ce01a6
--- /dev/null
+++ b/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/set/SynchronizedSet.class
Binary files differ
diff --git a/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/set/SynchronizedSortedSet.class b/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/set/SynchronizedSortedSet.class
new file mode 100755
index 0000000..ff93667
--- /dev/null
+++ b/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/set/SynchronizedSortedSet.class
Binary files differ
diff --git a/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/set/TransformedSet.class b/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/set/TransformedSet.class
new file mode 100755
index 0000000..0d45b94
--- /dev/null
+++ b/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/set/TransformedSet.class
Binary files differ
diff --git a/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/set/TransformedSortedSet.class b/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/set/TransformedSortedSet.class
new file mode 100755
index 0000000..85e53d7
--- /dev/null
+++ b/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/set/TransformedSortedSet.class
Binary files differ
diff --git a/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/set/TypedSet.class b/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/set/TypedSet.class
new file mode 100755
index 0000000..ae3638a
--- /dev/null
+++ b/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/set/TypedSet.class
Binary files differ
diff --git a/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/set/TypedSortedSet.class b/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/set/TypedSortedSet.class
new file mode 100755
index 0000000..e1b02e9
--- /dev/null
+++ b/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/set/TypedSortedSet.class
Binary files differ
diff --git a/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/set/UnmodifiableSet.class b/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/set/UnmodifiableSet.class
new file mode 100755
index 0000000..b5753d4
--- /dev/null
+++ b/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/set/UnmodifiableSet.class
Binary files differ
diff --git a/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/set/UnmodifiableSortedSet.class b/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/set/UnmodifiableSortedSet.class
new file mode 100755
index 0000000..0d91880
--- /dev/null
+++ b/dependencies/plugins/org.apache.commons.collections/org/apache/commons/collections/set/UnmodifiableSortedSet.class
Binary files differ
diff --git a/dependencies/plugins/org.apache.commons.collections/plugin.properties b/dependencies/plugins/org.apache.commons.collections/plugin.properties
new file mode 100755
index 0000000..3219fa5
--- /dev/null
+++ b/dependencies/plugins/org.apache.commons.collections/plugin.properties
@@ -0,0 +1,12 @@
+################################################################################
+# Copyright (c) 2007 IBM Corporation and others.
+# All rights reserved. This program and the accompanying materials
+# are made available under the terms of the Eclipse Public License v1.0
+# which accompanies this distribution, and is available at
+# http://www.eclipse.org/legal/epl-v10.html
+#
+# Contributors:
+# Chris Aniszczyk - initial API and implementation
+################################################################################
+pluginName=Apache Commons Collections
+providerName=Eclipse.org
\ No newline at end of file
diff --git a/dependencies/plugins/org.apache.commons.collections/source-bundle/META-INF/MANIFEST.MF b/dependencies/plugins/org.apache.commons.collections/source-bundle/META-INF/MANIFEST.MF
new file mode 100755
index 0000000..7b300a7
--- /dev/null
+++ b/dependencies/plugins/org.apache.commons.collections/source-bundle/META-INF/MANIFEST.MF
@@ -0,0 +1,8 @@
+Manifest-Version: 1.0
+Bundle-ManifestVersion: 2
+Bundle-Name: %pluginName
+Bundle-SymbolicName: org.apache.commons.collections.source
+Bundle-Version: 3.2.0.qualifier
+Bundle-Localization: plugin
+Bundle-Vendor: %providerName
+Eclipse-SourceBundle: org.apache.commons.collections;version="3.2.0.qualifier"
diff --git a/dependencies/plugins/org.apache.commons.collections/source-bundle/about.html b/dependencies/plugins/org.apache.commons.collections/source-bundle/about.html
new file mode 100755
index 0000000..be61750
--- /dev/null
+++ b/dependencies/plugins/org.apache.commons.collections/source-bundle/about.html
@@ -0,0 +1,55 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
+ "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1"/>
+<title>About</title>
+</head>
+<body lang="EN-US">
+<h2>About This Content</h2>
+
+<p>June 8, 2007</p>
+<h3>License</h3>
+
+<p>The Eclipse Foundation makes available all content in this plug-in ("Content"). Unless otherwise
+indicated below, the Content is provided to you under the terms and conditions of the
+Eclipse Public License Version 1.0 ("EPL"). A copy of the EPL is available
+at <a href="http://www.eclipse.org/legal/epl-v10.html">http://www.eclipse.org/legal/epl-v10.html</a>.
+For purposes of the EPL, "Program" will mean the Content.</p>
+
+<p>If you did not receive this Content directly from the Eclipse Foundation, the Content is
+being redistributed by another party ("Redistributor") and different terms and conditions may
+apply to your use of any object code in the Content. Check the Redistributor's license that was
+provided with the Content. If no such license exists, contact the Redistributor. Unless otherwise
+indicated below, the terms and conditions of the EPL still apply to any source code in the Content
+and such source code may be obtained at <a href="http://www.eclipse.org">http://www.eclipse.org</a>.</p>
+
+<h3>Third Party Content</h3>
+<p>The Content includes items that have been sourced from third parties as set out below. If you
+did not receive this Content directly from the Eclipse Foundation, the following is provided
+for informational purposes only, and you should look to the Redistributor’s license for
+terms and conditions of use.</p>
+
+<h4>Commons Collections 3.2</h4>
+<p>The plug-in includes Commons Collections 3.2 ("Commons Collections") developed by the Apache Software Foundation as part of the Apache Commons project. Therefore:</p>
+
+<blockquote>
+This product includes software developed by the Apache Software Foundation (<a href="http://www.apache.org/">http://www.apache.org/</a>).
+</blockquote>
+
+<p>The Commons Collections binary code is included with no modifications except postprocessing
+(pack200 conditioning and signing). The corresponding Commons Collections source code is located in src.zip.</p>
+
+<p>Commons Net is:</p>
+
+<blockquote>Copyright (c) 1997-2005 The Apache Software Foundation. All rights reserved.</blockquote>
+
+<p>Your use of the Commons Collections code is subject to the terms and conditions of the Apache Software License 2.0. A copy of the license is contained
+in the file <a href="about_files/LICENSE.txt">LICENSE.txt</a> and is also available at <a href="http://www.apache.org/licenses/LICENSE-2.0.html">http://www.apache.org/licenses/LICENSE-2.0.html</a>.
+
+<p>The Apache attribution <a href="about_files/NOTICE.txt">NOTICE.txt</a> file is included with the Content in accordance with 4d of the Apache License, Version 2.0.</p>
+
+<p>Examples and documentation as well as updated source code for Commons Collections is available at <a href="http://commons.apache.org/collections/">http://commons.apache.org/collections/</a>.</p>
+
+</body>
+</html>
diff --git a/dependencies/plugins/org.apache.commons.collections/source-bundle/about_files/LICENSE.txt b/dependencies/plugins/org.apache.commons.collections/source-bundle/about_files/LICENSE.txt
new file mode 100755
index 0000000..d645695
--- /dev/null
+++ b/dependencies/plugins/org.apache.commons.collections/source-bundle/about_files/LICENSE.txt
@@ -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/dependencies/plugins/org.apache.commons.collections/source-bundle/about_files/NOTICE.txt b/dependencies/plugins/org.apache.commons.collections/source-bundle/about_files/NOTICE.txt
new file mode 100755
index 0000000..3f59805
--- /dev/null
+++ b/dependencies/plugins/org.apache.commons.collections/source-bundle/about_files/NOTICE.txt
@@ -0,0 +1,2 @@
+This product includes software developed by
+The Apache Software Foundation (http://www.apache.org/).
diff --git a/dependencies/plugins/org.apache.commons.collections/source-bundle/about_files/README.txt b/dependencies/plugins/org.apache.commons.collections/source-bundle/about_files/README.txt
new file mode 100755
index 0000000..7d7c453
--- /dev/null
+++ b/dependencies/plugins/org.apache.commons.collections/source-bundle/about_files/README.txt
@@ -0,0 +1,51 @@
+Jakarta Commons Collections
+===========================
+
+Welcome to the Collections component of the Jakarta Commons project.
+This component contains many new collections and collection utilities.
+
+Two jar files are produced by this component.
+The first, commons-collections.jar is the main jar used by applications.
+The second, commons-collections-testframework.jar is an extension to junit
+for testing new collection implementations and is not normally used by applications.
+
+
+Building from source
+--------------------
+This component requires the excellent Ant utility.
+It can be found here :
+
+ http://ant.apache.org/
+
+For testing the project, you will also need JUnit :
+
+ http://www.junit.org/
+
+To let the test process find JUnit, you may make a
+copy of the build.properties.sample file, rename to
+build.properties, and modify to reflect
+the location of the junit.jar on your computer.
+
+
+Once you have Ant properly installed, and the
+build.properties file correctly reflects the location
+of your junit.jar, you are ready to build and test.
+The major targets are:
+
+ant compile - compile the code
+ant test - test using junit
+ant jar - create a jar file
+ant javadoc - build the javadoc
+ant dist - create folders as per a distribution
+ant tf.jar - create the testframework jar file
+ant tf.javadoc - build the testframework javadoc
+
+
+Maven
+-----
+The component can also be built using Maven. (Ant is the primary build tool.)
+It can be found here :
+
+ http://maven.apache.org/
+
+Once installed, the jars may be built with 'maven jar'.
diff --git a/dependencies/plugins/org.apache.commons.collections/source-bundle/build.properties b/dependencies/plugins/org.apache.commons.collections/source-bundle/build.properties
new file mode 100755
index 0000000..4554292
--- /dev/null
+++ b/dependencies/plugins/org.apache.commons.collections/source-bundle/build.properties
@@ -0,0 +1,15 @@
+###############################################################################
+# Copyright (c) 2007, 2008 IBM Corporation and others.
+# All rights reserved. This program and the accompanying materials
+# are made available under the terms of the Common Public License v1.0
+# which accompanies this distribution, and is available at
+# http://www.eclipse.org/legal/cpl-v10.html
+#
+# Contributors:
+# IBM Corporation - initial API and implementation
+###############################################################################
+bin.includes = about.html,\
+ about_files/,\
+ plugin.properties,\
+ META-INF/,\
+ org/
diff --git a/dependencies/plugins/org.apache.commons.collections/source-bundle/org/apache/commons/collections/ArrayStack.java b/dependencies/plugins/org.apache.commons.collections/source-bundle/org/apache/commons/collections/ArrayStack.java
new file mode 100755
index 0000000..614306a
--- /dev/null
+++ b/dependencies/plugins/org.apache.commons.collections/source-bundle/org/apache/commons/collections/ArrayStack.java
@@ -0,0 +1,194 @@
+/*
+ * Copyright 2001-2004 The Apache Software Foundation
+ *
+ * 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.
+ */
+package org.apache.commons.collections;
+
+import java.util.ArrayList;
+import java.util.EmptyStackException;
+
+/**
+ * An implementation of the {@link java.util.Stack} API that is based on an
+ * <code>ArrayList</code> instead of a <code>Vector</code>, so it is not
+ * synchronized to protect against multi-threaded access. The implementation
+ * is therefore operates faster in environments where you do not need to
+ * worry about multiple thread contention.
+ * <p>
+ * The removal order of an <code>ArrayStack</code> is based on insertion
+ * order: The most recently added element is removed first. The iteration
+ * order is <i>not</i> the same as the removal order. The iterator returns
+ * elements from the bottom up, whereas the {@link #remove()} method removes
+ * them from the top down.
+ * <p>
+ * Unlike <code>Stack</code>, <code>ArrayStack</code> accepts null entries.
+ *
+ * @see java.util.Stack
+ * @since Commons Collections 1.0
+ * @version $Revision: 1.1 $ $Date: 2009/05/27 22:16:19 $
+ *
+ * @author Craig R. McClanahan
+ * @author Paul Jack
+ * @author Stephen Colebourne
+ */
+public class ArrayStack extends ArrayList implements Buffer {
+
+ /** Ensure serialization compatibility */
+ private static final long serialVersionUID = 2130079159931574599L;
+
+ /**
+ * Constructs a new empty <code>ArrayStack</code>. The initial size
+ * is controlled by <code>ArrayList</code> and is currently 10.
+ */
+ public ArrayStack() {
+ super();
+ }
+
+ /**
+ * Constructs a new empty <code>ArrayStack</code> with an initial size.
+ *
+ * @param initialSize the initial size to use
+ * @throws IllegalArgumentException if the specified initial size
+ * is negative
+ */
+ public ArrayStack(int initialSize) {
+ super(initialSize);
+ }
+
+ /**
+ * Return <code>true</code> if this stack is currently empty.
+ * <p>
+ * This method exists for compatibility with <code>java.util.Stack</code>.
+ * New users of this class should use <code>isEmpty</code> instead.
+ *
+ * @return true if the stack is currently empty
+ */
+ public boolean empty() {
+ return isEmpty();
+ }
+
+ /**
+ * Returns the top item off of this stack without removing it.
+ *
+ * @return the top item on the stack
+ * @throws EmptyStackException if the stack is empty
+ */
+ public Object peek() throws EmptyStackException {
+ int n = size();
+ if (n <= 0) {
+ throw new EmptyStackException();
+ } else {
+ return get(n - 1);
+ }
+ }
+
+ /**
+ * Returns the n'th item down (zero-relative) from the top of this
+ * stack without removing it.
+ *
+ * @param n the number of items down to go
+ * @return the n'th item on the stack, zero relative
+ * @throws EmptyStackException if there are not enough items on the
+ * stack to satisfy this request
+ */
+ public Object peek(int n) throws EmptyStackException {
+ int m = (size() - n) - 1;
+ if (m < 0) {
+ throw new EmptyStackException();
+ } else {
+ return get(m);
+ }
+ }
+
+ /**
+ * Pops the top item off of this stack and return it.
+ *
+ * @return the top item on the stack
+ * @throws EmptyStackException if the stack is empty
+ */
+ public Object pop() throws EmptyStackException {
+ int n = size();
+ if (n <= 0) {
+ throw new EmptyStackException();
+ } else {
+ return remove(n - 1);
+ }
+ }
+
+ /**
+ * Pushes a new item onto the top of this stack. The pushed item is also
+ * returned. This is equivalent to calling <code>add</code>.
+ *
+ * @param item the item to be added
+ * @return the item just pushed
+ */
+ public Object push(Object item) {
+ add(item);
+ return item;
+ }
+
+ /**
+ * Returns the one-based position of the distance from the top that the
+ * specified object exists on this stack, where the top-most element is
+ * considered to be at distance <code>1</code>. If the object is not
+ * present on the stack, return <code>-1</code> instead. The
+ * <code>equals()</code> method is used to compare to the items
+ * in this stack.
+ *
+ * @param object the object to be searched for
+ * @return the 1-based depth into the stack of the object, or -1 if not found
+ */
+ public int search(Object object) {
+ int i = size() - 1; // Current index
+ int n = 1; // Current distance
+ while (i >= 0) {
+ Object current = get(i);
+ if ((object == null && current == null) ||
+ (object != null && object.equals(current))) {
+ return n;
+ }
+ i--;
+ n++;
+ }
+ return -1;
+ }
+
+ /**
+ * Returns the element on the top of the stack.
+ *
+ * @return the element on the top of the stack
+ * @throws BufferUnderflowException if the stack is empty
+ */
+ public Object get() {
+ int size = size();
+ if (size == 0) {
+ throw new BufferUnderflowException();
+ }
+ return get(size - 1);
+ }
+
+ /**
+ * Removes the element on the top of the stack.
+ *
+ * @return the removed element
+ * @throws BufferUnderflowException if the stack is empty
+ */
+ public Object remove() {
+ int size = size();
+ if (size == 0) {
+ throw new BufferUnderflowException();
+ }
+ return remove(size - 1);
+ }
+
+}
diff --git a/dependencies/plugins/org.apache.commons.collections/source-bundle/org/apache/commons/collections/Bag.java b/dependencies/plugins/org.apache.commons.collections/source-bundle/org/apache/commons/collections/Bag.java
new file mode 100755
index 0000000..cc5bd9c
--- /dev/null
+++ b/dependencies/plugins/org.apache.commons.collections/source-bundle/org/apache/commons/collections/Bag.java
@@ -0,0 +1,221 @@
+/*
+ * Copyright 2001-2004 The Apache Software Foundation
+ *
+ * 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.
+ */
+package org.apache.commons.collections;
+
+import java.util.Collection;
+import java.util.Iterator;
+import java.util.Set;
+
+/**
+ * Defines a collection that counts the number of times an object appears in
+ * the collection.
+ * <p>
+ * Suppose you have a Bag that contains <code>{a, a, b, c}</code>.
+ * Calling {@link #getCount(Object)} on <code>a</code> would return 2, while
+ * calling {@link #uniqueSet()} would return <code>{a, b, c}</code>.
+ * <p>
+ * <i>NOTE: This interface violates the {@link Collection} contract.</i>
+ * The behavior specified in many of these methods is <i>not</i> the same
+ * as the behavior specified by <code>Collection</code>.
+ * The noncompliant methods are clearly marked with "(Violation)".
+ * Exercise caution when using a bag as a <code>Collection</code>.
+ * <p>
+ * This violation resulted from the original specification of this interface.
+ * In an ideal world, the interface would be changed to fix the problems, however
+ * it has been decided to maintain backwards compatibility instead.
+ *
+ * @since Commons Collections 2.0
+ * @version $Revision: 1.1 $ $Date: 2009/05/27 22:16:18 $
+ *
+ * @author Chuck Burdick
+ * @author Stephen Colebourne
+ */
+public interface Bag extends Collection {
+
+ /**
+ * Returns the number of occurrences (cardinality) of the given
+ * object currently in the bag. If the object does not exist in the
+ * bag, return 0.
+ *
+ * @param object the object to search for
+ * @return the number of occurrences of the object, zero if not found
+ */
+ int getCount(Object object);
+
+ /**
+ * <i>(Violation)</i>
+ * Adds one copy the specified object to the Bag.
+ * <p>
+ * If the object is already in the {@link #uniqueSet()} then increment its
+ * count as reported by {@link #getCount(Object)}. Otherwise add it to the
+ * {@link #uniqueSet()} and report its count as 1.
+ * <p>
+ * Since this method always increases the size of the bag,
+ * according to the {@link Collection#add(Object)} contract, it
+ * should always return <code>true</code>. Since it sometimes returns
+ * <code>false</code>, this method violates the contract.
+ *
+ * @param object the object to add
+ * @return <code>true</code> if the object was not already in the <code>uniqueSet</code>
+ */
+ boolean add(Object object);
+
+ /**
+ * Adds <code>nCopies</code> copies of the specified object to the Bag.
+ * <p>
+ * If the object is already in the {@link #uniqueSet()} then increment its
+ * count as reported by {@link #getCount(Object)}. Otherwise add it to the
+ * {@link #uniqueSet()} and report its count as <code>nCopies</code>.
+ *
+ * @param object the object to add
+ * @param nCopies the number of copies to add
+ * @return <code>true</code> if the object was not already in the <code>uniqueSet</code>
+ */
+ boolean add(Object object, int nCopies);
+
+ /**
+ * <i>(Violation)</i>
+ * Removes all occurrences of the given object from the bag.
+ * <p>
+ * This will also remove the object from the {@link #uniqueSet()}.
+ * <p>
+ * According to the {@link Collection#remove(Object)} method,
+ * this method should only remove the <i>first</i> occurrence of the
+ * given object, not <i>all</i> occurrences.
+ *
+ * @return <code>true</code> if this call changed the collection
+ */
+ boolean remove(Object object);
+
+ /**
+ * Removes <code>nCopies</code> copies of the specified object from the Bag.
+ * <p>
+ * If the number of copies to remove is greater than the actual number of
+ * copies in the Bag, no error is thrown.
+ *
+ * @param object the object to remove
+ * @param nCopies the number of copies to remove
+ * @return <code>true</code> if this call changed the collection
+ */
+ boolean remove(Object object, int nCopies);
+
+ /**
+ * Returns a {@link Set} of unique elements in the Bag.
+ * <p>
+ * Uniqueness constraints are the same as those in {@link java.util.Set}.
+ *
+ * @return the Set of unique Bag elements
+ */
+ Set uniqueSet();
+
+ /**
+ * Returns the total number of items in the bag across all types.
+ *
+ * @return the total size of the Bag
+ */
+ int size();
+
+ /**
+ * <i>(Violation)</i>
+ * Returns <code>true</code> if the bag contains all elements in
+ * the given collection, respecting cardinality. That is, if the
+ * given collection <code>coll</code> contains <code>n</code> copies
+ * of a given object, calling {@link #getCount(Object)} on that object must
+ * be <code>>= n</code> for all <code>n</code> in <code>coll</code>.
+ * <p>
+ * The {@link Collection#containsAll(Collection)} method specifies
+ * that cardinality should <i>not</i> be respected; this method should
+ * return true if the bag contains at least one of every object contained
+ * in the given collection.
+ *
+ * @param coll the collection to check against
+ * @return <code>true</code> if the Bag contains all the collection
+ */
+ boolean containsAll(Collection coll);
+
+ /**
+ * <i>(Violation)</i>
+ * Remove all elements represented in the given collection,
+ * respecting cardinality. That is, if the given collection
+ * <code>coll</code> contains <code>n</code> copies of a given object,
+ * the bag will have <code>n</code> fewer copies, assuming the bag
+ * had at least <code>n</code> copies to begin with.
+ *
+ * <P>The {@link Collection#removeAll(Collection)} method specifies
+ * that cardinality should <i>not</i> be respected; this method should
+ * remove <i>all</i> occurrences of every object contained in the
+ * given collection.
+ *
+ * @param coll the collection to remove
+ * @return <code>true</code> if this call changed the collection
+ */
+ boolean removeAll(Collection coll);
+
+ /**
+ * <i>(Violation)</i>
+ * Remove any members of the bag that are not in the given
+ * collection, respecting cardinality. That is, if the given
+ * collection <code>coll</code> contains <code>n</code> copies of a
+ * given object and the bag has <code>m > n</code> copies, then
+ * delete <code>m - n</code> copies from the bag. In addition, if
+ * <code>e</code> is an object in the bag but
+ * <code>!coll.contains(e)</code>, then remove <code>e</code> and any
+ * of its copies.
+ *
+ * <P>The {@link Collection#retainAll(Collection)} method specifies
+ * that cardinality should <i>not</i> be respected; this method should
+ * keep <i>all</i> occurrences of every object contained in the
+ * given collection.
+ *
+ * @param coll the collection to retain
+ * @return <code>true</code> if this call changed the collection
+ */
+ boolean retainAll(Collection coll);
+
+ /**
+ * Returns an {@link Iterator} over the entire set of members,
+ * including copies due to cardinality. This iterator is fail-fast
+ * and will not tolerate concurrent modifications.
+ *
+ * @return iterator over all elements in the Bag
+ */
+ Iterator iterator();
+
+ // The following is not part of the formal Bag interface, however where possible
+ // Bag implementations should follow these comments.
+// /**
+// * Compares this Bag to another.
+// * This Bag equals another Bag if it contains the same number of occurrences of
+// * the same elements.
+// * This equals definition is compatible with the Set interface.
+// *
+// * @param obj the Bag to compare to
+// * @return true if equal
+// */
+// boolean equals(Object obj);
+//
+// /**
+// * Gets a hash code for the Bag compatible with the definition of equals.
+// * The hash code is defined as the sum total of a hash code for each element.
+// * The per element hash code is defined as
+// * <code>(e==null ? 0 : e.hashCode()) ^ noOccurances)</code>.
+// * This hash code definition is compatible with the Set interface.
+// *
+// * @return the hash code of the Bag
+// */
+// int hashCode();
+
+}
diff --git a/dependencies/plugins/org.apache.commons.collections/source-bundle/org/apache/commons/collections/BagUtils.java b/dependencies/plugins/org.apache.commons.collections/source-bundle/org/apache/commons/collections/BagUtils.java
new file mode 100755
index 0000000..9ad377c
--- /dev/null
+++ b/dependencies/plugins/org.apache.commons.collections/source-bundle/org/apache/commons/collections/BagUtils.java
@@ -0,0 +1,243 @@
+/*
+ * Copyright 2002-2004 The Apache Software Foundation
+ *
+ * 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.
+ */
+package org.apache.commons.collections;
+
+import org.apache.commons.collections.bag.HashBag;
+import org.apache.commons.collections.bag.PredicatedBag;
+import org.apache.commons.collections.bag.PredicatedSortedBag;
+import org.apache.commons.collections.bag.SynchronizedBag;
+import org.apache.commons.collections.bag.SynchronizedSortedBag;
+import org.apache.commons.collections.bag.TransformedBag;
+import org.apache.commons.collections.bag.TransformedSortedBag;
+import org.apache.commons.collections.bag.TreeBag;
+import org.apache.commons.collections.bag.TypedBag;
+import org.apache.commons.collections.bag.TypedSortedBag;
+import org.apache.commons.collections.bag.UnmodifiableBag;
+import org.apache.commons.collections.bag.UnmodifiableSortedBag;
+
+/**
+ * Provides utility methods and decorators for
+ * {@link Bag} and {@link SortedBag} instances.
+ *
+ * @since Commons Collections 2.1
+ * @version $Revision: 1.1 $ $Date: 2009/05/27 22:16:18 $
+ *
+ * @author Paul Jack
+ * @author Stephen Colebourne
+ * @author Andrew Freeman
+ * @author Matthew Hawthorne
+ */
+public class BagUtils {
+
+ /**
+ * An empty unmodifiable bag.
+ */
+ public static final Bag EMPTY_BAG = UnmodifiableBag.decorate(new HashBag());
+
+ /**
+ * An empty unmodifiable sorted bag.
+ */
+ public static final Bag EMPTY_SORTED_BAG = UnmodifiableSortedBag.decorate(new TreeBag());
+
+ /**
+ * Instantiation of BagUtils is not intended or required.
+ * However, some tools require an instance to operate.
+ */
+ public BagUtils() {
+ }
+
+ //-----------------------------------------------------------------------
+ /**
+ * Returns a synchronized (thread-safe) bag backed by the given bag.
+ * In order to guarantee serial access, it is critical that all
+ * access to the backing bag is accomplished through the returned bag.
+ * <p>
+ * It is imperative that the user manually synchronize on the returned
+ * bag when iterating over it:
+ *
+ * <pre>
+ * Bag bag = BagUtils.synchronizedBag(new HashBag());
+ * ...
+ * synchronized(bag) {
+ * Iterator i = bag.iterator(); // Must be in synchronized block
+ * while (i.hasNext())
+ * foo(i.next());
+ * }
+ * }
+ * </pre>
+ *
+ * Failure to follow this advice may result in non-deterministic
+ * behavior.
+ *
+ * @param bag the bag to synchronize, must not be null
+ * @return a synchronized bag backed by that bag
+ * @throws IllegalArgumentException if the Bag is null
+ */
+ public static Bag synchronizedBag(Bag bag) {
+ return SynchronizedBag.decorate(bag);
+ }
+
+ /**
+ * Returns an unmodifiable view of the given bag. Any modification
+ * attempts to the returned bag will raise an
+ * {@link UnsupportedOperationException}.
+ *
+ * @param bag the bag whose unmodifiable view is to be returned, must not be null
+ * @return an unmodifiable view of that bag
+ * @throws IllegalArgumentException if the Bag is null
+ */
+ public static Bag unmodifiableBag(Bag bag) {
+ return UnmodifiableBag.decorate(bag);
+ }
+
+ /**
+ * Returns a predicated (validating) bag backed by the given bag.
+ * <p>
+ * Only objects that pass the test in the given predicate can be added to the bag.
+ * Trying to add an invalid object results in an IllegalArgumentException.
+ * It is important not to use the original bag after invoking this method,
+ * as it is a backdoor for adding invalid objects.
+ *
+ * @param bag the bag to predicate, must not be null
+ * @param predicate the predicate for the bag, must not be null
+ * @return a predicated bag backed by the given bag
+ * @throws IllegalArgumentException if the Bag or Predicate is null
+ */
+ public static Bag predicatedBag(Bag bag, Predicate predicate) {
+ return PredicatedBag.decorate(bag, predicate);
+ }
+
+ /**
+ * Returns a typed bag backed by the given bag.
+ * <p>
+ * Only objects of the specified type can be added to the bag.
+ *
+ * @param bag the bag to limit to a specific type, must not be null
+ * @param type the type of objects which may be added to the bag
+ * @return a typed bag backed by the specified bag
+ */
+ public static Bag typedBag(Bag bag, Class type) {
+ return TypedBag.decorate(bag, type);
+ }
+
+ /**
+ * Returns a transformed bag backed by the given bag.
+ * <p>
+ * Each object is passed through the transformer as it is added to the
+ * Bag. It is important not to use the original bag after invoking this
+ * method, as it is a backdoor for adding untransformed objects.
+ *
+ * @param bag the bag to predicate, must not be null
+ * @param transformer the transformer for the bag, must not be null
+ * @return a transformed bag backed by the given bag
+ * @throws IllegalArgumentException if the Bag or Transformer is null
+ */
+ public static Bag transformedBag(Bag bag, Transformer transformer) {
+ return TransformedBag.decorate(bag, transformer);
+ }
+
+ //-----------------------------------------------------------------------
+ /**
+ * Returns a synchronized (thread-safe) sorted bag backed by the given
+ * sorted bag.
+ * In order to guarantee serial access, it is critical that all
+ * access to the backing bag is accomplished through the returned bag.
+ * <p>
+ * It is imperative that the user manually synchronize on the returned
+ * bag when iterating over it:
+ *
+ * <pre>
+ * SortedBag bag = BagUtils.synchronizedSortedBag(new TreeBag());
+ * ...
+ * synchronized(bag) {
+ * Iterator i = bag.iterator(); // Must be in synchronized block
+ * while (i.hasNext())
+ * foo(i.next());
+ * }
+ * }
+ * </pre>
+ *
+ * Failure to follow this advice may result in non-deterministic
+ * behavior.
+ *
+ * @param bag the bag to synchronize, must not be null
+ * @return a synchronized bag backed by that bag
+ * @throws IllegalArgumentException if the SortedBag is null
+ */
+ public static SortedBag synchronizedSortedBag(SortedBag bag) {
+ return SynchronizedSortedBag.decorate(bag);
+ }
+
+ /**
+ * Returns an unmodifiable view of the given sorted bag. Any modification
+ * attempts to the returned bag will raise an
+ * {@link UnsupportedOperationException}.
+ *
+ * @param bag the bag whose unmodifiable view is to be returned, must not be null
+ * @return an unmodifiable view of that bag
+ * @throws IllegalArgumentException if the SortedBag is null
+ */
+ public static SortedBag unmodifiableSortedBag(SortedBag bag) {
+ return UnmodifiableSortedBag.decorate(bag);
+ }
+
+ /**
+ * Returns a predicated (validating) sorted bag backed by the given sorted bag.
+ * <p>
+ * Only objects that pass the test in the given predicate can be added to the bag.
+ * Trying to add an invalid object results in an IllegalArgumentException.
+ * It is important not to use the original bag after invoking this method,
+ * as it is a backdoor for adding invalid objects.
+ *
+ * @param bag the sorted bag to predicate, must not be null
+ * @param predicate the predicate for the bag, must not be null
+ * @return a predicated bag backed by the given bag
+ * @throws IllegalArgumentException if the SortedBag or Predicate is null
+ */
+ public static SortedBag predicatedSortedBag(SortedBag bag, Predicate predicate) {
+ return PredicatedSortedBag.decorate(bag, predicate);
+ }
+
+ /**
+ * Returns a typed sorted bag backed by the given bag.
+ * <p>
+ * Only objects of the specified type can be added to the bag.
+ *
+ * @param bag the bag to limit to a specific type, must not be null
+ * @param type the type of objects which may be added to the bag
+ * @return a typed bag backed by the specified bag
+ */
+ public static SortedBag typedSortedBag(SortedBag bag, Class type) {
+ return TypedSortedBag.decorate(bag, type);
+ }
+
+ /**
+ * Returns a transformed sorted bag backed by the given bag.
+ * <p>
+ * Each object is passed through the transformer as it is added to the
+ * Bag. It is important not to use the original bag after invoking this
+ * method, as it is a backdoor for adding untransformed objects.
+ *
+ * @param bag the bag to predicate, must not be null
+ * @param transformer the transformer for the bag, must not be null
+ * @return a transformed bag backed by the given bag
+ * @throws IllegalArgumentException if the Bag or Transformer is null
+ */
+ public static SortedBag transformedSortedBag(SortedBag bag, Transformer transformer) {
+ return TransformedSortedBag.decorate(bag, transformer);
+ }
+
+}
diff --git a/dependencies/plugins/org.apache.commons.collections/source-bundle/org/apache/commons/collections/BeanMap.java b/dependencies/plugins/org.apache.commons.collections/source-bundle/org/apache/commons/collections/BeanMap.java
new file mode 100755
index 0000000..42be963
--- /dev/null
+++ b/dependencies/plugins/org.apache.commons.collections/source-bundle/org/apache/commons/collections/BeanMap.java
@@ -0,0 +1,803 @@
+/*
+ * Copyright 2001-2005 The Apache Software Foundation
+ *
+ * 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.
+ */
+package org.apache.commons.collections;
+
+import java.beans.BeanInfo;
+import java.beans.IntrospectionException;
+import java.beans.Introspector;
+import java.beans.PropertyDescriptor;
+import java.lang.reflect.Constructor;
+import java.lang.reflect.InvocationTargetException;
+import java.lang.reflect.Method;
+import java.util.AbstractMap;
+import java.util.AbstractSet;
+import java.util.ArrayList;
+import java.util.Collection;
+import java.util.HashMap;
+import java.util.Iterator;
+import java.util.Set;
+
+import org.apache.commons.collections.list.UnmodifiableList;
+import org.apache.commons.collections.keyvalue.AbstractMapEntry;
+import org.apache.commons.collections.set.UnmodifiableSet;
+
+/**
+ * An implementation of Map for JavaBeans which uses introspection to
+ * get and put properties in the bean.
+ * <p>
+ * If an exception occurs during attempts to get or set a property then the
+ * property is considered non existent in the Map
+ *
+ * @since Commons Collections 1.0
+ * @version $Revision: 1.1 $ $Date: 2009/05/27 22:16:19 $
+ *
+ * @author James Strachan
+ * @author Stephen Colebourne
+ * @author Dimiter Dimitrov
+ *
+ * @deprecated Identical class now available in commons-beanutils (full jar version).
+ * This version is due to be removed in collections v4.0.
+ */
+public class BeanMap extends AbstractMap implements Cloneable {
+
+ private transient Object bean;
+
+ private transient HashMap readMethods = new HashMap();
+ private transient HashMap writeMethods = new HashMap();
+ private transient HashMap types = new HashMap();
+
+ /**
+ * An empty array. Used to invoke accessors via reflection.
+ */
+ public static final Object[] NULL_ARGUMENTS = {};
+
+ /**
+ * Maps primitive Class types to transformers. The transformer
+ * transform strings into the appropriate primitive wrapper.
+ */
+ public static HashMap defaultTransformers = new HashMap();
+
+ static {
+ defaultTransformers.put(
+ Boolean.TYPE,
+ new Transformer() {
+ public Object transform( Object input ) {
+ return Boolean.valueOf( input.toString() );
+ }
+ }
+ );
+ defaultTransformers.put(
+ Character.TYPE,
+ new Transformer() {
+ public Object transform( Object input ) {
+ return new Character( input.toString().charAt( 0 ) );
+ }
+ }
+ );
+ defaultTransformers.put(
+ Byte.TYPE,
+ new Transformer() {
+ public Object transform( Object input ) {
+ return Byte.valueOf( input.toString() );
+ }
+ }
+ );
+ defaultTransformers.put(
+ Short.TYPE,
+ new Transformer() {
+ public Object transform( Object input ) {
+ return Short.valueOf( input.toString() );
+ }
+ }
+ );
+ defaultTransformers.put(
+ Integer.TYPE,
+ new Transformer() {
+ public Object transform( Object input ) {
+ return Integer.valueOf( input.toString() );
+ }
+ }
+ );
+ defaultTransformers.put(
+ Long.TYPE,
+ new Transformer() {
+ public Object transform( Object input ) {
+ return Long.valueOf( input.toString() );
+ }
+ }
+ );
+ defaultTransformers.put(
+ Float.TYPE,
+ new Transformer() {
+ public Object transform( Object input ) {
+ return Float.valueOf( input.toString() );
+ }
+ }
+ );
+ defaultTransformers.put(
+ Double.TYPE,
+ new Transformer() {
+ public Object transform( Object input ) {
+ return Double.valueOf( input.toString() );
+ }
+ }
+ );
+ }
+
+
+ // Constructors
+ //-------------------------------------------------------------------------
+
+ /**
+ * Constructs a new empty <code>BeanMap</code>.
+ */
+ public BeanMap() {
+ }
+
+ /**
+ * Constructs a new <code>BeanMap</code> that operates on the
+ * specified bean. If the given bean is <code>null</code>, then
+ * this map will be empty.
+ *
+ * @param bean the bean for this map to operate on
+ */
+ public BeanMap(Object bean) {
+ this.bean = bean;
+ initialise();
+ }
+
+ // Map interface
+ //-------------------------------------------------------------------------
+
+ public String toString() {
+ return "BeanMap<" + String.valueOf(bean) + ">";
+ }
+
+ /**
+ * Clone this bean map using the following process:
+ *
+ * <ul>
+ * <li>If there is no underlying bean, return a cloned BeanMap without a
+ * bean.
+ *
+ * <li>Since there is an underlying bean, try to instantiate a new bean of
+ * the same type using Class.newInstance().
+ *
+ * <li>If the instantiation fails, throw a CloneNotSupportedException
+ *
+ * <li>Clone the bean map and set the newly instantiated bean as the
+ * underlying bean for the bean map.
+ *
+ * <li>Copy each property that is both readable and writable from the
+ * existing object to a cloned bean map.
+ *
+ * <li>If anything fails along the way, throw a
+ * CloneNotSupportedException.
+ *
+ * <ul>
+ */
+ public Object clone() throws CloneNotSupportedException {
+ BeanMap newMap = (BeanMap)super.clone();
+
+ if(bean == null) {
+ // no bean, just an empty bean map at the moment. return a newly
+ // cloned and empty bean map.
+ return newMap;
+ }
+
+ Object newBean = null;
+ Class beanClass = null;
+ try {
+ beanClass = bean.getClass();
+ newBean = beanClass.newInstance();
+ } catch (Exception e) {
+ // unable to instantiate
+ throw new CloneNotSupportedException
+ ("Unable to instantiate the underlying bean \"" +
+ beanClass.getName() + "\": " + e);
+ }
+
+ try {
+ newMap.setBean(newBean);
+ } catch (Exception exception) {
+ throw new CloneNotSupportedException
+ ("Unable to set bean in the cloned bean map: " +
+ exception);
+ }
+
+ try {
+ // copy only properties that are readable and writable. If its
+ // not readable, we can't get the value from the old map. If
+ // its not writable, we can't write a value into the new map.
+ Iterator readableKeys = readMethods.keySet().iterator();
+ while(readableKeys.hasNext()) {
+ Object key = readableKeys.next();
+ if(getWriteMethod(key) != null) {
+ newMap.put(key, get(key));
+ }
+ }
+ } catch (Exception exception) {
+ throw new CloneNotSupportedException
+ ("Unable to copy bean values to cloned bean map: " +
+ exception);
+ }
+
+ return newMap;
+ }
+
+ /**
+ * Puts all of the writable properties from the given BeanMap into this
+ * BeanMap. Read-only and Write-only properties will be ignored.
+ *
+ * @param map the BeanMap whose properties to put
+ */
+ public void putAllWriteable(BeanMap map) {
+ Iterator readableKeys = map.readMethods.keySet().iterator();
+ while (readableKeys.hasNext()) {
+ Object key = readableKeys.next();
+ if (getWriteMethod(key) != null) {
+ this.put(key, map.get(key));
+ }
+ }
+ }
+
+
+ /**
+ * This method reinitializes the bean map to have default values for the
+ * bean's properties. This is accomplished by constructing a new instance
+ * of the bean which the map uses as its underlying data source. This
+ * behavior for <code>clear()</code> differs from the Map contract in that
+ * the mappings are not actually removed from the map (the mappings for a
+ * BeanMap are fixed).
+ */
+ public void clear() {
+ if(bean == null) return;
+
+ Class beanClass = null;
+ try {
+ beanClass = bean.getClass();
+ bean = beanClass.newInstance();
+ }
+ catch (Exception e) {
+ throw new UnsupportedOperationException( "Could not create new instance of class: " + beanClass );
+ }
+ }
+
+ /**
+ * Returns true if the bean defines a property with the given name.
+ * <p>
+ * The given name must be a <code>String</code>; if not, this method
+ * returns false. This method will also return false if the bean
+ * does not define a property with that name.
+ * <p>
+ * Write-only properties will not be matched as the test operates against
+ * property read methods.
+ *
+ * @param name the name of the property to check
+ * @return false if the given name is null or is not a <code>String</code>;
+ * false if the bean does not define a property with that name; or
+ * true if the bean does define a property with that name
+ */
+ public boolean containsKey(Object name) {
+ Method method = getReadMethod(name);
+ return method != null;
+ }
+
+ /**
+ * Returns true if the bean defines a property whose current value is
+ * the given object.
+ *
+ * @param value the value to check
+ * @return false true if the bean has at least one property whose
+ * current value is that object, false otherwise
+ */
+ public boolean containsValue(Object value) {
+ // use default implementation
+ return super.containsValue(value);
+ }
+
+ /**
+ * Returns the value of the bean's property with the given name.
+ * <p>
+ * The given name must be a {@link String} and must not be
+ * null; otherwise, this method returns <code>null</code>.
+ * If the bean defines a property with the given name, the value of
+ * that property is returned. Otherwise, <code>null</code> is
+ * returned.
+ * <p>
+ * Write-only properties will not be matched as the test operates against
+ * property read methods.
+ *
+ * @param name the name of the property whose value to return
+ * @return the value of the property with that name
+ */
+ public Object get(Object name) {
+ if ( bean != null ) {
+ Method method = getReadMethod( name );
+ if ( method != null ) {
+ try {
+ return method.invoke( bean, NULL_ARGUMENTS );
+ }
+ catch ( IllegalAccessException e ) {
+ logWarn( e );
+ }
+ catch ( IllegalArgumentException e ) {
+ logWarn( e );
+ }
+ catch ( InvocationTargetException e ) {
+ logWarn( e );
+ }
+ catch ( NullPointerException e ) {
+ logWarn( e );
+ }
+ }
+ }
+ return null;
+ }
+
+ /**
+ * Sets the bean property with the given name to the given value.
+ *
+ * @param name the name of the property to set
+ * @param value the value to set that property to
+ * @return the previous value of that property
+ * @throws IllegalArgumentException if the given name is null;
+ * if the given name is not a {@link String}; if the bean doesn't
+ * define a property with that name; or if the bean property with
+ * that name is read-only
+ */
+ public Object put(Object name, Object value) throws IllegalArgumentException, ClassCastException {
+ if ( bean != null ) {
+ Object oldValue = get( name );
+ Method method = getWriteMethod( name );
+ if ( method == null ) {
+ throw new IllegalArgumentException( "The bean of type: "+ bean.getClass().getName() + " has no property called: " + name );
+ }
+ try {
+ Object[] arguments = createWriteMethodArguments( method, value );
+ method.invoke( bean, arguments );
+
+ Object newValue = get( name );
+ firePropertyChange( name, oldValue, newValue );
+ }
+ catch ( InvocationTargetException e ) {
+ logInfo( e );
+ throw new IllegalArgumentException( e.getMessage() );
+ }
+ catch ( IllegalAccessException e ) {
+ logInfo( e );
+ throw new IllegalArgumentException( e.getMessage() );
+ }
+ return oldValue;
+ }
+ return null;
+ }
+
+ /**
+ * Returns the number of properties defined by the bean.
+ *
+ * @return the number of properties defined by the bean
+ */
+ public int size() {
+ return readMethods.size();
+ }
+
+
+ /**
+ * Get the keys for this BeanMap.
+ * <p>
+ * Write-only properties are <b>not</b> included in the returned set of
+ * property names, although it is possible to set their value and to get
+ * their type.
+ *
+ * @return BeanMap keys. The Set returned by this method is not
+ * modifiable.
+ */
+ public Set keySet() {
+ return UnmodifiableSet.decorate(readMethods.keySet());
+ }
+
+ /**
+ * Gets a Set of MapEntry objects that are the mappings for this BeanMap.
+ * <p>
+ * Each MapEntry can be set but not removed.
+ *
+ * @return the unmodifiable set of mappings
+ */
+ public Set entrySet() {
+ return UnmodifiableSet.decorate(new AbstractSet() {
+ public Iterator iterator() {
+ return entryIterator();
+ }
+ public int size() {
+ return BeanMap.this.readMethods.size();
+ }
+ });
+ }
+
+ /**
+ * Returns the values for the BeanMap.
+ *
+ * @return values for the BeanMap. The returned collection is not
+ * modifiable.
+ */
+ public Collection values() {
+ ArrayList answer = new ArrayList( readMethods.size() );
+ for ( Iterator iter = valueIterator(); iter.hasNext(); ) {
+ answer.add( iter.next() );
+ }
+ return UnmodifiableList.decorate(answer);
+ }
+
+
+ // Helper methods
+ //-------------------------------------------------------------------------
+
+ /**
+ * Returns the type of the property with the given name.
+ *
+ * @param name the name of the property
+ * @return the type of the property, or <code>null</code> if no such
+ * property exists
+ */
+ public Class getType(String name) {
+ return (Class) types.get( name );
+ }
+
+ /**
+ * Convenience method for getting an iterator over the keys.
+ * <p>
+ * Write-only properties will not be returned in the iterator.
+ *
+ * @return an iterator over the keys
+ */
+ public Iterator keyIterator() {
+ return readMethods.keySet().iterator();
+ }
+
+ /**
+ * Convenience method for getting an iterator over the values.
+ *
+ * @return an iterator over the values
+ */
+ public Iterator valueIterator() {
+ final Iterator iter = keyIterator();
+ return new Iterator() {
+ public boolean hasNext() {
+ return iter.hasNext();
+ }
+ public Object next() {
+ Object key = iter.next();
+ return get(key);
+ }
+ public void remove() {
+ throw new UnsupportedOperationException( "remove() not supported for BeanMap" );
+ }
+ };
+ }
+
+ /**
+ * Convenience method for getting an iterator over the entries.
+ *
+ * @return an iterator over the entries
+ */
+ public Iterator entryIterator() {
+ final Iterator iter = keyIterator();
+ return new Iterator() {
+ public boolean hasNext() {
+ return iter.hasNext();
+ }
+ public Object next() {
+ Object key = iter.next();
+ Object value = get(key);
+ return new MyMapEntry( BeanMap.this, key, value );
+ }
+ public void remove() {
+ throw new UnsupportedOperationException( "remove() not supported for BeanMap" );
+ }
+ };
+ }
+
+
+ // Properties
+ //-------------------------------------------------------------------------
+
+ /**
+ * Returns the bean currently being operated on. The return value may
+ * be null if this map is empty.
+ *
+ * @return the bean being operated on by this map
+ */
+ public Object getBean() {
+ return bean;
+ }
+
+ /**
+ * Sets the bean to be operated on by this map. The given value may
+ * be null, in which case this map will be empty.
+ *
+ * @param newBean the new bean to operate on
+ */
+ public void setBean( Object newBean ) {
+ bean = newBean;
+ reinitialise();
+ }
+
+ /**
+ * Returns the accessor for the property with the given name.
+ *
+ * @param name the name of the property
+ * @return the accessor method for the property, or null
+ */
+ public Method getReadMethod(String name) {
+ return (Method) readMethods.get(name);
+ }
+
+ /**
+ * Returns the mutator for the property with the given name.
+ *
+ * @param name the name of the property
+ * @return the mutator method for the property, or null
+ */
+ public Method getWriteMethod(String name) {
+ return (Method) writeMethods.get(name);
+ }
+
+
+ // Implementation methods
+ //-------------------------------------------------------------------------
+
+ /**
+ * Returns the accessor for the property with the given name.
+ *
+ * @param name the name of the property
+ * @return null if the name is null; null if the name is not a
+ * {@link String}; null if no such property exists; or the accessor
+ * method for that property
+ */
+ protected Method getReadMethod( Object name ) {
+ return (Method) readMethods.get( name );
+ }
+
+ /**
+ * Returns the mutator for the property with the given name.
+ *
+ * @param name the name of the
+ * @return null if the name is null; null if the name is not a
+ * {@link String}; null if no such property exists; null if the
+ * property is read-only; or the mutator method for that property
+ */
+ protected Method getWriteMethod( Object name ) {
+ return (Method) writeMethods.get( name );
+ }
+
+ /**
+ * Reinitializes this bean. Called during {@link #setBean(Object)}.
+ * Does introspection to find properties.
+ */
+ protected void reinitialise() {
+ readMethods.clear();
+ writeMethods.clear();
+ types.clear();
+ initialise();
+ }
+
+ private void initialise() {
+ if(getBean() == null) return;
+
+ Class beanClass = getBean().getClass();
+ try {
+ //BeanInfo beanInfo = Introspector.getBeanInfo( bean, null );
+ BeanInfo beanInfo = Introspector.getBeanInfo( beanClass );
+ PropertyDescriptor[] propertyDescriptors = beanInfo.getPropertyDescriptors();
+ if ( propertyDescriptors != null ) {
+ for ( int i = 0; i < propertyDescriptors.length; i++ ) {
+ PropertyDescriptor propertyDescriptor = propertyDescriptors[i];
+ if ( propertyDescriptor != null ) {
+ String name = propertyDescriptor.getName();
+ Method readMethod = propertyDescriptor.getReadMethod();
+ Method writeMethod = propertyDescriptor.getWriteMethod();
+ Class aType = propertyDescriptor.getPropertyType();
+
+ if ( readMethod != null ) {
+ readMethods.put( name, readMethod );
+ }
+ if ( writeMethod != null ) {
+ writeMethods.put( name, writeMethod );
+ }
+ types.put( name, aType );
+ }
+ }
+ }
+ }
+ catch ( IntrospectionException e ) {
+ logWarn( e );
+ }
+ }
+
+ /**
+ * Called during a successful {@link #put(Object,Object)} operation.
+ * Default implementation does nothing. Override to be notified of
+ * property changes in the bean caused by this map.
+ *
+ * @param key the name of the property that changed
+ * @param oldValue the old value for that property
+ * @param newValue the new value for that property
+ */
+ protected void firePropertyChange( Object key, Object oldValue, Object newValue ) {
+ }
+
+ // Implementation classes
+ //-------------------------------------------------------------------------
+
+ /**
+ * Map entry used by {@link BeanMap}.
+ */
+ protected static class MyMapEntry extends AbstractMapEntry {
+ private BeanMap owner;
+
+ /**
+ * Constructs a new <code>MyMapEntry</code>.
+ *
+ * @param owner the BeanMap this entry belongs to
+ * @param key the key for this entry
+ * @param value the value for this entry
+ */
+ protected MyMapEntry( BeanMap owner, Object key, Object value ) {
+ super( key, value );
+ this.owner = owner;
+ }
+
+ /**
+ * Sets the value.
+ *
+ * @param value the new value for the entry
+ * @return the old value for the entry
+ */
+ public Object setValue(Object value) {
+ Object key = getKey();
+ Object oldValue = owner.get( key );
+
+ owner.put( key, value );
+ Object newValue = owner.get( key );
+ super.setValue( newValue );
+ return oldValue;
+ }
+ }
+
+ /**
+ * Creates an array of parameters to pass to the given mutator method.
+ * If the given object is not the right type to pass to the method
+ * directly, it will be converted using {@link #convertType(Class,Object)}.
+ *
+ * @param method the mutator method
+ * @param value the value to pass to the mutator method
+ * @return an array containing one object that is either the given value
+ * or a transformed value
+ * @throws IllegalAccessException if {@link #convertType(Class,Object)}
+ * raises it
+ * @throws IllegalArgumentException if any other exception is raised
+ * by {@link #convertType(Class,Object)}
+ */
+ protected Object[] createWriteMethodArguments( Method method, Object value ) throws IllegalAccessException, ClassCastException {
+ try {
+ if ( value != null ) {
+ Class[] types = method.getParameterTypes();
+ if ( types != null && types.length > 0 ) {
+ Class paramType = types[0];
+ if ( ! paramType.isAssignableFrom( value.getClass() ) ) {
+ value = convertType( paramType, value );
+ }
+ }
+ }
+ Object[] answer = { value };
+ return answer;
+ }
+ catch ( InvocationTargetException e ) {
+ logInfo( e );
+ throw new IllegalArgumentException( e.getMessage() );
+ }
+ catch ( InstantiationException e ) {
+ logInfo( e );
+ throw new IllegalArgumentException( e.getMessage() );
+ }
+ }
+
+ /**
+ * Converts the given value to the given type. First, reflection is
+ * is used to find a public constructor declared by the given class
+ * that takes one argument, which must be the precise type of the
+ * given value. If such a constructor is found, a new object is
+ * created by passing the given value to that constructor, and the
+ * newly constructed object is returned.<P>
+ *
+ * If no such constructor exists, and the given type is a primitive
+ * type, then the given value is converted to a string using its
+ * {@link Object#toString() toString()} method, and that string is
+ * parsed into the correct primitive type using, for instance,
+ * {@link Integer#valueOf(String)} to convert the string into an
+ * <code>int</code>.<P>
+ *
+ * If no special constructor exists and the given type is not a
+ * primitive type, this method returns the original value.
+ *
+ * @param newType the type to convert the value to
+ * @param value the value to convert
+ * @return the converted value
+ * @throws NumberFormatException if newType is a primitive type, and
+ * the string representation of the given value cannot be converted
+ * to that type
+ * @throws InstantiationException if the constructor found with
+ * reflection raises it
+ * @throws InvocationTargetException if the constructor found with
+ * reflection raises it
+ * @throws IllegalAccessException never
+ * @throws IllegalArgumentException never
+ */
+ protected Object convertType( Class newType, Object value )
+ throws InstantiationException, IllegalAccessException, IllegalArgumentException, InvocationTargetException {
+
+ // try call constructor
+ Class[] types = { value.getClass() };
+ try {
+ Constructor constructor = newType.getConstructor( types );
+ Object[] arguments = { value };
+ return constructor.newInstance( arguments );
+ }
+ catch ( NoSuchMethodException e ) {
+ // try using the transformers
+ Transformer transformer = getTypeTransformer( newType );
+ if ( transformer != null ) {
+ return transformer.transform( value );
+ }
+ return value;
+ }
+ }
+
+ /**
+ * Returns a transformer for the given primitive type.
+ *
+ * @param aType the primitive type whose transformer to return
+ * @return a transformer that will convert strings into that type,
+ * or null if the given type is not a primitive type
+ */
+ protected Transformer getTypeTransformer( Class aType ) {
+ return (Transformer) defaultTransformers.get( aType );
+ }
+
+ /**
+ * Logs the given exception to <code>System.out</code>. Used to display
+ * warnings while accessing/mutating the bean.
+ *
+ * @param ex the exception to log
+ */
+ protected void logInfo(Exception ex) {
+ // Deliberately do not use LOG4J or Commons Logging to avoid dependencies
+ System.out.println( "INFO: Exception: " + ex );
+ }
+
+ /**
+ * Logs the given exception to <code>System.err</code>. Used to display
+ * errors while accessing/mutating the bean.
+ *
+ * @param ex the exception to log
+ */
+ protected void logWarn(Exception ex) {
+ // Deliberately do not use LOG4J or Commons Logging to avoid dependencies
+ System.out.println( "WARN: Exception: " + ex );
+ ex.printStackTrace();
+ }
+}
diff --git a/dependencies/plugins/org.apache.commons.collections/source-bundle/org/apache/commons/collections/BidiMap.java b/dependencies/plugins/org.apache.commons.collections/source-bundle/org/apache/commons/collections/BidiMap.java
new file mode 100755
index 0000000..184fee2f
--- /dev/null
+++ b/dependencies/plugins/org.apache.commons.collections/source-bundle/org/apache/commons/collections/BidiMap.java
@@ -0,0 +1,145 @@
+/*
+ * Copyright 2003-2004 The Apache Software Foundation
+ *
+ * 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.
+ */
+package org.apache.commons.collections;
+
+/**
+ * Defines a map that allows bidirectional lookup between key and values.
+ * <p>
+ * This extended <code>Map</code> represents a mapping where a key may
+ * lookup a value and a value may lookup a key with equal ease.
+ * This interface extends <code>Map</code> and so may be used anywhere a map
+ * is required. The interface provides an inverse map view, enabling
+ * full access to both directions of the <code>BidiMap</code>.
+ * <p>
+ * Implementations should allow a value to be looked up from a key and
+ * a key to be looked up from a value with equal performance.
+ * <p>
+ * This map enforces the restriction that there is a 1:1 relation between
+ * keys and values, meaning that multiple keys cannot map to the same value.
+ * This is required so that "inverting" the map results in a map without
+ * duplicate keys. See the {@link #put} method description for more information.
+ *
+ * @since Commons Collections 3.0
+ * @version $Revision: 1.1 $ $Date: 2009/05/27 22:16:18 $
+ *
+ * @author Stephen Colebourne
+ */
+public interface BidiMap extends IterableMap {
+
+ /**
+ * Obtains a <code>MapIterator</code> over the map.
+ * <p>
+ * A map iterator is an efficient way of iterating over maps.
+ * It does not require that the map is stored using Map Entry objects
+ * which can increase performance.
+ * <pre>
+ * BidiMap map = new DualHashBidiMap();
+ * MapIterator it = map.mapIterator();
+ * while (it.hasNext()) {
+ * Object key = it.next();
+ * Object value = it.getValue();
+ * it.setValue("newValue");
+ * }
+ * </pre>
+ *
+ * @return a map iterator
+ */
+ MapIterator mapIterator();
+
+ /**
+ * Puts the key-value pair into the map, replacing any previous pair.
+ * <p>
+ * When adding a key-value pair, the value may already exist in the map
+ * against a different key. That mapping is removed, to ensure that the
+ * value only occurs once in the inverse map.
+ * <pre>
+ * BidiMap map1 = new DualHashBidiMap();
+ * map.put("A","B"); // contains A mapped to B, as per Map
+ * map.put("A","C"); // contains A mapped to C, as per Map
+ *
+ * BidiMap map2 = new DualHashBidiMap();
+ * map.put("A","B"); // contains A mapped to B, as per Map
+ * map.put("C","B"); // contains C mapped to B, key A is removed
+ * </pre>
+ *
+ * @param key the key to store
+ * @param value the value to store
+ * @return the previous value mapped to this key
+ *
+ * @throws UnsupportedOperationException if the <code>put</code> method is not supported
+ * @throws ClassCastException (optional) if the map limits the type of the
+ * value and the specified value is inappropriate
+ * @throws IllegalArgumentException (optional) if the map limits the values
+ * in some way and the value was invalid
+ * @throws NullPointerException (optional) if the map limits the values to
+ * non-null and null was specified
+ */
+ Object put(Object key, Object value);
+
+ /**
+ * Gets the key that is currently mapped to the specified value.
+ * <p>
+ * If the value is not contained in the map, <code>null</code> is returned.
+ * <p>
+ * Implementations should seek to make this method perform equally as well
+ * as <code>get(Object)</code>.
+ *
+ * @param value the value to find the key for
+ * @return the mapped key, or <code>null</code> if not found
+ *
+ * @throws ClassCastException (optional) if the map limits the type of the
+ * value and the specified value is inappropriate
+ * @throws NullPointerException (optional) if the map limits the values to
+ * non-null and null was specified
+ */
+ Object getKey(Object value);
+
+ /**
+ * Removes the key-value pair that is currently mapped to the specified
+ * value (optional operation).
+ * <p>
+ * If the value is not contained in the map, <code>null</code> is returned.
+ * <p>
+ * Implementations should seek to make this method perform equally as well
+ * as <code>remove(Object)</code>.
+ *
+ * @param value the value to find the key-value pair for
+ * @return the key that was removed, <code>null</code> if nothing removed
+ *
+ * @throws ClassCastException (optional) if the map limits the type of the
+ * value and the specified value is inappropriate
+ * @throws NullPointerException (optional) if the map limits the values to
+ * non-null and null was specified
+ * @throws UnsupportedOperationException if this method is not supported
+ * by the implementation
+ */
+ Object removeValue(Object value);
+
+ /**
+ * Gets a view of this map where the keys and values are reversed.
+ * <p>
+ * Changes to one map will be visible in the other and vice versa.
+ * This enables both directions of the map to be accessed as a <code>Map</code>.
+ * <p>
+ * Implementations should seek to avoid creating a new object every time this
+ * method is called. See <code>AbstractMap.values()</code> etc. Calling this
+ * method on the inverse map should return the original.
+ *
+ * @return an inverted bidirectional map
+ */
+ BidiMap inverseBidiMap();
+
+}
diff --git a/dependencies/plugins/org.apache.commons.collections/source-bundle/org/apache/commons/collections/BinaryHeap.java b/dependencies/plugins/org.apache.commons.collections/source-bundle/org/apache/commons/collections/BinaryHeap.java
new file mode 100755
index 0000000..9f44182
--- /dev/null
+++ b/dependencies/plugins/org.apache.commons.collections/source-bundle/org/apache/commons/collections/BinaryHeap.java
@@ -0,0 +1,564 @@
+/*
+ * Copyright 2001-2004 The Apache Software Foundation
+ *
+ * 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.
+ */
+package org.apache.commons.collections;
+
+import java.util.AbstractCollection;
+import java.util.Comparator;
+import java.util.Iterator;
+import java.util.NoSuchElementException;
+
+/**
+ * Binary heap implementation of <code>PriorityQueue</code>.
+ * <p>
+ * The <code>PriorityQueue</code> interface has now been replaced for most uses
+ * by the <code>Buffer</code> interface. This class and the interface are
+ * retained for backwards compatibility. The intended replacement is
+ * {@link org.apache.commons.collections.buffer.PriorityBuffer PriorityBuffer}.
+ * <p>
+ * The removal order of a binary heap is based on either the natural sort
+ * order of its elements or a specified {@link Comparator}. The
+ * {@link #pop()} method always returns the first element as determined
+ * by the sort order. (The <code>isMinHeap</code> flag in the constructors
+ * can be used to reverse the sort order, in which case {@link #pop()}
+ * will always remove the last element.) The removal order is
+ * <i>not</i> the same as the order of iteration; elements are
+ * returned by the iterator in no particular order.
+ * <p>
+ * The {@link #insert(Object)} and {@link #pop()} operations perform
+ * in logarithmic time. The {@link #peek()} operation performs in constant
+ * time. All other operations perform in linear time or worse.
+ * <p>
+ * Note that this implementation is not synchronized. Use SynchronizedPriorityQueue
+ * to provide synchronized access to a <code>BinaryHeap</code>:
+ *
+ * <pre>
+ * PriorityQueue heap = new SynchronizedPriorityQueue(new BinaryHeap());
+ * </pre>
+ *
+ * @deprecated Replaced by PriorityBuffer in buffer subpackage.
+ * Due to be removed in v4.0.
+ * @since Commons Collections 1.0
+ * @version $Revision: 1.1 $ $Date: 2009/05/27 22:16:19 $
+ *
+ * @author Peter Donald
+ * @author Ram Chidambaram
+ * @author Michael A. Smith
+ * @author Paul Jack
+ * @author Stephen Colebourne
+ */
+public final class BinaryHeap extends AbstractCollection
+ implements PriorityQueue, Buffer {
+
+ /**
+ * The default capacity for a binary heap.
+ */
+ private final static int DEFAULT_CAPACITY = 13;
+ /**
+ * The number of elements currently in this heap.
+ */
+ int m_size; // package scoped for testing
+ /**
+ * The elements in this heap.
+ */
+ Object[] m_elements; // package scoped for testing
+ /**
+ * If true, the first element as determined by the sort order will
+ * be returned. If false, the last element as determined by the
+ * sort order will be returned.
+ */
+ boolean m_isMinHeap; // package scoped for testing
+ /**
+ * The comparator used to order the elements
+ */
+ Comparator m_comparator; // package scoped for testing
+
+ /**
+ * Constructs a new minimum binary heap.
+ */
+ public BinaryHeap() {
+ this(DEFAULT_CAPACITY, true);
+ }
+
+ /**
+ * Constructs a new <code>BinaryHeap</code> that will use the given
+ * comparator to order its elements.
+ *
+ * @param comparator the comparator used to order the elements, null
+ * means use natural order
+ */
+ public BinaryHeap(Comparator comparator) {
+ this();
+ m_comparator = comparator;
+ }
+
+ /**
+ * Constructs a new minimum binary heap with the specified initial capacity.
+ *
+ * @param capacity The initial capacity for the heap. This value must
+ * be greater than zero.
+ * @throws IllegalArgumentException
+ * if <code>capacity</code> is <= <code>0</code>
+ */
+ public BinaryHeap(int capacity) {
+ this(capacity, true);
+ }
+
+ /**
+ * Constructs a new <code>BinaryHeap</code>.
+ *
+ * @param capacity the initial capacity for the heap
+ * @param comparator the comparator used to order the elements, null
+ * means use natural order
+ * @throws IllegalArgumentException
+ * if <code>capacity</code> is <= <code>0</code>
+ */
+ public BinaryHeap(int capacity, Comparator comparator) {
+ this(capacity);
+ m_comparator = comparator;
+ }
+
+ /**
+ * Constructs a new minimum or maximum binary heap
+ *
+ * @param isMinHeap if <code>true</code> the heap is created as a
+ * minimum heap; otherwise, the heap is created as a maximum heap
+ */
+ public BinaryHeap(boolean isMinHeap) {
+ this(DEFAULT_CAPACITY, isMinHeap);
+ }
+
+ /**
+ * Constructs a new <code>BinaryHeap</code>.
+ *
+ * @param isMinHeap true to use the order imposed by the given
+ * comparator; false to reverse that order
+ * @param comparator the comparator used to order the elements, null
+ * means use natural order
+ */
+ public BinaryHeap(boolean isMinHeap, Comparator comparator) {
+ this(isMinHeap);
+ m_comparator = comparator;
+ }
+
+ /**
+ * Constructs a new minimum or maximum binary heap with the specified
+ * initial capacity.
+ *
+ * @param capacity the initial capacity for the heap. This value must
+ * be greater than zero.
+ * @param isMinHeap if <code>true</code> the heap is created as a
+ * minimum heap; otherwise, the heap is created as a maximum heap.
+ * @throws IllegalArgumentException
+ * if <code>capacity</code> is <code><= 0</code>
+ */
+ public BinaryHeap(int capacity, boolean isMinHeap) {
+ if (capacity <= 0) {
+ throw new IllegalArgumentException("invalid capacity");
+ }
+ m_isMinHeap = isMinHeap;
+
+ //+1 as 0 is noop
+ m_elements = new Object[capacity + 1];
+ }
+
+ /**
+ * Constructs a new <code>BinaryHeap</code>.
+ *
+ * @param capacity the initial capacity for the heap
+ * @param isMinHeap true to use the order imposed by the given
+ * comparator; false to reverse that order
+ * @param comparator the comparator used to order the elements, null
+ * means use natural order
+ * @throws IllegalArgumentException
+ * if <code>capacity</code> is <code><= 0</code>
+ */
+ public BinaryHeap(int capacity, boolean isMinHeap, Comparator comparator) {
+ this(capacity, isMinHeap);
+ m_comparator = comparator;
+ }
+
+ //-----------------------------------------------------------------------
+ /**
+ * Clears all elements from queue.
+ */
+ public void clear() {
+ m_elements = new Object[m_elements.length]; // for gc
+ m_size = 0;
+ }
+
+ /**
+ * Tests if queue is empty.
+ *
+ * @return <code>true</code> if queue is empty; <code>false</code>
+ * otherwise.
+ */
+ public boolean isEmpty() {
+ return m_size == 0;
+ }
+
+ /**
+ * Tests if queue is full.
+ *
+ * @return <code>true</code> if queue is full; <code>false</code>
+ * otherwise.
+ */
+ public boolean isFull() {
+ //+1 as element 0 is noop
+ return m_elements.length == m_size + 1;
+ }
+
+ /**
+ * Inserts an element into queue.
+ *
+ * @param element the element to be inserted
+ */
+ public void insert(Object element) {
+ if (isFull()) {
+ grow();
+ }
+ //percolate element to it's place in tree
+ if (m_isMinHeap) {
+ percolateUpMinHeap(element);
+ } else {
+ percolateUpMaxHeap(element);
+ }
+ }
+
+ /**
+ * Returns the element on top of heap but don't remove it.
+ *
+ * @return the element at top of heap
+ * @throws NoSuchElementException if <code>isEmpty() == true</code>
+ */
+ public Object peek() throws NoSuchElementException {
+ if (isEmpty()) {
+ throw new NoSuchElementException();
+ } else {
+ return m_elements[1];
+ }
+ }
+
+ /**
+ * Returns the element on top of heap and remove it.
+ *
+ * @return the element at top of heap
+ * @throws NoSuchElementException if <code>isEmpty() == true</code>
+ */
+ public Object pop() throws NoSuchElementException {
+ final Object result = peek();
+ m_elements[1] = m_elements[m_size--];
+
+ // set the unused element to 'null' so that the garbage collector
+ // can free the object if not used anywhere else.(remove reference)
+ m_elements[m_size + 1] = null;
+
+ if (m_size != 0) {
+ // percolate top element to it's place in tree
+ if (m_isMinHeap) {
+ percolateDownMinHeap(1);
+ } else {
+ percolateDownMaxHeap(1);
+ }
+ }
+
+ return result;
+ }
+
+ /**
+ * Percolates element down heap from the position given by the index.
+ * <p>
+ * Assumes it is a minimum heap.
+ *
+ * @param index the index for the element
+ */
+ protected void percolateDownMinHeap(final int index) {
+ final Object element = m_elements[index];
+ int hole = index;
+
+ while ((hole * 2) <= m_size) {
+ int child = hole * 2;
+
+ // if we have a right child and that child can not be percolated
+ // up then move onto other child
+ if (child != m_size && compare(m_elements[child + 1], m_elements[child]) < 0) {
+ child++;
+ }
+
+ // if we found resting place of bubble then terminate search
+ if (compare(m_elements[child], element) >= 0) {
+ break;
+ }
+
+ m_elements[hole] = m_elements[child];
+ hole = child;
+ }
+
+ m_elements[hole] = element;
+ }
+
+ /**
+ * Percolates element down heap from the position given by the index.
+ * <p>
+ * Assumes it is a maximum heap.
+ *
+ * @param index the index of the element
+ */
+ protected void percolateDownMaxHeap(final int index) {
+ final Object element = m_elements[index];
+ int hole = index;
+
+ while ((hole * 2) <= m_size) {
+ int child = hole * 2;
+
+ // if we have a right child and that child can not be percolated
+ // up then move onto other child
+ if (child != m_size && compare(m_elements[child + 1], m_elements[child]) > 0) {
+ child++;
+ }
+
+ // if we found resting place of bubble then terminate search
+ if (compare(m_elements[child], element) <= 0) {
+ break;
+ }
+
+ m_elements[hole] = m_elements[child];
+ hole = child;
+ }
+
+ m_elements[hole] = element;
+ }
+
+ /**
+ * Percolates element up heap from the position given by the index.
+ * <p>
+ * Assumes it is a minimum heap.
+ *
+ * @param index the index of the element to be percolated up
+ */
+ protected void percolateUpMinHeap(final int index) {
+ int hole = index;
+ Object element = m_elements[hole];
+ while (hole > 1 && compare(element, m_elements[hole / 2]) < 0) {
+ // save element that is being pushed down
+ // as the element "bubble" is percolated up
+ final int next = hole / 2;
+ m_elements[hole] = m_elements[next];
+ hole = next;
+ }
+ m_elements[hole] = element;
+ }
+
+ /**
+ * Percolates a new element up heap from the bottom.
+ * <p>
+ * Assumes it is a minimum heap.
+ *
+ * @param element the element
+ */
+ protected void percolateUpMinHeap(final Object element) {
+ m_elements[++m_size] = element;
+ percolateUpMinHeap(m_size);
+ }
+
+ /**
+ * Percolates element up heap from from the position given by the index.
+ * <p>
+ * Assume it is a maximum heap.
+ *
+ * @param index the index of the element to be percolated up
+ */
+ protected void percolateUpMaxHeap(final int index) {
+ int hole = index;
+ Object element = m_elements[hole];
+
+ while (hole > 1 && compare(element, m_elements[hole / 2]) > 0) {
+ // save element that is being pushed down
+ // as the element "bubble" is percolated up
+ final int next = hole / 2;
+ m_elements[hole] = m_elements[next];
+ hole = next;
+ }
+
+ m_elements[hole] = element;
+ }
+
+ /**
+ * Percolates a new element up heap from the bottom.
+ * <p>
+ * Assume it is a maximum heap.
+ *
+ * @param element the element
+ */
+ protected void percolateUpMaxHeap(final Object element) {
+ m_elements[++m_size] = element;
+ percolateUpMaxHeap(m_size);
+ }
+
+ /**
+ * Compares two objects using the comparator if specified, or the
+ * natural order otherwise.
+ *
+ * @param a the first object
+ * @param b the second object
+ * @return -ve if a less than b, 0 if they are equal, +ve if a greater than b
+ */
+ private int compare(Object a, Object b) {
+ if (m_comparator != null) {
+ return m_comparator.compare(a, b);
+ } else {
+ return ((Comparable) a).compareTo(b);
+ }
+ }
+
+ /**
+ * Increases the size of the heap to support additional elements
+ */
+ protected void grow() {
+ final Object[] elements = new Object[m_elements.length * 2];
+ System.arraycopy(m_elements, 0, elements, 0, m_elements.length);
+ m_elements = elements;
+ }
+
+ /**
+ * Returns a string representation of this heap. The returned string
+ * is similar to those produced by standard JDK collections.
+ *
+ * @return a string representation of this heap
+ */
+ public String toString() {
+ final StringBuffer sb = new StringBuffer();
+
+ sb.append("[ ");
+
+ for (int i = 1; i < m_size + 1; i++) {
+ if (i != 1) {
+ sb.append(", ");
+ }
+ sb.append(m_elements[i]);
+ }
+
+ sb.append(" ]");
+
+ return sb.toString();
+ }
+
+
+ /**
+ * Returns an iterator over this heap's elements.
+ *
+ * @return an iterator over this heap's elements
+ */
+ public Iterator iterator() {
+ return new Iterator() {
+
+ private int index = 1;
+ private int lastReturnedIndex = -1;
+
+ public boolean hasNext() {
+ return index <= m_size;
+ }
+
+ public Object next() {
+ if (!hasNext()) throw new NoSuchElementException();
+ lastReturnedIndex = index;
+ index++;
+ return m_elements[lastReturnedIndex];
+ }
+
+ public void remove() {
+ if (lastReturnedIndex == -1) {
+ throw new IllegalStateException();
+ }
+ m_elements[ lastReturnedIndex ] = m_elements[ m_size ];
+ m_elements[ m_size ] = null;
+ m_size--;
+ if( m_size != 0 && lastReturnedIndex <= m_size) {
+ int compareToParent = 0;
+ if (lastReturnedIndex > 1) {
+ compareToParent = compare(m_elements[lastReturnedIndex],
+ m_elements[lastReturnedIndex / 2]);
+ }
+ if (m_isMinHeap) {
+ if (lastReturnedIndex > 1 && compareToParent < 0) {
+ percolateUpMinHeap(lastReturnedIndex);
+ } else {
+ percolateDownMinHeap(lastReturnedIndex);
+ }
+ } else { // max heap
+ if (lastReturnedIndex > 1 && compareToParent > 0) {
+ percolateUpMaxHeap(lastReturnedIndex);
+ } else {
+ percolateDownMaxHeap(lastReturnedIndex);
+ }
+ }
+ }
+ index--;
+ lastReturnedIndex = -1;
+ }
+
+ };
+ }
+
+
+ /**
+ * Adds an object to this heap. Same as {@link #insert(Object)}.
+ *
+ * @param object the object to add
+ * @return true, always
+ */
+ public boolean add(Object object) {
+ insert(object);
+ return true;
+ }
+
+ /**
+ * Returns the priority element. Same as {@link #peek()}.
+ *
+ * @return the priority element
+ * @throws BufferUnderflowException if this heap is empty
+ */
+ public Object get() {
+ try {
+ return peek();
+ } catch (NoSuchElementException e) {
+ throw new BufferUnderflowException();
+ }
+ }
+
+ /**
+ * Removes the priority element. Same as {@link #pop()}.
+ *
+ * @return the removed priority element
+ * @throws BufferUnderflowException if this heap is empty
+ */
+ public Object remove() {
+ try {
+ return pop();
+ } catch (NoSuchElementException e) {
+ throw new BufferUnderflowException();
+ }
+ }
+
+ /**
+ * Returns the number of elements in this heap.
+ *
+ * @return the number of elements in this heap
+ */
+ public int size() {
+ return m_size;
+ }
+
+}
diff --git a/dependencies/plugins/org.apache.commons.collections/source-bundle/org/apache/commons/collections/BoundedCollection.java b/dependencies/plugins/org.apache.commons.collections/source-bundle/org/apache/commons/collections/BoundedCollection.java
new file mode 100755
index 0000000..191c467
--- /dev/null
+++ b/dependencies/plugins/org.apache.commons.collections/source-bundle/org/apache/commons/collections/BoundedCollection.java
@@ -0,0 +1,52 @@
+/*
+ * Copyright 2002-2004 The Apache Software Foundation
+ *
+ * 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.
+ */
+package org.apache.commons.collections;
+
+import java.util.Collection;
+
+/**
+ * Defines a collection that is bounded in size.
+ * <p>
+ * The size of the collection can vary, but it can never exceed a preset
+ * maximum number of elements. This interface allows the querying of details
+ * associated with the maximum number of elements.
+ *
+ * @see CollectionUtils#isFull
+ * @see CollectionUtils#maxSize
+ *
+ * @since Commons Collections 3.0
+ * @version $Revision: 1.1 $ $Date: 2009/05/27 22:16:18 $
+ *
+ * @author Herve Quiroz
+ * @author Stephen Colebourne
+ */
+public interface BoundedCollection extends Collection {
+
+ /**
+ * Returns true if this collection is full and no new elements can be added.
+ *
+ * @return <code>true</code> if the collection is full
+ */
+ boolean isFull();
+
+ /**
+ * Gets the maximum size of the collection (the bound).
+ *
+ * @return the maximum number of elements the collection can hold
+ */
+ int maxSize();
+
+}
diff --git a/dependencies/plugins/org.apache.commons.collections/source-bundle/org/apache/commons/collections/BoundedFifoBuffer.java b/dependencies/plugins/org.apache.commons.collections/source-bundle/org/apache/commons/collections/BoundedFifoBuffer.java
new file mode 100755
index 0000000..70dd9d4
--- /dev/null
+++ b/dependencies/plugins/org.apache.commons.collections/source-bundle/org/apache/commons/collections/BoundedFifoBuffer.java
@@ -0,0 +1,310 @@
+/*
+ * Copyright 2002-2004 The Apache Software Foundation
+ *
+ * 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.
+ */
+package org.apache.commons.collections;
+
+import java.util.AbstractCollection;
+import java.util.Arrays;
+import java.util.Collection;
+import java.util.Iterator;
+import java.util.NoSuchElementException;
+
+/**
+ * The BoundedFifoBuffer is a very efficient implementation of
+ * Buffer that does not alter the size of the buffer at runtime.
+ * <p>
+ * The removal order of a <code>BoundedFifoBuffer</code> is based on the
+ * insertion order; elements are removed in the same order in which they
+ * were added. The iteration order is the same as the removal order.
+ * <p>
+ * The {@link #add(Object)}, {@link #remove()} and {@link #get()} operations
+ * all perform in constant time. All other operations perform in linear
+ * time or worse.
+ * <p>
+ * Note that this implementation is not synchronized. The following can be
+ * used to provide synchronized access to your <code>BoundedFifoBuffer</code>:
+ * <pre>
+ * Buffer fifo = BufferUtils.synchronizedBuffer(new BoundedFifoBuffer());
+ * </pre>
+ * <p>
+ * This buffer prevents null objects from being added.
+ *
+ * @deprecated Moved to buffer subpackage. Due to be removed in v4.0.
+ * @since 2.1
+ * @version $Revision: 1.1 $ $Date: 2009/05/27 22:16:18 $
+ *
+ * @author Avalon
+ * @author Berin Loritsch
+ * @author Paul Jack
+ * @author Stephen Colebourne
+ * @author Herve Quiroz
+ */
+public class BoundedFifoBuffer extends AbstractCollection
+ implements Buffer, BoundedCollection {
+
+ private final Object[] m_elements;
+ private int m_start = 0;
+ private int m_end = 0;
+ private boolean m_full = false;
+ private final int maxElements;
+
+ /**
+ * Constructs a new <code>BoundedFifoBuffer</code> big enough to hold
+ * 32 elements.
+ */
+ public BoundedFifoBuffer() {
+ this(32);
+ }
+
+ /**
+ * Constructs a new <code>BoundedFifoBuffer</code> big enough to hold
+ * the specified number of elements.
+ *
+ * @param size the maximum number of elements for this fifo
+ * @throws IllegalArgumentException if the size is less than 1
+ */
+ public BoundedFifoBuffer(int size) {
+ if (size <= 0) {
+ throw new IllegalArgumentException("The size must be greater than 0");
+ }
+ m_elements = new Object[size];
+ maxElements = m_elements.length;
+ }
+
+ /**
+ * Constructs a new <code>BoundedFifoBuffer</code> big enough to hold all
+ * of the elements in the specified collection. That collection's
+ * elements will also be added to the buffer.
+ *
+ * @param coll the collection whose elements to add, may not be null
+ * @throws NullPointerException if the collection is null
+ */
+ public BoundedFifoBuffer(Collection coll) {
+ this(coll.size());
+ addAll(coll);
+ }
+
+ /**
+ * Returns the number of elements stored in the buffer.
+ *
+ * @return this buffer's size
+ */
+ public int size() {
+ int size = 0;
+
+ if (m_end < m_start) {
+ size = maxElements - m_start + m_end;
+ } else if (m_end == m_start) {
+ size = (m_full ? maxElements : 0);
+ } else {
+ size = m_end - m_start;
+ }
+
+ return size;
+ }
+
+ /**
+ * Returns true if this buffer is empty; false otherwise.
+ *
+ * @return true if this buffer is empty
+ */
+ public boolean isEmpty() {
+ return size() == 0;
+ }
+
+ /**
+ * Returns true if this collection is full and no new elements can be added.
+ *
+ * @return <code>true</code> if the collection is full
+ */
+ public boolean isFull() {
+ return size() == maxElements;
+ }
+
+ /**
+ * Gets the maximum size of the collection (the bound).
+ *
+ * @return the maximum number of elements the collection can hold
+ */
+ public int maxSize() {
+ return maxElements;
+ }
+
+ /**
+ * Clears this buffer.
+ */
+ public void clear() {
+ m_full = false;
+ m_start = 0;
+ m_end = 0;
+ Arrays.fill(m_elements, null);
+ }
+
+ /**
+ * Adds the given element to this buffer.
+ *
+ * @param element the element to add
+ * @return true, always
+ * @throws NullPointerException if the given element is null
+ * @throws BufferOverflowException if this buffer is full
+ */
+ public boolean add(Object element) {
+ if (null == element) {
+ throw new NullPointerException("Attempted to add null object to buffer");
+ }
+
+ if (m_full) {
+ throw new BufferOverflowException("The buffer cannot hold more than " + maxElements + " objects.");
+ }
+
+ m_elements[m_end++] = element;
+
+ if (m_end >= maxElements) {
+ m_end = 0;
+ }
+
+ if (m_end == m_start) {
+ m_full = true;
+ }
+
+ return true;
+ }
+
+ /**
+ * Returns the least recently inserted element in this buffer.
+ *
+ * @return the least recently inserted element
+ * @throws BufferUnderflowException if the buffer is empty
+ */
+ public Object get() {
+ if (isEmpty()) {
+ throw new BufferUnderflowException("The buffer is already empty");
+ }
+
+ return m_elements[m_start];
+ }
+
+ /**
+ * Removes the least recently inserted element from this buffer.
+ *
+ * @return the least recently inserted element
+ * @throws BufferUnderflowException if the buffer is empty
+ */
+ public Object remove() {
+ if (isEmpty()) {
+ throw new BufferUnderflowException("The buffer is already empty");
+ }
+
+ Object element = m_elements[m_start];
+
+ if (null != element) {
+ m_elements[m_start++] = null;
+
+ if (m_start >= maxElements) {
+ m_start = 0;
+ }
+
+ m_full = false;
+ }
+
+ return element;
+ }
+
+ /**
+ * Increments the internal index.
+ *
+ * @param index the index to increment
+ * @return the updated index
+ */
+ private int increment(int index) {
+ index++;
+ if (index >= maxElements) {
+ index = 0;
+ }
+ return index;
+ }
+
+ /**
+ * Decrements the internal index.
+ *
+ * @param index the index to decrement
+ * @return the updated index
+ */
+ private int decrement(int index) {
+ index--;
+ if (index < 0) {
+ index = maxElements - 1;
+ }
+ return index;
+ }
+
+ /**
+ * Returns an iterator over this buffer's elements.
+ *
+ * @return an iterator over this buffer's elements
+ */
+ public Iterator iterator() {
+ return new Iterator() {
+
+ private int index = m_start;
+ private int lastReturnedIndex = -1;
+ private boolean isFirst = m_full;
+
+ public boolean hasNext() {
+ return isFirst || (index != m_end);
+
+ }
+
+ public Object next() {
+ if (!hasNext()) throw new NoSuchElementException();
+ isFirst = false;
+ lastReturnedIndex = index;
+ index = increment(index);
+ return m_elements[lastReturnedIndex];
+ }
+
+ public void remove() {
+ if (lastReturnedIndex == -1) throw new IllegalStateException();
+
+ // First element can be removed quickly
+ if (lastReturnedIndex == m_start) {
+ BoundedFifoBuffer.this.remove();
+ lastReturnedIndex = -1;
+ return;
+ }
+
+ // Other elements require us to shift the subsequent elements
+ int i = lastReturnedIndex + 1;
+ while (i != m_end) {
+ if (i >= maxElements) {
+ m_elements[i - 1] = m_elements[0];
+ i = 0;
+ } else {
+ m_elements[i - 1] = m_elements[i];
+ i++;
+ }
+ }
+
+ lastReturnedIndex = -1;
+ m_end = decrement(m_end);
+ m_elements[m_end] = null;
+ m_full = false;
+ index = decrement(index);
+ }
+
+ };
+ }
+
+}
diff --git a/dependencies/plugins/org.apache.commons.collections/source-bundle/org/apache/commons/collections/BoundedMap.java b/dependencies/plugins/org.apache.commons.collections/source-bundle/org/apache/commons/collections/BoundedMap.java
new file mode 100755
index 0000000..a7a82f6
--- /dev/null
+++ b/dependencies/plugins/org.apache.commons.collections/source-bundle/org/apache/commons/collections/BoundedMap.java
@@ -0,0 +1,48 @@
+/*
+ * Copyright 2003-2004 The Apache Software Foundation
+ *
+ * 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.
+ */
+package org.apache.commons.collections;
+
+import java.util.Map;
+
+/**
+ * Defines a map that is bounded in size.
+ * <p>
+ * The size of the map can vary, but it can never exceed a preset
+ * maximum number of elements. This interface allows the querying of details
+ * associated with the maximum number of elements.
+ *
+ * @since Commons Collections 3.0
+ * @version $Revision: 1.1 $ $Date: 2009/05/27 22:16:18 $
+ *
+ * @author Stephen Colebourne
+ */
+public interface BoundedMap extends Map {
+
+ /**
+ * Returns true if this map is full and no new elements can be added.
+ *
+ * @return <code>true</code> if the map is full
+ */
+ boolean isFull();
+
+ /**
+ * Gets the maximum size of the map (the bound).
+ *
+ * @return the maximum number of elements the map can hold
+ */
+ int maxSize();
+
+}
diff --git a/dependencies/plugins/org.apache.commons.collections/source-bundle/org/apache/commons/collections/Buffer.java b/dependencies/plugins/org.apache.commons.collections/source-bundle/org/apache/commons/collections/Buffer.java
new file mode 100755
index 0000000..bbf3264
--- /dev/null
+++ b/dependencies/plugins/org.apache.commons.collections/source-bundle/org/apache/commons/collections/Buffer.java
@@ -0,0 +1,63 @@
+/*
+ * Copyright 2002-2004 The Apache Software Foundation
+ *
+ * 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.
+ */
+package org.apache.commons.collections;
+
+import java.util.Collection;
+
+/**
+ * Defines a collection that allows objects to be removed in some well-defined order.
+ * <p>
+ * The removal order can be based on insertion order (eg, a FIFO queue or a
+ * LIFO stack), on access order (eg, an LRU cache), on some arbitrary comparator
+ * (eg, a priority queue) or on any other well-defined ordering.
+ * <p>
+ * Note that the removal order is not necessarily the same as the iteration
+ * order. A <code>Buffer</code> implementation may have equivalent removal
+ * and iteration orders, but this is not required.
+ * <p>
+ * This interface does not specify any behavior for
+ * {@link Object#equals(Object)} and {@link Object#hashCode} methods. It
+ * is therefore possible for a <code>Buffer</code> implementation to also
+ * also implement {@link java.util.List}, {@link java.util.Set} or
+ * {@link Bag}.
+ *
+ * @since Commons Collections 2.1
+ * @version $Revision: 1.1 $ $Date: 2009/05/27 22:16:19 $
+ *
+ * @author Avalon
+ * @author Berin Loritsch
+ * @author Paul Jack
+ * @author Stephen Colebourne
+ */
+public interface Buffer extends Collection {
+
+ /**
+ * Gets and removes the next object from the buffer.
+ *
+ * @return the next object in the buffer, which is also removed
+ * @throws BufferUnderflowException if the buffer is already empty
+ */
+ Object remove();
+
+ /**
+ * Gets the next object from the buffer without removing it.
+ *
+ * @return the next object in the buffer, which is not removed
+ * @throws BufferUnderflowException if the buffer is empty
+ */
+ Object get();
+
+}
diff --git a/dependencies/plugins/org.apache.commons.collections/source-bundle/org/apache/commons/collections/BufferOverflowException.java b/dependencies/plugins/org.apache.commons.collections/source-bundle/org/apache/commons/collections/BufferOverflowException.java
new file mode 100755
index 0000000..4f8e233
--- /dev/null
+++ b/dependencies/plugins/org.apache.commons.collections/source-bundle/org/apache/commons/collections/BufferOverflowException.java
@@ -0,0 +1,73 @@
+/*
+ * Copyright 2002-2004 The Apache Software Foundation
+ *
+ * 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.
+ */
+package org.apache.commons.collections;
+
+/**
+ * The BufferOverflowException is used when the buffer's capacity has been
+ * exceeded.
+ *
+ * @since Commons Collections 2.1
+ * @version $Revision: 1.1 $ $Date: 2009/05/27 22:16:19 $
+ *
+ * @author Avalon
+ * @author <a href="mailto:bloritsch@apache.org">Berin Loritsch</a>
+ * @author <a href="mailto:jefft@apache.org">Jeff Turner</a>
+ * @author Paul Jack
+ * @author Stephen Colebourne
+ */
+public class BufferOverflowException extends RuntimeException {
+
+ /** The root cause throwable */
+ private final Throwable throwable;
+
+ /**
+ * Constructs a new <code>BufferOverflowException</code>.
+ */
+ public BufferOverflowException() {
+ super();
+ throwable = null;
+ }
+
+ /**
+ * Construct a new <code>BufferOverflowException</code>.
+ *
+ * @param message the detail message for this exception
+ */
+ public BufferOverflowException(String message) {
+ this(message, null);
+ }
+
+ /**
+ * Construct a new <code>BufferOverflowException</code>.
+ *
+ * @param message the detail message for this exception
+ * @param exception the root cause of the exception
+ */
+ public BufferOverflowException(String message, Throwable exception) {
+ super(message);
+ throwable = exception;
+ }
+
+ /**
+ * Gets the root cause of the exception.
+ *
+ * @return the root cause
+ */
+ public final Throwable getCause() {
+ return throwable;
+ }
+
+}
diff --git a/dependencies/plugins/org.apache.commons.collections/source-bundle/org/apache/commons/collections/BufferUnderflowException.java b/dependencies/plugins/org.apache.commons.collections/source-bundle/org/apache/commons/collections/BufferUnderflowException.java
new file mode 100755
index 0000000..8e3a192
--- /dev/null
+++ b/dependencies/plugins/org.apache.commons.collections/source-bundle/org/apache/commons/collections/BufferUnderflowException.java
@@ -0,0 +1,76 @@
+/*
+ * Copyright 2002-2004 The Apache Software Foundation
+ *
+ * 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.
+ */
+package org.apache.commons.collections;
+
+import java.util.NoSuchElementException;
+
+/**
+ * The BufferUnderflowException is used when the buffer is already empty.
+ * <p>
+ * NOTE: From version 3.0, this exception extends NoSuchElementException.
+ *
+ * @since Commons Collections 2.1
+ * @version $Revision: 1.1 $ $Date: 2009/05/27 22:16:18 $
+ *
+ * @author Avalon
+ * @author Berin Loritsch
+ * @author Jeff Turner
+ * @author Paul Jack
+ * @author Stephen Colebourne
+ */
+public class BufferUnderflowException extends NoSuchElementException {
+
+ /** The root cause throwable */
+ private final Throwable throwable;
+
+ /**
+ * Constructs a new <code>BufferUnderflowException</code>.
+ */
+ public BufferUnderflowException() {
+ super();
+ throwable = null;
+ }
+
+ /**
+ * Construct a new <code>BufferUnderflowException</code>.
+ *
+ * @param message the detail message for this exception
+ */
+ public BufferUnderflowException(String message) {
+ this(message, null);
+ }
+
+ /**
+ * Construct a new <code>BufferUnderflowException</code>.
+ *
+ * @param message the detail message for this exception
+ * @param exception the root cause of the exception
+ */
+ public BufferUnderflowException(String message, Throwable exception) {
+ super(message);
+ throwable = exception;
+ }
+
+ /**
+ * Gets the root cause of the exception.
+ *
+ * @return the root cause
+ */
+ public final Throwable getCause() {
+ return throwable;
+ }
+
+}
diff --git a/dependencies/plugins/org.apache.commons.collections/source-bundle/org/apache/commons/collections/BufferUtils.java b/dependencies/plugins/org.apache.commons.collections/source-bundle/org/apache/commons/collections/BufferUtils.java
new file mode 100755
index 0000000..31f6a61
--- /dev/null
+++ b/dependencies/plugins/org.apache.commons.collections/source-bundle/org/apache/commons/collections/BufferUtils.java
@@ -0,0 +1,200 @@
+/*
+ * Copyright 2002-2005 The Apache Software Foundation
+ *
+ * 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.
+ */
+package org.apache.commons.collections;
+
+import org.apache.commons.collections.buffer.BlockingBuffer;
+import org.apache.commons.collections.buffer.PredicatedBuffer;
+import org.apache.commons.collections.buffer.SynchronizedBuffer;
+import org.apache.commons.collections.buffer.TransformedBuffer;
+import org.apache.commons.collections.buffer.TypedBuffer;
+import org.apache.commons.collections.buffer.UnmodifiableBuffer;
+import org.apache.commons.collections.buffer.BoundedBuffer;
+
+/**
+ * Provides utility methods and decorators for {@link Buffer} instances.
+ *
+ * @since Commons Collections 2.1
+ * @version $Revision: 1.1 $ $Date: 2009/05/27 22:16:18 $
+ *
+ * @author Paul Jack
+ * @author Stephen Colebourne
+ */
+public class BufferUtils {
+
+ /**
+ * An empty unmodifiable buffer.
+ */
+ public static final Buffer EMPTY_BUFFER = UnmodifiableBuffer.decorate(new ArrayStack(1));
+
+ /**
+ * <code>BufferUtils</code> should not normally be instantiated.
+ */
+ public BufferUtils() {
+ }
+
+ //-----------------------------------------------------------------------
+ /**
+ * Returns a synchronized buffer backed by the given buffer.
+ * Much like the synchronized collections returned by
+ * {@link java.util.Collections}, you must manually synchronize on
+ * the returned buffer's iterator to avoid non-deterministic behavior:
+ *
+ * <pre>
+ * Buffer b = BufferUtils.synchronizedBuffer(myBuffer);
+ * synchronized (b) {
+ * Iterator i = b.iterator();
+ * while (i.hasNext()) {
+ * process (i.next());
+ * }
+ * }
+ * </pre>
+ *
+ * @param buffer the buffer to synchronize, must not be null
+ * @return a synchronized buffer backed by that buffer
+ * @throws IllegalArgumentException if the Buffer is null
+ */
+ public static Buffer synchronizedBuffer(Buffer buffer) {
+ return SynchronizedBuffer.decorate(buffer);
+ }
+
+ /**
+ * Returns a synchronized buffer backed by the given buffer that will
+ * block on {@link Buffer#get()} and {@link Buffer#remove()} operations.
+ * If the buffer is empty, then the {@link Buffer#get()} and
+ * {@link Buffer#remove()} operations will block until new elements
+ * are added to the buffer, rather than immediately throwing a
+ * <code>BufferUnderflowException</code>.
+ *
+ * @param buffer the buffer to synchronize, must not be null
+ * @return a blocking buffer backed by that buffer
+ * @throws IllegalArgumentException if the Buffer is null
+ */
+ public static Buffer blockingBuffer(Buffer buffer) {
+ return BlockingBuffer.decorate(buffer);
+ }
+
+ /**
+ * Returns a synchronized buffer backed by the given buffer that will
+ * block on {@link Buffer#get()} and {@link Buffer#remove()} operations
+ * until <code>timeout</code> expires. If the buffer is empty, then the
+ * {@link Buffer#get()} and {@link Buffer#remove()} operations will block
+ * until new elements are added to the buffer, rather than immediately
+ * throwing a <code>BufferUnderflowException</code>.
+ *
+ * @param buffer the buffer to synchronize, must not be null
+ * @param timeoutMillis the timeout value in milliseconds, zero or less for no timeout
+ * @return a blocking buffer backed by that buffer
+ * @throws IllegalArgumentException if the Buffer is null
+ * @since Commons Collections 3.2
+ */
+ public static Buffer blockingBuffer(Buffer buffer, long timeoutMillis) {
+ return BlockingBuffer.decorate(buffer, timeoutMillis);
+ }
+
+ /**
+ * Returns a synchronized buffer backed by the given buffer that will
+ * block on {@link Buffer#add(Object)} and
+ * {@link Buffer#addAll(java.util.Collection)} until enough object(s) are
+ * removed from the buffer to allow the object(s) to be added and still
+ * maintain the maximum size.
+ *
+ * @param buffer the buffer to make bounded, must not be null
+ * @param maximumSize the maximum size
+ * @return a bounded buffer backed by the given buffer
+ * @throws IllegalArgumentException if the given buffer is null
+ * @since Commons Collections 3.2
+ */
+ public static Buffer boundedBuffer(Buffer buffer, int maximumSize) {
+ return BoundedBuffer.decorate(buffer, maximumSize);
+ }
+
+ /**
+ * Returns a synchronized buffer backed by the given buffer that will
+ * block on {@link Buffer#add(Object)} and
+ * {@link Buffer#addAll(java.util.Collection)} until enough object(s) are
+ * removed from the buffer to allow the object(s) to be added and still
+ * maintain the maximum size or the timeout expires.
+ *
+ * @param buffer the buffer to make bounded, must not be null
+ * @param maximumSize the maximum size
+ * @param timeoutMillis the timeout value in milliseconds, zero or less for no timeout
+ * @return a bounded buffer backed by the given buffer
+ * @throws IllegalArgumentException if the given buffer is null
+ * @since Commons Collections 3.2
+ */
+ public static Buffer boundedBuffer(Buffer buffer, int maximumSize, long timeoutMillis) {
+ return BoundedBuffer.decorate(buffer, maximumSize, timeoutMillis);
+ }
+
+ /**
+ * Returns an unmodifiable buffer backed by the given buffer.
+ *
+ * @param buffer the buffer to make unmodifiable, must not be null
+ * @return an unmodifiable buffer backed by that buffer
+ * @throws IllegalArgumentException if the Buffer is null
+ */
+ public static Buffer unmodifiableBuffer(Buffer buffer) {
+ return UnmodifiableBuffer.decorate(buffer);
+ }
+
+ /**
+ * Returns a predicated (validating) buffer backed by the given buffer.
+ * <p>
+ * Only objects that pass the test in the given predicate can be added to the buffer.
+ * Trying to add an invalid object results in an IllegalArgumentException.
+ * It is important not to use the original buffer after invoking this method,
+ * as it is a backdoor for adding invalid objects.
+ *
+ * @param buffer the buffer to predicate, must not be null
+ * @param predicate the predicate used to evaluate new elements, must not be null
+ * @return a predicated buffer
+ * @throws IllegalArgumentException if the Buffer or Predicate is null
+ */
+ public static Buffer predicatedBuffer(Buffer buffer, Predicate predicate) {
+ return PredicatedBuffer.decorate(buffer, predicate);
+ }
+
+ /**
+ * Returns a typed buffer backed by the given buffer.
+ * <p>
+ * Only elements of the specified type can be added to the buffer.
+ *
+ * @param buffer the buffer to predicate, must not be null
+ * @param type the type to allow into the buffer, must not be null
+ * @return a typed buffer
+ * @throws IllegalArgumentException if the buffer or type is null
+ */
+ public static Buffer typedBuffer(Buffer buffer, Class type) {
+ return TypedBuffer.decorate(buffer, type);
+ }
+
+ /**
+ * Returns a transformed buffer backed by the given buffer.
+ * <p>
+ * Each object is passed through the transformer as it is added to the
+ * Buffer. It is important not to use the original buffer after invoking this
+ * method, as it is a backdoor for adding untransformed objects.
+ *
+ * @param buffer the buffer to predicate, must not be null
+ * @param transformer the transformer for the buffer, must not be null
+ * @return a transformed buffer backed by the given buffer
+ * @throws IllegalArgumentException if the Buffer or Transformer is null
+ */
+ public static Buffer transformedBuffer(Buffer buffer, Transformer transformer) {
+ return TransformedBuffer.decorate(buffer, transformer);
+ }
+
+}
diff --git a/dependencies/plugins/org.apache.commons.collections/source-bundle/org/apache/commons/collections/Closure.java b/dependencies/plugins/org.apache.commons.collections/source-bundle/org/apache/commons/collections/Closure.java
new file mode 100755
index 0000000..e86d77c
--- /dev/null
+++ b/dependencies/plugins/org.apache.commons.collections/source-bundle/org/apache/commons/collections/Closure.java
@@ -0,0 +1,46 @@
+/*
+ * Copyright 2001-2004 The Apache Software Foundation
+ *
+ * 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.
+ */
+package org.apache.commons.collections;
+
+/**
+ * Defines a functor interface implemented by classes that do something.
+ * <p>
+ * A <code>Closure</code> represents a block of code which is executed from
+ * inside some block, function or iteration. It operates an input object.
+ * <p>
+ * Standard implementations of common closures are provided by
+ * {@link ClosureUtils}. These include method invokation and for/while loops.
+ *
+ * @since Commons Collections 1.0
+ * @version $Revision: 1.1 $ $Date: 2009/05/27 22:16:19 $
+ *
+ * @author James Strachan
+ * @author Nicola Ken Barozzi
+ * @author Stephen Colebourne
+ */
+public interface Closure {
+
+ /**
+ * Performs an action on the specified input object.
+ *
+ * @param input the input to execute on
+ * @throws ClassCastException (runtime) if the input is the wrong class
+ * @throws IllegalArgumentException (runtime) if the input is invalid
+ * @throws FunctorException (runtime) if any other error occurs
+ */
+ public void execute(Object input);
+
+}
diff --git a/dependencies/plugins/org.apache.commons.collections/source-bundle/org/apache/commons/collections/ClosureUtils.java b/dependencies/plugins/org.apache.commons.collections/source-bundle/org/apache/commons/collections/ClosureUtils.java
new file mode 100755
index 0000000..a494333
--- /dev/null
+++ b/dependencies/plugins/org.apache.commons.collections/source-bundle/org/apache/commons/collections/ClosureUtils.java
@@ -0,0 +1,369 @@
+/*
+ * Copyright 2002-2004,2006 The Apache Software Foundation
+ *
+ * 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.
+ */
+package org.apache.commons.collections;
+
+import java.util.Collection;
+import java.util.Iterator;
+import java.util.Map;
+
+import org.apache.commons.collections.functors.ChainedClosure;
+import org.apache.commons.collections.functors.EqualPredicate;
+import org.apache.commons.collections.functors.ExceptionClosure;
+import org.apache.commons.collections.functors.ForClosure;
+import org.apache.commons.collections.functors.IfClosure;
+import org.apache.commons.collections.functors.InvokerTransformer;
+import org.apache.commons.collections.functors.NOPClosure;
+import org.apache.commons.collections.functors.SwitchClosure;
+import org.apache.commons.collections.functors.TransformerClosure;
+import org.apache.commons.collections.functors.WhileClosure;
+
+/**
+ * <code>ClosureUtils</code> provides reference implementations and utilities
+ * for the Closure functor interface. The supplied closures are:
+ * <ul>
+ * <li>Invoker - invokes a method on the input object
+ * <li>For - repeatedly calls a closure for a fixed number of times
+ * <li>While - repeatedly calls a closure while a predicate is true
+ * <li>DoWhile - repeatedly calls a closure while a predicate is true
+ * <li>Chained - chains two or more closures together
+ * <li>Switch - calls one closure based on one or more predicates
+ * <li>SwitchMap - calls one closure looked up from a Map
+ * <li>Transformer - wraps a Transformer as a Closure
+ * <li>NOP - does nothing
+ * <li>Exception - always throws an exception
+ * </ul>
+ * All the supplied closures are Serializable.
+ *
+ * @since Commons Collections 3.0
+ * @version $Revision: 1.1 $ $Date: 2009/05/27 22:16:18 $
+ *
+ * @author Stephen Colebourne
+ * @author Matt Benson
+ */
+public class ClosureUtils {
+
+ /**
+ * This class is not normally instantiated.
+ */
+ public ClosureUtils() {
+ super();
+ }
+
+ /**
+ * Gets a Closure that always throws an exception.
+ * This could be useful during testing as a placeholder.
+ *
+ * @see org.apache.commons.collections.functors.ExceptionClosure
+ *
+ * @return the closure
+ */
+ public static Closure exceptionClosure() {
+ return ExceptionClosure.INSTANCE;
+ }
+
+ /**
+ * Gets a Closure that will do nothing.
+ * This could be useful during testing as a placeholder.
+ *
+ * @see org.apache.commons.collections.functors.NOPClosure
+ *
+ * @return the closure
+ */
+ public static Closure nopClosure() {
+ return NOPClosure.INSTANCE;
+ }
+
+ /**
+ * Creates a Closure that calls a Transformer each time it is called.
+ * The transformer will be called using the closure's input object.
+ * The transformer's result will be ignored.
+ *
+ * @see org.apache.commons.collections.functors.TransformerClosure
+ *
+ * @param transformer the transformer to run each time in the closure, null means nop
+ * @return the closure
+ */
+ public static Closure asClosure(Transformer transformer) {
+ return TransformerClosure.getInstance(transformer);
+ }
+
+ /**
+ * Creates a Closure that will call the closure <code>count</code> times.
+ * <p>
+ * A null closure or zero count returns the <code>NOPClosure</code>.
+ *
+ * @see org.apache.commons.collections.functors.ForClosure
+ *
+ * @param count the number of times to loop
+ * @param closure the closure to call repeatedly
+ * @return the <code>for</code> closure
+ */
+ public static Closure forClosure(int count, Closure closure) {
+ return ForClosure.getInstance(count, closure);
+ }
+
+ /**
+ * Creates a Closure that will call the closure repeatedly until the
+ * predicate returns false.
+ *
+ * @see org.apache.commons.collections.functors.WhileClosure
+ *
+ * @param predicate the predicate to use as an end of loop test, not null
+ * @param closure the closure to call repeatedly, not null
+ * @return the <code>while</code> closure
+ * @throws IllegalArgumentException if either argument is null
+ */
+ public static Closure whileClosure(Predicate predicate, Closure closure) {
+ return WhileClosure.getInstance(predicate, closure, false);
+ }
+
+ /**
+ * Creates a Closure that will call the closure once and then repeatedly
+ * until the predicate returns false.
+ *
+ * @see org.apache.commons.collections.functors.WhileClosure
+ *
+ * @param closure the closure to call repeatedly, not null
+ * @param predicate the predicate to use as an end of loop test, not null
+ * @return the <code>do-while</code> closure
+ * @throws IllegalArgumentException if either argument is null
+ */
+ public static Closure doWhileClosure(Closure closure, Predicate predicate) {
+ return WhileClosure.getInstance(predicate, closure, true);
+ }
+
+ /**
+ * Creates a Closure that will invoke a specific method on the closure's
+ * input object by reflection.
+ *
+ * @see org.apache.commons.collections.functors.InvokerTransformer
+ * @see org.apache.commons.collections.functors.TransformerClosure
+ *
+ * @param methodName the name of the method
+ * @return the <code>invoker</code> closure
+ * @throws IllegalArgumentException if the method name is null
+ */
+ public static Closure invokerClosure(String methodName) {
+ // reuse transformer as it has caching - this is lazy really, should have inner class here
+ return asClosure(InvokerTransformer.getInstance(methodName));
+ }
+
+ /**
+ * Creates a Closure that will invoke a specific method on the closure's
+ * input object by reflection.
+ *
+ * @see org.apache.commons.collections.functors.InvokerTransformer
+ * @see org.apache.commons.collections.functors.TransformerClosure
+ *
+ * @param methodName the name of the method
+ * @param paramTypes the parameter types
+ * @param args the arguments
+ * @return the <code>invoker</code> closure
+ * @throws IllegalArgumentException if the method name is null
+ * @throws IllegalArgumentException if the paramTypes and args don't match
+ */
+ public static Closure invokerClosure(String methodName, Class[] paramTypes, Object[] args) {
+ // reuse transformer as it has caching - this is lazy really, should have inner class here
+ return asClosure(InvokerTransformer.getInstance(methodName, paramTypes, args));
+ }
+
+ /**
+ * Create a new Closure that calls two Closures, passing the result of
+ * the first into the second.
+ *
+ * @see org.apache.commons.collections.functors.ChainedClosure
+ *
+ * @param closure1 the first closure
+ * @param closure2 the second closure
+ * @return the <code>chained</code> closure
+ * @throws IllegalArgumentException if either closure is null
+ */
+ public static Closure chainedClosure(Closure closure1, Closure closure2) {
+ return ChainedClosure.getInstance(closure1, closure2);
+ }
+
+ /**
+ * Create a new Closure that calls each closure in turn, passing the
+ * result into the next closure.
+ *
+ * @see org.apache.commons.collections.functors.ChainedClosure
+ *
+ * @param closures an array of closures to chain
+ * @return the <code>chained</code> closure
+ * @throws IllegalArgumentException if the closures array is null
+ * @throws IllegalArgumentException if any closure in the array is null
+ */
+ public static Closure chainedClosure(Closure[] closures) {
+ return ChainedClosure.getInstance(closures);
+ }
+
+ /**
+ * Create a new Closure that calls each closure in turn, passing the
+ * result into the next closure. The ordering is that of the iterator()
+ * method on the collection.
+ *
+ * @see org.apache.commons.collections.functors.ChainedClosure
+ *
+ * @param closures a collection of closures to chain
+ * @return the <code>chained</code> closure
+ * @throws IllegalArgumentException if the closures collection is null
+ * @throws IllegalArgumentException if the closures collection is empty
+ * @throws IllegalArgumentException if any closure in the collection is null
+ */
+ public static Closure chainedClosure(Collection closures) {
+ return ChainedClosure.getInstance(closures);
+ }
+
+ /**
+ * Create a new Closure that calls another closure based on the
+ * result of the specified predicate.
+ *
+ * @see org.apache.commons.collections.functors.IfClosure
+ *
+ * @param predicate the validating predicate
+ * @param trueClosure the closure called if the predicate is true
+ * @return the <code>if</code> closure
+ * @throws IllegalArgumentException if the predicate is null
+ * @throws IllegalArgumentException if the closure is null
+ * @since Commons Collections 3.2
+ */
+ public static Closure ifClosure(Predicate predicate, Closure trueClosure) {
+ return IfClosure.getInstance(predicate, trueClosure);
+ }
+
+ /**
+ * Create a new Closure that calls one of two closures depending
+ * on the specified predicate.
+ *
+ * @see org.apache.commons.collections.functors.IfClosure
+ *
+ * @param predicate the predicate to switch on
+ * @param trueClosure the closure called if the predicate is true
+ * @param falseClosure the closure called if the predicate is false
+ * @return the <code>switch</code> closure
+ * @throws IllegalArgumentException if the predicate is null
+ * @throws IllegalArgumentException if either closure is null
+ */
+ public static Closure ifClosure(Predicate predicate, Closure trueClosure, Closure falseClosure) {
+ return IfClosure.getInstance(predicate, trueClosure, falseClosure);
+ }
+
+ /**
+ * Create a new Closure that calls one of the closures depending
+ * on the predicates.
+ * <p>
+ * The closure at array location 0 is called if the predicate at array
+ * location 0 returned true. Each predicate is evaluated
+ * until one returns true.
+ *
+ * @see org.apache.commons.collections.functors.SwitchClosure
+ *
+ * @param predicates an array of predicates to check, not null
+ * @param closures an array of closures to call, not null
+ * @return the <code>switch</code> closure
+ * @throws IllegalArgumentException if the either array is null
+ * @throws IllegalArgumentException if any element in the arrays is null
+ * @throws IllegalArgumentException if the arrays are different sizes
+ */
+ public static Closure switchClosure(Predicate[] predicates, Closure[] closures) {
+ return SwitchClosure.getInstance(predicates, closures, null);
+ }
+
+ /**
+ * Create a new Closure that calls one of the closures depending
+ * on the predicates.
+ * <p>
+ * The closure at array location 0 is called if the predicate at array
+ * location 0 returned true. Each predicate is evaluated
+ * until one returns true. If no predicates evaluate to true, the default
+ * closure is called.
+ *
+ * @see org.apache.commons.collections.functors.SwitchClosure
+ *
+ * @param predicates an array of predicates to check, not null
+ * @param closures an array of closures to call, not null
+ * @param defaultClosure the default to call if no predicate matches
+ * @return the <code>switch</code> closure
+ * @throws IllegalArgumentException if the either array is null
+ * @throws IllegalArgumentException if any element in the arrays is null
+ * @throws IllegalArgumentException if the arrays are different sizes
+ */
+ public static Closure switchClosure(Predicate[] predicates, Closure[] closures, Closure defaultClosure) {
+ return SwitchClosure.getInstance(predicates, closures, defaultClosure);
+ }
+
+ /**
+ * Create a new Closure that calls one of the closures depending
+ * on the predicates.
+ * <p>
+ * The Map consists of Predicate keys and Closure values. A closure
+ * is called if its matching predicate returns true. Each predicate is evaluated
+ * until one returns true. If no predicates evaluate to true, the default
+ * closure is called. The default closure is set in the map with a
+ * null key. The ordering is that of the iterator() method on the entryset
+ * collection of the map.
+ *
+ * @see org.apache.commons.collections.functors.SwitchClosure
+ *
+ * @param predicatesAndClosures a map of predicates to closures
+ * @return the <code>switch</code> closure
+ * @throws IllegalArgumentException if the map is null
+ * @throws IllegalArgumentException if the map is empty
+ * @throws IllegalArgumentException if any closure in the map is null
+ * @throws ClassCastException if the map elements are of the wrong type
+ */
+ public static Closure switchClosure(Map predicatesAndClosures) {
+ return SwitchClosure.getInstance(predicatesAndClosures);
+ }
+
+ /**
+ * Create a new Closure that uses the input object as a key to find the
+ * closure to call.
+ * <p>
+ * The Map consists of object keys and Closure values. A closure
+ * is called if the input object equals the key. If there is no match, the
+ * default closure is called. The default closure is set in the map
+ * using a null key.
+ *
+ * @see org.apache.commons.collections.functors.SwitchClosure
+ *
+ * @param objectsAndClosures a map of objects to closures
+ * @return the closure
+ * @throws IllegalArgumentException if the map is null
+ * @throws IllegalArgumentException if the map is empty
+ * @throws IllegalArgumentException if any closure in the map is null
+ */
+ public static Closure switchMapClosure(Map objectsAndClosures) {
+ Closure[] trs = null;
+ Predicate[] preds = null;
+ if (objectsAndClosures == null) {
+ throw new IllegalArgumentException("The object and closure map must not be null");
+ }
+ Closure def = (Closure) objectsAndClosures.remove(null);
+ int size = objectsAndClosures.size();
+ trs = new Closure[size];
+ preds = new Predicate[size];
+ int i = 0;
+ for (Iterator it = objectsAndClosures.entrySet().iterator(); it.hasNext();) {
+ Map.Entry entry = (Map.Entry) it.next();
+ preds[i] = EqualPredicate.getInstance(entry.getKey());
+ trs[i] = (Closure) entry.getValue();
+ i++;
+ }
+ return switchClosure(preds, trs, def);
+ }
+
+}
diff --git a/dependencies/plugins/org.apache.commons.collections/source-bundle/org/apache/commons/collections/CollectionUtils.java b/dependencies/plugins/org.apache.commons.collections/source-bundle/org/apache/commons/collections/CollectionUtils.java
new file mode 100755
index 0000000..0f739da
--- /dev/null
+++ b/dependencies/plugins/org.apache.commons.collections/source-bundle/org/apache/commons/collections/CollectionUtils.java
@@ -0,0 +1,1210 @@
+/*
+ * Copyright 2001-2005 The Apache Software Foundation
+ *
+ * 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.
+ */
+package org.apache.commons.collections;
+
+import java.lang.reflect.Array;
+import java.util.ArrayList;
+import java.util.Collection;
+import java.util.Enumeration;
+import java.util.HashMap;
+import java.util.HashSet;
+import java.util.Iterator;
+import java.util.List;
+import java.util.ListIterator;
+import java.util.Map;
+import java.util.Set;
+
+import org.apache.commons.collections.collection.PredicatedCollection;
+import org.apache.commons.collections.collection.SynchronizedCollection;
+import org.apache.commons.collections.collection.TransformedCollection;
+import org.apache.commons.collections.collection.TypedCollection;
+import org.apache.commons.collections.collection.UnmodifiableBoundedCollection;
+import org.apache.commons.collections.collection.UnmodifiableCollection;
+
+/**
+ * Provides utility methods and decorators for {@link Collection} instances.
+ *
+ * @since Commons Collections 1.0
+ * @version $Revision: 1.1 $ $Date: 2009/05/27 22:16:19 $
+ *
+ * @author Rodney Waldhoff
+ * @author Paul Jack
+ * @author Stephen Colebourne
+ * @author Steve Downey
+ * @author Herve Quiroz
+ * @author Peter KoBek
+ * @author Matthew Hawthorne
+ * @author Janek Bogucki
+ * @author Phil Steitz
+ * @author Steven Melzer
+ * @author Jon Schewe
+ * @author Neil O'Toole
+ * @author Stephen Smith
+ */
+public class CollectionUtils {
+
+ /** Constant to avoid repeated object creation */
+ private static Integer INTEGER_ONE = new Integer(1);
+
+ /**
+ * An empty unmodifiable collection.
+ * The JDK provides empty Set and List implementations which could be used for
+ * this purpose. However they could be cast to Set or List which might be
+ * undesirable. This implementation only implements Collection.
+ */
+ public static final Collection EMPTY_COLLECTION = UnmodifiableCollection.decorate(new ArrayList());
+
+ /**
+ * <code>CollectionUtils</code> should not normally be instantiated.
+ */
+ public CollectionUtils() {
+ }
+
+ /**
+ * Returns a {@link Collection} containing the union
+ * of the given {@link Collection}s.
+ * <p>
+ * The cardinality of each element in the returned {@link Collection}
+ * will be equal to the maximum of the cardinality of that element
+ * in the two given {@link Collection}s.
+ *
+ * @param a the first collection, must not be null
+ * @param b the second collection, must not be null
+ * @return the union of the two collections
+ * @see Collection#addAll
+ */
+ public static Collection union(final Collection a, final Collection b) {
+ ArrayList list = new ArrayList();
+ Map mapa = getCardinalityMap(a);
+ Map mapb = getCardinalityMap(b);
+ Set elts = new HashSet(a);
+ elts.addAll(b);
+ Iterator it = elts.iterator();
+ while(it.hasNext()) {
+ Object obj = it.next();
+ for(int i=0,m=Math.max(getFreq(obj,mapa),getFreq(obj,mapb));i<m;i++) {
+ list.add(obj);
+ }
+ }
+ return list;
+ }
+
+ /**
+ * Returns a {@link Collection} containing the intersection
+ * of the given {@link Collection}s.
+ * <p>
+ * The cardinality of each element in the returned {@link Collection}
+ * will be equal to the minimum of the cardinality of that element
+ * in the two given {@link Collection}s.
+ *
+ * @param a the first collection, must not be null
+ * @param b the second collection, must not be null
+ * @return the intersection of the two collections
+ * @see Collection#retainAll
+ * @see #containsAny
+ */
+ public static Collection intersection(final Collection a, final Collection b) {
+ ArrayList list = new ArrayList();
+ Map mapa = getCardinalityMap(a);
+ Map mapb = getCardinalityMap(b);
+ Set elts = new HashSet(a);
+ elts.addAll(b);
+ Iterator it = elts.iterator();
+ while(it.hasNext()) {
+ Object obj = it.next();
+ for(int i=0,m=Math.min(getFreq(obj,mapa),getFreq(obj,mapb));i<m;i++) {
+ list.add(obj);
+ }
+ }
+ return list;
+ }
+
+ /**
+ * Returns a {@link Collection} containing the exclusive disjunction
+ * (symmetric difference) of the given {@link Collection}s.
+ * <p>
+ * The cardinality of each element <i>e</i> in the returned {@link Collection}
+ * will be equal to
+ * <tt>max(cardinality(<i>e</i>,<i>a</i>),cardinality(<i>e</i>,<i>b</i>)) - min(cardinality(<i>e</i>,<i>a</i>),cardinality(<i>e</i>,<i>b</i>))</tt>.
+ * <p>
+ * This is equivalent to
+ * <tt>{@link #subtract subtract}({@link #union union(a,b)},{@link #intersection intersection(a,b)})</tt>
+ * or
+ * <tt>{@link #union union}({@link #subtract subtract(a,b)},{@link #subtract subtract(b,a)})</tt>.
+ *
+ * @param a the first collection, must not be null
+ * @param b the second collection, must not be null
+ * @return the symmetric difference of the two collections
+ */
+ public static Collection disjunction(final Collection a, final Collection b) {
+ ArrayList list = new ArrayList();
+ Map mapa = getCardinalityMap(a);
+ Map mapb = getCardinalityMap(b);
+ Set elts = new HashSet(a);
+ elts.addAll(b);
+ Iterator it = elts.iterator();
+ while(it.hasNext()) {
+ Object obj = it.next();
+ for(int i=0,m=((Math.max(getFreq(obj,mapa),getFreq(obj,mapb)))-(Math.min(getFreq(obj,mapa),getFreq(obj,mapb))));i<m;i++) {
+ list.add(obj);
+ }
+ }
+ return list;
+ }
+
+ /**
+ * Returns a new {@link Collection} containing <tt><i>a</i> - <i>b</i></tt>.
+ * The cardinality of each element <i>e</i> in the returned {@link Collection}
+ * will be the cardinality of <i>e</i> in <i>a</i> minus the cardinality
+ * of <i>e</i> in <i>b</i>, or zero, whichever is greater.
+ *
+ * @param a the collection to subtract from, must not be null
+ * @param b the collection to subtract, must not be null
+ * @return a new collection with the results
+ * @see Collection#removeAll
+ */
+ public static Collection subtract(final Collection a, final Collection b) {
+ ArrayList list = new ArrayList( a );
+ for (Iterator it = b.iterator(); it.hasNext();) {
+ list.remove(it.next());
+ }
+ return list;
+ }
+
+ /**
+ * Returns <code>true</code> iff at least one element is in both collections.
+ * <p>
+ * In other words, this method returns <code>true</code> iff the
+ * {@link #intersection} of <i>coll1</i> and <i>coll2</i> is not empty.
+ *
+ * @param coll1 the first collection, must not be null
+ * @param coll2 the first collection, must not be null
+ * @return <code>true</code> iff the intersection of the collections is non-empty
+ * @since 2.1
+ * @see #intersection
+ */
+ public static boolean containsAny(final Collection coll1, final Collection coll2) {
+ if (coll1.size() < coll2.size()) {
+ for (Iterator it = coll1.iterator(); it.hasNext();) {
+ if (coll2.contains(it.next())) {
+ return true;
+ }
+ }
+ } else {
+ for (Iterator it = coll2.iterator(); it.hasNext();) {
+ if (coll1.contains(it.next())) {
+ return true;
+ }
+ }
+ }
+ return false;
+ }
+
+ /**
+ * Returns a {@link Map} mapping each unique element in the given
+ * {@link Collection} to an {@link Integer} representing the number
+ * of occurrences of that element in the {@link Collection}.
+ * <p>
+ * Only those elements present in the collection will appear as
+ * keys in the map.
+ *
+ * @param coll the collection to get the cardinality map for, must not be null
+ * @return the populated cardinality map
+ */
+ public static Map getCardinalityMap(final Collection coll) {
+ Map count = new HashMap();
+ for (Iterator it = coll.iterator(); it.hasNext();) {
+ Object obj = it.next();
+ Integer c = (Integer) (count.get(obj));
+ if (c == null) {
+ count.put(obj,INTEGER_ONE);
+ } else {
+ count.put(obj,new Integer(c.intValue() + 1));
+ }
+ }
+ return count;
+ }
+
+ /**
+ * Returns <tt>true</tt> iff <i>a</i> is a sub-collection of <i>b</i>,
+ * that is, iff the cardinality of <i>e</i> in <i>a</i> is less
+ * than or equal to the cardinality of <i>e</i> in <i>b</i>,
+ * for each element <i>e</i> in <i>a</i>.
+ *
+ * @param a the first (sub?) collection, must not be null
+ * @param b the second (super?) collection, must not be null
+ * @return <code>true</code> iff <i>a</i> is a sub-collection of <i>b</i>
+ * @see #isProperSubCollection
+ * @see Collection#containsAll
+ */
+ public static boolean isSubCollection(final Collection a, final Collection b) {
+ Map mapa = getCardinalityMap(a);
+ Map mapb = getCardinalityMap(b);
+ Iterator it = a.iterator();
+ while (it.hasNext()) {
+ Object obj = it.next();
+ if (getFreq(obj, mapa) > getFreq(obj, mapb)) {
+ return false;
+ }
+ }
+ return true;
+ }
+
+ /**
+ * Returns <tt>true</tt> iff <i>a</i> is a <i>proper</i> sub-collection of <i>b</i>,
+ * that is, iff the cardinality of <i>e</i> in <i>a</i> is less
+ * than or equal to the cardinality of <i>e</i> in <i>b</i>,
+ * for each element <i>e</i> in <i>a</i>, and there is at least one
+ * element <i>f</i> such that the cardinality of <i>f</i> in <i>b</i>
+ * is strictly greater than the cardinality of <i>f</i> in <i>a</i>.
+ * <p>
+ * The implementation assumes
+ * <ul>
+ * <li><code>a.size()</code> and <code>b.size()</code> represent the
+ * total cardinality of <i>a</i> and <i>b</i>, resp. </li>
+ * <li><code>a.size() < Integer.MAXVALUE</code></li>
+ * </ul>
+ *
+ * @param a the first (sub?) collection, must not be null
+ * @param b the second (super?) collection, must not be null
+ * @return <code>true</code> iff <i>a</i> is a <i>proper</i> sub-collection of <i>b</i>
+ * @see #isSubCollection
+ * @see Collection#containsAll
+ */
+ public static boolean isProperSubCollection(final Collection a, final Collection b) {
+ return (a.size() < b.size()) && CollectionUtils.isSubCollection(a,b);
+ }
+
+ /**
+ * Returns <tt>true</tt> iff the given {@link Collection}s contain
+ * exactly the same elements with exactly the same cardinalities.
+ * <p>
+ * That is, iff the cardinality of <i>e</i> in <i>a</i> is
+ * equal to the cardinality of <i>e</i> in <i>b</i>,
+ * for each element <i>e</i> in <i>a</i> or <i>b</i>.
+ *
+ * @param a the first collection, must not be null
+ * @param b the second collection, must not be null
+ * @return <code>true</code> iff the collections contain the same elements with the same cardinalities.
+ */
+ public static boolean isEqualCollection(final Collection a, final Collection b) {
+ if(a.size() != b.size()) {
+ return false;
+ } else {
+ Map mapa = getCardinalityMap(a);
+ Map mapb = getCardinalityMap(b);
+ if(mapa.size() != mapb.size()) {
+ return false;
+ } else {
+ Iterator it = mapa.keySet().iterator();
+ while(it.hasNext()) {
+ Object obj = it.next();
+ if(getFreq(obj,mapa) != getFreq(obj,mapb)) {
+ return false;
+ }
+ }
+ return true;
+ }
+ }
+ }
+
+ /**
+ * Returns the number of occurrences of <i>obj</i> in <i>coll</i>.
+ *
+ * @param obj the object to find the cardinality of
+ * @param coll the collection to search
+ * @return the the number of occurrences of obj in coll
+ */
+ public static int cardinality(Object obj, final Collection coll) {
+ if (coll instanceof Set) {
+ return (coll.contains(obj) ? 1 : 0);
+ }
+ if (coll instanceof Bag) {
+ return ((Bag) coll).getCount(obj);
+ }
+ int count = 0;
+ if (obj == null) {
+ for (Iterator it = coll.iterator();it.hasNext();) {
+ if (it.next() == null) {
+ count++;
+ }
+ }
+ } else {
+ for (Iterator it = coll.iterator();it.hasNext();) {
+ if (obj.equals(it.next())) {
+ count++;
+ }
+ }
+ }
+ return count;
+ }
+
+ /**
+ * Finds the first element in the given collection which matches the given predicate.
+ * <p>
+ * If the input collection or predicate is null, or no element of the collection
+ * matches the predicate, null is returned.
+ *
+ * @param collection the collection to search, may be null
+ * @param predicate the predicate to use, may be null
+ * @return the first element of the collection which matches the predicate or null if none could be found
+ */
+ public static Object find(Collection collection, Predicate predicate) {
+ if (collection != null && predicate != null) {
+ for (Iterator iter = collection.iterator(); iter.hasNext();) {
+ Object item = iter.next();
+ if (predicate.evaluate(item)) {
+ return item;
+ }
+ }
+ }
+ return null;
+ }
+
+ /**
+ * Executes the given closure on each element in the collection.
+ * <p>
+ * If the input collection or closure is null, there is no change made.
+ *
+ * @param collection the collection to get the input from, may be null
+ * @param closure the closure to perform, may be null
+ */
+ public static void forAllDo(Collection collection, Closure closure) {
+ if (collection != null && closure != null) {
+ for (Iterator it = collection.iterator(); it.hasNext();) {
+ closure.execute(it.next());
+ }
+ }
+ }
+
+ /**
+ * Filter the collection by applying a Predicate to each element. If the
+ * predicate returns false, remove the element.
+ * <p>
+ * If the input collection or predicate is null, there is no change made.
+ *
+ * @param collection the collection to get the input from, may be null
+ * @param predicate the predicate to use as a filter, may be null
+ */
+ public static void filter(Collection collection, Predicate predicate) {
+ if (collection != null && predicate != null) {
+ for (Iterator it = collection.iterator(); it.hasNext();) {
+ if (predicate.evaluate(it.next()) == false) {
+ it.remove();
+ }
+ }
+ }
+ }
+
+ /**
+ * Transform the collection by applying a Transformer to each element.
+ * <p>
+ * If the input collection or transformer is null, there is no change made.
+ * <p>
+ * This routine is best for Lists, for which set() is used to do the
+ * transformations "in place." For other Collections, clear() and addAll()
+ * are used to replace elements.
+ * <p>
+ * If the input collection controls its input, such as a Set, and the
+ * Transformer creates duplicates (or are otherwise invalid), the
+ * collection may reduce in size due to calling this method.
+ *
+ * @param collection the collection to get the input from, may be null
+ * @param transformer the transformer to perform, may be null
+ */
+ public static void transform(Collection collection, Transformer transformer) {
+ if (collection != null && transformer != null) {
+ if (collection instanceof List) {
+ List list = (List) collection;
+ for (ListIterator it = list.listIterator(); it.hasNext();) {
+ it.set(transformer.transform(it.next()));
+ }
+ } else {
+ Collection resultCollection = collect(collection, transformer);
+ collection.clear();
+ collection.addAll(resultCollection);
+ }
+ }
+ }
+
+ /**
+ * Counts the number of elements in the input collection that match the predicate.
+ * <p>
+ * A <code>null</code> collection or predicate matches no elements.
+ *
+ * @param inputCollection the collection to get the input from, may be null
+ * @param predicate the predicate to use, may be null
+ * @return the number of matches for the predicate in the collection
+ */
+ public static int countMatches(Collection inputCollection, Predicate predicate) {
+ int count = 0;
+ if (inputCollection != null && predicate != null) {
+ for (Iterator it = inputCollection.iterator(); it.hasNext();) {
+ if (predicate.evaluate(it.next())) {
+ count++;
+ }
+ }
+ }
+ return count;
+ }
+
+ /**
+ * Answers true if a predicate is true for at least one element of a collection.
+ * <p>
+ * A <code>null</code> collection or predicate returns false.
+ *
+ * @param collection the collection to get the input from, may be null
+ * @param predicate the predicate to use, may be null
+ * @return true if at least one element of the collection matches the predicate
+ */
+ public static boolean exists(Collection collection, Predicate predicate) {
+ if (collection != null && predicate != null) {
+ for (Iterator it = collection.iterator(); it.hasNext();) {
+ if (predicate.evaluate(it.next())) {
+ return true;
+ }
+ }
+ }
+ return false;
+ }
+
+ /**
+ * Selects all elements from input collection which match the given predicate
+ * into an output collection.
+ * <p>
+ * A <code>null</code> predicate matches no elements.
+ *
+ * @param inputCollection the collection to get the input from, may not be null
+ * @param predicate the predicate to use, may be null
+ * @return the elements matching the predicate (new list)
+ * @throws NullPointerException if the input collection is null
+ */
+ public static Collection select(Collection inputCollection, Predicate predicate) {
+ ArrayList answer = new ArrayList(inputCollection.size());
+ select(inputCollection, predicate, answer);
+ return answer;
+ }
+
+ /**
+ * Selects all elements from input collection which match the given predicate
+ * and adds them to outputCollection.
+ * <p>
+ * If the input collection or predicate is null, there is no change to the
+ * output collection.
+ *
+ * @param inputCollection the collection to get the input from, may be null
+ * @param predicate the predicate to use, may be null
+ * @param outputCollection the collection to output into, may not be null
+ */
+ public static void select(Collection inputCollection, Predicate predicate, Collection outputCollection) {
+ if (inputCollection != null && predicate != null) {
+ for (Iterator iter = inputCollection.iterator(); iter.hasNext();) {
+ Object item = iter.next();
+ if (predicate.evaluate(item)) {
+ outputCollection.add(item);
+ }
+ }
+ }
+ }
+
+ /**
+ * Selects all elements from inputCollection which don't match the given predicate
+ * into an output collection.
+ * <p>
+ * If the input predicate is <code>null</code>, the result is an empty list.
+ *
+ * @param inputCollection the collection to get the input from, may not be null
+ * @param predicate the predicate to use, may be null
+ * @return the elements <b>not</b> matching the predicate (new list)
+ * @throws NullPointerException if the input collection is null
+ */
+ public static Collection selectRejected(Collection inputCollection, Predicate predicate) {
+ ArrayList answer = new ArrayList(inputCollection.size());
+ selectRejected(inputCollection, predicate, answer);
+ return answer;
+ }
+
+ /**
+ * Selects all elements from inputCollection which don't match the given predicate
+ * and adds them to outputCollection.
+ * <p>
+ * If the input predicate is <code>null</code>, no elements are added to <code>outputCollection</code>.
+ *
+ * @param inputCollection the collection to get the input from, may be null
+ * @param predicate the predicate to use, may be null
+ * @param outputCollection the collection to output into, may not be null
+ */
+ public static void selectRejected(Collection inputCollection, Predicate predicate, Collection outputCollection) {
+ if (inputCollection != null && predicate != null) {
+ for (Iterator iter = inputCollection.iterator(); iter.hasNext();) {
+ Object item = iter.next();
+ if (predicate.evaluate(item) == false) {
+ outputCollection.add(item);
+ }
+ }
+ }
+ }
+
+ /**
+ * Returns a new Collection consisting of the elements of inputCollection transformed
+ * by the given transformer.
+ * <p>
+ * If the input transformer is null, the result is an empty list.
+ *
+ * @param inputCollection the collection to get the input from, may not be null
+ * @param transformer the transformer to use, may be null
+ * @return the transformed result (new list)
+ * @throws NullPointerException if the input collection is null
+ */
+ public static Collection collect(Collection inputCollection, Transformer transformer) {
+ ArrayList answer = new ArrayList(inputCollection.size());
+ collect(inputCollection, transformer, answer);
+ return answer;
+ }
+
+ /**
+ * Transforms all elements from the inputIterator with the given transformer
+ * and adds them to the outputCollection.
+ * <p>
+ * If the input iterator or transformer is null, the result is an empty list.
+ *
+ * @param inputIterator the iterator to get the input from, may be null
+ * @param transformer the transformer to use, may be null
+ * @return the transformed result (new list)
+ */
+ public static Collection collect(Iterator inputIterator, Transformer transformer) {
+ ArrayList answer = new ArrayList();
+ collect(inputIterator, transformer, answer);
+ return answer;
+ }
+
+ /**
+ * Transforms all elements from inputCollection with the given transformer
+ * and adds them to the outputCollection.
+ * <p>
+ * If the input collection or transformer is null, there is no change to the
+ * output collection.
+ *
+ * @param inputCollection the collection to get the input from, may be null
+ * @param transformer the transformer to use, may be null
+ * @param outputCollection the collection to output into, may not be null
+ * @return the outputCollection with the transformed input added
+ * @throws NullPointerException if the output collection is null
+ */
+ public static Collection collect(Collection inputCollection, final Transformer transformer, final Collection outputCollection) {
+ if (inputCollection != null) {
+ return collect(inputCollection.iterator(), transformer, outputCollection);
+ }
+ return outputCollection;
+ }
+
+ /**
+ * Transforms all elements from the inputIterator with the given transformer
+ * and adds them to the outputCollection.
+ * <p>
+ * If the input iterator or transformer is null, there is no change to the
+ * output collection.
+ *
+ * @param inputIterator the iterator to get the input from, may be null
+ * @param transformer the transformer to use, may be null
+ * @param outputCollection the collection to output into, may not be null
+ * @return the outputCollection with the transformed input added
+ * @throws NullPointerException if the output collection is null
+ */
+ public static Collection collect(Iterator inputIterator, final Transformer transformer, final Collection outputCollection) {
+ if (inputIterator != null && transformer != null) {
+ while (inputIterator.hasNext()) {
+ Object item = inputIterator.next();
+ Object value = transformer.transform(item);
+ outputCollection.add(value);
+ }
+ }
+ return outputCollection;
+ }
+
+ //-----------------------------------------------------------------------
+ /**
+ * Adds an element to the collection unless the element is null.
+ *
+ * @param collection the collection to add to, must not be null
+ * @param object the object to add, if null it will not be added
+ * @return true if the collection changed
+ * @throws NullPointerException if the collection is null
+ * @since Commons Collections 3.2
+ */
+ public static boolean addIgnoreNull(Collection collection, Object object) {
+ return (object == null ? false : collection.add(object));
+ }
+
+ /**
+ * Adds all elements in the iteration to the given collection.
+ *
+ * @param collection the collection to add to, must not be null
+ * @param iterator the iterator of elements to add, must not be null
+ * @throws NullPointerException if the collection or iterator is null
+ */
+ public static void addAll(Collection collection, Iterator iterator) {
+ while (iterator.hasNext()) {
+ collection.add(iterator.next());
+ }
+ }
+
+ /**
+ * Adds all elements in the enumeration to the given collection.
+ *
+ * @param collection the collection to add to, must not be null
+ * @param enumeration the enumeration of elements to add, must not be null
+ * @throws NullPointerException if the collection or enumeration is null
+ */
+ public static void addAll(Collection collection, Enumeration enumeration) {
+ while (enumeration.hasMoreElements()) {
+ collection.add(enumeration.nextElement());
+ }
+ }
+
+ /**
+ * Adds all elements in the array to the given collection.
+ *
+ * @param collection the collection to add to, must not be null
+ * @param elements the array of elements to add, must not be null
+ * @throws NullPointerException if the collection or array is null
+ */
+ public static void addAll(Collection collection, Object[] elements) {
+ for (int i = 0, size = elements.length; i < size; i++) {
+ collection.add(elements[i]);
+ }
+ }
+
+ /**
+ * Given an Object, and an index, returns the nth value in the
+ * object.
+ * <ul>
+ * <li>If obj is a Map, returns the nth value from the <b>keySet</b> iterator, unless
+ * the Map contains an Integer key with integer value = idx, in which case the
+ * corresponding map entry value is returned. If idx exceeds the number of entries in
+ * the map, an empty Iterator is returned.
+ * <li>If obj is a List or an array, returns the nth value, throwing IndexOutOfBoundsException,
+ * ArrayIndexOutOfBoundsException, resp. if the nth value does not exist.
+ * <li>If obj is an iterator, enumeration or Collection, returns the nth value from the iterator,
+ * returning an empty Iterator (resp. Enumeration) if the nth value does not exist.
+ * <li>Returns the original obj if it is null or not a Collection or Iterator.
+ * </ul>
+ *
+ * @param obj the object to get an index of, may be null
+ * @param idx the index to get
+ * @throws IndexOutOfBoundsException
+ * @throws ArrayIndexOutOfBoundsException
+ *
+ * @deprecated use {@link #get(Object, int)} instead. Will be removed in v4.0
+ */
+ public static Object index(Object obj, int idx) {
+ return index(obj, new Integer(idx));
+ }
+
+ /**
+ * Given an Object, and a key (index), returns the value associated with
+ * that key in the Object. The following checks are made:
+ * <ul>
+ * <li>If obj is a Map, use the index as a key to get a value. If no match continue.
+ * <li>Check key is an Integer. If not, return the object passed in.
+ * <li>If obj is a Map, get the nth value from the <b>keySet</b> iterator.
+ * If the Map has fewer than n entries, return an empty Iterator.
+ * <li>If obj is a List or an array, get the nth value, throwing IndexOutOfBoundsException,
+ * ArrayIndexOutOfBoundsException, resp. if the nth value does not exist.
+ * <li>If obj is an iterator, enumeration or Collection, get the nth value from the iterator,
+ * returning an empty Iterator (resp. Enumeration) if the nth value does not exist.
+ * <li>Return the original obj.
+ * </ul>
+ *
+ * @param obj the object to get an index of
+ * @param index the index to get
+ * @return the object at the specified index
+ * @throws IndexOutOfBoundsException
+ * @throws ArrayIndexOutOfBoundsException
+ *
+ * @deprecated use {@link #get(Object, int)} instead. Will be removed in v4.0
+ */
+ public static Object index(Object obj, Object index) {
+ if(obj instanceof Map) {
+ Map map = (Map)obj;
+ if(map.containsKey(index)) {
+ return map.get(index);
+ }
+ }
+ int idx = -1;
+ if(index instanceof Integer) {
+ idx = ((Integer)index).intValue();
+ }
+ if(idx < 0) {
+ return obj;
+ }
+ else if(obj instanceof Map) {
+ Map map = (Map)obj;
+ Iterator iterator = map.keySet().iterator();
+ return index(iterator, idx);
+ }
+ else if(obj instanceof List) {
+ return ((List)obj).get(idx);
+ }
+ else if(obj instanceof Object[]) {
+ return ((Object[])obj)[idx];
+ }
+ else if(obj instanceof Enumeration) {
+ Enumeration it = (Enumeration)obj;
+ while(it.hasMoreElements()) {
+ idx--;
+ if(idx == -1) {
+ return it.nextElement();
+ } else {
+ it.nextElement();
+ }
+ }
+ }
+ else if(obj instanceof Iterator) {
+ return index((Iterator)obj, idx);
+ }
+ else if(obj instanceof Collection) {
+ Iterator iterator = ((Collection)obj).iterator();
+ return index(iterator, idx);
+ }
+ return obj;
+ }
+
+ private static Object index(Iterator iterator, int idx) {
+ while(iterator.hasNext()) {
+ idx--;
+ if(idx == -1) {
+ return iterator.next();
+ } else {
+ iterator.next();
+ }
+ }
+ return iterator;
+ }
+
+ /**
+ * Returns the <code>index</code>-th value in <code>object</code>, throwing
+ * <code>IndexOutOfBoundsException</code> if there is no such element or
+ * <code>IllegalArgumentException</code> if <code>object</code> is not an
+ * instance of one of the supported types.
+ * <p>
+ * The supported types, and associated semantics are:
+ * <ul>
+ * <li> Map -- the value returned is the <code>Map.Entry</code> in position
+ * <code>index</code> in the map's <code>entrySet</code> iterator,
+ * if there is such an entry.</li>
+ * <li> List -- this method is equivalent to the list's get method.</li>
+ * <li> Array -- the <code>index</code>-th array entry is returned,
+ * if there is such an entry; otherwise an <code>IndexOutOfBoundsException</code>
+ * is thrown.</li>
+ * <li> Collection -- the value returned is the <code>index</code>-th object
+ * returned by the collection's default iterator, if there is such an element.</li>
+ * <li> Iterator or Enumeration -- the value returned is the
+ * <code>index</code>-th object in the Iterator/Enumeration, if there
+ * is such an element. The Iterator/Enumeration is advanced to
+ * <code>index</code> (or to the end, if <code>index</code> exceeds the
+ * number of entries) as a side effect of this method.</li>
+ * </ul>
+ *
+ * @param object the object to get a value from
+ * @param index the index to get
+ * @return the object at the specified index
+ * @throws IndexOutOfBoundsException if the index is invalid
+ * @throws IllegalArgumentException if the object type is invalid
+ */
+ public static Object get(Object object, int index) {
+ if (index < 0) {
+ throw new IndexOutOfBoundsException("Index cannot be negative: " + index);
+ }
+ if (object instanceof Map) {
+ Map map = (Map) object;
+ Iterator iterator = map.entrySet().iterator();
+ return get(iterator, index);
+ } else if (object instanceof List) {
+ return ((List) object).get(index);
+ } else if (object instanceof Object[]) {
+ return ((Object[]) object)[index];
+ } else if (object instanceof Iterator) {
+ Iterator it = (Iterator) object;
+ while (it.hasNext()) {
+ index--;
+ if (index == -1) {
+ return it.next();
+ } else {
+ it.next();
+ }
+ }
+ throw new IndexOutOfBoundsException("Entry does not exist: " + index);
+ } else if (object instanceof Collection) {
+ Iterator iterator = ((Collection) object).iterator();
+ return get(iterator, index);
+ } else if (object instanceof Enumeration) {
+ Enumeration it = (Enumeration) object;
+ while (it.hasMoreElements()) {
+ index--;
+ if (index == -1) {
+ return it.nextElement();
+ } else {
+ it.nextElement();
+ }
+ }
+ throw new IndexOutOfBoundsException("Entry does not exist: " + index);
+ } else if (object == null) {
+ throw new IllegalArgumentException("Unsupported object type: null");
+ } else {
+ try {
+ return Array.get(object, index);
+ } catch (IllegalArgumentException ex) {
+ throw new IllegalArgumentException("Unsupported object type: " + object.getClass().getName());
+ }
+ }
+ }
+
+ /**
+ * Gets the size of the collection/iterator specified.
+ * <p>
+ * This method can handles objects as follows
+ * <ul>
+ * <li>Collection - the collection size
+ * <li>Map - the map size
+ * <li>Array - the array size
+ * <li>Iterator - the number of elements remaining in the iterator
+ * <li>Enumeration - the number of elements remaining in the enumeration
+ * </ul>
+ *
+ * @param object the object to get the size of
+ * @return the size of the specified collection
+ * @throws IllegalArgumentException thrown if object is not recognised or null
+ * @since Commons Collections 3.1
+ */
+ public static int size(Object object) {
+ int total = 0;
+ if (object instanceof Map) {
+ total = ((Map) object).size();
+ } else if (object instanceof Collection) {
+ total = ((Collection) object).size();
+ } else if (object instanceof Object[]) {
+ total = ((Object[]) object).length;
+ } else if (object instanceof Iterator) {
+ Iterator it = (Iterator) object;
+ while (it.hasNext()) {
+ total++;
+ it.next();
+ }
+ } else if (object instanceof Enumeration) {
+ Enumeration it = (Enumeration) object;
+ while (it.hasMoreElements()) {
+ total++;
+ it.nextElement();
+ }
+ } else if (object == null) {
+ throw new IllegalArgumentException("Unsupported object type: null");
+ } else {
+ try {
+ total = Array.getLength(object);
+ } catch (IllegalArgumentException ex) {
+ throw new IllegalArgumentException("Unsupported object type: " + object.getClass().getName());
+ }
+ }
+ return total;
+ }
+
+ /**
+ * Checks if the specified collection/array/iterator is empty.
+ * <p>
+ * This method can handles objects as follows
+ * <ul>
+ * <li>Collection - via collection isEmpty
+ * <li>Map - via map isEmpty
+ * <li>Array - using array size
+ * <li>Iterator - via hasNext
+ * <li>Enumeration - via hasMoreElements
+ * </ul>
+ * <p>
+ * Note: This method is named to avoid clashing with
+ * {@link #isEmpty(Collection)}.
+ *
+ * @param object the object to get the size of, not null
+ * @return true if empty
+ * @throws IllegalArgumentException thrown if object is not recognised or null
+ * @since Commons Collections 3.2
+ */
+ public static boolean sizeIsEmpty(Object object) {
+ if (object instanceof Collection) {
+ return ((Collection) object).isEmpty();
+ } else if (object instanceof Map) {
+ return ((Map) object).isEmpty();
+ } else if (object instanceof Object[]) {
+ return ((Object[]) object).length == 0;
+ } else if (object instanceof Iterator) {
+ return ((Iterator) object).hasNext() == false;
+ } else if (object instanceof Enumeration) {
+ return ((Enumeration) object).hasMoreElements() == false;
+ } else if (object == null) {
+ throw new IllegalArgumentException("Unsupported object type: null");
+ } else {
+ try {
+ return Array.getLength(object) == 0;
+ } catch (IllegalArgumentException ex) {
+ throw new IllegalArgumentException("Unsupported object type: " + object.getClass().getName());
+ }
+ }
+ }
+
+ //-----------------------------------------------------------------------
+ /**
+ * Null-safe check if the specified collection is empty.
+ * <p>
+ * Null returns true.
+ *
+ * @param coll the collection to check, may be null
+ * @return true if empty or null
+ * @since Commons Collections 3.2
+ */
+ public static boolean isEmpty(Collection coll) {
+ return (coll == null || coll.isEmpty());
+ }
+
+ /**
+ * Null-safe check if the specified collection is not empty.
+ * <p>
+ * Null returns false.
+ *
+ * @param coll the collection to check, may be null
+ * @return true if non-null and non-empty
+ * @since Commons Collections 3.2
+ */
+ public static boolean isNotEmpty(Collection coll) {
+ return !CollectionUtils.isEmpty(coll);
+ }
+
+ //-----------------------------------------------------------------------
+ /**
+ * Reverses the order of the given array.
+ *
+ * @param array the array to reverse
+ */
+ public static void reverseArray(Object[] array) {
+ int i = 0;
+ int j = array.length - 1;
+ Object tmp;
+
+ while (j > i) {
+ tmp = array[j];
+ array[j] = array[i];
+ array[i] = tmp;
+ j--;
+ i++;
+ }
+ }
+
+ private static final int getFreq(final Object obj, final Map freqMap) {
+ Integer count = (Integer) freqMap.get(obj);
+ if (count != null) {
+ return count.intValue();
+ }
+ return 0;
+ }
+
+ /**
+ * Returns true if no more elements can be added to the Collection.
+ * <p>
+ * This method uses the {@link BoundedCollection} interface to determine the
+ * full status. If the collection does not implement this interface then
+ * false is returned.
+ * <p>
+ * The collection does not have to implement this interface directly.
+ * If the collection has been decorated using the decorators subpackage
+ * then these will be removed to access the BoundedCollection.
+ *
+ * @param coll the collection to check
+ * @return true if the BoundedCollection is full
+ * @throws NullPointerException if the collection is null
+ */
+ public static boolean isFull(Collection coll) {
+ if (coll == null) {
+ throw new NullPointerException("The collection must not be null");
+ }
+ if (coll instanceof BoundedCollection) {
+ return ((BoundedCollection) coll).isFull();
+ }
+ try {
+ BoundedCollection bcoll = UnmodifiableBoundedCollection.decorateUsing(coll);
+ return bcoll.isFull();
+
+ } catch (IllegalArgumentException ex) {
+ return false;
+ }
+ }
+
+ /**
+ * Get the maximum number of elements that the Collection can contain.
+ * <p>
+ * This method uses the {@link BoundedCollection} interface to determine the
+ * maximum size. If the collection does not implement this interface then
+ * -1 is returned.
+ * <p>
+ * The collection does not have to implement this interface directly.
+ * If the collection has been decorated using the decorators subpackage
+ * then these will be removed to access the BoundedCollection.
+ *
+ * @param coll the collection to check
+ * @return the maximum size of the BoundedCollection, -1 if no maximum size
+ * @throws NullPointerException if the collection is null
+ */
+ public static int maxSize(Collection coll) {
+ if (coll == null) {
+ throw new NullPointerException("The collection must not be null");
+ }
+ if (coll instanceof BoundedCollection) {
+ return ((BoundedCollection) coll).maxSize();
+ }
+ try {
+ BoundedCollection bcoll = UnmodifiableBoundedCollection.decorateUsing(coll);
+ return bcoll.maxSize();
+
+ } catch (IllegalArgumentException ex) {
+ return -1;
+ }
+ }
+
+ //-----------------------------------------------------------------------
+ /**
+ * Returns a collection containing all the elements in <code>collection</code>
+ * that are also in <code>retain</code>. The cardinality of an element <code>e</code>
+ * in the returned collection is the same as the cardinality of <code>e</code>
+ * in <code>collection</code> unless <code>retain</code> does not contain <code>e</code>, in which
+ * case the cardinality is zero. This method is useful if you do not wish to modify
+ * the collection <code>c</code> and thus cannot call <code>c.retainAll(retain);</code>.
+ *
+ * @param collection the collection whose contents are the target of the #retailAll operation
+ * @param retain the collection containing the elements to be retained in the returned collection
+ * @return a <code>Collection</code> containing all the elements of <code>collection</code>
+ * that occur at least once in <code>retain</code>.
+ * @throws NullPointerException if either parameter is null
+ * @since Commons Collections 3.2
+ */
+ public static Collection retainAll(Collection collection, Collection retain) {
+ return ListUtils.retainAll(collection, retain);
+ }
+
+ /**
+ * Removes the elements in <code>remove</code> from <code>collection</code>. That is, this
+ * method returns a collection containing all the elements in <code>c</code>
+ * that are not in <code>remove</code>. The cardinality of an element <code>e</code>
+ * in the returned collection is the same as the cardinality of <code>e</code>
+ * in <code>collection</code> unless <code>remove</code> contains <code>e</code>, in which
+ * case the cardinality is zero. This method is useful if you do not wish to modify
+ * the collection <code>c</code> and thus cannot call <code>collection.removeAll(remove);</code>.
+ *
+ * @param collection the collection from which items are removed (in the returned collection)
+ * @param remove the items to be removed from the returned <code>collection</code>
+ * @return a <code>Collection</code> containing all the elements of <code>collection</code> except
+ * any elements that also occur in <code>remove</code>.
+ * @throws NullPointerException if either parameter is null
+ * @since Commons Collections 3.2
+ */
+ public static Collection removeAll(Collection collection, Collection remove) {
+ return ListUtils.retainAll(collection, remove);
+ }
+
+ //-----------------------------------------------------------------------
+ /**
+ * Returns a synchronized collection backed by the given collection.
+ * <p>
+ * You must manually synchronize on the returned buffer's iterator to
+ * avoid non-deterministic behavior:
+ *
+ * <pre>
+ * Collection c = CollectionUtils.synchronizedCollection(myCollection);
+ * synchronized (c) {
+ * Iterator i = c.iterator();
+ * while (i.hasNext()) {
+ * process (i.next());
+ * }
+ * }
+ * </pre>
+ *
+ * This method uses the implementation in the decorators subpackage.
+ *
+ * @param collection the collection to synchronize, must not be null
+ * @return a synchronized collection backed by the given collection
+ * @throws IllegalArgumentException if the collection is null
+ */
+ public static Collection synchronizedCollection(Collection collection) {
+ return SynchronizedCollection.decorate(collection);
+ }
+
+ /**
+ * Returns an unmodifiable collection backed by the given collection.
+ * <p>
+ * This method uses the implementation in the decorators subpackage.
+ *
+ * @param collection the collection to make unmodifiable, must not be null
+ * @return an unmodifiable collection backed by the given collection
+ * @throws IllegalArgumentException if the collection is null
+ */
+ public static Collection unmodifiableCollection(Collection collection) {
+ return UnmodifiableCollection.decorate(collection);
+ }
+
+ /**
+ * Returns a predicated (validating) collection backed by the given collection.
+ * <p>
+ * Only objects that pass the test in the given predicate can be added to the collection.
+ * Trying to add an invalid object results in an IllegalArgumentException.
+ * It is important not to use the original collection after invoking this method,
+ * as it is a backdoor for adding invalid objects.
+ *
+ * @param collection the collection to predicate, must not be null
+ * @param predicate the predicate for the collection, must not be null
+ * @return a predicated collection backed by the given collection
+ * @throws IllegalArgumentException if the Collection is null
+ */
+ public static Collection predicatedCollection(Collection collection, Predicate predicate) {
+ return PredicatedCollection.decorate(collection, predicate);
+ }
+
+ /**
+ * Returns a typed collection backed by the given collection.
+ * <p>
+ * Only objects of the specified type can be added to the collection.
+ *
+ * @param collection the collection to limit to a specific type, must not be null
+ * @param type the type of objects which may be added to the collection
+ * @return a typed collection backed by the specified collection
+ */
+ public static Collection typedCollection(Collection collection, Class type) {
+ return TypedCollection.decorate(collection, type);
+ }
+
+ /**
+ * Returns a transformed bag backed by the given collection.
+ * <p>
+ * Each object is passed through the transformer as it is added to the
+ * Collection. It is important not to use the original collection after invoking this
+ * method, as it is a backdoor for adding untransformed objects.
+ *
+ * @param collection the collection to predicate, must not be null
+ * @param transformer the transformer for the collection, must not be null
+ * @return a transformed collection backed by the given collection
+ * @throws IllegalArgumentException if the Collection or Transformer is null
+ */
+ public static Collection transformedCollection(Collection collection, Transformer transformer) {
+ return TransformedCollection.decorate(collection, transformer);
+ }
+
+}
diff --git a/dependencies/plugins/org.apache.commons.collections/source-bundle/org/apache/commons/collections/ComparatorUtils.java b/dependencies/plugins/org.apache.commons.collections/source-bundle/org/apache/commons/collections/ComparatorUtils.java
new file mode 100755
index 0000000..a82f07f
--- /dev/null
+++ b/dependencies/plugins/org.apache.commons.collections/source-bundle/org/apache/commons/collections/ComparatorUtils.java
@@ -0,0 +1,240 @@
+/*
+ * Copyright 2002-2004 The Apache Software Foundation
+ *
+ * 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.
+ */
+package org.apache.commons.collections;
+
+import java.util.Collection;
+import java.util.Comparator;
+
+import org.apache.commons.collections.comparators.BooleanComparator;
+import org.apache.commons.collections.comparators.ComparableComparator;
+import org.apache.commons.collections.comparators.ComparatorChain;
+import org.apache.commons.collections.comparators.NullComparator;
+import org.apache.commons.collections.comparators.ReverseComparator;
+import org.apache.commons.collections.comparators.TransformingComparator;
+
+/**
+ * Provides convenient static utility methods for <Code>Comparator</Code>
+ * objects.
+ * <p>
+ * Most of the functionality in this class can also be found in the
+ * <code>comparators</code> package. This class merely provides a
+ * convenient central place if you have use for more than one class
+ * in the <code>comparators</code> subpackage.
+ *
+ * @since Commons Collections 2.1
+ * @version $Revision: 1.1 $ $Date: 2009/05/27 22:16:18 $
+ *
+ * @author Paul Jack
+ * @author Stephen Colebourne
+ */
+public class ComparatorUtils {
+
+ /**
+ * ComparatorUtils should not normally be instantiated.
+ */
+ public ComparatorUtils() {
+ }
+
+ /**
+ * Comparator for natural sort order.
+ *
+ * @see ComparableComparator#getInstance
+ */
+ public static final Comparator NATURAL_COMPARATOR = ComparableComparator.getInstance();
+
+ /**
+ * Gets a comparator that uses the natural order of the objects.
+ *
+ * @return a comparator which uses natural order
+ */
+ public static Comparator naturalComparator() {
+ return NATURAL_COMPARATOR;
+ }
+
+ /**
+ * Gets a comparator that compares using two {@link Comparator}s.
+ * <p>
+ * The second comparator is used if the first comparator returns equal.
+ *
+ * @param comparator1 the first comparator to use, not null
+ * @param comparator2 the first comparator to use, not null
+ * @return a {@link ComparatorChain} formed from the two comparators
+ * @throws NullPointerException if either comparator is null
+ * @see ComparatorChain
+ */
+ public static Comparator chainedComparator(Comparator comparator1, Comparator comparator2) {
+ return chainedComparator(new Comparator[] {comparator1, comparator2});
+ }
+
+ /**
+ * Gets a comparator that compares using an array of {@link Comparator}s, applied
+ * in sequence until one returns not equal or the array is exhausted.
+ *
+ * @param comparators the comparators to use, not null or empty or containing nulls
+ * @return a {@link ComparatorChain} formed from the input comparators
+ * @throws NullPointerException if comparators array is null or contains a null
+ * @see ComparatorChain
+ */
+ public static Comparator chainedComparator(Comparator[] comparators) {
+ ComparatorChain chain = new ComparatorChain();
+ for (int i = 0; i < comparators.length; i++) {
+ if (comparators[i] == null) {
+ throw new NullPointerException("Comparator cannot be null");
+ }
+ chain.addComparator(comparators[i]);
+ }
+ return chain;
+ }
+
+ /**
+ * Gets a comparator that compares using a collection of {@link Comparator}s,
+ * applied in (default iterator) sequence until one returns not equal or the
+ * collection is exhausted.
+ *
+ * @param comparators the comparators to use, not null or empty or containing nulls
+ * @return a {@link ComparatorChain} formed from the input comparators
+ * @throws NullPointerException if comparators collection is null or contains a null
+ * @throws ClassCastException if the comparators collection contains the wrong object type
+ * @see ComparatorChain
+ */
+ public static Comparator chainedComparator(Collection comparators) {
+ return chainedComparator(
+ (Comparator[]) comparators.toArray(new Comparator[comparators.size()])
+ );
+ }
+
+ /**
+ * Gets a comparator that reverses the order of the given comparator.
+ *
+ * @param comparator the comparator to reverse
+ * @return a comparator that reverses the order of the input comparator
+ * @see ReverseComparator
+ */
+ public static Comparator reversedComparator(Comparator comparator) {
+ if (comparator == null) {
+ comparator = NATURAL_COMPARATOR;
+ }
+ return new ReverseComparator(comparator);
+ }
+
+ /**
+ * Gets a Comparator that can sort Boolean objects.
+ * <p>
+ * The parameter specifies whether true or false is sorted first.
+ * <p>
+ * The comparator throws NullPointerException if a null value is compared.
+ *
+ * @param trueFirst when <code>true</code>, sort
+ * <code>true</code> {@link Boolean}s before
+ * <code>false</code> {@link Boolean}s.
+ * @return a comparator that sorts booleans
+ */
+ public static Comparator booleanComparator(boolean trueFirst) {
+ return BooleanComparator.getBooleanComparator(trueFirst);
+ }
+
+ /**
+ * Gets a Comparator that controls the comparison of <code>null</code> values.
+ * <p>
+ * The returned comparator will consider a null value to be less than
+ * any nonnull value, and equal to any other null value. Two nonnull
+ * values will be evaluated with the given comparator.
+ *
+ * @param comparator the comparator that wants to allow nulls
+ * @return a version of that comparator that allows nulls
+ * @see NullComparator
+ */
+ public static Comparator nullLowComparator(Comparator comparator) {
+ if (comparator == null) {
+ comparator = NATURAL_COMPARATOR;
+ }
+ return new NullComparator(comparator, false);
+ }
+
+ /**
+ * Gets a Comparator that controls the comparison of <code>null</code> values.
+ * <p>
+ * The returned comparator will consider a null value to be greater than
+ * any nonnull value, and equal to any other null value. Two nonnull
+ * values will be evaluated with the given comparator.
+ *
+ * @param comparator the comparator that wants to allow nulls
+ * @return a version of that comparator that allows nulls
+ * @see NullComparator
+ */
+ public static Comparator nullHighComparator(Comparator comparator) {
+ if (comparator == null) {
+ comparator = NATURAL_COMPARATOR;
+ }
+ return new NullComparator(comparator, true);
+ }
+
+ /**
+ * Gets a Comparator that passes transformed objects to the given comparator.
+ * <p>
+ * Objects passed to the returned comparator will first be transformed
+ * by the given transformer before they are compared by the given
+ * comparator.
+ *
+ * @param comparator the sort order to use
+ * @param transformer the transformer to use
+ * @return a comparator that transforms its input objects before comparing them
+ * @see TransformingComparator
+ */
+ public static Comparator transformedComparator(Comparator comparator, Transformer transformer) {
+ if (comparator == null) {
+ comparator = NATURAL_COMPARATOR;
+ }
+ return new TransformingComparator(transformer, comparator);
+ }
+
+ /**
+ * Returns the smaller of the given objects according to the given
+ * comparator, returning the second object if the comparator
+ * returns equal.
+ *
+ * @param o1 the first object to compare
+ * @param o2 the second object to compare
+ * @param comparator the sort order to use
+ * @return the smaller of the two objects
+ */
+ public static Object min(Object o1, Object o2, Comparator comparator) {
+ if (comparator == null) {
+ comparator = NATURAL_COMPARATOR;
+ }
+ int c = comparator.compare(o1, o2);
+ return (c < 0) ? o1 : o2;
+ }
+
+ /**
+ * Returns the larger of the given objects according to the given
+ * comparator, returning the second object if the comparator
+ * returns equal.
+ *
+ * @param o1 the first object to compare
+ * @param o2 the second object to compare
+ * @param comparator the sort order to use
+ * @return the larger of the two objects
+ */
+ public static Object max(Object o1, Object o2, Comparator comparator) {
+ if (comparator == null) {
+ comparator = NATURAL_COMPARATOR;
+ }
+ int c = comparator.compare(o1, o2);
+ return (c > 0) ? o1 : o2;
+ }
+
+}
diff --git a/dependencies/plugins/org.apache.commons.collections/source-bundle/org/apache/commons/collections/CursorableLinkedList.java b/dependencies/plugins/org.apache.commons.collections/source-bundle/org/apache/commons/collections/CursorableLinkedList.java
new file mode 100755
index 0000000..c083992
--- /dev/null
+++ b/dependencies/plugins/org.apache.commons.collections/source-bundle/org/apache/commons/collections/CursorableLinkedList.java
@@ -0,0 +1,1467 @@
+/*
+ * Copyright 2002-2004 The Apache Software Foundation
+ *
+ * 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.
+ */
+package org.apache.commons.collections;
+
+import java.io.IOException;
+import java.io.ObjectInputStream;
+import java.io.ObjectOutputStream;
+import java.io.Serializable;
+import java.lang.reflect.Array;
+import java.util.ArrayList;
+import java.util.Collection;
+import java.util.ConcurrentModificationException;
+import java.util.Iterator;
+import java.util.List;
+import java.util.ListIterator;
+import java.util.NoSuchElementException;
+import java.lang.ref.WeakReference;
+
+/**
+ * A doubly-linked list implementation of the {@link List} interface,
+ * supporting a {@link ListIterator} that allows concurrent modifications
+ * to the underlying list.
+ * <p>
+ * Implements all of the optional {@link List} operations, the
+ * stack/queue/dequeue operations available in {@link java.util.LinkedList}
+ * and supports a {@link ListIterator} that allows concurrent modifications
+ * to the underlying list (see {@link #cursor}).
+ * <p>
+ * <b>Note that this implementation is not synchronized.</b>
+ *
+ * @deprecated Use new version in list subpackage, which has been rewritten
+ * and now returns the cursor from the listIterator method. Will be removed in v4.0
+ * @see java.util.LinkedList
+ * @since Commons Collections 1.0
+ * @version $Revision: 1.1 $ $Date: 2009/05/27 22:16:18 $
+ *
+ * @author Rodney Waldhoff
+ * @author Janek Bogucki
+ * @author Simon Kitching
+ */
+public class CursorableLinkedList implements List, Serializable {
+ /** Ensure serialization compatibility */
+ private static final long serialVersionUID = 8836393098519411393L;
+
+ //--- public methods ---------------------------------------------
+
+ /**
+ * Appends the specified element to the end of this list.
+ *
+ * @param o element to be appended to this list.
+ * @return <tt>true</tt>
+ */
+ public boolean add(Object o) {
+ insertListable(_head.prev(),null,o);
+ return true;
+ }
+
+ /**
+ * Inserts the specified element at the specified position in this list.
+ * Shifts the element currently at that position (if any) and any subsequent
+ * elements to the right (adds one to their indices).
+ *
+ * @param index index at which the specified element is to be inserted.
+ * @param element element to be inserted.
+ *
+ * @throws ClassCastException if the class of the specified element
+ * prevents it from being added to this list.
+ * @throws IllegalArgumentException if some aspect of the specified
+ * element prevents it from being added to this list.
+ * @throws IndexOutOfBoundsException if the index is out of range
+ * (index < 0 || index > size()).
+ */
+ public void add(int index, Object element) {
+ if(index == _size) {
+ add(element);
+ } else {
+ if(index < 0 || index > _size) {
+ throw new IndexOutOfBoundsException(String.valueOf(index) + " < 0 or " + String.valueOf(index) + " > " + _size);
+ }
+ Listable succ = (isEmpty() ? null : getListableAt(index));
+ Listable pred = (null == succ ? null : succ.prev());
+ insertListable(pred,succ,element);
+ }
+ }
+
+ /**
+ * Appends all of the elements in the specified collection to the end of
+ * this list, in the order that they are returned by the specified
+ * {@link Collection}'s {@link Iterator}. The behavior of this operation is
+ * unspecified if the specified collection is modified while
+ * the operation is in progress. (Note that this will occur if the
+ * specified collection is this list, and it's nonempty.)
+ *
+ * @param c collection whose elements are to be added to this list.
+ * @return <tt>true</tt> if this list changed as a result of the call.
+ *
+ * @throws ClassCastException if the class of an element in the specified
+ * collection prevents it from being added to this list.
+ * @throws IllegalArgumentException if some aspect of an element in the
+ * specified collection prevents it from being added to this
+ * list.
+ */
+ public boolean addAll(Collection c) {
+ if(c.isEmpty()) {
+ return false;
+ }
+ Iterator it = c.iterator();
+ while(it.hasNext()) {
+ insertListable(_head.prev(),null,it.next());
+ }
+ return true;
+ }
+
+ /**
+ * Inserts all of the elements in the specified collection into this
+ * list at the specified position. Shifts the element currently at
+ * that position (if any) and any subsequent elements to the right
+ * (increases their indices). The new elements will appear in this
+ * list in the order that they are returned by the specified
+ * {@link Collection}'s {@link Iterator}. The behavior of this operation is
+ * unspecified if the specified collection is modified while the
+ * operation is in progress. (Note that this will occur if the specified
+ * collection is this list, and it's nonempty.)
+ *
+ * @param index index at which to insert first element from the specified
+ * collection.
+ * @param c elements to be inserted into this list.
+ * @return <tt>true</tt> if this list changed as a result of the call.
+ *
+ * @throws ClassCastException if the class of one of elements of the
+ * specified collection prevents it from being added to this
+ * list.
+ * @throws IllegalArgumentException if some aspect of one of elements of
+ * the specified collection prevents it from being added to
+ * this list.
+ * @throws IndexOutOfBoundsException if the index is out of range (index
+ * < 0 || index > size()).
+ */
+ public boolean addAll(int index, Collection c) {
+ if(c.isEmpty()) {
+ return false;
+ } else if(_size == index || _size == 0) {
+ return addAll(c);
+ } else {
+ Listable succ = getListableAt(index);
+ Listable pred = (null == succ) ? null : succ.prev();
+ Iterator it = c.iterator();
+ while(it.hasNext()) {
+ pred = insertListable(pred,succ,it.next());
+ }
+ return true;
+ }
+ }
+
+ /**
+ * Inserts the specified element at the beginning of this list.
+ * (Equivalent to {@link #add(int,java.lang.Object) <tt>add(0,o)</tt>}).
+ *
+ * @param o element to be prepended to this list.
+ * @return <tt>true</tt>
+ */
+ public boolean addFirst(Object o) {
+ insertListable(null,_head.next(),o);
+ return true;
+ }
+
+ /**
+ * Inserts the specified element at the end of this list.
+ * (Equivalent to {@link #add(java.lang.Object)}).
+ *
+ * @param o element to be appended to this list.
+ * @return <tt>true</tt>
+ */
+ public boolean addLast(Object o) {
+ insertListable(_head.prev(),null,o);
+ return true;
+ }
+
+ /**
+ * Removes all of the elements from this list. This
+ * list will be empty after this call returns (unless
+ * it throws an exception).
+ */
+ public void clear() {
+ /*
+ // this is the quick way, but would force us
+ // to break all the cursors
+ _modCount++;
+ _head.setNext(null);
+ _head.setPrev(null);
+ _size = 0;
+ */
+ Iterator it = iterator();
+ while(it.hasNext()) {
+ it.next();
+ it.remove();
+ }
+ }
+
+ /**
+ * Returns <tt>true</tt> if this list contains the specified element.
+ * More formally, returns <tt>true</tt> if and only if this list contains
+ * at least one element <tt>e</tt> such that
+ * <tt>(o==null ? e==null : o.equals(e))</tt>.
+ *
+ * @param o element whose presence in this list is to be tested.
+ * @return <tt>true</tt> if this list contains the specified element.
+ */
+ public boolean contains(Object o) {
+ for(Listable elt = _head.next(), past = null; null != elt && past != _head.prev(); elt = (past = elt).next()) {
+ if((null == o && null == elt.value()) ||
+ (o != null && o.equals(elt.value()))) {
+ return true;
+ }
+ }
+ return false;
+ }
+
+ /**
+ * Returns <tt>true</tt> if this list contains all of the elements of the
+ * specified collection.
+ *
+ * @param c collection to be checked for containment in this list.
+ * @return <tt>true</tt> if this list contains all of the elements of the
+ * specified collection.
+ */
+ public boolean containsAll(Collection c) {
+ Iterator it = c.iterator();
+ while(it.hasNext()) {
+ if(!this.contains(it.next())) {
+ return false;
+ }
+ }
+ return true;
+ }
+
+ /**
+ * Returns a {@link ListIterator} for iterating through the
+ * elements of this list. Unlike {@link #iterator}, a cursor
+ * is not bothered by concurrent modifications to the
+ * underlying list.
+ * <p>
+ * Specifically, when elements are added to the list before or
+ * after the cursor, the cursor simply picks them up automatically.
+ * When the "current" (i.e., last returned by {@link ListIterator#next}
+ * or {@link ListIterator#previous}) element of the list is removed,
+ * the cursor automatically adjusts to the change (invalidating the
+ * last returned value--i.e., it cannot be removed).
+ * <p>
+ * Note that the returned {@link ListIterator} does not support the
+ * {@link ListIterator#nextIndex} and {@link ListIterator#previousIndex}
+ * methods (they throw {@link UnsupportedOperationException} when invoked.
+ * <p>
+ * Historical Note: In previous versions of this class, the object
+ * returned from this method was required to be explicitly closed. This
+ * is no longer necessary.
+ *
+ * @see #cursor(int)
+ * @see #listIterator
+ * @see CursorableLinkedList.Cursor
+ */
+ public CursorableLinkedList.Cursor cursor() {
+ return new Cursor(0);
+ }
+
+ /**
+ * Returns a {@link ListIterator} for iterating through the
+ * elements of this list, initialized such that
+ * {@link ListIterator#next} will return the element at
+ * the specified index (if any) and {@link ListIterator#previous}
+ * will return the element immediately preceding it (if any).
+ * Unlike {@link #iterator}, a cursor
+ * is not bothered by concurrent modifications to the
+ * underlying list.
+ *
+ * @see #cursor
+ * @see #listIterator(int)
+ * @see CursorableLinkedList.Cursor
+ * @throws IndexOutOfBoundsException if the index is out of range (index
+ * < 0 || index > size()).
+ */
+ public CursorableLinkedList.Cursor cursor(int i) {
+ return new Cursor(i);
+ }
+
+ /**
+ * Compares the specified object with this list for equality. Returns
+ * <tt>true</tt> if and only if the specified object is also a list, both
+ * lists have the same size, and all corresponding pairs of elements in
+ * the two lists are <i>equal</i>. (Two elements <tt>e1</tt> and
+ * <tt>e2</tt> are <i>equal</i> if <tt>(e1==null ? e2==null :
+ * e1.equals(e2))</tt>.) In other words, two lists are defined to be
+ * equal if they contain the same elements in the same order. This
+ * definition ensures that the equals method works properly across
+ * different implementations of the <tt>List</tt> interface.
+ *
+ * @param o the object to be compared for equality with this list.
+ * @return <tt>true</tt> if the specified object is equal to this list.
+ */
+ public boolean equals(Object o) {
+ if(o == this) {
+ return true;
+ } else if(!(o instanceof List)) {
+ return false;
+ }
+ Iterator it = ((List)o).listIterator();
+ for(Listable elt = _head.next(), past = null; null != elt && past != _head.prev(); elt = (past = elt).next()) {
+ if(!it.hasNext() || (null == elt.value() ? null != it.next() : !(elt.value().equals(it.next()))) ) {
+ return false;
+ }
+ }
+ return !it.hasNext();
+ }
+
+ /**
+ * Returns the element at the specified position in this list.
+ *
+ * @param index index of element to return.
+ * @return the element at the specified position in this list.
+ *
+ * @throws IndexOutOfBoundsException if the index is out of range (index
+ * < 0 || index >= size()).
+ */
+ public Object get(int index) {
+ return getListableAt(index).value();
+ }
+
+ /**
+ * Returns the element at the beginning of this list.
+ */
+ public Object getFirst() {
+ try {
+ return _head.next().value();
+ } catch(NullPointerException e) {
+ throw new NoSuchElementException();
+ }
+ }
+
+ /**
+ * Returns the element at the end of this list.
+ */
+ public Object getLast() {
+ try {
+ return _head.prev().value();
+ } catch(NullPointerException e) {
+ throw new NoSuchElementException();
+ }
+ }
+
+ /**
+ * Returns the hash code value for this list. The hash code of a list
+ * is defined to be the result of the following calculation:
+ * <pre>
+ * hashCode = 1;
+ * Iterator i = list.iterator();
+ * while (i.hasNext()) {
+ * Object obj = i.next();
+ * hashCode = 31*hashCode + (obj==null ? 0 : obj.hashCode());
+ * }
+ * </pre>
+ * This ensures that <tt>list1.equals(list2)</tt> implies that
+ * <tt>list1.hashCode()==list2.hashCode()</tt> for any two lists,
+ * <tt>list1</tt> and <tt>list2</tt>, as required by the general
+ * contract of <tt>Object.hashCode</tt>.
+ *
+ * @return the hash code value for this list.
+ * @see Object#hashCode()
+ * @see Object#equals(Object)
+ * @see #equals(Object)
+ */
+ public int hashCode() {
+ int hash = 1;
+ for(Listable elt = _head.next(), past = null; null != elt && past != _head.prev(); elt = (past = elt).next()) {
+ hash = 31*hash + (null == elt.value() ? 0 : elt.value().hashCode());
+ }
+ return hash;
+ }
+
+ /**
+ * Returns the index in this list of the first occurrence of the specified
+ * element, or -1 if this list does not contain this element.
+ * More formally, returns the lowest index <tt>i</tt> such that
+ * <tt>(o==null ? get(i)==null : o.equals(get(i)))</tt>,
+ * or -1 if there is no such index.
+ *
+ * @param o element to search for.
+ * @return the index in this list of the first occurrence of the specified
+ * element, or -1 if this list does not contain this element.
+ */
+ public int indexOf(Object o) {
+ int ndx = 0;
+
+ // perform the null check outside of the loop to save checking every
+ // single time through the loop.
+ if (null == o) {
+ for(Listable elt = _head.next(), past = null; null != elt && past != _head.prev(); elt = (past = elt).next()) {
+ if (null == elt.value()) {
+ return ndx;
+ }
+ ndx++;
+ }
+ } else {
+
+ for(Listable elt = _head.next(), past = null; null != elt && past != _head.prev(); elt = (past = elt).next()) {
+ if (o.equals(elt.value())) {
+ return ndx;
+ }
+ ndx++;
+ }
+ }
+ return -1;
+ }
+
+ /**
+ * Returns <tt>true</tt> if this list contains no elements.
+ * @return <tt>true</tt> if this list contains no elements.
+ */
+ public boolean isEmpty() {
+ return(0 == _size);
+ }
+
+ /**
+ * Returns a fail-fast iterator.
+ * @see List#iterator
+ */
+ public Iterator iterator() {
+ return listIterator(0);
+ }
+
+ /**
+ * Returns the index in this list of the last occurrence of the specified
+ * element, or -1 if this list does not contain this element.
+ * More formally, returns the highest index <tt>i</tt> such that
+ * <tt>(o==null ? get(i)==null : o.equals(get(i)))</tt>,
+ * or -1 if there is no such index.
+ *
+ * @param o element to search for.
+ * @return the index in this list of the last occurrence of the specified
+ * element, or -1 if this list does not contain this element.
+ */
+ public int lastIndexOf(Object o) {
+ int ndx = _size-1;
+
+ // perform the null check outside of the loop to save checking every
+ // single time through the loop.
+ if (null == o) {
+ for(Listable elt = _head.prev(), past = null; null != elt && past != _head.next(); elt = (past = elt).prev()) {
+ if (null == elt.value()) {
+ return ndx;
+ }
+ ndx--;
+ }
+ } else {
+ for(Listable elt = _head.prev(), past = null; null != elt && past != _head.next(); elt = (past = elt).prev()) {
+ if (o.equals(elt.value())) {
+ return ndx;
+ }
+ ndx--;
+ }
+ }
+ return -1;
+ }
+
+ /**
+ * Returns a fail-fast ListIterator.
+ * @see List#listIterator
+ */
+ public ListIterator listIterator() {
+ return listIterator(0);
+ }
+
+ /**
+ * Returns a fail-fast ListIterator.
+ * @see List#listIterator(int)
+ */
+ public ListIterator listIterator(int index) {
+ if(index<0 || index > _size) {
+ throw new IndexOutOfBoundsException(index + " < 0 or > " + _size);
+ }
+ return new ListIter(index);
+ }
+
+ /**
+ * Removes the first occurrence in this list of the specified element.
+ * If this list does not contain the element, it is
+ * unchanged. More formally, removes the element with the lowest index i
+ * such that <tt>(o==null ? get(i)==null : o.equals(get(i)))</tt> (if
+ * such an element exists).
+ *
+ * @param o element to be removed from this list, if present.
+ * @return <tt>true</tt> if this list contained the specified element.
+ */
+ public boolean remove(Object o) {
+ for(Listable elt = _head.next(), past = null; null != elt && past != _head.prev(); elt = (past = elt).next()) {
+ if(null == o && null == elt.value()) {
+ removeListable(elt);
+ return true;
+ } else if(o != null && o.equals(elt.value())) {
+ removeListable(elt);
+ return true;
+ }
+ }
+ return false;
+ }
+
+ /**
+ * Removes the element at the specified position in this list (optional
+ * operation). Shifts any subsequent elements to the left (subtracts one
+ * from their indices). Returns the element that was removed from the
+ * list.
+ *
+ * @param index the index of the element to removed.
+ * @return the element previously at the specified position.
+ *
+ * @throws IndexOutOfBoundsException if the index is out of range (index
+ * < 0 || index >= size()).
+ */
+ public Object remove(int index) {
+ Listable elt = getListableAt(index);
+ Object ret = elt.value();
+ removeListable(elt);
+ return ret;
+ }
+
+ /**
+ * Removes from this list all the elements that are contained in the
+ * specified collection.
+ *
+ * @param c collection that defines which elements will be removed from
+ * this list.
+ * @return <tt>true</tt> if this list changed as a result of the call.
+ */
+ public boolean removeAll(Collection c) {
+ if(0 == c.size() || 0 == _size) {
+ return false;
+ } else {
+ boolean changed = false;
+ Iterator it = iterator();
+ while(it.hasNext()) {
+ if(c.contains(it.next())) {
+ it.remove();
+ changed = true;
+ }
+ }
+ return changed;
+ }
+ }
+
+ /**
+ * Removes the first element of this list, if any.
+ */
+ public Object removeFirst() {
+ if(_head.next() != null) {
+ Object val = _head.next().value();
+ removeListable(_head.next());
+ return val;
+ } else {
+ throw new NoSuchElementException();
+ }
+ }
+
+ /**
+ * Removes the last element of this list, if any.
+ */
+ public Object removeLast() {
+ if(_head.prev() != null) {
+ Object val = _head.prev().value();
+ removeListable(_head.prev());
+ return val;
+ } else {
+ throw new NoSuchElementException();
+ }
+ }
+
+ /**
+ * Retains only the elements in this list that are contained in the
+ * specified collection. In other words, removes
+ * from this list all the elements that are not contained in the specified
+ * collection.
+ *
+ * @param c collection that defines which elements this set will retain.
+ *
+ * @return <tt>true</tt> if this list changed as a result of the call.
+ */
+ public boolean retainAll(Collection c) {
+ boolean changed = false;
+ Iterator it = iterator();
+ while(it.hasNext()) {
+ if(!c.contains(it.next())) {
+ it.remove();
+ changed = true;
+ }
+ }
+ return changed;
+ }
+
+ /**
+ * Replaces the element at the specified position in this list with the
+ * specified element.
+ *
+ * @param index index of element to replace.
+ * @param element element to be stored at the specified position.
+ * @return the element previously at the specified position.
+ *
+ * @throws ClassCastException if the class of the specified element
+ * prevents it from being added to this list.
+ * @throws IllegalArgumentException if some aspect of the specified
+ * element prevents it from being added to this list.
+ * @throws IndexOutOfBoundsException if the index is out of range
+ * (index < 0 || index >= size()).
+ */
+ public Object set(int index, Object element) {
+ Listable elt = getListableAt(index);
+ Object val = elt.setValue(element);
+ broadcastListableChanged(elt);
+ return val;
+ }
+
+ /**
+ * Returns the number of elements in this list.
+ * @return the number of elements in this list.
+ */
+ public int size() {
+ return _size;
+ }
+
+ /**
+ * Returns an array containing all of the elements in this list in proper
+ * sequence. Obeys the general contract of the {@link Collection#toArray} method.
+ *
+ * @return an array containing all of the elements in this list in proper
+ * sequence.
+ */
+ public Object[] toArray() {
+ Object[] array = new Object[_size];
+ int i = 0;
+ for(Listable elt = _head.next(), past = null; null != elt && past != _head.prev(); elt = (past = elt).next()) {
+ array[i++] = elt.value();
+ }
+ return array;
+ }
+
+ /**
+ * Returns an array containing all of the elements in this list in proper
+ * sequence; the runtime type of the returned array is that of the
+ * specified array. Obeys the general contract of the
+ * {@link Collection#toArray} method.
+ *
+ * @param a the array into which the elements of this list are to
+ * be stored, if it is big enough; otherwise, a new array of the
+ * same runtime type is allocated for this purpose.
+ * @return an array containing the elements of this list.
+ * @exception ArrayStoreException
+ * if the runtime type of the specified array
+ * is not a supertype of the runtime type of every element in
+ * this list.
+ */
+ public Object[] toArray(Object a[]) {
+ if(a.length < _size) {
+ a = (Object[])Array.newInstance(a.getClass().getComponentType(), _size);
+ }
+ int i = 0;
+ for(Listable elt = _head.next(), past = null; null != elt && past != _head.prev(); elt = (past = elt).next()) {
+ a[i++] = elt.value();
+ }
+ if(a.length > _size) {
+ a[_size] = null; // should we null out the rest of the array also? java.util.LinkedList doesn't
+ }
+ return a;
+ }
+
+ /**
+ * Returns a {@link String} representation of this list, suitable for debugging.
+ * @return a {@link String} representation of this list, suitable for debugging.
+ */
+ public String toString() {
+ StringBuffer buf = new StringBuffer();
+ buf.append("[");
+ for(Listable elt = _head.next(), past = null; null != elt && past != _head.prev(); elt = (past = elt).next()) {
+ if(_head.next() != elt) {
+ buf.append(", ");
+ }
+ buf.append(elt.value());
+ }
+ buf.append("]");
+ return buf.toString();
+ }
+
+ /**
+ * Returns a fail-fast sublist.
+ * @see List#subList(int,int)
+ */
+ public List subList(int i, int j) {
+ if(i < 0 || j > _size || i > j) {
+ throw new IndexOutOfBoundsException();
+ } else if(i == 0 && j == _size) {
+ return this;
+ } else {
+ return new CursorableSubList(this,i,j);
+ }
+ }
+
+ //--- protected methods ------------------------------------------
+
+ /**
+ * Inserts a new <i>value</i> into my
+ * list, after the specified <i>before</i> element, and before the
+ * specified <i>after</i> element
+ *
+ * @return the newly created
+ * {@link org.apache.commons.collections.CursorableLinkedList.Listable}
+ */
+ protected Listable insertListable(Listable before, Listable after, Object value) {
+ _modCount++;
+ _size++;
+ Listable elt = new Listable(before,after,value);
+ if(null != before) {
+ before.setNext(elt);
+ } else {
+ _head.setNext(elt);
+ }
+
+ if(null != after) {
+ after.setPrev(elt);
+ } else {
+ _head.setPrev(elt);
+ }
+ broadcastListableInserted(elt);
+ return elt;
+ }
+
+ /**
+ * Removes the given
+ * {@link org.apache.commons.collections.CursorableLinkedList.Listable}
+ * from my list.
+ */
+ protected void removeListable(Listable elt) {
+ _modCount++;
+ _size--;
+ if(_head.next() == elt) {
+ _head.setNext(elt.next());
+ }
+ if(null != elt.next()) {
+ elt.next().setPrev(elt.prev());
+ }
+ if(_head.prev() == elt) {
+ _head.setPrev(elt.prev());
+ }
+ if(null != elt.prev()) {
+ elt.prev().setNext(elt.next());
+ }
+ broadcastListableRemoved(elt);
+ }
+
+ /**
+ * Returns the
+ * {@link org.apache.commons.collections.CursorableLinkedList.Listable}
+ * at the specified index.
+ *
+ * @throws IndexOutOfBoundsException if index is less than zero or
+ * greater than or equal to the size of this list.
+ */
+ protected Listable getListableAt(int index) {
+ if(index < 0 || index >= _size) {
+ throw new IndexOutOfBoundsException(String.valueOf(index) + " < 0 or " + String.valueOf(index) + " >= " + _size);
+ }
+ if(index <=_size/2) {
+ Listable elt = _head.next();
+ for(int i = 0; i < index; i++) {
+ elt = elt.next();
+ }
+ return elt;
+ } else {
+ Listable elt = _head.prev();
+ for(int i = (_size-1); i > index; i--) {
+ elt = elt.prev();
+ }
+ return elt;
+ }
+ }
+
+ /**
+ * Registers a {@link CursorableLinkedList.Cursor} to be notified
+ * of changes to this list.
+ */
+ protected void registerCursor(Cursor cur) {
+ // We take this opportunity to clean the _cursors list
+ // of WeakReference objects to garbage-collected cursors.
+ for (Iterator it = _cursors.iterator(); it.hasNext(); ) {
+ WeakReference ref = (WeakReference) it.next();
+ if (ref.get() == null) {
+ it.remove();
+ }
+ }
+
+ _cursors.add( new WeakReference(cur) );
+ }
+
+ /**
+ * Removes a {@link CursorableLinkedList.Cursor} from
+ * the set of cursors to be notified of changes to this list.
+ */
+ protected void unregisterCursor(Cursor cur) {
+ for (Iterator it = _cursors.iterator(); it.hasNext(); ) {
+ WeakReference ref = (WeakReference) it.next();
+ Cursor cursor = (Cursor) ref.get();
+ if (cursor == null) {
+ // some other unrelated cursor object has been
+ // garbage-collected; let's take the opportunity to
+ // clean up the cursors list anyway..
+ it.remove();
+
+ } else if (cursor == cur) {
+ ref.clear();
+ it.remove();
+ break;
+ }
+ }
+ }
+
+ /**
+ * Informs all of my registered cursors that they are now
+ * invalid.
+ */
+ protected void invalidateCursors() {
+ Iterator it = _cursors.iterator();
+ while (it.hasNext()) {
+ WeakReference ref = (WeakReference) it.next();
+ Cursor cursor = (Cursor) ref.get();
+ if (cursor != null) {
+ // cursor is null if object has been garbage-collected
+ cursor.invalidate();
+ ref.clear();
+ }
+ it.remove();
+ }
+ }
+
+ /**
+ * Informs all of my registered cursors that the specified
+ * element was changed.
+ * @see #set(int,java.lang.Object)
+ */
+ protected void broadcastListableChanged(Listable elt) {
+ Iterator it = _cursors.iterator();
+ while (it.hasNext()) {
+ WeakReference ref = (WeakReference) it.next();
+ Cursor cursor = (Cursor) ref.get();
+ if (cursor == null) {
+ it.remove(); // clean up list
+ } else {
+ cursor.listableChanged(elt);
+ }
+ }
+ }
+
+ /**
+ * Informs all of my registered cursors that the specified
+ * element was just removed from my list.
+ */
+ protected void broadcastListableRemoved(Listable elt) {
+ Iterator it = _cursors.iterator();
+ while (it.hasNext()) {
+ WeakReference ref = (WeakReference) it.next();
+ Cursor cursor = (Cursor) ref.get();
+ if (cursor == null) {
+ it.remove(); // clean up list
+ } else {
+ cursor.listableRemoved(elt);
+ }
+ }
+ }
+
+ /**
+ * Informs all of my registered cursors that the specified
+ * element was just added to my list.
+ */
+ protected void broadcastListableInserted(Listable elt) {
+ Iterator it = _cursors.iterator();
+ while (it.hasNext()) {
+ WeakReference ref = (WeakReference) it.next();
+ Cursor cursor = (Cursor) ref.get();
+ if (cursor == null) {
+ it.remove(); // clean up list
+ } else {
+ cursor.listableInserted(elt);
+ }
+ }
+ }
+
+ private void writeObject(ObjectOutputStream out) throws IOException {
+ out.defaultWriteObject();
+ out.writeInt(_size);
+ Listable cur = _head.next();
+ while (cur != null) {
+ out.writeObject(cur.value());
+ cur = cur.next();
+ }
+ }
+
+ private void readObject(ObjectInputStream in) throws IOException, ClassNotFoundException {
+ in.defaultReadObject();
+ _size = 0;
+ _modCount = 0;
+ _cursors = new ArrayList();
+ _head = new Listable(null,null,null);
+ int size = in.readInt();
+ for (int i=0;i<size;i++) {
+ this.add(in.readObject());
+ }
+ }
+
+ //--- protected attributes ---------------------------------------
+
+ /** The number of elements in me. */
+ protected transient int _size = 0;
+
+ /**
+ * A sentry node.
+ * <p>
+ * <tt>_head.next()</tt> points to the first element in the list,
+ * <tt>_head.prev()</tt> to the last. Note that it is possible for
+ * <tt>_head.next().prev()</tt> and <tt>_head.prev().next()</tt> to be
+ * non-null, as when I am a sublist for some larger list.
+ * Use <tt>== _head.next()</tt> and <tt>== _head.prev()</tt> to determine
+ * if a given
+ * {@link org.apache.commons.collections.CursorableLinkedList.Listable}
+ * is the first or last element in the list.
+ */
+ protected transient Listable _head = new Listable(null,null,null);
+
+ /** Tracks the number of structural modifications to me. */
+ protected transient int _modCount = 0;
+
+ /**
+ * A list of the currently {@link CursorableLinkedList.Cursor}s currently
+ * open in this list.
+ */
+ protected transient List _cursors = new ArrayList();
+
+ //--- inner classes ----------------------------------------------
+
+ static class Listable implements Serializable {
+ private Listable _prev = null;
+ private Listable _next = null;
+ private Object _val = null;
+
+ Listable(Listable prev, Listable next, Object val) {
+ _prev = prev;
+ _next = next;
+ _val = val;
+ }
+
+ Listable next() {
+ return _next;
+ }
+
+ Listable prev() {
+ return _prev;
+ }
+
+ Object value() {
+ return _val;
+ }
+
+ void setNext(Listable next) {
+ _next = next;
+ }
+
+ void setPrev(Listable prev) {
+ _prev = prev;
+ }
+
+ Object setValue(Object val) {
+ Object temp = _val;
+ _val = val;
+ return temp;
+ }
+ }
+
+ class ListIter implements ListIterator {
+ Listable _cur = null;
+ Listable _lastReturned = null;
+ int _expectedModCount = _modCount;
+ int _nextIndex = 0;
+
+ ListIter(int index) {
+ if(index == 0) {
+ _cur = new Listable(null,_head.next(),null);
+ _nextIndex = 0;
+ } else if(index == _size) {
+ _cur = new Listable(_head.prev(),null,null);
+ _nextIndex = _size;
+ } else {
+ Listable temp = getListableAt(index);
+ _cur = new Listable(temp.prev(),temp,null);
+ _nextIndex = index;
+ }
+ }
+
+ public Object previous() {
+ checkForComod();
+ if(!hasPrevious()) {
+ throw new NoSuchElementException();
+ } else {
+ Object ret = _cur.prev().value();
+ _lastReturned = _cur.prev();
+ _cur.setNext(_cur.prev());
+ _cur.setPrev(_cur.prev().prev());
+ _nextIndex--;
+ return ret;
+ }
+ }
+
+ public boolean hasNext() {
+ checkForComod();
+ return(null != _cur.next() && _cur.prev() != _head.prev());
+ }
+
+ public Object next() {
+ checkForComod();
+ if(!hasNext()) {
+ throw new NoSuchElementException();
+ } else {
+ Object ret = _cur.next().value();
+ _lastReturned = _cur.next();
+ _cur.setPrev(_cur.next());
+ _cur.setNext(_cur.next().next());
+ _nextIndex++;
+ return ret;
+ }
+ }
+
+ public int previousIndex() {
+ checkForComod();
+ if(!hasPrevious()) {
+ return -1;
+ }
+ return _nextIndex-1;
+ }
+
+ public boolean hasPrevious() {
+ checkForComod();
+ return(null != _cur.prev() && _cur.next() != _head.next());
+ }
+
+ public void set(Object o) {
+ checkForComod();
+ try {
+ _lastReturned.setValue(o);
+ } catch(NullPointerException e) {
+ throw new IllegalStateException();
+ }
+ }
+
+ public int nextIndex() {
+ checkForComod();
+ if(!hasNext()) {
+ return size();
+ }
+ return _nextIndex;
+ }
+
+ public void remove() {
+ checkForComod();
+ if(null == _lastReturned) {
+ throw new IllegalStateException();
+ } else {
+ _cur.setNext(_lastReturned == _head.prev() ? null : _lastReturned.next());
+ _cur.setPrev(_lastReturned == _head.next() ? null : _lastReturned.prev());
+ removeListable(_lastReturned);
+ _lastReturned = null;
+ _nextIndex--;
+ _expectedModCount++;
+ }
+ }
+
+ public void add(Object o) {
+ checkForComod();
+ _cur.setPrev(insertListable(_cur.prev(),_cur.next(),o));
+ _lastReturned = null;
+ _nextIndex++;
+ _expectedModCount++;
+ }
+
+ protected void checkForComod() {
+ if(_expectedModCount != _modCount) {
+ throw new ConcurrentModificationException();
+ }
+ }
+ }
+
+ public class Cursor extends ListIter implements ListIterator {
+ boolean _valid = false;
+
+ Cursor(int index) {
+ super(index);
+ _valid = true;
+ registerCursor(this);
+ }
+
+ public int previousIndex() {
+ throw new UnsupportedOperationException();
+ }
+
+ public int nextIndex() {
+ throw new UnsupportedOperationException();
+ }
+
+ public void add(Object o) {
+ checkForComod();
+ Listable elt = insertListable(_cur.prev(),_cur.next(),o);
+ _cur.setPrev(elt);
+ _cur.setNext(elt.next());
+ _lastReturned = null;
+ _nextIndex++;
+ _expectedModCount++;
+ }
+
+ protected void listableRemoved(Listable elt) {
+ if(null == _head.prev()) {
+ _cur.setNext(null);
+ } else if(_cur.next() == elt) {
+ _cur.setNext(elt.next());
+ }
+ if(null == _head.next()) {
+ _cur.setPrev(null);
+ } else if(_cur.prev() == elt) {
+ _cur.setPrev(elt.prev());
+ }
+ if(_lastReturned == elt) {
+ _lastReturned = null;
+ }
+ }
+
+ protected void listableInserted(Listable elt) {
+ if(null == _cur.next() && null == _cur.prev()) {
+ _cur.setNext(elt);
+ } else if(_cur.prev() == elt.prev()) {
+ _cur.setNext(elt);
+ }
+ if(_cur.next() == elt.next()) {
+ _cur.setPrev(elt);
+ }
+ if(_lastReturned == elt) {
+ _lastReturned = null;
+ }
+ }
+
+ protected void listableChanged(Listable elt) {
+ if(_lastReturned == elt) {
+ _lastReturned = null;
+ }
+ }
+
+ protected void checkForComod() {
+ if(!_valid) {
+ throw new ConcurrentModificationException();
+ }
+ }
+
+ protected void invalidate() {
+ _valid = false;
+ }
+
+ /**
+ * Mark this cursor as no longer being needed. Any resources
+ * associated with this cursor are immediately released.
+ * In previous versions of this class, it was mandatory to close
+ * all cursor objects to avoid memory leaks. It is <i>no longer</i>
+ * necessary to call this close method; an instance of this class
+ * can now be treated exactly like a normal iterator.
+ */
+ public void close() {
+ if(_valid) {
+ _valid = false;
+ unregisterCursor(this);
+ }
+ }
+ }
+
+}
+
+/**
+ * @deprecated Use new version in list subpackage, which has been rewritten
+ * and now returns the cursor from the listIterator method. Will be removed in v4.0
+ */
+class CursorableSubList extends CursorableLinkedList implements List {
+
+ //--- constructors -----------------------------------------------
+
+ CursorableSubList(CursorableLinkedList list, int from, int to) {
+ if(0 > from || list.size() < to) {
+ throw new IndexOutOfBoundsException();
+ } else if(from > to) {
+ throw new IllegalArgumentException();
+ }
+ _list = list;
+ if(from < list.size()) {
+ _head.setNext(_list.getListableAt(from));
+ _pre = (null == _head.next()) ? null : _head.next().prev();
+ } else {
+ _pre = _list.getListableAt(from-1);
+ }
+ if(from == to) {
+ _head.setNext(null);
+ _head.setPrev(null);
+ if(to < list.size()) {
+ _post = _list.getListableAt(to);
+ } else {
+ _post = null;
+ }
+ } else {
+ _head.setPrev(_list.getListableAt(to-1));
+ _post = _head.prev().next();
+ }
+ _size = to - from;
+ _modCount = _list._modCount;
+ }
+
+ //--- public methods ------------------------------------------
+
+ public void clear() {
+ checkForComod();
+ Iterator it = iterator();
+ while(it.hasNext()) {
+ it.next();
+ it.remove();
+ }
+ }
+
+ public Iterator iterator() {
+ checkForComod();
+ return super.iterator();
+ }
+
+ public int size() {
+ checkForComod();
+ return super.size();
+ }
+
+ public boolean isEmpty() {
+ checkForComod();
+ return super.isEmpty();
+ }
+
+ public Object[] toArray() {
+ checkForComod();
+ return super.toArray();
+ }
+
+ public Object[] toArray(Object a[]) {
+ checkForComod();
+ return super.toArray(a);
+ }
+
+ public boolean contains(Object o) {
+ checkForComod();
+ return super.contains(o);
+ }
+
+ public boolean remove(Object o) {
+ checkForComod();
+ return super.remove(o);
+ }
+
+ public Object removeFirst() {
+ checkForComod();
+ return super.removeFirst();
+ }
+
+ public Object removeLast() {
+ checkForComod();
+ return super.removeLast();
+ }
+
+ public boolean addAll(Collection c) {
+ checkForComod();
+ return super.addAll(c);
+ }
+
+ public boolean add(Object o) {
+ checkForComod();
+ return super.add(o);
+ }
+
+ public boolean addFirst(Object o) {
+ checkForComod();
+ return super.addFirst(o);
+ }
+
+ public boolean addLast(Object o) {
+ checkForComod();
+ return super.addLast(o);
+ }
+
+ public boolean removeAll(Collection c) {
+ checkForComod();
+ return super.removeAll(c);
+ }
+
+ public boolean containsAll(Collection c) {
+ checkForComod();
+ return super.containsAll(c);
+ }
+
+ public boolean addAll(int index, Collection c) {
+ checkForComod();
+ return super.addAll(index,c);
+ }
+
+ public int hashCode() {
+ checkForComod();
+ return super.hashCode();
+ }
+
+ public boolean retainAll(Collection c) {
+ checkForComod();
+ return super.retainAll(c);
+ }
+
+ public Object set(int index, Object element) {
+ checkForComod();
+ return super.set(index,element);
+ }
+
+ public boolean equals(Object o) {
+ checkForComod();
+ return super.equals(o);
+ }
+
+ public Object get(int index) {
+ checkForComod();
+ return super.get(index);
+ }
+
+ public Object getFirst() {
+ checkForComod();
+ return super.getFirst();
+ }
+
+ public Object getLast() {
+ checkForComod();
+ return super.getLast();
+ }
+
+ public void add(int index, Object element) {
+ checkForComod();
+ super.add(index,element);
+ }
+
+ public ListIterator listIterator(int index) {
+ checkForComod();
+ return super.listIterator(index);
+ }
+
+ public Object remove(int index) {
+ checkForComod();
+ return super.remove(index);
+ }
+
+ public int indexOf(Object o) {
+ checkForComod();
+ return super.indexOf(o);
+ }
+
+ public int lastIndexOf(Object o) {
+ checkForComod();
+ return super.lastIndexOf(o);
+ }
+
+ public ListIterator listIterator() {
+ checkForComod();
+ return super.listIterator();
+ }
+
+ public List subList(int fromIndex, int toIndex) {
+ checkForComod();
+ return super.subList(fromIndex,toIndex);
+ }
+
+ //--- protected methods ------------------------------------------
+
+ /**
+ * Inserts a new <i>value</i> into my
+ * list, after the specified <i>before</i> element, and before the
+ * specified <i>after</i> element
+ *
+ * @return the newly created {@link CursorableLinkedList.Listable}
+ */
+ protected Listable insertListable(Listable before, Listable after, Object value) {
+ _modCount++;
+ _size++;
+ Listable elt = _list.insertListable((null == before ? _pre : before), (null == after ? _post : after),value);
+ if(null == _head.next()) {
+ _head.setNext(elt);
+ _head.setPrev(elt);
+ }
+ if(before == _head.prev()) {
+ _head.setPrev(elt);
+ }
+ if(after == _head.next()) {
+ _head.setNext(elt);
+ }
+ broadcastListableInserted(elt);
+ return elt;
+ }
+
+ /**
+ * Removes the given {@link CursorableLinkedList.Listable} from my list.
+ */
+ protected void removeListable(Listable elt) {
+ _modCount++;
+ _size--;
+ if(_head.next() == elt && _head.prev() == elt) {
+ _head.setNext(null);
+ _head.setPrev(null);
+ }
+ if(_head.next() == elt) {
+ _head.setNext(elt.next());
+ }
+ if(_head.prev() == elt) {
+ _head.setPrev(elt.prev());
+ }
+ _list.removeListable(elt);
+ broadcastListableRemoved(elt);
+ }
+
+ /**
+ * Test to see if my underlying list has been modified
+ * by some other process. If it has, throws a
+ * {@link ConcurrentModificationException}, otherwise
+ * quietly returns.
+ *
+ * @throws ConcurrentModificationException
+ */
+ protected void checkForComod() throws ConcurrentModificationException {
+ if(_modCount != _list._modCount) {
+ throw new ConcurrentModificationException();
+ }
+ }
+
+ //--- protected attributes ---------------------------------------
+
+ /** My underlying list */
+ protected CursorableLinkedList _list = null;
+
+ /** The element in my underlying list preceding the first element in my list. */
+ protected Listable _pre = null;
+
+ /** The element in my underlying list following the last element in my list. */
+ protected Listable _post = null;
+
+}
diff --git a/dependencies/plugins/org.apache.commons.collections/source-bundle/org/apache/commons/collections/DefaultMapBag.java b/dependencies/plugins/org.apache.commons.collections/source-bundle/org/apache/commons/collections/DefaultMapBag.java
new file mode 100755
index 0000000..2701f9d
--- /dev/null
+++ b/dependencies/plugins/org.apache.commons.collections/source-bundle/org/apache/commons/collections/DefaultMapBag.java
@@ -0,0 +1,454 @@
+/*
+ * Copyright 2002-2004 The Apache Software Foundation
+ *
+ * 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.
+ */
+package org.apache.commons.collections;
+
+import java.util.ArrayList;
+import java.util.Collection;
+import java.util.ConcurrentModificationException;
+import java.util.Iterator;
+import java.util.List;
+import java.util.Map;
+import java.util.Set;
+
+import org.apache.commons.collections.set.UnmodifiableSet;
+
+/**
+ * A skeletal implementation of the {@link Bag}
+ * interface to minimize the effort required for target implementations.
+ * Subclasses need only to call <code>setMap(Map)</code> in their constructor
+ * (or invoke the Map constructor) specifying a map instance that will be used
+ * to store the contents of the bag.
+ * <p>
+ * The map will be used to map bag elements to a number; the number represents
+ * the number of occurrences of that element in the bag.
+ *
+ * @deprecated Moved to bag subpackage as AbstractMapBag. Due to be removed in v4.0.
+ * @since Commons Collections 2.0
+ * @version $Revision: 1.1 $ $Date: 2009/05/27 22:16:19 $
+ *
+ * @author Chuck Burdick
+ * @author Michael A. Smith
+ * @author Stephen Colebourne
+ * @author Janek Bogucki
+ */
+public abstract class DefaultMapBag implements Bag {
+ private Map _map = null;
+ private int _total = 0;
+ private int _mods = 0;
+
+ /**
+ * No-argument constructor.
+ * Subclasses should invoke <code>setMap(Map)</code> in
+ * their constructors.
+ */
+ public DefaultMapBag() {
+ }
+
+ /**
+ * Constructor that assigns the specified Map as the backing store.
+ * The map must be empty.
+ *
+ * @param map the map to assign
+ */
+ protected DefaultMapBag(Map map) {
+ setMap(map);
+ }
+
+ /**
+ * Adds a new element to the bag by incrementing its count in the
+ * underlying map.
+ *
+ * @param object the object to add
+ * @return <code>true</code> if the object was not already in the <code>uniqueSet</code>
+ */
+ public boolean add(Object object) {
+ return add(object, 1);
+ }
+
+ /**
+ * Adds a new element to the bag by incrementing its count in the map.
+ *
+ * @param object the object to search for
+ * @param nCopies the number of copies to add
+ * @return <code>true</code> if the object was not already in the <code>uniqueSet</code>
+ */
+ public boolean add(Object object, int nCopies) {
+ _mods++;
+ if (nCopies > 0) {
+ int count = (nCopies + getCount(object));
+ _map.put(object, new Integer(count));
+ _total += nCopies;
+ return (count == nCopies);
+ } else {
+ return false;
+ }
+ }
+
+ /**
+ * Invokes {@link #add(Object)} for each element in the given collection.
+ *
+ * @param coll the collection to add
+ * @return <code>true</code> if this call changed the bag
+ */
+ public boolean addAll(Collection coll) {
+ boolean changed = false;
+ Iterator i = coll.iterator();
+ while (i.hasNext()) {
+ boolean added = add(i.next());
+ changed = changed || added;
+ }
+ return changed;
+ }
+
+ /**
+ * Clears the bag by clearing the underlying map.
+ */
+ public void clear() {
+ _mods++;
+ _map.clear();
+ _total = 0;
+ }
+
+ /**
+ * Determines if the bag contains the given element by checking if the
+ * underlying map contains the element as a key.
+ *
+ * @param object the object to search for
+ * @return true if the bag contains the given element
+ */
+ public boolean contains(Object object) {
+ return _map.containsKey(object);
+ }
+
+ /**
+ * Determines if the bag contains the given elements.
+ *
+ * @param coll the collection to check against
+ * @return <code>true</code> if the Bag contains all the collection
+ */
+ public boolean containsAll(Collection coll) {
+ return containsAll(new HashBag(coll));
+ }
+
+ /**
+ * Returns <code>true</code> if the bag contains all elements in
+ * the given collection, respecting cardinality.
+ *
+ * @param other the bag to check against
+ * @return <code>true</code> if the Bag contains all the collection
+ */
+ public boolean containsAll(Bag other) {
+ boolean result = true;
+ Iterator i = other.uniqueSet().iterator();
+ while (i.hasNext()) {
+ Object current = i.next();
+ boolean contains = getCount(current) >= other.getCount(current);
+ result = result && contains;
+ }
+ return result;
+ }
+
+ /**
+ * Returns true if the given object is not null, has the precise type
+ * of this bag, and contains the same number of occurrences of all the
+ * same elements.
+ *
+ * @param object the object to test for equality
+ * @return true if that object equals this bag
+ */
+ public boolean equals(Object object) {
+ if (object == this) {
+ return true;
+ }
+ if (object instanceof Bag == false) {
+ return false;
+ }
+ Bag other = (Bag) object;
+ if (other.size() != size()) {
+ return false;
+ }
+ for (Iterator it = _map.keySet().iterator(); it.hasNext();) {
+ Object element = it.next();
+ if (other.getCount(element) != getCount(element)) {
+ return false;
+ }
+ }
+ return true;
+ }
+
+ /**
+ * Returns the hash code of the underlying map.
+ *
+ * @return the hash code of the underlying map
+ */
+ public int hashCode() {
+ return _map.hashCode();
+ }
+
+ /**
+ * Returns true if the underlying map is empty.
+ *
+ * @return true if there are no elements in this bag
+ */
+ public boolean isEmpty() {
+ return _map.isEmpty();
+ }
+
+ public Iterator iterator() {
+ return new BagIterator(this, extractList().iterator());
+ }
+
+ static class BagIterator implements Iterator {
+ private DefaultMapBag _parent = null;
+ private Iterator _support = null;
+ private Object _current = null;
+ private int _mods = 0;
+
+ public BagIterator(DefaultMapBag parent, Iterator support) {
+ _parent = parent;
+ _support = support;
+ _current = null;
+ _mods = parent.modCount();
+ }
+
+ public boolean hasNext() {
+ return _support.hasNext();
+ }
+
+ public Object next() {
+ if (_parent.modCount() != _mods) {
+ throw new ConcurrentModificationException();
+ }
+ _current = _support.next();
+ return _current;
+ }
+
+ public void remove() {
+ if (_parent.modCount() != _mods) {
+ throw new ConcurrentModificationException();
+ }
+ _support.remove();
+ _parent.remove(_current, 1);
+ _mods++;
+ }
+ }
+
+ public boolean remove(Object object) {
+ return remove(object, getCount(object));
+ }
+
+ public boolean remove(Object object, int nCopies) {
+ _mods++;
+ boolean result = false;
+ int count = getCount(object);
+ if (nCopies <= 0) {
+ result = false;
+ } else if (count > nCopies) {
+ _map.put(object, new Integer(count - nCopies));
+ result = true;
+ _total -= nCopies;
+ } else { // count > 0 && count <= i
+ // need to remove all
+ result = (_map.remove(object) != null);
+ _total -= count;
+ }
+ return result;
+ }
+
+ public boolean removeAll(Collection coll) {
+ boolean result = false;
+ if (coll != null) {
+ Iterator i = coll.iterator();
+ while (i.hasNext()) {
+ boolean changed = remove(i.next(), 1);
+ result = result || changed;
+ }
+ }
+ return result;
+ }
+
+ /**
+ * Remove any members of the bag that are not in the given
+ * bag, respecting cardinality.
+ *
+ * @param coll the collection to retain
+ * @return true if this call changed the collection
+ */
+ public boolean retainAll(Collection coll) {
+ return retainAll(new HashBag(coll));
+ }
+
+ /**
+ * Remove any members of the bag that are not in the given
+ * bag, respecting cardinality.
+ * @see #retainAll(Collection)
+ *
+ * @param other the bag to retain
+ * @return <code>true</code> if this call changed the collection
+ */
+ public boolean retainAll(Bag other) {
+ boolean result = false;
+ Bag excess = new HashBag();
+ Iterator i = uniqueSet().iterator();
+ while (i.hasNext()) {
+ Object current = i.next();
+ int myCount = getCount(current);
+ int otherCount = other.getCount(current);
+ if (1 <= otherCount && otherCount <= myCount) {
+ excess.add(current, myCount - otherCount);
+ } else {
+ excess.add(current, myCount);
+ }
+ }
+ if (!excess.isEmpty()) {
+ result = removeAll(excess);
+ }
+ return result;
+ }
+
+ /**
+ * Returns an array of all of this bag's elements.
+ *
+ * @return an array of all of this bag's elements
+ */
+ public Object[] toArray() {
+ return extractList().toArray();
+ }
+
+ /**
+ * Returns an array of all of this bag's elements.
+ *
+ * @param array the array to populate
+ * @return an array of all of this bag's elements
+ */
+ public Object[] toArray(Object[] array) {
+ return extractList().toArray(array);
+ }
+
+ /**
+ * Returns the number of occurrence of the given element in this bag
+ * by looking up its count in the underlying map.
+ *
+ * @param object the object to search for
+ * @return the number of occurrences of the object, zero if not found
+ */
+ public int getCount(Object object) {
+ int result = 0;
+ Integer count = MapUtils.getInteger(_map, object);
+ if (count != null) {
+ result = count.intValue();
+ }
+ return result;
+ }
+
+ /**
+ * Returns an unmodifiable view of the underlying map's key set.
+ *
+ * @return the set of unique elements in this bag
+ */
+ public Set uniqueSet() {
+ return UnmodifiableSet.decorate(_map.keySet());
+ }
+
+ /**
+ * Returns the number of elements in this bag.
+ *
+ * @return the number of elements in this bag
+ */
+ public int size() {
+ return _total;
+ }
+
+ /**
+ * Actually walks the bag to make sure the count is correct and
+ * resets the running total
+ *
+ * @return the current total size
+ */
+ protected int calcTotalSize() {
+ _total = extractList().size();
+ return _total;
+ }
+
+ /**
+ * Utility method for implementations to set the map that backs
+ * this bag. Not intended for interactive use outside of
+ * subclasses.
+ */
+ protected void setMap(Map map) {
+ if (map == null || map.isEmpty() == false) {
+ throw new IllegalArgumentException("The map must be non-null and empty");
+ }
+ _map = map;
+ }
+
+ /**
+ * Utility method for implementations to access the map that backs
+ * this bag. Not intended for interactive use outside of
+ * subclasses.
+ */
+ protected Map getMap() {
+ return _map;
+ }
+
+ /**
+ * Create a list for use in iteration, etc.
+ */
+ private List extractList() {
+ List result = new ArrayList();
+ Iterator i = uniqueSet().iterator();
+ while (i.hasNext()) {
+ Object current = i.next();
+ for (int index = getCount(current); index > 0; index--) {
+ result.add(current);
+ }
+ }
+ return result;
+ }
+
+ /**
+ * Return number of modifications for iterator.
+ *
+ * @return the modification count
+ */
+ private int modCount() {
+ return _mods;
+ }
+
+ /**
+ * Implement a toString() method suitable for debugging.
+ *
+ * @return a debugging toString
+ */
+ public String toString() {
+ StringBuffer buf = new StringBuffer();
+ buf.append("[");
+ Iterator i = uniqueSet().iterator();
+ while (i.hasNext()) {
+ Object current = i.next();
+ int count = getCount(current);
+ buf.append(count);
+ buf.append(":");
+ buf.append(current);
+ if (i.hasNext()) {
+ buf.append(",");
+ }
+ }
+ buf.append("]");
+ return buf.toString();
+ }
+
+}
diff --git a/dependencies/plugins/org.apache.commons.collections/source-bundle/org/apache/commons/collections/DefaultMapEntry.java b/dependencies/plugins/org.apache.commons.collections/source-bundle/org/apache/commons/collections/DefaultMapEntry.java
new file mode 100755
index 0000000..464a29d
--- /dev/null
+++ b/dependencies/plugins/org.apache.commons.collections/source-bundle/org/apache/commons/collections/DefaultMapEntry.java
@@ -0,0 +1,162 @@
+/*
+ * Copyright 2001-2004 The Apache Software Foundation
+ *
+ * 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.
+ */
+package org.apache.commons.collections;
+
+import java.util.Map;
+
+/**
+ * A default implementation of {@link java.util.Map.Entry}
+ *
+ * @deprecated Use the version in the keyvalue subpackage. Will be removed in v4.0
+ * @since Commons Collections 1.0
+ * @version $Revision: 1.1 $ $Date: 2009/05/27 22:16:19 $
+ *
+ * @author James Strachan
+ * @author Michael A. Smith
+ * @author Neil O'Toole
+ * @author Stephen Colebourne
+ */
+public class DefaultMapEntry implements Map.Entry, KeyValue {
+
+ /** The key */
+ private Object key;
+ /** The value */
+ private Object value;
+
+ /**
+ * Constructs a new <code>DefaultMapEntry</code> with a null key
+ * and null value.
+ */
+ public DefaultMapEntry() {
+ super();
+ }
+
+ /**
+ * Constructs a new <code>DefaultMapEntry</code> with the given
+ * key and given value.
+ *
+ * @param entry the entry to copy, must not be null
+ * @throws NullPointerException if the entry is null
+ */
+ public DefaultMapEntry(Map.Entry entry) {
+ super();
+ this.key = entry.getKey();
+ this.value = entry.getValue();
+ }
+
+ /**
+ * Constructs a new <code>DefaultMapEntry</code> with the given
+ * key and given value.
+ *
+ * @param key the key for the entry, may be null
+ * @param value the value for the entry, may be null
+ */
+ public DefaultMapEntry(Object key, Object value) {
+ super();
+ this.key = key;
+ this.value = value;
+ }
+
+ // Map.Entry interface
+ //-------------------------------------------------------------------------
+ /**
+ * Gets the key from the Map Entry.
+ *
+ * @return the key
+ */
+ public Object getKey() {
+ return key;
+ }
+
+ /**
+ * Sets the key stored in this Map Entry.
+ * <p>
+ * This Map Entry is not connected to a Map, so only the local data is changed.
+ *
+ * @param key the new key
+ */
+ public void setKey(Object key) {
+ this.key = key;
+ }
+
+ /**
+ * Gets the value from the Map Entry.
+ *
+ * @return the value
+ */
+ public Object getValue() {
+ return value;
+ }
+
+ /**
+ * Sets the value stored in this Map Entry.
+ * <p>
+ * This Map Entry is not connected to a Map, so only the local data is changed.
+ *
+ * @param value the new value
+ * @return the previous value
+ */
+ public Object setValue(Object value) {
+ Object answer = this.value;
+ this.value = value;
+ return answer;
+ }
+
+ // Basics
+ //-----------------------------------------------------------------------
+ /**
+ * Compares this Map Entry with another Map Entry.
+ * <p>
+ * Implemented per API documentation of {@link java.util.Map.Entry#equals(Object)}
+ *
+ * @param obj the object to compare to
+ * @return true if equal key and value
+ */
+ public boolean equals(Object obj) {
+ if (obj == this) {
+ return true;
+ }
+ if (obj instanceof Map.Entry == false) {
+ return false;
+ }
+ Map.Entry other = (Map.Entry) obj;
+ return
+ (getKey() == null ? other.getKey() == null : getKey().equals(other.getKey())) &&
+ (getValue() == null ? other.getValue() == null : getValue().equals(other.getValue()));
+ }
+
+ /**
+ * Gets a hashCode compatible with the equals method.
+ * <p>
+ * Implemented per API documentation of {@link java.util.Map.Entry#hashCode()}
+ *
+ * @return a suitable hash code
+ */
+ public int hashCode() {
+ return (getKey() == null ? 0 : getKey().hashCode()) ^
+ (getValue() == null ? 0 : getValue().hashCode());
+ }
+
+ /**
+ * Written to match the output of the Map.Entry's used in
+ * a {@link java.util.HashMap}.
+ * @since 3.0
+ */
+ public String toString() {
+ return ""+getKey()+"="+getValue();
+ }
+
+}
diff --git a/dependencies/plugins/org.apache.commons.collections/source-bundle/org/apache/commons/collections/DoubleOrderedMap.java b/dependencies/plugins/org.apache.commons.collections/source-bundle/org/apache/commons/collections/DoubleOrderedMap.java
new file mode 100755
index 0000000..0b73668
--- /dev/null
+++ b/dependencies/plugins/org.apache.commons.collections/source-bundle/org/apache/commons/collections/DoubleOrderedMap.java
@@ -0,0 +1,1994 @@
+/*
+ * Copyright 2002-2004 The Apache Software Foundation
+ *
+ * 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.
+ */
+package org.apache.commons.collections;
+
+import java.util.AbstractCollection;
+import java.util.AbstractMap;
+import java.util.AbstractSet;
+import java.util.Collection;
+import java.util.ConcurrentModificationException;
+import java.util.Iterator;
+import java.util.Map;
+import java.util.NoSuchElementException;
+import java.util.Set;
+
+/**
+ * Red-Black tree-based implementation of Map. This class guarantees
+ * that the map will be in both ascending key order and ascending
+ * value order, sorted according to the natural order for the key's
+ * and value's classes.
+ * <p>
+ * This Map is intended for applications that need to be able to look
+ * up a key-value pairing by either key or value, and need to do so
+ * with equal efficiency.
+ * <p>
+ * While that goal could be accomplished by taking a pair of TreeMaps
+ * and redirecting requests to the appropriate TreeMap (e.g.,
+ * containsKey would be directed to the TreeMap that maps values to
+ * keys, containsValue would be directed to the TreeMap that maps keys
+ * to values), there are problems with that implementation,
+ * particularly when trying to keep the two TreeMaps synchronized with
+ * each other. And if the data contained in the TreeMaps is large, the
+ * cost of redundant storage becomes significant. (See also the new
+ * {@link org.apache.commons.collections.bidimap.DualTreeBidiMap DualTreeBidiMap} and
+ * {@link org.apache.commons.collections.bidimap.DualHashBidiMap DualHashBidiMap}
+ * implementations.)
+ * <p>
+ * This solution keeps the data properly synchronized and minimizes
+ * the data storage. The red-black algorithm is based on TreeMap's,
+ * but has been modified to simultaneously map a tree node by key and
+ * by value. This doubles the cost of put operations (but so does
+ * using two TreeMaps), and nearly doubles the cost of remove
+ * operations (there is a savings in that the lookup of the node to be
+ * removed only has to be performed once). And since only one node
+ * contains the key and value, storage is significantly less than that
+ * required by two TreeMaps.
+ * <p>
+ * There are some limitations placed on data kept in this Map. The
+ * biggest one is this:
+ * <p>
+ * When performing a put operation, neither the key nor the value may
+ * already exist in the Map. In the java.util Map implementations
+ * (HashMap, TreeMap), you can perform a put with an already mapped
+ * key, and neither cares about duplicate values at all ... but this
+ * implementation's put method with throw an IllegalArgumentException
+ * if either the key or the value is already in the Map.
+ * <p>
+ * Obviously, that same restriction (and consequence of failing to
+ * heed that restriction) applies to the putAll method.
+ * <p>
+ * The Map.Entry instances returned by the appropriate methods will
+ * not allow setValue() and will throw an
+ * UnsupportedOperationException on attempts to call that method.
+ * <p>
+ * New methods are added to take advantage of the fact that values are
+ * kept sorted independently of their keys:
+ * <p>
+ * Object getKeyForValue(Object value) is the opposite of get; it
+ * takes a value and returns its key, if any.
+ * <p>
+ * Object removeValue(Object value) finds and removes the specified
+ * value and returns the now un-used key.
+ * <p>
+ * Set entrySetByValue() returns the Map.Entry's in a Set whose
+ * iterator will iterate over the Map.Entry's in ascending order by
+ * their corresponding values.
+ * <p>
+ * Set keySetByValue() returns the keys in a Set whose iterator will
+ * iterate over the keys in ascending order by their corresponding
+ * values.
+ * <p>
+ * Collection valuesByValue() returns the values in a Collection whose
+ * iterator will iterate over the values in ascending order.
+ *
+ * @deprecated Replaced by TreeBidiMap in bidimap subpackage. Due to be removed in v4.0.
+ * @see BidiMap
+ * @see org.apache.commons.collections.bidimap.DualTreeBidiMap
+ * @see org.apache.commons.collections.bidimap.DualHashBidiMap
+ * @since Commons Collections 2.0
+ * @version $Revision: 1.1 $ $Date: 2009/05/27 22:16:18 $
+ *
+ * @author Marc Johnson
+ */
+public final class DoubleOrderedMap extends AbstractMap {
+// final for performance
+
+ private static final int KEY = 0;
+ private static final int VALUE = 1;
+ private static final int SUM_OF_INDICES = KEY + VALUE;
+ private static final int FIRST_INDEX = 0;
+ private static final int NUMBER_OF_INDICES = 2;
+ private static final String[] dataName = new String[] { "key", "value" };
+
+ private Node[] rootNode = new Node[] { null, null };
+ private int nodeCount = 0;
+ private int modifications = 0;
+ private Set[] setOfKeys = new Set[] { null, null };
+ private Set[] setOfEntries = new Set[] { null, null };
+ private Collection[] collectionOfValues = new Collection[] { null, null };
+
+ /**
+ * Construct a new DoubleOrderedMap
+ */
+ public DoubleOrderedMap() {
+ }
+
+ /**
+ * Constructs a new DoubleOrderedMap from an existing Map, with keys and
+ * values sorted
+ *
+ * @param map the map whose mappings are to be placed in this map.
+ *
+ * @throws ClassCastException if the keys in the map are not
+ * Comparable, or are not mutually
+ * comparable; also if the values in
+ * the map are not Comparable, or
+ * are not mutually Comparable
+ * @throws NullPointerException if any key or value in the map
+ * is null
+ * @throws IllegalArgumentException if there are duplicate keys
+ * or duplicate values in the
+ * map
+ */
+ public DoubleOrderedMap(final Map map)
+ throws ClassCastException, NullPointerException,
+ IllegalArgumentException {
+ putAll(map);
+ }
+
+ /**
+ * Returns the key to which this map maps the specified value.
+ * Returns null if the map contains no mapping for this value.
+ *
+ * @param value value whose associated key is to be returned.
+ *
+ * @return the key to which this map maps the specified value, or
+ * null if the map contains no mapping for this value.
+ *
+ * @throws ClassCastException if the value is of an
+ * inappropriate type for this map.
+ * @throws NullPointerException if the value is null
+ */
+ public Object getKeyForValue(final Object value)
+ throws ClassCastException, NullPointerException {
+ return doGet((Comparable) value, VALUE);
+ }
+
+ /**
+ * Removes the mapping for this value from this map if present
+ *
+ * @param value value whose mapping is to be removed from the map.
+ *
+ * @return previous key associated with specified value, or null
+ * if there was no mapping for value.
+ */
+ public Object removeValue(final Object value) {
+ return doRemove((Comparable) value, VALUE);
+ }
+
+ /**
+ * Returns a set view of the mappings contained in this map. Each
+ * element in the returned set is a Map.Entry. The set is backed
+ * by the map, so changes to the map are reflected in the set, and
+ * vice-versa. If the map is modified while an iteration over the
+ * set is in progress, the results of the iteration are
+ * undefined. The set supports element removal, which removes the
+ * corresponding mapping from the map, via the Iterator.remove,
+ * Set.remove, removeAll, retainAll and clear operations. It does
+ * not support the add or addAll operations.<p>
+ *
+ * The difference between this method and entrySet is that
+ * entrySet's iterator() method returns an iterator that iterates
+ * over the mappings in ascending order by key. This method's
+ * iterator method iterates over the mappings in ascending order
+ * by value.
+ *
+ * @return a set view of the mappings contained in this map.
+ */
+ public Set entrySetByValue() {
+
+ if (setOfEntries[VALUE] == null) {
+ setOfEntries[VALUE] = new AbstractSet() {
+
+ public Iterator iterator() {
+
+ return new DoubleOrderedMapIterator(VALUE) {
+
+ protected Object doGetNext() {
+ return lastReturnedNode;
+ }
+ };
+ }
+
+ public boolean contains(Object o) {
+
+ if (!(o instanceof Map.Entry)) {
+ return false;
+ }
+
+ Map.Entry entry = (Map.Entry) o;
+ Object key = entry.getKey();
+ Node node = lookup((Comparable) entry.getValue(),
+ VALUE);
+
+ return (node != null) && node.getData(KEY).equals(key);
+ }
+
+ public boolean remove(Object o) {
+
+ if (!(o instanceof Map.Entry)) {
+ return false;
+ }
+
+ Map.Entry entry = (Map.Entry) o;
+ Object key = entry.getKey();
+ Node node = lookup((Comparable) entry.getValue(),
+ VALUE);
+
+ if ((node != null) && node.getData(KEY).equals(key)) {
+ doRedBlackDelete(node);
+
+ return true;
+ }
+
+ return false;
+ }
+
+ public int size() {
+ return DoubleOrderedMap.this.size();
+ }
+
+ public void clear() {
+ DoubleOrderedMap.this.clear();
+ }
+ };
+ }
+
+ return setOfEntries[VALUE];
+ }
+
+ /**
+ * Returns a set view of the keys contained in this map. The set
+ * is backed by the map, so changes to the map are reflected in
+ * the set, and vice-versa. If the map is modified while an
+ * iteration over the set is in progress, the results of the
+ * iteration are undefined. The set supports element removal,
+ * which removes the corresponding mapping from the map, via the
+ * Iterator.remove, Set.remove, removeAll, retainAll, and clear
+ * operations. It does not support the add or addAll
+ * operations.<p>
+ *
+ * The difference between this method and keySet is that keySet's
+ * iterator() method returns an iterator that iterates over the
+ * keys in ascending order by key. This method's iterator method
+ * iterates over the keys in ascending order by value.
+ *
+ * @return a set view of the keys contained in this map.
+ */
+ public Set keySetByValue() {
+
+ if (setOfKeys[VALUE] == null) {
+ setOfKeys[VALUE] = new AbstractSet() {
+
+ public Iterator iterator() {
+
+ return new DoubleOrderedMapIterator(VALUE) {
+
+ protected Object doGetNext() {
+ return lastReturnedNode.getData(KEY);
+ }
+ };
+ }
+
+ public int size() {
+ return DoubleOrderedMap.this.size();
+ }
+
+ public boolean contains(Object o) {
+ return containsKey(o);
+ }
+
+ public boolean remove(Object o) {
+
+ int oldnodeCount = nodeCount;
+
+ DoubleOrderedMap.this.remove(o);
+
+ return nodeCount != oldnodeCount;
+ }
+
+ public void clear() {
+ DoubleOrderedMap.this.clear();
+ }
+ };
+ }
+
+ return setOfKeys[VALUE];
+ }
+
+ /**
+ * Returns a collection view of the values contained in this
+ * map. The collection is backed by the map, so changes to the map
+ * are reflected in the collection, and vice-versa. If the map is
+ * modified while an iteration over the collection is in progress,
+ * the results of the iteration are undefined. The collection
+ * supports element removal, which removes the corresponding
+ * mapping from the map, via the Iterator.remove,
+ * Collection.remove, removeAll, retainAll and clear operations.
+ * It does not support the add or addAll operations.<p>
+ *
+ * The difference between this method and values is that values's
+ * iterator() method returns an iterator that iterates over the
+ * values in ascending order by key. This method's iterator method
+ * iterates over the values in ascending order by key.
+ *
+ * @return a collection view of the values contained in this map.
+ */
+ public Collection valuesByValue() {
+
+ if (collectionOfValues[VALUE] == null) {
+ collectionOfValues[VALUE] = new AbstractCollection() {
+
+ public Iterator iterator() {
+
+ return new DoubleOrderedMapIterator(VALUE) {
+
+ protected Object doGetNext() {
+ return lastReturnedNode.getData(VALUE);
+ }
+ };
+ }
+
+ public int size() {
+ return DoubleOrderedMap.this.size();
+ }
+
+ public boolean contains(Object o) {
+ return containsValue(o);
+ }
+
+ public boolean remove(Object o) {
+
+ int oldnodeCount = nodeCount;
+
+ removeValue(o);
+
+ return nodeCount != oldnodeCount;
+ }
+
+ public boolean removeAll(Collection c) {
+
+ boolean modified = false;
+ Iterator iter = c.iterator();
+
+ while (iter.hasNext()) {
+ if (removeValue(iter.next()) != null) {
+ modified = true;
+ }
+ }
+
+ return modified;
+ }
+
+ public void clear() {
+ DoubleOrderedMap.this.clear();
+ }
+ };
+ }
+
+ return collectionOfValues[VALUE];
+ }
+
+ /**
+ * common remove logic (remove by key or remove by value)
+ *
+ * @param o the key, or value, that we're looking for
+ * @param index KEY or VALUE
+ *
+ * @return the key, if remove by value, or the value, if remove by
+ * key. null if the specified key or value could not be
+ * found
+ */
+ private Object doRemove(final Comparable o, final int index) {
+
+ Node node = lookup(o, index);
+ Object rval = null;
+
+ if (node != null) {
+ rval = node.getData(oppositeIndex(index));
+
+ doRedBlackDelete(node);
+ }
+
+ return rval;
+ }
+
+ /**
+ * common get logic, used to get by key or get by value
+ *
+ * @param o the key or value that we're looking for
+ * @param index KEY or VALUE
+ *
+ * @return the key (if the value was mapped) or the value (if the
+ * key was mapped); null if we couldn't find the specified
+ * object
+ */
+ private Object doGet(final Comparable o, final int index) {
+
+ checkNonNullComparable(o, index);
+
+ Node node = lookup(o, index);
+
+ return ((node == null)
+ ? null
+ : node.getData(oppositeIndex(index)));
+ }
+
+ /**
+ * Get the opposite index of the specified index
+ *
+ * @param index KEY or VALUE
+ *
+ * @return VALUE (if KEY was specified), else KEY
+ */
+ private int oppositeIndex(final int index) {
+
+ // old trick ... to find the opposite of a value, m or n,
+ // subtract the value from the sum of the two possible
+ // values. (m + n) - m = n; (m + n) - n = m
+ return SUM_OF_INDICES - index;
+ }
+
+ /**
+ * do the actual lookup of a piece of data
+ *
+ * @param data the key or value to be looked up
+ * @param index KEY or VALUE
+ *
+ * @return the desired Node, or null if there is no mapping of the
+ * specified data
+ */
+ private Node lookup(final Comparable data, final int index) {
+
+ Node rval = null;
+ Node node = rootNode[index];
+
+ while (node != null) {
+ int cmp = compare(data, node.getData(index));
+
+ if (cmp == 0) {
+ rval = node;
+
+ break;
+ } else {
+ node = (cmp < 0)
+ ? node.getLeft(index)
+ : node.getRight(index);
+ }
+ }
+
+ return rval;
+ }
+
+ /**
+ * Compare two objects
+ *
+ * @param o1 the first object
+ * @param o2 the second object
+ *
+ * @return negative value if o1 < o2; 0 if o1 == o2; positive
+ * value if o1 > o2
+ */
+ private static int compare(final Comparable o1, final Comparable o2) {
+ return o1.compareTo(o2);
+ }
+
+ /**
+ * find the least node from a given node. very useful for starting
+ * a sorting iterator ...
+ *
+ * @param node the node from which we will start searching
+ * @param index KEY or VALUE
+ *
+ * @return the smallest node, from the specified node, in the
+ * specified mapping
+ */
+ private static Node leastNode(final Node node, final int index) {
+
+ Node rval = node;
+
+ if (rval != null) {
+ while (rval.getLeft(index) != null) {
+ rval = rval.getLeft(index);
+ }
+ }
+
+ return rval;
+ }
+
+ /**
+ * get the next larger node from the specified node
+ *
+ * @param node the node to be searched from
+ * @param index KEY or VALUE
+ *
+ * @return the specified node
+ */
+ private Node nextGreater(final Node node, final int index) {
+
+ Node rval = null;
+
+ if (node == null) {
+ rval = null;
+ } else if (node.getRight(index) != null) {
+
+ // everything to the node's right is larger. The least of
+ // the right node's descendants is the next larger node
+ rval = leastNode(node.getRight(index), index);
+ } else {
+
+ // traverse up our ancestry until we find an ancestor that
+ // is null or one whose left child is our ancestor. If we
+ // find a null, then this node IS the largest node in the
+ // tree, and there is no greater node. Otherwise, we are
+ // the largest node in the subtree on that ancestor's left
+ // ... and that ancestor is the next greatest node
+ Node parent = node.getParent(index);
+ Node child = node;
+
+ while ((parent != null) && (child == parent.getRight(index))) {
+ child = parent;
+ parent = parent.getParent(index);
+ }
+
+ rval = parent;
+ }
+
+ return rval;
+ }
+
+ /**
+ * copy the color from one node to another, dealing with the fact
+ * that one or both nodes may, in fact, be null
+ *
+ * @param from the node whose color we're copying; may be null
+ * @param to the node whose color we're changing; may be null
+ * @param index KEY or VALUE
+ */
+ private static void copyColor(final Node from, final Node to,
+ final int index) {
+
+ if (to != null) {
+ if (from == null) {
+
+ // by default, make it black
+ to.setBlack(index);
+ } else {
+ to.copyColor(from, index);
+ }
+ }
+ }
+
+ /**
+ * is the specified node red? if the node does not exist, no, it's
+ * black, thank you
+ *
+ * @param node the node (may be null) in question
+ * @param index KEY or VALUE
+ */
+ private static boolean isRed(final Node node, final int index) {
+
+ return ((node == null)
+ ? false
+ : node.isRed(index));
+ }
+
+ /**
+ * is the specified black red? if the node does not exist, sure,
+ * it's black, thank you
+ *
+ * @param node the node (may be null) in question
+ * @param index KEY or VALUE
+ */
+ private static boolean isBlack(final Node node, final int index) {
+
+ return ((node == null)
+ ? true
+ : node.isBlack(index));
+ }
+
+ /**
+ * force a node (if it exists) red
+ *
+ * @param node the node (may be null) in question
+ * @param index KEY or VALUE
+ */
+ private static void makeRed(final Node node, final int index) {
+
+ if (node != null) {
+ node.setRed(index);
+ }
+ }
+
+ /**
+ * force a node (if it exists) black
+ *
+ * @param node the node (may be null) in question
+ * @param index KEY or VALUE
+ */
+ private static void makeBlack(final Node node, final int index) {
+
+ if (node != null) {
+ node.setBlack(index);
+ }
+ }
+
+ /**
+ * get a node's grandparent. mind you, the node, its parent, or
+ * its grandparent may not exist. no problem
+ *
+ * @param node the node (may be null) in question
+ * @param index KEY or VALUE
+ */
+ private static Node getGrandParent(final Node node, final int index) {
+ return getParent(getParent(node, index), index);
+ }
+
+ /**
+ * get a node's parent. mind you, the node, or its parent, may not
+ * exist. no problem
+ *
+ * @param node the node (may be null) in question
+ * @param index KEY or VALUE
+ */
+ private static Node getParent(final Node node, final int index) {
+
+ return ((node == null)
+ ? null
+ : node.getParent(index));
+ }
+
+ /**
+ * get a node's right child. mind you, the node may not exist. no
+ * problem
+ *
+ * @param node the node (may be null) in question
+ * @param index KEY or VALUE
+ */
+ private static Node getRightChild(final Node node, final int index) {
+
+ return (node == null)
+ ? null
+ : node.getRight(index);
+ }
+
+ /**
+ * get a node's left child. mind you, the node may not exist. no
+ * problem
+ *
+ * @param node the node (may be null) in question
+ * @param index KEY or VALUE
+ */
+ private static Node getLeftChild(final Node node, final int index) {
+
+ return (node == null)
+ ? null
+ : node.getLeft(index);
+ }
+
+ /**
+ * is this node its parent's left child? mind you, the node, or
+ * its parent, may not exist. no problem. if the node doesn't
+ * exist ... it's its non-existent parent's left child. If the
+ * node does exist but has no parent ... no, we're not the
+ * non-existent parent's left child. Otherwise (both the specified
+ * node AND its parent exist), check.
+ *
+ * @param node the node (may be null) in question
+ * @param index KEY or VALUE
+ */
+ private static boolean isLeftChild(final Node node, final int index) {
+
+ return (node == null)
+ ? true
+ : ((node.getParent(index) == null)
+ ? false
+ : (node == node.getParent(index).getLeft(index)));
+ }
+
+ /**
+ * is this node its parent's right child? mind you, the node, or
+ * its parent, may not exist. no problem. if the node doesn't
+ * exist ... it's its non-existent parent's right child. If the
+ * node does exist but has no parent ... no, we're not the
+ * non-existent parent's right child. Otherwise (both the
+ * specified node AND its parent exist), check.
+ *
+ * @param node the node (may be null) in question
+ * @param index KEY or VALUE
+ */
+ private static boolean isRightChild(final Node node, final int index) {
+
+ return (node == null)
+ ? true
+ : ((node.getParent(index) == null)
+ ? false
+ : (node == node.getParent(index).getRight(index)));
+ }
+
+ /**
+ * do a rotate left. standard fare in the world of balanced trees
+ *
+ * @param node the node to be rotated
+ * @param index KEY or VALUE
+ */
+ private void rotateLeft(final Node node, final int index) {
+
+ Node rightChild = node.getRight(index);
+
+ node.setRight(rightChild.getLeft(index), index);
+
+ if (rightChild.getLeft(index) != null) {
+ rightChild.getLeft(index).setParent(node, index);
+ }
+
+ rightChild.setParent(node.getParent(index), index);
+
+ if (node.getParent(index) == null) {
+
+ // node was the root ... now its right child is the root
+ rootNode[index] = rightChild;
+ } else if (node.getParent(index).getLeft(index) == node) {
+ node.getParent(index).setLeft(rightChild, index);
+ } else {
+ node.getParent(index).setRight(rightChild, index);
+ }
+
+ rightChild.setLeft(node, index);
+ node.setParent(rightChild, index);
+ }
+
+ /**
+ * do a rotate right. standard fare in the world of balanced trees
+ *
+ * @param node the node to be rotated
+ * @param index KEY or VALUE
+ */
+ private void rotateRight(final Node node, final int index) {
+
+ Node leftChild = node.getLeft(index);
+
+ node.setLeft(leftChild.getRight(index), index);
+
+ if (leftChild.getRight(index) != null) {
+ leftChild.getRight(index).setParent(node, index);
+ }
+
+ leftChild.setParent(node.getParent(index), index);
+
+ if (node.getParent(index) == null) {
+
+ // node was the root ... now its left child is the root
+ rootNode[index] = leftChild;
+ } else if (node.getParent(index).getRight(index) == node) {
+ node.getParent(index).setRight(leftChild, index);
+ } else {
+ node.getParent(index).setLeft(leftChild, index);
+ }
+
+ leftChild.setRight(node, index);
+ node.setParent(leftChild, index);
+ }
+
+ /**
+ * complicated red-black insert stuff. Based on Sun's TreeMap
+ * implementation, though it's barely recognizable any more
+ *
+ * @param insertedNode the node to be inserted
+ * @param index KEY or VALUE
+ */
+ private void doRedBlackInsert(final Node insertedNode, final int index) {
+
+ Node currentNode = insertedNode;
+
+ makeRed(currentNode, index);
+
+ while ((currentNode != null) && (currentNode != rootNode[index])
+ && (isRed(currentNode.getParent(index), index))) {
+ if (isLeftChild(getParent(currentNode, index), index)) {
+ Node y = getRightChild(getGrandParent(currentNode, index),
+ index);
+
+ if (isRed(y, index)) {
+ makeBlack(getParent(currentNode, index), index);
+ makeBlack(y, index);
+ makeRed(getGrandParent(currentNode, index), index);
+
+ currentNode = getGrandParent(currentNode, index);
+ } else {
+ if (isRightChild(currentNode, index)) {
+ currentNode = getParent(currentNode, index);
+
+ rotateLeft(currentNode, index);
+ }
+
+ makeBlack(getParent(currentNode, index), index);
+ makeRed(getGrandParent(currentNode, index), index);
+
+ if (getGrandParent(currentNode, index) != null) {
+ rotateRight(getGrandParent(currentNode, index),
+ index);
+ }
+ }
+ } else {
+
+ // just like clause above, except swap left for right
+ Node y = getLeftChild(getGrandParent(currentNode, index),
+ index);
+
+ if (isRed(y, index)) {
+ makeBlack(getParent(currentNode, index), index);
+ makeBlack(y, index);
+ makeRed(getGrandParent(currentNode, index), index);
+
+ currentNode = getGrandParent(currentNode, index);
+ } else {
+ if (isLeftChild(currentNode, index)) {
+ currentNode = getParent(currentNode, index);
+
+ rotateRight(currentNode, index);
+ }
+
+ makeBlack(getParent(currentNode, index), index);
+ makeRed(getGrandParent(currentNode, index), index);
+
+ if (getGrandParent(currentNode, index) != null) {
+ rotateLeft(getGrandParent(currentNode, index), index);
+ }
+ }
+ }
+ }
+
+ makeBlack(rootNode[index], index);
+ }
+
+ /**
+ * complicated red-black delete stuff. Based on Sun's TreeMap
+ * implementation, though it's barely recognizable any more
+ *
+ * @param deletedNode the node to be deleted
+ */
+ private void doRedBlackDelete(final Node deletedNode) {
+
+ for (int index = FIRST_INDEX; index < NUMBER_OF_INDICES; index++) {
+
+ // if deleted node has both left and children, swap with
+ // the next greater node
+ if ((deletedNode.getLeft(index) != null)
+ && (deletedNode.getRight(index) != null)) {
+ swapPosition(nextGreater(deletedNode, index), deletedNode,
+ index);
+ }
+
+ Node replacement = ((deletedNode.getLeft(index) != null)
+ ? deletedNode.getLeft(index)
+ : deletedNode.getRight(index));
+
+ if (replacement != null) {
+ replacement.setParent(deletedNode.getParent(index), index);
+
+ if (deletedNode.getParent(index) == null) {
+ rootNode[index] = replacement;
+ } else if (deletedNode
+ == deletedNode.getParent(index).getLeft(index)) {
+ deletedNode.getParent(index).setLeft(replacement, index);
+ } else {
+ deletedNode.getParent(index).setRight(replacement, index);
+ }
+
+ deletedNode.setLeft(null, index);
+ deletedNode.setRight(null, index);
+ deletedNode.setParent(null, index);
+
+ if (isBlack(deletedNode, index)) {
+ doRedBlackDeleteFixup(replacement, index);
+ }
+ } else {
+
+ // replacement is null
+ if (deletedNode.getParent(index) == null) {
+
+ // empty tree
+ rootNode[index] = null;
+ } else {
+
+ // deleted node had no children
+ if (isBlack(deletedNode, index)) {
+ doRedBlackDeleteFixup(deletedNode, index);
+ }
+
+ if (deletedNode.getParent(index) != null) {
+ if (deletedNode
+ == deletedNode.getParent(index)
+ .getLeft(index)) {
+ deletedNode.getParent(index).setLeft(null, index);
+ } else {
+ deletedNode.getParent(index).setRight(null,
+ index);
+ }
+
+ deletedNode.setParent(null, index);
+ }
+ }
+ }
+ }
+
+ shrink();
+ }
+
+ /**
+ * complicated red-black delete stuff. Based on Sun's TreeMap
+ * implementation, though it's barely recognizable any more. This
+ * rebalances the tree (somewhat, as red-black trees are not
+ * perfectly balanced -- perfect balancing takes longer)
+ *
+ * @param replacementNode the node being replaced
+ * @param index KEY or VALUE
+ */
+ private void doRedBlackDeleteFixup(final Node replacementNode,
+ final int index) {
+
+ Node currentNode = replacementNode;
+
+ while ((currentNode != rootNode[index])
+ && (isBlack(currentNode, index))) {
+ if (isLeftChild(currentNode, index)) {
+ Node siblingNode =
+ getRightChild(getParent(currentNode, index), index);
+
+ if (isRed(siblingNode, index)) {
+ makeBlack(siblingNode, index);
+ makeRed(getParent(currentNode, index), index);
+ rotateLeft(getParent(currentNode, index), index);
+
+ siblingNode = getRightChild(getParent(currentNode, index), index);
+ }
+
+ if (isBlack(getLeftChild(siblingNode, index), index)
+ && isBlack(getRightChild(siblingNode, index),
+ index)) {
+ makeRed(siblingNode, index);
+
+ currentNode = getParent(currentNode, index);
+ } else {
+ if (isBlack(getRightChild(siblingNode, index), index)) {
+ makeBlack(getLeftChild(siblingNode, index), index);
+ makeRed(siblingNode, index);
+ rotateRight(siblingNode, index);
+
+ siblingNode =
+ getRightChild(getParent(currentNode, index), index);
+ }
+
+ copyColor(getParent(currentNode, index), siblingNode,
+ index);
+ makeBlack(getParent(currentNode, index), index);
+ makeBlack(getRightChild(siblingNode, index), index);
+ rotateLeft(getParent(currentNode, index), index);
+
+ currentNode = rootNode[index];
+ }
+ } else {
+ Node siblingNode = getLeftChild(getParent(currentNode, index), index);
+
+ if (isRed(siblingNode, index)) {
+ makeBlack(siblingNode, index);
+ makeRed(getParent(currentNode, index), index);
+ rotateRight(getParent(currentNode, index), index);
+
+ siblingNode = getLeftChild(getParent(currentNode, index), index);
+ }
+
+ if (isBlack(getRightChild(siblingNode, index), index)
+ && isBlack(getLeftChild(siblingNode, index), index)) {
+ makeRed(siblingNode, index);
+
+ currentNode = getParent(currentNode, index);
+ } else {
+ if (isBlack(getLeftChild(siblingNode, index), index)) {
+ makeBlack(getRightChild(siblingNode, index), index);
+ makeRed(siblingNode, index);
+ rotateLeft(siblingNode, index);
+
+ siblingNode =
+ getLeftChild(getParent(currentNode, index), index);
+ }
+
+ copyColor(getParent(currentNode, index), siblingNode,
+ index);
+ makeBlack(getParent(currentNode, index), index);
+ makeBlack(getLeftChild(siblingNode, index), index);
+ rotateRight(getParent(currentNode, index), index);
+
+ currentNode = rootNode[index];
+ }
+ }
+ }
+
+ makeBlack(currentNode, index);
+ }
+
+ /**
+ * swap two nodes (except for their content), taking care of
+ * special cases where one is the other's parent ... hey, it
+ * happens.
+ *
+ * @param x one node
+ * @param y another node
+ * @param index KEY or VALUE
+ */
+ private void swapPosition(final Node x, final Node y, final int index) {
+
+ // Save initial values.
+ Node xFormerParent = x.getParent(index);
+ Node xFormerLeftChild = x.getLeft(index);
+ Node xFormerRightChild = x.getRight(index);
+ Node yFormerParent = y.getParent(index);
+ Node yFormerLeftChild = y.getLeft(index);
+ Node yFormerRightChild = y.getRight(index);
+ boolean xWasLeftChild =
+ (x.getParent(index) != null)
+ && (x == x.getParent(index).getLeft(index));
+ boolean yWasLeftChild =
+ (y.getParent(index) != null)
+ && (y == y.getParent(index).getLeft(index));
+
+ // Swap, handling special cases of one being the other's parent.
+ if (x == yFormerParent) { // x was y's parent
+ x.setParent(y, index);
+
+ if (yWasLeftChild) {
+ y.setLeft(x, index);
+ y.setRight(xFormerRightChild, index);
+ } else {
+ y.setRight(x, index);
+ y.setLeft(xFormerLeftChild, index);
+ }
+ } else {
+ x.setParent(yFormerParent, index);
+
+ if (yFormerParent != null) {
+ if (yWasLeftChild) {
+ yFormerParent.setLeft(x, index);
+ } else {
+ yFormerParent.setRight(x, index);
+ }
+ }
+
+ y.setLeft(xFormerLeftChild, index);
+ y.setRight(xFormerRightChild, index);
+ }
+
+ if (y == xFormerParent) { // y was x's parent
+ y.setParent(x, index);
+
+ if (xWasLeftChild) {
+ x.setLeft(y, index);
+ x.setRight(yFormerRightChild, index);
+ } else {
+ x.setRight(y, index);
+ x.setLeft(yFormerLeftChild, index);
+ }
+ } else {
+ y.setParent(xFormerParent, index);
+
+ if (xFormerParent != null) {
+ if (xWasLeftChild) {
+ xFormerParent.setLeft(y, index);
+ } else {
+ xFormerParent.setRight(y, index);
+ }
+ }
+
+ x.setLeft(yFormerLeftChild, index);
+ x.setRight(yFormerRightChild, index);
+ }
+
+ // Fix children's parent pointers
+ if (x.getLeft(index) != null) {
+ x.getLeft(index).setParent(x, index);
+ }
+
+ if (x.getRight(index) != null) {
+ x.getRight(index).setParent(x, index);
+ }
+
+ if (y.getLeft(index) != null) {
+ y.getLeft(index).setParent(y, index);
+ }
+
+ if (y.getRight(index) != null) {
+ y.getRight(index).setParent(y, index);
+ }
+
+ x.swapColors(y, index);
+
+ // Check if root changed
+ if (rootNode[index] == x) {
+ rootNode[index] = y;
+ } else if (rootNode[index] == y) {
+ rootNode[index] = x;
+ }
+ }
+
+ /**
+ * check if an object is fit to be proper input ... has to be
+ * Comparable and non-null
+ *
+ * @param o the object being checked
+ * @param index KEY or VALUE (used to put the right word in the
+ * exception message)
+ *
+ * @throws NullPointerException if o is null
+ * @throws ClassCastException if o is not Comparable
+ */
+ private static void checkNonNullComparable(final Object o,
+ final int index) {
+
+ if (o == null) {
+ throw new NullPointerException(dataName[index]
+ + " cannot be null");
+ }
+
+ if (!(o instanceof Comparable)) {
+ throw new ClassCastException(dataName[index]
+ + " must be Comparable");
+ }
+ }
+
+ /**
+ * check a key for validity (non-null and implements Comparable)
+ *
+ * @param key the key to be checked
+ *
+ * @throws NullPointerException if key is null
+ * @throws ClassCastException if key is not Comparable
+ */
+ private static void checkKey(final Object key) {
+ checkNonNullComparable(key, KEY);
+ }
+
+ /**
+ * check a value for validity (non-null and implements Comparable)
+ *
+ * @param value the value to be checked
+ *
+ * @throws NullPointerException if value is null
+ * @throws ClassCastException if value is not Comparable
+ */
+ private static void checkValue(final Object value) {
+ checkNonNullComparable(value, VALUE);
+ }
+
+ /**
+ * check a key and a value for validity (non-null and implements
+ * Comparable)
+ *
+ * @param key the key to be checked
+ * @param value the value to be checked
+ *
+ * @throws NullPointerException if key or value is null
+ * @throws ClassCastException if key or value is not Comparable
+ */
+ private static void checkKeyAndValue(final Object key,
+ final Object value) {
+ checkKey(key);
+ checkValue(value);
+ }
+
+ /**
+ * increment the modification count -- used to check for
+ * concurrent modification of the map through the map and through
+ * an Iterator from one of its Set or Collection views
+ */
+ private void modify() {
+ modifications++;
+ }
+
+ /**
+ * bump up the size and note that the map has changed
+ */
+ private void grow() {
+
+ modify();
+
+ nodeCount++;
+ }
+
+ /**
+ * decrement the size and note that the map has changed
+ */
+ private void shrink() {
+
+ modify();
+
+ nodeCount--;
+ }
+
+ /**
+ * insert a node by its value
+ *
+ * @param newNode the node to be inserted
+ *
+ * @throws IllegalArgumentException if the node already exists
+ * in the value mapping
+ */
+ private void insertValue(final Node newNode)
+ throws IllegalArgumentException {
+
+ Node node = rootNode[VALUE];
+
+ while (true) {
+ int cmp = compare(newNode.getData(VALUE), node.getData(VALUE));
+
+ if (cmp == 0) {
+ throw new IllegalArgumentException(
+ "Cannot store a duplicate value (\""
+ + newNode.getData(VALUE) + "\") in this Map");
+ } else if (cmp < 0) {
+ if (node.getLeft(VALUE) != null) {
+ node = node.getLeft(VALUE);
+ } else {
+ node.setLeft(newNode, VALUE);
+ newNode.setParent(node, VALUE);
+ doRedBlackInsert(newNode, VALUE);
+
+ break;
+ }
+ } else { // cmp > 0
+ if (node.getRight(VALUE) != null) {
+ node = node.getRight(VALUE);
+ } else {
+ node.setRight(newNode, VALUE);
+ newNode.setParent(node, VALUE);
+ doRedBlackInsert(newNode, VALUE);
+
+ break;
+ }
+ }
+ }
+ }
+
+ /* ********** START implementation of Map ********** */
+
+ /**
+ * Returns the number of key-value mappings in this map. If the
+ * map contains more than Integer.MAXVALUE elements, returns
+ * Integer.MAXVALUE.
+ *
+ * @return the number of key-value mappings in this map.
+ */
+ public int size() {
+ return nodeCount;
+ }
+
+ /**
+ * Returns true if this map contains a mapping for the specified
+ * key.
+ *
+ * @param key key whose presence in this map is to be tested.
+ *
+ * @return true if this map contains a mapping for the specified
+ * key.
+ *
+ * @throws ClassCastException if the key is of an inappropriate
+ * type for this map.
+ * @throws NullPointerException if the key is null
+ */
+ public boolean containsKey(final Object key)
+ throws ClassCastException, NullPointerException {
+
+ checkKey(key);
+
+ return lookup((Comparable) key, KEY) != null;
+ }
+
+ /**
+ * Returns true if this map maps one or more keys to the
+ * specified value.
+ *
+ * @param value value whose presence in this map is to be tested.
+ *
+ * @return true if this map maps one or more keys to the specified
+ * value.
+ */
+ public boolean containsValue(final Object value) {
+
+ checkValue(value);
+
+ return lookup((Comparable) value, VALUE) != null;
+ }
+
+ /**
+ * Returns the value to which this map maps the specified
+ * key. Returns null if the map contains no mapping for this key.
+ *
+ * @param key key whose associated value is to be returned.
+ *
+ * @return the value to which this map maps the specified key, or
+ * null if the map contains no mapping for this key.
+ *
+ * @throws ClassCastException if the key is of an inappropriate
+ * type for this map.
+ * @throws NullPointerException if the key is null
+ */
+ public Object get(final Object key)
+ throws ClassCastException, NullPointerException {
+ return doGet((Comparable) key, KEY);
+ }
+
+ /**
+ * Associates the specified value with the specified key in this
+ * map.
+ *
+ * @param key key with which the specified value is to be
+ * associated.
+ * @param value value to be associated with the specified key.
+ *
+ * @return null
+ *
+ * @throws ClassCastException if the class of the specified key
+ * or value prevents it from being
+ * stored in this map.
+ * @throws NullPointerException if the specified key or value
+ * is null
+ * @throws IllegalArgumentException if the key duplicates an
+ * existing key, or if the
+ * value duplicates an
+ * existing value
+ */
+ public Object put(final Object key, final Object value)
+ throws ClassCastException, NullPointerException,
+ IllegalArgumentException {
+
+ checkKeyAndValue(key, value);
+
+ Node node = rootNode[KEY];
+
+ if (node == null) {
+ Node root = new Node((Comparable) key, (Comparable) value);
+
+ rootNode[KEY] = root;
+ rootNode[VALUE] = root;
+
+ grow();
+ } else {
+ while (true) {
+ int cmp = compare((Comparable) key, node.getData(KEY));
+
+ if (cmp == 0) {
+ throw new IllegalArgumentException(
+ "Cannot store a duplicate key (\"" + key
+ + "\") in this Map");
+ } else if (cmp < 0) {
+ if (node.getLeft(KEY) != null) {
+ node = node.getLeft(KEY);
+ } else {
+ Node newNode = new Node((Comparable) key,
+ (Comparable) value);
+
+ insertValue(newNode);
+ node.setLeft(newNode, KEY);
+ newNode.setParent(node, KEY);
+ doRedBlackInsert(newNode, KEY);
+ grow();
+
+ break;
+ }
+ } else { // cmp > 0
+ if (node.getRight(KEY) != null) {
+ node = node.getRight(KEY);
+ } else {
+ Node newNode = new Node((Comparable) key,
+ (Comparable) value);
+
+ insertValue(newNode);
+ node.setRight(newNode, KEY);
+ newNode.setParent(node, KEY);
+ doRedBlackInsert(newNode, KEY);
+ grow();
+
+ break;
+ }
+ }
+ }
+ }
+
+ return null;
+ }
+
+ /**
+ * Removes the mapping for this key from this map if present
+ *
+ * @param key key whose mapping is to be removed from the map.
+ *
+ * @return previous value associated with specified key, or null
+ * if there was no mapping for key.
+ */
+ public Object remove(final Object key) {
+ return doRemove((Comparable) key, KEY);
+ }
+
+ /**
+ * Removes all mappings from this map
+ */
+ public void clear() {
+
+ modify();
+
+ nodeCount = 0;
+ rootNode[KEY] = null;
+ rootNode[VALUE] = null;
+ }
+
+ /**
+ * Returns a set view of the keys contained in this map. The set
+ * is backed by the map, so changes to the map are reflected in
+ * the set, and vice-versa. If the map is modified while an
+ * iteration over the set is in progress, the results of the
+ * iteration are undefined. The set supports element removal,
+ * which removes the corresponding mapping from the map, via the
+ * Iterator.remove, Set.remove, removeAll, retainAll, and clear
+ * operations. It does not support the add or addAll operations.
+ *
+ * @return a set view of the keys contained in this map.
+ */
+ public Set keySet() {
+
+ if (setOfKeys[KEY] == null) {
+ setOfKeys[KEY] = new AbstractSet() {
+
+ public Iterator iterator() {
+
+ return new DoubleOrderedMapIterator(KEY) {
+
+ protected Object doGetNext() {
+ return lastReturnedNode.getData(KEY);
+ }
+ };
+ }
+
+ public int size() {
+ return DoubleOrderedMap.this.size();
+ }
+
+ public boolean contains(Object o) {
+ return containsKey(o);
+ }
+
+ public boolean remove(Object o) {
+
+ int oldNodeCount = nodeCount;
+
+ DoubleOrderedMap.this.remove(o);
+
+ return nodeCount != oldNodeCount;
+ }
+
+ public void clear() {
+ DoubleOrderedMap.this.clear();
+ }
+ };
+ }
+
+ return setOfKeys[KEY];
+ }
+
+ /**
+ * Returns a collection view of the values contained in this
+ * map. The collection is backed by the map, so changes to the map
+ * are reflected in the collection, and vice-versa. If the map is
+ * modified while an iteration over the collection is in progress,
+ * the results of the iteration are undefined. The collection
+ * supports element removal, which removes the corresponding
+ * mapping from the map, via the Iterator.remove,
+ * Collection.remove, removeAll, retainAll and clear operations.
+ * It does not support the add or addAll operations.
+ *
+ * @return a collection view of the values contained in this map.
+ */
+ public Collection values() {
+
+ if (collectionOfValues[KEY] == null) {
+ collectionOfValues[KEY] = new AbstractCollection() {
+
+ public Iterator iterator() {
+
+ return new DoubleOrderedMapIterator(KEY) {
+
+ protected Object doGetNext() {
+ return lastReturnedNode.getData(VALUE);
+ }
+ };
+ }
+
+ public int size() {
+ return DoubleOrderedMap.this.size();
+ }
+
+ public boolean contains(Object o) {
+ return containsValue(o);
+ }
+
+ public boolean remove(Object o) {
+
+ int oldNodeCount = nodeCount;
+
+ removeValue(o);
+
+ return nodeCount != oldNodeCount;
+ }
+
+ public boolean removeAll(Collection c) {
+
+ boolean modified = false;
+ Iterator iter = c.iterator();
+
+ while (iter.hasNext()) {
+ if (removeValue(iter.next()) != null) {
+ modified = true;
+ }
+ }
+
+ return modified;
+ }
+
+ public void clear() {
+ DoubleOrderedMap.this.clear();
+ }
+ };
+ }
+
+ return collectionOfValues[KEY];
+ }
+
+ /**
+ * Returns a set view of the mappings contained in this map. Each
+ * element in the returned set is a Map.Entry. The set is backed
+ * by the map, so changes to the map are reflected in the set, and
+ * vice-versa. If the map is modified while an iteration over the
+ * set is in progress, the results of the iteration are
+ * undefined.
+ * <p>
+ * The set supports element removal, which removes the corresponding
+ * mapping from the map, via the Iterator.remove, Set.remove, removeAll,
+ * retainAll and clear operations.
+ * It does not support the add or addAll operations.
+ * The setValue method is not supported on the Map Entry.
+ *
+ * @return a set view of the mappings contained in this map.
+ */
+ public Set entrySet() {
+
+ if (setOfEntries[KEY] == null) {
+ setOfEntries[KEY] = new AbstractSet() {
+
+ public Iterator iterator() {
+
+ return new DoubleOrderedMapIterator(KEY) {
+
+ protected Object doGetNext() {
+ return lastReturnedNode;
+ }
+ };
+ }
+
+ public boolean contains(Object o) {
+
+ if (!(o instanceof Map.Entry)) {
+ return false;
+ }
+
+ Map.Entry entry = (Map.Entry) o;
+ Object value = entry.getValue();
+ Node node = lookup((Comparable) entry.getKey(),
+ KEY);
+
+ return (node != null)
+ && node.getData(VALUE).equals(value);
+ }
+
+ public boolean remove(Object o) {
+
+ if (!(o instanceof Map.Entry)) {
+ return false;
+ }
+
+ Map.Entry entry = (Map.Entry) o;
+ Object value = entry.getValue();
+ Node node = lookup((Comparable) entry.getKey(),
+ KEY);
+
+ if ((node != null) && node.getData(VALUE).equals(value)) {
+ doRedBlackDelete(node);
+
+ return true;
+ }
+
+ return false;
+ }
+
+ public int size() {
+ return DoubleOrderedMap.this.size();
+ }
+
+ public void clear() {
+ DoubleOrderedMap.this.clear();
+ }
+ };
+ }
+
+ return setOfEntries[KEY];
+ }
+
+ /* ********** END implementation of Map ********** */
+ private abstract class DoubleOrderedMapIterator implements Iterator {
+
+ private int expectedModifications;
+ protected Node lastReturnedNode;
+ private Node nextNode;
+ private int iteratorType;
+
+ /**
+ * Constructor
+ *
+ * @param type
+ */
+ DoubleOrderedMapIterator(final int type) {
+
+ iteratorType = type;
+ expectedModifications = DoubleOrderedMap.this.modifications;
+ lastReturnedNode = null;
+ nextNode = leastNode(rootNode[iteratorType],
+ iteratorType);
+ }
+
+ /**
+ * @return 'next', whatever that means for a given kind of
+ * DoubleOrderedMapIterator
+ */
+ protected abstract Object doGetNext();
+
+ /* ********** START implementation of Iterator ********** */
+
+ /**
+ * @return true if the iterator has more elements.
+ */
+ public final boolean hasNext() {
+ return nextNode != null;
+ }
+
+ /**
+ * @return the next element in the iteration.
+ *
+ * @throws NoSuchElementException if iteration has no more
+ * elements.
+ * @throws ConcurrentModificationException if the
+ * DoubleOrderedMap is
+ * modified behind
+ * the iterator's
+ * back
+ */
+ public final Object next()
+ throws NoSuchElementException,
+ ConcurrentModificationException {
+
+ if (nextNode == null) {
+ throw new NoSuchElementException();
+ }
+
+ if (modifications != expectedModifications) {
+ throw new ConcurrentModificationException();
+ }
+
+ lastReturnedNode = nextNode;
+ nextNode = nextGreater(nextNode, iteratorType);
+
+ return doGetNext();
+ }
+
+ /**
+ * Removes from the underlying collection the last element
+ * returned by the iterator. This method can be called only
+ * once per call to next. The behavior of an iterator is
+ * unspecified if the underlying collection is modified while
+ * the iteration is in progress in any way other than by
+ * calling this method.
+ *
+ * @throws IllegalStateException if the next method has not
+ * yet been called, or the
+ * remove method has already
+ * been called after the last
+ * call to the next method.
+ * @throws ConcurrentModificationException if the
+ * DoubleOrderedMap is
+ * modified behind
+ * the iterator's
+ * back
+ */
+ public final void remove()
+ throws IllegalStateException,
+ ConcurrentModificationException {
+
+ if (lastReturnedNode == null) {
+ throw new IllegalStateException();
+ }
+
+ if (modifications != expectedModifications) {
+ throw new ConcurrentModificationException();
+ }
+
+ doRedBlackDelete(lastReturnedNode);
+
+ expectedModifications++;
+
+ lastReturnedNode = null;
+ }
+
+ /* ********** END implementation of Iterator ********** */
+ } // end private abstract class DoubleOrderedMapIterator
+
+ // final for performance
+ private static final class Node implements Map.Entry, KeyValue {
+
+ private Comparable[] data;
+ private Node[] leftNode;
+ private Node[] rightNode;
+ private Node[] parentNode;
+ private boolean[] blackColor;
+ private int hashcodeValue;
+ private boolean calculatedHashCode;
+
+ /**
+ * Make a new cell with given key and value, and with null
+ * links, and black (true) colors.
+ *
+ * @param key
+ * @param value
+ */
+ Node(final Comparable key, final Comparable value) {
+
+ data = new Comparable[]{ key, value };
+ leftNode = new Node[]{ null, null };
+ rightNode = new Node[]{ null, null };
+ parentNode = new Node[]{ null, null };
+ blackColor = new boolean[]{ true, true };
+ calculatedHashCode = false;
+ }
+
+ /**
+ * get the specified data
+ *
+ * @param index KEY or VALUE
+ *
+ * @return the key or value
+ */
+ private Comparable getData(final int index) {
+ return data[index];
+ }
+
+ /**
+ * Set this node's left node
+ *
+ * @param node the new left node
+ * @param index KEY or VALUE
+ */
+ private void setLeft(final Node node, final int index) {
+ leftNode[index] = node;
+ }
+
+ /**
+ * get the left node
+ *
+ * @param index KEY or VALUE
+ *
+ * @return the left node -- may be null
+ */
+ private Node getLeft(final int index) {
+ return leftNode[index];
+ }
+
+ /**
+ * Set this node's right node
+ *
+ * @param node the new right node
+ * @param index KEY or VALUE
+ */
+ private void setRight(final Node node, final int index) {
+ rightNode[index] = node;
+ }
+
+ /**
+ * get the right node
+ *
+ * @param index KEY or VALUE
+ *
+ * @return the right node -- may be null
+ */
+ private Node getRight(final int index) {
+ return rightNode[index];
+ }
+
+ /**
+ * Set this node's parent node
+ *
+ * @param node the new parent node
+ * @param index KEY or VALUE
+ */
+ private void setParent(final Node node, final int index) {
+ parentNode[index] = node;
+ }
+
+ /**
+ * get the parent node
+ *
+ * @param index KEY or VALUE
+ *
+ * @return the parent node -- may be null
+ */
+ private Node getParent(final int index) {
+ return parentNode[index];
+ }
+
+ /**
+ * exchange colors with another node
+ *
+ * @param node the node to swap with
+ * @param index KEY or VALUE
+ */
+ private void swapColors(final Node node, final int index) {
+
+ // Swap colors -- old hacker's trick
+ blackColor[index] ^= node.blackColor[index];
+ node.blackColor[index] ^= blackColor[index];
+ blackColor[index] ^= node.blackColor[index];
+ }
+
+ /**
+ * is this node black?
+ *
+ * @param index KEY or VALUE
+ *
+ * @return true if black (which is represented as a true boolean)
+ */
+ private boolean isBlack(final int index) {
+ return blackColor[index];
+ }
+
+ /**
+ * is this node red?
+ *
+ * @param index KEY or VALUE
+ *
+ * @return true if non-black
+ */
+ private boolean isRed(final int index) {
+ return !blackColor[index];
+ }
+
+ /**
+ * make this node black
+ *
+ * @param index KEY or VALUE
+ */
+ private void setBlack(final int index) {
+ blackColor[index] = true;
+ }
+
+ /**
+ * make this node red
+ *
+ * @param index KEY or VALUE
+ */
+ private void setRed(final int index) {
+ blackColor[index] = false;
+ }
+
+ /**
+ * make this node the same color as another
+ *
+ * @param node the node whose color we're adopting
+ * @param index KEY or VALUE
+ */
+ private void copyColor(final Node node, final int index) {
+ blackColor[index] = node.blackColor[index];
+ }
+
+ /* ********** START implementation of Map.Entry ********** */
+
+ /**
+ * @return the key corresponding to this entry.
+ */
+ public Object getKey() {
+ return data[KEY];
+ }
+
+ /**
+ * @return the value corresponding to this entry.
+ */
+ public Object getValue() {
+ return data[VALUE];
+ }
+
+ /**
+ * Optional operation that is not permitted in this
+ * implementation
+ *
+ * @param ignored
+ *
+ * @return does not return
+ *
+ * @throws UnsupportedOperationException
+ */
+ public Object setValue(Object ignored)
+ throws UnsupportedOperationException {
+ throw new UnsupportedOperationException(
+ "Map.Entry.setValue is not supported");
+ }
+
+ /**
+ * Compares the specified object with this entry for equality.
+ * Returns true if the given object is also a map entry and
+ * the two entries represent the same mapping.
+ *
+ * @param o object to be compared for equality with this map
+ * entry.
+ * @return true if the specified object is equal to this map
+ * entry.
+ */
+ public boolean equals(Object o) {
+
+ if (this == o) {
+ return true;
+ }
+
+ if (!(o instanceof Map.Entry)) {
+ return false;
+ }
+